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