blob: 9ea0c762f1cf6fb8f52f2b067500f1c850acfe79 [file] [log] [blame]
Harald Weltee13cfb22019-04-23 16:52:02 +02001module MSC_Tests_Iu {
2
Harald Welte34b5a952019-05-27 11:54:11 +02003/* Osmocom MSC test suite for Iu interface in TTCN-3
4 * (C) 2019 Harald Welte <laforge@gnumonks.org>
5 * All rights reserved.
6 *
7 * Released under the terms of GNU General Public License, Version 2 or
8 * (at your option) any later version.
9 *
10 * SPDX-License-Identifier: GPL-2.0-or-later
11 */
12
Harald Weltee13cfb22019-04-23 16:52:02 +020013import from General_Types all;
14import from Osmocom_Types all;
15
16import from BSC_ConnectionHandler all;
17import from MSC_Tests all;
18
19import from Osmocom_VTY_Functions all;
20
21import from GSUP_Emulation all;
22import from RAN_Emulation all;
23
24import from RANAP_Templates all;
25
26import from MobileL3_Types all;
27import from MobileL3_CommonIE_Types all;
28import from MobileL3_SMS_Types all;
29import from L3_Templates all;
30import from L3_Common all;
31
32
33
34testcase TC_iu_lu_imsi_reject() runs on MTC_CT {
35 var BSC_ConnHdlr vc_conn;
36 f_init(3);
37
38 vc_conn := f_start_handler(refers(f_tc_lu_imsi_reject), 1003, ran_idx := 2, ran_is_geran := false);
39 vc_conn.done;
40}
41
42testcase TC_iu_lu_imsi_timeout_gsup() runs on MTC_CT {
43 var BSC_ConnHdlr vc_conn;
44 f_init(3);
45
46 vc_conn := f_start_handler(refers(f_tc_lu_imsi_timeout_gsup), 1004, ran_idx := 2, ran_is_geran := false);
47 vc_conn.done;
48}
49
50testcase TC_iu_lu_imsi_auth3g_tmsi() runs on MTC_CT {
51 var BSC_ConnHdlr vc_conn;
52 f_init(3);
53 f_vty_config(MSCVTY, "network", "authentication required");
54
55 vc_conn := f_start_handler(refers(f_tc_lu_imsi_auth3g_tmsi), 1005, ran_idx := 2, ran_is_geran := false);
56 vc_conn.done;
57}
58
59testcase TC_iu_cmserv_imsi_unknown() runs on MTC_CT {
60 var BSC_ConnHdlr vc_conn;
61 f_init(3);
62 vc_conn := f_start_handler(refers(f_tc_cmserv_imsi_unknown), 1006, ran_idx := 2, ran_is_geran := false);
63 vc_conn.done;
64}
65
66testcase TC_iu_lu_and_mo_call() runs on MTC_CT {
67 var BSC_ConnHdlr vc_conn;
68 f_init(3);
69
70 vc_conn := f_start_handler(refers(f_tc_lu_and_mo_call), 1007, ran_idx := 2, ran_is_geran := false);
71 vc_conn.done;
72}
73
74testcase TC_iu_lu_auth_sai_timeout() runs on MTC_CT {
75 var BSC_ConnHdlr vc_conn;
76 f_init(3);
77 f_vty_config(MSCVTY, "network", "authentication required");
78
79 vc_conn := f_start_handler(refers(f_tc_lu_auth_sai_timeout), 1008, ran_idx := 2, ran_is_geran := false);
80 vc_conn.done;
81}
82
83testcase TC_iu_lu_auth_sai_err() runs on MTC_CT {
84 var BSC_ConnHdlr vc_conn;
85 f_init(3);
86 f_vty_config(MSCVTY, "network", "authentication required");
87
88 vc_conn := f_start_handler(refers(f_tc_lu_auth_sai_err), 1009, ran_idx := 2, ran_is_geran := false);
89 vc_conn.done;
90}
91
92/* Test LU but RNC will send a Iu Release request in the middle */
93private function f_tc_iu_lu_release_request(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
94 f_init_handler(pars);
95
96 var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi)
97 var PDU_DTAP_MT dtap_mt;
98
99 /* tell GSUP dispatcher to send this IMSI to us */
100 f_create_gsup_expect(hex2str(g_pars.imsi));
101
102 /* Send BSSAP_Conn_Req with COMPL L3 INFO to MSC */
103 f_cl3_or_initial_ue(l3_lu);
104
105 f_sleep(1.0);
106 /* send release request in the middle of the LU */
107 BSSAP.send(ts_RANAP_IuReleaseRequest(ts_RanapCause_om_intervention));
108 alt {
109 [] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Rej)) { repeat; }
110 [] BSSAP.receive(tr_RANAP_IuReleaseCommand(?)) {}
111 }
112 BSSAP.send(ts_RANAP_IuReleaseComplete);
113 alt {
114 /* See https://osmocom.org/issues/2862 */
115 [] BSSAP.receive(tr_RANAP_IuReleaseCommand(?)) {
116 setverdict(fail, "Got a second Iu Release Command, only one expected");
117 mtc.stop;
118 repeat;
119 }
120 [] BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {}
121 }
122 setverdict(pass);
123}
124testcase TC_iu_lu_release_request() runs on MTC_CT {
125 var BSC_ConnHdlr vc_conn;
126 f_init(3);
127
128 vc_conn := f_start_handler(refers(f_tc_iu_lu_release_request), 1010, ran_idx := 2, ran_is_geran := false);
129 vc_conn.done;
130}
131
132testcase TC_iu_lu_disconnect() runs on MTC_CT {
133 var BSC_ConnHdlr vc_conn;
134 f_init(3);
135
136 vc_conn := f_start_handler(refers(f_tc_lu_disconnect), 1011, ran_idx := 2, ran_is_geran := false);
137 vc_conn.done;
138}
139
140testcase TC_iu_lu_by_imei() runs on MTC_CT {
141 var BSC_ConnHdlr vc_conn;
142 f_init(3);
143
144 vc_conn := f_start_handler(refers(f_tc_lu_by_imei), 1012, ran_idx := 2, ran_is_geran := false);
145 vc_conn.done;
146}
147
148testcase TC_iu_imsi_detach_by_imsi() runs on MTC_CT {
149 var BSC_ConnHdlr vc_conn;
150 f_init(3);
151
152 vc_conn := f_start_handler(refers(f_tc_imsi_detach_by_imsi), 1014, ran_idx := 2, ran_is_geran := false);
153 vc_conn.done;
154}
155
156testcase TC_iu_imsi_detach_by_tmsi() runs on MTC_CT {
157 var BSC_ConnHdlr vc_conn;
158 f_init(3);
159
160 vc_conn := f_start_handler(refers(f_tc_imsi_detach_by_tmsi), 1015, ran_idx := 2, ran_is_geran := false);
161 vc_conn.done;
162}
163
164testcase TC_iu_imsi_detach_by_imei() runs on MTC_CT {
165 var BSC_ConnHdlr vc_conn;
166 f_init(3);
167
168 vc_conn := f_start_handler(refers(f_tc_imsi_detach_by_imei), 1016, ran_idx := 2, ran_is_geran := false);
169 vc_conn.done;
170}
171
172testcase TC_iu_emerg_call_imei_reject() runs on MTC_CT {
173 var BSC_ConnHdlr vc_conn;
174 f_init(3);
175
176 vc_conn := f_start_handler(refers(f_tc_emerg_call_imei_reject), 1017, ran_idx := 2, ran_is_geran := false);
177 vc_conn.done;
178}
179
180testcase TC_iu_emerg_call_imsi() runs on MTC_CT {
181 var BSC_ConnHdlr vc_conn;
182 f_init(3);
183
184 vc_conn := f_start_handler(refers(f_tc_emerg_call_imsi), 1018, ran_idx := 2, ran_is_geran := false);
185 vc_conn.done;
186}
187
188testcase TC_iu_establish_and_nothing() runs on MTC_CT {
189 var BSC_ConnHdlr vc_conn;
190 f_init(3);
191
192 vc_conn := f_start_handler(refers(f_tc_establish_and_nothing), 1027, ran_idx := 2, ran_is_geran := false);
193 vc_conn.done;
194}
195
196testcase TC_iu_mo_setup_and_nothing() runs on MTC_CT {
197 var BSC_ConnHdlr vc_conn;
198 f_init(3);
199
200 vc_conn := f_start_handler(refers(f_tc_mo_setup_and_nothing), 1028, ran_idx := 2, ran_is_geran := false);
201 vc_conn.done;
202}
203
204testcase TC_iu_mo_crcx_ran_timeout() runs on MTC_CT {
205 var BSC_ConnHdlr vc_conn;
206 f_init(3);
207
208 vc_conn := f_start_handler(refers(f_tc_mo_crcx_ran_timeout), 1029, ran_idx := 2, ran_is_geran := false);
209 vc_conn.done;
210}
211
212testcase TC_iu_mo_crcx_ran_reject() runs on MTC_CT {
213 var BSC_ConnHdlr vc_conn;
214 f_init(3);
215
216 vc_conn := f_start_handler(refers(f_tc_mo_crcx_ran_reject), 1030, ran_idx := 2, ran_is_geran := false);
217 vc_conn.done;
218}
219
220testcase TC_iu_mt_crcx_ran_reject() runs on MTC_CT {
221 var BSC_ConnHdlr vc_conn;
222 f_init(3);
223
224 vc_conn := f_start_handler(refers(f_tc_mt_crcx_ran_reject), 1031, ran_idx := 2, ran_is_geran := false);
225 vc_conn.done;
226}
227
228testcase TC_iu_mt_t310() runs on MTC_CT {
229 var BSC_ConnHdlr vc_conn;
230 f_init(3);
231
232 vc_conn := f_start_handler(refers(f_tc_mt_t310), 1032, ran_idx := 2, ran_is_geran := false);
233 vc_conn.done;
234}
235
236testcase TC_iu_gsup_cancel() runs on MTC_CT {
237 var BSC_ConnHdlr vc_conn;
238 f_init(3);
239
240 vc_conn := f_start_handler(refers(f_tc_gsup_cancel), 1033, ran_idx := 2, ran_is_geran := false);
241 vc_conn.done;
242}
243
244testcase TC_iu_mo_release_timeout() runs on MTC_CT {
245 var BSC_ConnHdlr vc_conn;
246 f_init(3);
247
248 vc_conn := f_start_handler(refers(f_tc_mo_release_timeout), 1040, ran_idx := 2, ran_is_geran := false);
249 vc_conn.done;
250}
251
Neels Hofmeyr8fe8a902019-11-03 05:51:03 +0100252testcase TC_iu_lu_and_mt_call() runs on MTC_CT {
253 var BSC_ConnHdlr vc_conn;
254 f_init(3);
255 vc_conn := f_start_handler(refers(f_tc_lu_and_mt_call), 1142, ran_idx := 2, ran_is_geran := false);
256 vc_conn.done;
257}
258
Harald Weltee13cfb22019-04-23 16:52:02 +0200259testcase TC_iu_lu_and_mo_sms() runs on MTC_CT {
260 var BSC_ConnHdlr vc_conn;
261 f_init(3);
262 vc_conn := f_start_handler(refers(f_tc_lu_and_mo_sms), 1042, ran_idx := 2, ran_is_geran := false);
263 vc_conn.done;
264}
265
266testcase TC_iu_lu_and_mt_sms() runs on MTC_CT {
267 var BSC_ConnHdlrPars pars;
268 var BSC_ConnHdlr vc_conn;
269 f_init(3);
270 pars := f_init_pars(1043, ran_idx := 2, ran_is_geran := false);
271 vc_conn := f_start_handler_with_pars(refers(f_tc_lu_and_mt_sms), pars);
272 vc_conn.done;
273}
274
275testcase TC_iu_lu_and_mt_sms_paging_and_nothing() runs on MTC_CT {
276 var BSC_ConnHdlrPars pars;
277 var BSC_ConnHdlr vc_conn;
278 f_init(3);
279 pars := f_init_pars(101843, ran_idx := 2, ran_is_geran := false);
280 vc_conn := f_start_handler_with_pars(refers(f_tc_lu_and_mt_sms_paging_and_nothing), pars);
281 vc_conn.done;
282}
283
Alexander Couzensfc02f242019-09-12 03:43:18 +0200284testcase TC_iu_lu_and_mt_sms_paging_repeated() runs on MTC_CT {
285 var BSC_ConnHdlrPars pars;
286 var BSC_ConnHdlr vc_conn;
287 f_init(3);
Neels Hofmeyrd8ad7c02019-11-28 01:36:01 +0100288 pars := f_init_pars(101844, ran_idx := 2, ran_is_geran := false);
Alexander Couzensfc02f242019-09-12 03:43:18 +0200289 vc_conn := f_start_handler_with_pars(refers(f_tc_lu_and_mt_sms_paging_repeated), pars);
290 vc_conn.done;
291}
292
Harald Weltee13cfb22019-04-23 16:52:02 +0200293testcase TC_iu_smpp_mo_sms() runs on MTC_CT {
294 var BSC_ConnHdlr vc_conn;
295 f_init(3);
296 f_vty_config2(MSCVTY, { "smpp", "esme msc_tester"}, "default-route");
297 vc_conn := f_start_handler(refers(f_tc_smpp_mo_sms), 1044, ran_idx := 2, ran_is_geran := false);
298 vc_conn.done;
299 f_vty_config2(MSCVTY, { "smpp", "esme msc_tester"}, "no default-route");
300}
301
302testcase TC_iu_gsup_mo_sms() runs on MTC_CT {
303 var BSC_ConnHdlr vc_conn;
304 f_init(3);
305 f_vty_config(MSCVTY, "msc", "sms-over-gsup");
306 vc_conn := f_start_handler(refers(f_tc_gsup_mo_sms), 1088, ran_idx := 2, ran_is_geran := false);
307 vc_conn.done;
308 f_vty_config(MSCVTY, "msc", "no sms-over-gsup");
309}
310
311testcase TC_iu_gsup_mo_smma() runs on MTC_CT {
312 var BSC_ConnHdlr vc_conn;
313 f_init(3);
314 f_vty_config(MSCVTY, "msc", "sms-over-gsup");
315 vc_conn := f_start_handler(refers(f_tc_gsup_mo_smma), 1089, ran_idx := 2, ran_is_geran := false);
316 vc_conn.done;
317 f_vty_config(MSCVTY, "msc", "no sms-over-gsup");
318}
319
320testcase TC_iu_gsup_mt_sms_ack() runs on MTC_CT {
321 var BSC_ConnHdlrPars pars;
322 var BSC_ConnHdlr vc_conn;
323 f_init(3);
324 pars := f_init_pars(1090, ran_idx := 2, ran_is_geran := false);
325 f_vty_config(MSCVTY, "msc", "sms-over-gsup");
326 vc_conn := f_start_handler_with_pars(refers(f_tc_gsup_mt_sms_ack), pars);
327 vc_conn.done;
328 f_vty_config(MSCVTY, "msc", "no sms-over-gsup");
329}
330
331testcase TC_iu_gsup_mt_sms_err() runs on MTC_CT {
332 var BSC_ConnHdlrPars pars;
333 var BSC_ConnHdlr vc_conn;
334 f_init(3);
335 pars := f_init_pars(1091, ran_idx := 2, ran_is_geran := false);
336 f_vty_config(MSCVTY, "msc", "sms-over-gsup");
337 vc_conn := f_start_handler_with_pars(refers(f_tc_gsup_mt_sms_err), pars);
338 vc_conn.done;
339 f_vty_config(MSCVTY, "msc", "no sms-over-gsup");
340}
341
342testcase TC_iu_gsup_mt_sms_rp_mr() runs on MTC_CT {
343 var BSC_ConnHdlrPars pars;
344 var BSC_ConnHdlr vc_conn;
345 f_init(3);
346 pars := f_init_pars(1092, ran_idx := 2, ran_is_geran := false);
347 f_vty_config(MSCVTY, "msc", "sms-over-gsup");
348 vc_conn := f_start_handler_with_pars(refers(f_tc_gsup_mt_sms_rp_mr), pars);
349 vc_conn.done;
350 f_vty_config(MSCVTY, "msc", "no sms-over-gsup");
351}
352
353testcase TC_iu_gsup_mo_mt_sms_rp_mr() runs on MTC_CT {
354 var BSC_ConnHdlrPars pars;
355 var BSC_ConnHdlr vc_conn;
356 f_init(3);
357 pars := f_init_pars(1093, ran_idx := 2, ran_is_geran := false);
358 f_vty_config(MSCVTY, "msc", "sms-over-gsup");
359 vc_conn := f_start_handler_with_pars(refers(f_tc_gsup_mo_mt_sms_rp_mr), pars);
360 vc_conn.done;
361 f_vty_config(MSCVTY, "msc", "no sms-over-gsup");
362}
363
364testcase TC_iu_lu_and_mo_ussd_single_request() runs on MTC_CT {
365 var BSC_ConnHdlr vc_conn;
366 f_init(3);
367 vc_conn := f_start_handler(refers(f_tc_lu_and_mo_ussd_single_request), 1046, ran_idx := 2, ran_is_geran := false);
368 vc_conn.done;
369}
370
371testcase TC_iu_lu_and_mt_ussd_notification() runs on MTC_CT {
372 var BSC_ConnHdlr vc_conn;
373 f_init(3);
374 vc_conn := f_start_handler(refers(f_tc_lu_and_mt_ussd_notification), 1047, ran_idx := 2, ran_is_geran := false);
375 vc_conn.done;
376}
377
378testcase TC_iu_lu_and_mo_ussd_during_mt_call() runs on MTC_CT {
379 var BSC_ConnHdlr vc_conn;
380 f_init(3);
381 vc_conn := f_start_handler(refers(f_tc_lu_and_mo_ussd_during_mt_call), 1048, ran_idx := 2, ran_is_geran := false);
382 vc_conn.done;
383}
384
385testcase TC_mo_cc_iu_release() runs on MTC_CT {
386 var BSC_ConnHdlr vc_conn;
387 f_init(3);
388
389 vc_conn := f_start_handler(refers(f_tc_mo_cc_bssmap_clear), 1043, ran_idx := 2, ran_is_geran := false);
390 vc_conn.done;
391}
392
393testcase TC_iu_lu_and_mt_ussd_during_mt_call() runs on MTC_CT {
394 var BSC_ConnHdlr vc_conn;
395 f_init(3);
396 vc_conn := f_start_handler(refers(f_tc_lu_and_mt_ussd_during_mt_call), 1049, ran_idx := 2, ran_is_geran := false);
397 vc_conn.done;
398}
399
400testcase TC_iu_lu_and_mo_ussd_mo_release() runs on MTC_CT {
401 var BSC_ConnHdlr vc_conn;
Vadim Yanitskiyba0b0aa2019-06-20 06:53:47 +0700402 f_init(3);
Harald Weltee13cfb22019-04-23 16:52:02 +0200403 vc_conn := f_start_handler(refers(f_tc_lu_and_mo_ussd_mo_release), 1050, ran_idx := 2, ran_is_geran := false);
404 vc_conn.done;
405}
406
407testcase TC_iu_lu_and_ss_session_timeout() runs on MTC_CT {
408 var BSC_ConnHdlr vc_conn;
409 f_init(3);
410 f_vty_config(MSCVTY, "msc", "ncss guard-timeout 3");
411 vc_conn := f_start_handler(refers(f_tc_lu_and_ss_session_timeout), 1051, ran_idx := 2, ran_is_geran := false);
412 vc_conn.done;
413 f_vty_config(MSCVTY, "msc", "ncss guard-timeout 0");
414}
415
Harald Welteb2284bd2019-05-10 11:30:43 +0200416testcase TC_iu_lu_with_invalid_mcc_mnc() runs on MTC_CT {
417 var BSC_ConnHdlr vc_conn;
418 f_init(3);
419 vc_conn := f_start_handler(refers(f_tc_lu_with_invalid_mcc_mnc), 1054, ran_idx := 2, ran_is_geran := false);
420 vc_conn.done;
421}
422
Harald Weltee13cfb22019-04-23 16:52:02 +0200423control {
424 execute( TC_iu_lu_imsi_reject() );
425 execute( TC_iu_lu_imsi_timeout_gsup() );
426 execute( TC_iu_lu_imsi_auth3g_tmsi() );
427 execute( TC_iu_cmserv_imsi_unknown() );
428 execute( TC_iu_lu_and_mo_call() );
429 execute( TC_iu_lu_auth_sai_timeout() );
430 execute( TC_iu_lu_auth_sai_err() );
431 execute( TC_iu_lu_release_request() );
432 execute( TC_iu_lu_disconnect() );
433 execute( TC_iu_lu_by_imei() );
434 execute( TC_iu_imsi_detach_by_imsi() );
435 execute( TC_iu_imsi_detach_by_tmsi() );
436 execute( TC_iu_imsi_detach_by_imei() );
437 execute( TC_iu_emerg_call_imei_reject() );
438 execute( TC_iu_emerg_call_imsi() );
439 execute( TC_iu_establish_and_nothing() );
440 execute( TC_iu_mo_setup_and_nothing() );
441 execute( TC_iu_mo_crcx_ran_timeout() );
442 execute( TC_iu_mo_crcx_ran_reject() );
443 execute( TC_iu_mt_crcx_ran_reject() );
444 execute( TC_iu_gsup_cancel() );
445 execute( TC_iu_mo_release_timeout() );
446 execute( TC_reset_two_1iu() );
447
Neels Hofmeyr8fe8a902019-11-03 05:51:03 +0100448 execute( TC_iu_lu_and_mt_call() );
449
Harald Weltee13cfb22019-04-23 16:52:02 +0200450 execute( TC_iu_lu_and_mo_sms() );
451 execute( TC_iu_lu_and_mt_sms() );
452 execute( TC_iu_lu_and_mt_sms_paging_and_nothing() );
Alexander Couzensfc02f242019-09-12 03:43:18 +0200453 execute( TC_iu_lu_and_mt_sms_paging_repeated() );
Harald Weltee13cfb22019-04-23 16:52:02 +0200454 execute( TC_iu_smpp_mo_sms() );
455
456 execute( TC_iu_gsup_mo_sms() );
457 execute( TC_iu_gsup_mo_smma() );
458 execute( TC_iu_gsup_mt_sms_ack() );
459 execute( TC_iu_gsup_mt_sms_err() );
460 execute( TC_iu_gsup_mt_sms_rp_mr() );
461 execute( TC_iu_gsup_mo_mt_sms_rp_mr() );
462
463 execute( TC_iu_lu_and_mo_ussd_single_request() );
464 execute( TC_iu_lu_and_mt_ussd_notification() );
465 execute( TC_iu_lu_and_mo_ussd_during_mt_call() );
466 execute( TC_iu_lu_and_mt_ussd_during_mt_call() );
467 execute( TC_iu_lu_and_mo_ussd_mo_release() );
468 execute( TC_iu_lu_and_ss_session_timeout() );
Harald Welteb2284bd2019-05-10 11:30:43 +0200469 execute( TC_iu_lu_with_invalid_mcc_mnc() );
Harald Weltee13cfb22019-04-23 16:52:02 +0200470
471 /* TODO: Iu + SGsAP related tests, e.g. paging on IuCS */
472
473 /* Run this last: at the time of writing this test crashes the MSC */
474 execute( TC_mo_cc_iu_release() );
475}
476
477
478}