Commit Graph

1377 Commits

Author SHA1 Message Date
Daniel Willmann e68f927f1c bsc: Start the timer at the beginning of f_init
This avoids a possible indefinite timeout if osmo-bsc crashes during the
test.

Ticket: OS#3713

Change-Id: I88f6254d9d2d90ab49a3c3d8255af25ca6ffe624
2018-11-27 17:41:10 +01:00
Vadim Yanitskiy 1ff1fdf63e BSC_Tests.ttcn: introduce TC_chan_deact_silence
The idea of this test case is to verify channel deactivation
procedure due to no response to Immediate Assignment.

Change-Id: I00b0838c9f919303aef72280248b0d1317f42b3b
Related: OS#3709
2018-11-27 01:41:44 +07:00
Pau Espin 3466cc53d8 bsc: Introduce test TC_paging_resp_unsol
With this test we want to verify that channels are released if BSC fails
to complete an L3 request, for instance because no pending Paging
CMD is found for a received Paging Response.

Related: OS#3680
Change-Id: Iabe8a51aa13d2fcfec4500cf7aab47d60cc138ce
2018-11-22 14:10:08 +00:00
Pau Espin a14a8af5fd bts: Disable PCU related tests if PCU socket not configured
With some real HW setups, there's no PCU (osmo-pcu) available locally,
for instance when using a sysmobts, or when using a nanoBTS. There's no
need to waste time and generate extra output by running this tests in
this case.

Furthermore, some tests seem to crash sometimes in that setup, probably
due to using invalid fd (-1):
MTC@801a0da9866a: Setting RSL_SYSTEM_INFO_4 (4): '31061C62F224002A4740E50400'O
 /osmo-ttcn3-hacks/bts/BTS_Tests: Segmentation fault occurred
/usr/lib/titan/libttcn3-parallel-dynamic.so(_Z14signal_handleri+0xa3)[0x7f0c33b48073]
/lib/x86_64-linux-gnu/libc.so.6(+0x33060)[0x7f0c321aa060]
/osmo-ttcn3-hacks/bts/UD_PT.so(_ZN12UD__PortType15UD__PT_PROVIDER13outgoing_sendERKN9UD__Types14UD__send__dataE+0xf0)[0x7f0c349e42f8]
/osmo-ttcn3-hacks/bts/PCUIF_CodecPort.so(_ZN16PCUIF__CodecPort16PCUIF__CODEC__PT4sendERKNS_17PCUIF__send__dataERK9COMPONENT+0x19e)[0x7f0c37e1731a]
/osmo-ttcn3-hacks/bts/PCUIF_CodecPort.so(_ZN16PCUIF__CodecPort16PCUIF__CODEC__PT4sendERKNS_26PCUIF__send__data_templateE+0x5f)[0x7f0c37e174f7]
/osmo-ttcn3-hacks/bts/BTS_Tests.so(_ZN10BTS__Tests20f__TC__pcu__act__reqERK7INTEGERS2_S2_RK7BOOLEAN+0x411)[0x7f0c3eec3210]
/osmo-ttcn3-hacks/bts/BTS_Tests.so(_ZN10BTS__Tests28testcase_TC__pcu__deact__reqEbd+0x15d)[0x7f0c3eec4f27]
/osmo-ttcn3-hacks/bts/BTS_Tests.so(+0xfb65d)[0x7f0c3eeef65d]
/usr/lib/titan/libttcn3-parallel-dynamic.so(_ZN11Module_List15execute_controlEPKc+0x1c)[0x7f0c33af3fbc]

Change-Id: I773c7ec52dd8532bf160e92ffefc8d936ca55de2
2018-11-20 13:30:07 +01:00
Neels Hofmeyr 20bc3e25a7 bsc: add inter-bsc ho incoming failure tests
Change-Id: I849e4c0a14cc091195d948adb8df7a0b7414ecfe
2018-11-19 16:34:17 +01:00
Philipp Maier 8d33a13b21 BSSMAP_Templates: do not match on omit in tr_BSSMAP_HandoverPerformed template
tr_BSSMAP_HandoverPerformed matches all optional fields on "omit". This
does not make much sense as a safe default. Lets match on "*" instead.
(See also other tr_ templates)

Related OS#3645
Change-Id: Icd55afdaebdda8ba98431f358148035f7d220b8a
2018-11-19 12:20:07 +01:00
Stefan Sperling 4c32b952dd start implementing the TC_paging() PCU test
Implement a basic paging test for the PCU, which is passing for paging
via TMSI (but only if osmo-pcu is started after the test is started).

Previously, this test code amounted to a debugging loop which
never terminated.

Change-Id: Id0384e0742ab91983615e4f1c883bb044c1c8b18
Related: OS#2404
2018-11-19 11:10:22 +00:00
Max 9925390dd7 BSC: log BTS number on failure
It's useful to see which BTS exactly has failed the test in
configuration with multiple BTS on single BSC.

Change-Id: Ib813635862c04d51a30e7bbcca4ec05ce664f7e9
2018-11-19 09:27:17 +00:00
Max 2253c0bd1d BSC LCLS: add bts-loop tests
Add basic establishment and teardown tests for 'bts-loop' mode of LCLS:
* add explicit vty init for desired LCLS kind
* add necessary IPA RSL MDCX functions
* explicitly pass LCLS kind as a parameter to shared
  functions (defaulting to 'mgw-loop')

Change-Id: I40e786b430591899c722d99d685db26efa868508
Related: OS#3659
2018-11-19 05:54:31 +00:00
Philipp Maier a0cacc7d5b BSSMAP_Templates: Add missing field in tr_BSSMAP_HandoverPerformed template
tr_BSSMAP_HandoverPerformed lacks the field speechVersion, lets add it
to make the template complete.

Change-Id: Id73c0aef5caa0936aa44308faf2aae1c20c7446c
Related OS#3645
2018-11-18 20:33:57 +00:00
Stefan Sperling 26d57be102 support odd-length calling MSISDN in MSC tests
MSC tests were unable to match odd-length digit strings in
a CallingPartyBCD_Number template created by tr_Calling().
This happens because the raw encoder for CallingPartyBCD_Number
pads odd-length digits with 1-bits ('F'H). Do the same when
constructing such a template in our own code to ensure that
we'll match the actual data received.

Change-Id: I34439c8750f588802a5403375e2a3d6e74dae70c
Related: OS#2930
2018-11-18 20:27:53 +00:00
Max 2eeb511f43 LCLS: explicitly check for *CX adjustment
Previously the expectations for number of CRCX and MDCX messages from
MGW was adjusted unconditionally for LCLS tests. However this is only
necessary for MGW-loop type of LCLS. Use explicit variable (with default
value preserving current behavior) to decide whether to apply this
adjustment or not. This simplifies support for other kinds of LCLS
loops.

Change-Id: I07b2c56991977b5e80c372a5b8338f348f14c076
Related: OS#3659
2018-11-18 20:04:01 +00:00
Max b1599b11e3 BSC LCLS: restructure tests
Move duplicated code into separate functions to simplify adding test
cases which do not use MGW MDCX methods for closing the loop.

Change-Id: Idf9fc8e639b0ece662ab26c481899ef39fb7edfe
Related: OS#3659
2018-11-18 20:03:25 +00:00
Max 4b0f49633e BSC: log number of expected/seen *CX messages on failure
Change-Id: I3b743aaf9d68f2f332660d819d38ad8212484e00
2018-11-18 20:02:48 +00:00
Stefan Sperling cff13563cf attempt to fix a race condition in BSC test's f_ts_dyn_mode_get
Add two helper functions which retry a VTY command until the
result matches a regular expression or a configurable timeout
expires.

Use these functions in BSC test's f_ts_dyn_mode_get, which has
seen sporadic failures due to a race condition during channel
reconfiguration, in order to hopefully close this race.

Change-Id: I308ddb06e440c165fe1e73fe2c1fb78be2e1d510
Related: OS#3690
2018-11-15 13:02:20 +00:00
Neels Hofmeyr a5302c8151 bsc: check channel release message presence
Instead of vaguely allowing any release messages to be present or not, exactly
pinpoint for each test case the exact release messages expected during lchan
release.

Related: an osmo-bsc change broke sending of RR Release messages, which was
utterly ignored and hence not caught by ttcn tests. That must not happen again.

I am not actually sure that these expectations are 100% correct; if errors
become apparent, we shall change the expectations in ttcn3 and then fix
osmo-bsc according to that.

Adjust f_expect_chan_rel() and callers,
and the Assignment procedures (as_assignment and f_establish_fully).

The current state of the bsc tests should all pass with osmo-bsc
Id3301df059582da2377ef82feae554e94fa42035

Related: OS#3413
Change-Id: Ibc64058f1e214bea585f4e8dcb66f3df8ead3845
2018-11-14 16:18:48 +00:00
Neels Hofmeyr 861a4c174c bsc: handle Deact SACCH messages
Allow osmo-bsc sending a Deact SACCH messages in most cases. Prepare the
ttcn3-bsc-tests to not break just because of those messages that will soon be
sent.

When releasing an lchan, it makes sense to Deactivate SACCH on it, if it was
ever active. So far osmo-bsc was fairly reluctant to send Deactivate SACCH, but
osmo-bsc Id3301df059582da2377ef82feae554e94fa42035 is about to change that.

In most test cases, Deact SACCH are still optional, but in one case, the
current missing Deact SACCH will introduce a test failure: in the 'interleave'
of BSC_Tests.TC_ho_out_fail_no_ho_detect.

As soon as abovementioned osmo-bsc patch is merged, the test will pass again.

Also, as soon as Ibc64058f1e214bea585f4e8dcb66f3df8ead3845 is merged here, the
bsc tests will properly ensure whether Deact SACCH is sent or not in all tests.

Change-Id: I27da24dbe3184fa7a076a35f6fa6af457c1db8d2
2018-11-14 16:17:39 +00:00
Neels Hofmeyr 211169d794 bsc: handle RR Release messages
Receive RR Release messages if they happen during lchan release. Add RR Release
to the alt{}s in both f_expect_chan_rel() to cover a whole bunch of test cases,
and in f_tc_ho_out_fail_no_ho_detect() which has its own release expectations.

Before this, RR Release messages would typically be lost in the RSL.clear
recently removed by Ie1be30c3f109dda8c58c523df508211f8e20aad3.

However, I still expect tests to pass after this, since the current osmo-bsc
master has a bug that omits RR Release messages (since [1]).

By applying this patch, both the buggy osmo-bsc (omitting RR Release) and the
fix of that [2] should pass the BSC tests. So far by accepting whatever comes
along, and not complaining if it doesn't come along.

A subsequent patch will more precisely ensure that exactly the expected
messages will be sent by osmo-bsc (Ibc64058f1e214bea585f4e8dcb66f3df8ead3845).

[1] osmo-bsc I4fd582b41ba4599af704d670af83651d2450b1db
    commit 8b818a01b00ea3daad4ad58c162ac52b4f08a5cb
    "subscr conn: properly forget lchan before release"

[2] osmo-bsc I666b3b4f45706d898d664d380bd0fd2b018be358
    "fix: send RR Release (e.g. after BSSMAP Clear Cmd"

Related: OS#3413
Change-Id: I4e6d266d091b140f56b28312cb3c5d67ffcc3a59
2018-11-14 16:17:39 +00:00
Neels Hofmeyr 4ed9edf5b9 bsc: TC_chan_act_ack_est_ind_noreply: use f_expect_chan_rel
Instead of placing an own set of channel release expectations, just use the
common f_expect_chan_rel() that exists for exactly this purpose.

This will also be in line with upcoming changes to tighten checking of the
lchan release messages.

Related: OS#3413
Change-Id: Ib7dd886472337e2deb968e6f9de6cecdb7855319
2018-11-14 16:17:39 +00:00
Neels Hofmeyr f44ccd1af2 bsc: remove flush from f_expect_chan_rel
When we're expecting release, it can be non-deterministic / timing dependent to
flush the RSL queue. Particularly the RR Release message is typically already
in the queue when f_expect_chan_rel() is called and would be lost.

It turns out that none of the current callers need the flush feature.

If a test needs it, we can add a separate f_rsl_flush() function and call that,
no need to clutter up the f_expect_chan_rel() argument list. I had such
function but found that no caller needs it, so dropped it.

Related: OS#3413
Change-Id: Ie1be30c3f109dda8c58c523df508211f8e20aad3
2018-11-14 16:17:39 +00:00
Daniel Willmann e2bd04ad6b hlr: Fix DTE by requesting the correct type
Previous commit d686a8a548 from Vadim
introduced a copy and paste error.

Change-Id: I5075b17a810762651e0c7d638cc4c35c58436cd9
2018-11-12 16:17:42 +00:00
Philipp Maier aee6039600 BSSMAP_Templates: Add missing tr_BSSMAP_HandoverPerformed template
The receive template for the BSSMAP HANDOVER PERFORMED MESSAGE is
missing, lets add one.

Related OS#3645

Change-Id: I527913203b2d5bfa26c181c4bb79481a9cd283ae
2018-11-07 11:37:27 +00:00
Max 39e6cae97c NS: print ip:port on error
Change-Id: I2f558021b7754db9593934888d12f9c879dc2988
2018-11-06 22:13:30 +00:00
Max cdce375449 PCU: cleanup test config
* remove unused parameters
* add expected results
* use control for default test execution
* only tests which could (in theory) pass are left in control

Previously generic control had some tests which never called
"setverdict(pass)" which means they would always fail. Such tests might
be useful during development but should not be part of test set executed
by default.

Change-Id: I91910e18f108f8ee9a3b76ced16c420fdbdb665a
Related: OS#2890
2018-11-06 22:13:30 +00:00
Pau Espin 315e471bee bts: Introduce mp_ipa_up_timeout parameter
Some test env may take more than 10 seconds to (re-)start a BTS, so
let's make it variable through this parameter.
For instance it was observed that running osmo-bts-sysmo through ssh
inside a sysmobts can sometimes take a good number of seconds (specially
because ssh connection can take a while to be established successfully).

Change-Id: Ieb046358d8266ac94bd7b9e916e85f84de3ad319
2018-11-06 21:47:36 +00:00
Max 51abfbc47c cosmetic: fix compilation warnings
Drop 'return' statements after 'mtc.stop' as they cause following
warning from TTCN-3 compiler:
warning: Control never reaches this statement

Change-Id: I6210ecf5fcb39f751116ad63a69d2ae8651a60c5
2018-11-06 19:11:34 +01:00
Max fc337ca0b1 BSC LCLS: explicitly check for RSL_IE_CHAN_NR
Check that channel number IE is present in the received message. This
fixes following warning:

The value returned by function `@RSL_Types.f_rsl_find_ie' is not used

Change-Id: Icc6824d7acef809d76c70b5ff060a8261a82e2be
Related: OS#3659
2018-11-06 19:11:34 +01:00
Max 41a3aab820 BSC: remove explicit address
The osmo-bsc.cfg should work on localhost. Having arbitrary IP address
in it seems confusing and might lead to hard-to-debug errors.

Change-Id: Ideb8a78348af435f9992c42bce0bb197d1e73e04
2018-11-06 17:25:00 +00:00
Max d4e569605d cosmetic: fix typos
Change-Id: I6e75af46e134d33f752214988054105aba91366c
2018-11-06 17:09:50 +00:00
Pau Espin 6451b04aed bts: f_est_dchan: verify Chan Rqd originated by RACH arrives on RSL
We cannot notify RSL Emulation layer about expecting a specific FN
(during ts_RSLDC_ChanRqd) because we only know the FN after sending the
RACH request, and since notification to RSL Emulation happens async, it
can happen (verified) that ChanRqd message from BTS arrives and is
handled before we register the RACH req into the ConnectionTable.

Change-Id: I438fd3ee82d88498d928dbcc89ce9bd80d37ab64
2018-11-06 16:22:57 +00:00
Vadim Yanitskiy d686a8a548 hlr/HLR_EUSE.ttcn: remove redundant code from f_main_mo()
There is no need to pass session state from f_main_mo() to a
choosen EUSE handler (e.g. f_ss_echo), because a handler
itself is capable to extract the session state IE.

Change-Id: I1054baf3e7dafd05b797610b586e6202740f07b6
2018-11-04 17:36:47 +07:00
Vadim Yanitskiy e0bb4f0cee library/MNCC_Types.ttcn: add MS-side related messages
Change-Id: Icc41074e80da7115cfbd5075f88a14fedaf73489
2018-11-01 03:40:38 +07:00
Daniel Willmann 0c9e3fa989 bsc: Use Misc_Helpers.f_shutdown for setverdict(fail)
Unfortunately all component.stop can not be called from the non-mtc
component. f_shutdown is a wrapper that will try to shutdown a test in
the best way calling all component.stop if it is called from the mtc and
just stopping the mtc if called from any other component.

Change-Id: I9b71f7f7bd70d2da21fbad60c340d5bf8b3b9536
2018-10-29 16:04:57 +01:00
Daniel Willmann 3b59eb5aee bsc: Use f_gen_test_hdlr_pars() to be aware of AoIP/sccplite
Some TC_no_out_fail_* testcases still used valueof() to get g_pars which
always set aoip to true.

Use f_gen_test_hdlr_pars() now so these tests can properly detect if
they are run with sccplite of aoip and can adjust their expectations
accordingly.

Change-Id: Ic164827d63c9f5452888951bba4c197c3fe6f57b
2018-10-29 15:58:45 +01:00
Harald Welte 0cedf2c5db L3_Templates; add tr_ML3_MT_MM_AUTH_REQ_3G()
this allows us to match on specifically 3G MM AUTH REQ, whereas
so far we only had a generic template that matched the 2G and 3G
auth req.

Change-Id: I392d61d1348bee9c88abe4bb938e99b2c3702a94
2018-10-29 00:19:00 +01:00
Vadim Yanitskiy e01691df50 L1CTL_Types.ttcn: drop length limitation for traffic messages
There is no any reason to limit payload length.

Change-Id: I1782856affe427b087fa3f7ef1c02a865d136372
2018-10-28 22:32:36 +00:00
Vadim Yanitskiy ea247d5ceb library/VTY: fix CONFIG prompt matching in f_vty_wait_for_prompt()
Matching the CONFIG prompt using implicit '\w+(*)' pattern is
a bad idea, because it can actually match almost anything:

  - 'OsmoBlaBla(config)# ',
  - 'OsmoBlaBla(config) ',
  - 'OsmoBlaBla> ',
  - 'Mahlzeit'!

One problem is that the parentheses are interpreted as a matching
operator (which is used to group an expression), so they should
have been escaped by '\'. Another problem is that this pattern
is not complete, because '\# ' is missing. Let's fix this!

Change-Id: I8a0e3fcfb0c4e5854b7b1e39296052e679c63c73
Related: OS#3675
2018-10-28 23:03:44 +07:00
Harald Welte 9a5dd54350 SGsAP_Emulation: Add functions to send MME or VLR reset
... including encoding/decoding of names between string and binary labels

Change-Id: I981c7c1d34f0db60031b5436739cd924e5a09407
2018-10-28 09:52:34 +00:00
Harald Welte 1fd461a936 SGsAP: Switch over to osmocom branch/repo to avoid bugs in official one
The VLR and MME name are octetstring with dns-style labels and not
character strings.

Change-Id: I31a8ea04ef508beba9014aac5479693c47b7b956
2018-10-28 09:52:34 +00:00
Harald Welte af5bce4f97 Add SGsAP_CodecPort + SGsAP_Emulation module
Change-Id: I530f8f444d1c7ea0bf11d510da7b97f64a2039f5
2018-10-28 09:52:34 +00:00
Pau Espin a07cfd909c RSL_Emulation: Fail explicitly on ASP_IPA_EVENT_DOWN
Otherwise RSL layer fails this way when this event is received:

RSL_Emulation.ttcn:429 Receive operation on port IPA_PT succeeded, message from TC_chan_act_a51-RSL-IPA(3): @IPA_Emulation.ASP_IPA_Event: { up_down := ASP_IPA_EVENT_DOWN (0) } id 9
- Function main_client was stopped. PTC terminates.
RSL_Emulation.ttcn:429 Message with id 9 was extracted from the queue of IPA_PT.
RSL_Emulation.ttcn:430 setverdict(fail): none -> fail reason: "Received unknown primitive from IPA", new component reason: "Received unknown primitive from IPA"

We now fail with a clearer message "Lost IPA connection!". These
failures seem to happen under high load when the BTS doesn't get a
steady clock from osmo-trx.

Change-Id: Idc6565c9de72d98015d56a41e5616c46051c8a8d
2018-10-24 16:34:05 +02:00
Daniel Willmann 0fcc4d357f BTS_Tests: Use Misc_Helpers.f_shutdown consistently
Replace all calls to setverdict(fail) with f_shutdown() since I'd rather
fail and stop early in case we encounter an error.
Only replace setverdict(pass) with f_shutdown() if it is followed by
mtc.stop

Remove internal function f_shutdown and use the one from Misc_Helpers

Change-Id: Ia8b01a1876e969d6f0760ea625e4df83af4f54ca
2018-10-24 15:10:13 +02:00
Daniel Willmann d93047434b Add Misc_Helpers.ttcn to centralize TTCN3 shutdown handling
This function can now be called from anywhere to try and safely shutdown
a testcase. It is not optimal as we can't call "all component.stop" from
outside the mtc, but without any proper and orderly shutdown handling of
all our emulation components I believe this is the best we can do.

To use it:

import from Misc_Helpers all;

in your module and then call

Misc_Helpers.f_shutdown(__BFILE__, __LINE__);

You can also pass the function a verdict and a message and it will take care
of calling setverdict, but beware of the following:

While setverdict would accept any number of arguments as log message
and convert them to a log string f_shutdown expects one charstring.
It's possible to use the log2str function to use the log arguments in
setverdict for f_shutdown, for example

setverdict(fail, "Template didn't match: ", tmpl_foo);
would become
Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Template didn't match: ", tmpl_foo));

Change-Id: I84d1aa6732f6b748d2bfdeac8f6309023717f267
2018-10-24 15:10:13 +02:00
Vadim Yanitskiy a201b97200 library/TRXC_Types.ttcn: correct FAKE_RSSI command template
Absolute form of FAKE_RSSI command shall contain an optional
threshold value. Otherwise it's interpreted as relative form.

Change-Id: Ief89b2601277488bb1782b981aff1061ddaa6637
2018-10-23 10:43:15 +00:00
Pau Espin 3dcf38f7dc bts: Disable testing FACCH/H with real HW
Temporary disable testing on FACCH/H because Calypso PHY is not stable.
Otherwise some tests fail half of the time due to this unstability.

Related: OS#3653
Change-Id: I078cdfbf8d27e543a723eab90f66b2fcda016b5d
2018-10-23 10:35:15 +00:00
Pau Espin e9571aaee5 bts: Introduce mp_ul_rxlev_exp and use mp_rxlev_exp to craft meas rep
Change-Id: I1c8f05bde6f9dc8e8a649e877209192d829dd923
2018-10-23 10:34:43 +00:00
Philipp Maier 109e6aaaa1 MSC_Tests: Extend timeout in TC_mo_setup_and_nothing
The mncc guard timer in osmo-msc expires after 180 sec. This tests
terminates early and fails. Lets expand the timeout in order to give the
test a chance to pass.

Change-Id: I9f954a8807c0f0513422693ac24c647da0bfafd1
Related: OS#3599
2018-10-22 20:23:26 +00:00
Vadim Yanitskiy 4ebdad65a2 BTS_Tests.ttcn: fix: don't overwrite the expected meas results
Since OS#2988 was fixed, we should not overwrite nor ignore the
measurement results in f_build_meas_res_tmpl().

Change-Id: Ie902bfc7619181b528eafbce367c87e0b062243a
2018-10-21 12:29:50 +00:00
Stefan Sperling aa1e60f584 add an IPA test which sends a chopped payload
Add another IPA test to the BTS and BSC test suites.
This new test sends the header in one burst, followed by the
payload which is transmitted byte-per-byte.

The test uses an ID REQ message. If acting as a server, the test
can expect an ID RESP message. However, if acting as a client, the
server will close the connection when it receives the ID REQ.
The CTRL interface port on the BSC does not close the connection in
this case, so that particular port is skipped by the test for now.

Change-Id: If75cb90841bb25619b414f0cabe008a2428a9fdf
Related: OS#2010
Depends: I4804ccabd342b82d44e69dbc6eaaae220ec7d4e4
2018-10-15 16:41:16 +02:00
Stefan Sperling 0ec1c26808 add chopped IPA ping test to BTS tests
Run the chopped IPA ping test from the IPA_Testing module
as part of the BTS test suite. Contrary to the BSC version
of this test, this test listens for an IPA connection rather
than connecting to an IPA server. Make code in the IPA_Testing
module for accepting connections actually work.

Change-Id: I4804ccabd342b82d44e69dbc6eaaae220ec7d4e4
Related: OS#2010
2018-10-15 15:19:32 +02:00