blob: 8e7e1c52740752364c3bfaf540e3db95a2e86fcf [file] [log] [blame]
Harald Welte08332302019-08-01 09:54:40 +02001module CBC_Tests {
2
3import from Osmocom_Types all;
Pau Espin Pedrol7c13cb72022-06-16 19:03:44 +02004import from Socket_API_Definitions all;
Harald Welte08332302019-08-01 09:54:40 +02005
6import from BSSAP_Types all;
7import from BSSMAP_Templates all;
8import from CBSP_Types all;
9import from CBSP_Templates all;
10import from CBSP_Adapter all;
11import from CBSP_CodecPort all;
Pau Espin Pedrol7c13cb72022-06-16 19:03:44 +020012
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +020013import from SABP_Types all;
14import from SABP_Templates all;
15import from SABP_IEs all;
16import from SABP_PDU_Descriptions all;
17
Pau Espin Pedrol7c13cb72022-06-16 19:03:44 +020018import from SBC_AP_IEs all;
19import from SBC_AP_Constants all;
20import from SBC_AP_PDU_Contents all;
21import from SBC_AP_PDU_Descriptions all;
22import from SBC_AP_Types all;
23import from SBC_AP_Templates all;
24import from SBC_AP_CodecPort all;
25import from SBC_AP_Adapter all;
Harald Welte08332302019-08-01 09:54:40 +020026
27import from HTTP_Adapter all;
28import from HTTPmsg_Types all;
29import from ECBE_Types all;
30
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +020031import from CBS_Message all;
32import from ECBE_Components all;
33import from BSC_ConnectionHandler all;
34import from MME_ConnectionHandler all;
35
Harald Welte08332302019-08-01 09:54:40 +020036modulepar {
37 charstring mp_cbc_host := "127.0.0.1";
Pau Espin Pedrol07746ad2022-06-16 19:02:04 +020038 integer mp_cbc_cbsp_port := 48049;
Pau Espin Pedrol7c13cb72022-06-16 19:03:44 +020039 integer mp_cbc_sbcap_port := c_SBC_AP_PORT;
Pau Espin Pedrol07746ad2022-06-16 19:02:04 +020040 integer mp_cbc_ecbe_port := 12345;
Pau Espin Pedrole14c2082022-07-29 16:41:02 +020041 integer mp_local_cbsp_port := 15000;
42 integer mp_local_sbcap_port := 16000;
Harald Welte08332302019-08-01 09:54:40 +020043};
44
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +020045const integer MAX_BSC := 3;
46const integer MAX_MME := 3;
47
48type component test_CT extends CBSP_Adapter_CT, http_CT {
49 var integer g_num_bsc;
50 var integer g_num_mme;
51 var BSC_ConnHdlr g_vc_conn_BSC[MAX_BSC];
52 var MME_ConnHdlr g_vc_conn_MME[MAX_MME];
53 var BSC_ConnHdlrPars g_pars_BSC[MAX_BSC];
54 var MME_ConnHdlrPars g_pars_MME[MAX_MME];
Harald Welte08332302019-08-01 09:54:40 +020055};
56
Pau Espin Pedrol9d8b6bf2022-06-23 12:19:47 +020057private function f_shutdown_helper() runs on test_CT {
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +020058 /* Wait for all BSC cons to terminate */
59 for (var integer i := 0; i < g_num_bsc; i := i + 1) {
60 g_vc_conn_BSC[i].done;
61 }
62 /* Wait for all MME cons to terminate */
63 for (var integer i := 0; i < g_num_mme; i := i + 1) {
64 g_vc_conn_MME[i].done;
65 }
Pau Espin Pedrol9d8b6bf2022-06-23 12:19:47 +020066 all component.stop;
67 setverdict(pass);
68 mtc.stop;
69}
70
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +020071/*
72 * BSC Conn Handler:
73 */
74private function f_BSC_ConnHdlr_start_fn_void() runs on BSC_ConnHdlr {
75 log("Default start_fn() function called!");
76}
77private function f_init_pars_bsc(integer bsc_cbsp_port, charstring cbc_host, integer cbc_cbsp_port)
78 runs on test_CT return BSC_ConnHdlrPars {
79 var BSC_ConnHdlrPars pars := {
80 bsc_cbsp_port := bsc_cbsp_port,
81 cbc_host := cbc_host,
82 cbc_cbsp_port := cbc_cbsp_port,
83 start_fn := refers(f_BSC_ConnHdlr_start_fn_void),
84 exp_cbs_msg := omit,
85 cell_list_success := omit
86 };
87 return pars;
88}
Harald Welte08332302019-08-01 09:54:40 +020089
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +020090private function f_init_bsc(integer idx, charstring id) runs on test_CT return BSC_ConnHdlr {
91 var BSC_ConnHdlr vc_conn;
92 id := id & "-BSC" & int2str(idx);
93 vc_conn := BSC_ConnHdlr.create(id) alive;
94 g_pars_BSC[idx] := f_init_pars_bsc(mp_local_cbsp_port + idx, mp_cbc_host, mp_cbc_cbsp_port);
95 return vc_conn;
96}
97
98private function f_start_bsc(integer idx, charstring id, BSC_ConnHdlrPars pars)
99 runs on test_CT {
100 id := id & "-BSC" & int2str(idx);
101 g_vc_conn_BSC[idx] := f_init_bsc(idx, id);
102 g_vc_conn_BSC[idx].start(f_BSC_ConnHdlr_main(id, pars));
103}
104
105/*
106 * MME Conn Handler:
107 */
108private function f_MME_ConnHdlr_start_fn_void() runs on MME_ConnHdlr {
109 log("Default start_fn() function called!");
110}
111private function f_init_pars_mme(integer mme_sbcap_port, charstring cbc_host, integer cbc_sbcap_port)
112 runs on test_CT return MME_ConnHdlrPars {
113 var MME_ConnHdlrPars pars := {
114 mme_sbcap_port := mme_sbcap_port,
115 cbc_host := cbc_host,
116 cbc_sbcap_port := cbc_sbcap_port,
117 start_fn := refers(f_MME_ConnHdlr_start_fn_void),
Pau Espin Pedrolae2e5152022-07-29 19:16:23 +0200118 exp_cbs_msg := omit,
119 write_replace_warning_ind_cause := omit,
120 bcast_cell_id_list := omit
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200121 };
122 return pars;
123}
124
125private function f_init_mme(integer idx, charstring id) runs on test_CT return MME_ConnHdlr {
126 var MME_ConnHdlr vc_conn;
127 id := id & "-MME" & int2str(idx);
128 vc_conn := MME_ConnHdlr.create(id) alive;
129 g_pars_MME[idx] := f_init_pars_mme(mp_local_sbcap_port + idx, mp_cbc_host, mp_cbc_sbcap_port);
130 return vc_conn;
131}
132
133private function f_start_mme(integer idx, charstring id, MME_ConnHdlrPars pars)
134 runs on test_CT {
135 id := id & "-MME" & int2str(idx);
136 g_vc_conn_MME[idx] := f_init_mme(idx, id);
137 g_vc_conn_MME[idx].start(f_MME_ConnHdlr_main(id, pars));
138}
139
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200140private function f_init(integer num_bsc := 0, integer num_mme := 0) runs on test_CT {
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200141 f_http_init(mp_cbc_host, mp_cbc_ecbe_port);
142
143 g_num_bsc := num_bsc;
144 for (var integer i := 0; i < g_num_bsc; i := i + 1) {
145 g_vc_conn_BSC[i] := f_init_bsc(i, testcasename());
146 }
147
148 g_num_mme := num_mme;
149 for (var integer i := 0; i < g_num_mme; i := i + 1) {
150 g_vc_conn_MME[i] := f_init_mme(i, testcasename());
Harald Welte08332302019-08-01 09:54:40 +0200151 }
152}
153
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200154function f_start() runs on test_CT {
Pau Espin Pedrol3dfa8072022-07-29 16:29:43 +0200155 for (var integer i := 0; i < g_num_bsc; i := i + 1) {
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200156 f_start_bsc(i, testcasename(), g_pars_BSC[i]);
157 }
158 for (var integer i := 0; i < g_num_mme; i := i + 1) {
159 f_start_mme(i, testcasename(), g_pars_MME[i]);
160 }
161 f_sleep(2.0); /* wait all conns connected */
162}
163
Harald Welte08332302019-08-01 09:54:40 +0200164/* test whether or not we receive a valid KEEP-ALIVE from the CBC */
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200165private function f_bsc_TC_rx_keepalive() runs on BSC_ConnHdlr {
Harald Welte08332302019-08-01 09:54:40 +0200166 var CBSP_PDU rx;
167 var CBSP_IE ie;
Harald Welte08332302019-08-01 09:54:40 +0200168 rx := f_cbsp_exp(tr_CBSP_KEEP_ALIVE(?));
169 f_cbsp_find_ie(rx, CBSP_IEI_KEEP_ALIVE_REP_PERIOD, ie);
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200170}
171testcase TC_rx_keepalive() runs on test_CT {
Harald Welte08332302019-08-01 09:54:40 +0200172
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200173 f_init(num_bsc := 1);
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200174 g_pars_BSC[0].start_fn := refers(f_bsc_TC_rx_keepalive);
175 f_start();
Pau Espin Pedrol9d8b6bf2022-06-23 12:19:47 +0200176 f_shutdown_helper();
Harald Welte08332302019-08-01 09:54:40 +0200177}
178
179/* test whether CBC terminates connection if KEEP-ALIVE is not answered by BSC */
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200180private function f_bsc_TC_rx_keepalive_timeout() runs on BSC_ConnHdlr {
Harald Welte08332302019-08-01 09:54:40 +0200181 var CBSP_PDU rx;
182 var CBSP_IE ie;
183 var integer ka_rep_per_s;
184
Harald Welte08332302019-08-01 09:54:40 +0200185 rx := f_cbsp_exp(tr_CBSP_KEEP_ALIVE(?));
186 f_cbsp_find_ie(rx, CBSP_IEI_KEEP_ALIVE_REP_PERIOD, ie);
187
188 /* sleep for longer than the keep-alive period */
189 ka_rep_per_s := f_cbsp_period2s(ie.body.keep_alive_rep_period);
190 f_sleep(int2float(ka_rep_per_s + 5));
191
192 /* expect the CBSP connection to be closed */
193 CBSP[0].receive(PortEvent:{connClosed:=?})
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200194}
195testcase TC_rx_keepalive_timeout() runs on test_CT {
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200196 f_init(num_bsc := 1);
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200197 g_pars_BSC[0].start_fn := refers(f_bsc_TC_rx_keepalive_timeout);
198 f_start();
Pau Espin Pedrol9d8b6bf2022-06-23 12:19:47 +0200199 f_shutdown_helper();
Harald Welte08332302019-08-01 09:54:40 +0200200}
201
Harald Welte08332302019-08-01 09:54:40 +0200202private const BSSMAP_FIELD_CellIdentificationList cil_BSS := {
203 cIl_allInBSS := ''O
204};
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200205private function f_bsc_TC_write_replace() runs on BSC_ConnHdlr {
206 f_cbsp_handle_write(g_pars.exp_cbs_msg);
207 f_sleep(100.0);
208}
Harald Welte08332302019-08-01 09:54:40 +0200209testcase TC_write_replace() runs on test_CT {
Harald Welte08332302019-08-01 09:54:40 +0200210 var CBS_Message msg := {
211 msg_id := 42,
212 ser_nr := 16752,
213 old_ser_nr := omit,
214 cell_list := cil_BSS,
215 channel_ind := 0,
216 category := CBSP_CATEG_NORMAL,
217 rep_period := 5,
218 num_bcast_req := 3,
219 dcs := 1,
220 content := {
221 { '00'O, 1 }
222 }
223 };
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200224
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200225 f_init(num_bsc := 1);
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200226 g_pars_BSC[0].exp_cbs_msg := msg;
227 g_pars_BSC[0].start_fn := refers(f_bsc_TC_write_replace);
228 f_start();
Pau Espin Pedrol9d8b6bf2022-06-23 12:19:47 +0200229 f_shutdown_helper();
Harald Welte08332302019-08-01 09:54:40 +0200230}
231
232testcase TC_selftest() runs on test_CT {
233 const octetstring c_load_q := '0700000d0400080000f110012345671200'O;
234 const octetstring c_load_q_compl := '0800000f0a000a0000f1100123456700001200'O;
235 const octetstring c_reset := '1000000b0400080000f11001234567'O;
236 const octetstring c_reset_compl := '1100000b0400080000f11001234567'O;
237 const octetstring c_msg_sts_q := '0a0000130e022b0200000400080000f110012345671200'O;
238 const octetstring c_msg_sts_q_fail := '0c0000140e022b0200000900090000f11001234567021200'O;
239 const octetstring c_kill := '040000110e00000200000400080000f11001234567'O;
240 const octetstring c_kill_fail := '060000120e00000200000900090000f1100123456702'O;
241 const octetstring c_write_repl := '010000c70e022b0300300400080000f110012345671200050006000407000613020c400107f4f29c9e769f5de337b90c921d1b8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d100'O;
242 const octetstring c_write_repl_compl := '020000130e022b0300300400080000f110012345671200'O;
243 const octetstring c_write_repl_fail := '030000140e022b0300300900090000f110012345670d1200'O;
244 const octetstring c_msg_s_q := '0a0000130e022b0200900400080000f110012345671200'O;
245 const octetstring c_msg_s_q_compl := '0b0000160e022b02009008000b0000f110012345670008001200'O;
246 const octetstring c_kill_compl := '050000160e022b02008008000b0000f110012345670006001200'O;
247
248 log(dec_CBSP_PDU(c_load_q));
249 log(dec_CBSP_PDU(c_load_q_compl));
250 log(dec_CBSP_PDU(c_reset));
251 log(dec_CBSP_PDU(c_reset_compl));
252 log(dec_CBSP_PDU(c_msg_sts_q));
253 log(dec_CBSP_PDU(c_msg_sts_q_fail));
254 log(dec_CBSP_PDU(c_kill));
255 log(dec_CBSP_PDU(c_kill_fail));
256 log(dec_CBSP_PDU(c_write_repl));
257 log(dec_CBSP_PDU(c_write_repl_compl));
258 log(dec_CBSP_PDU(c_write_repl_fail));
259 log(dec_CBSP_PDU(c_msg_s_q));
260 log(dec_CBSP_PDU(c_msg_s_q_compl));
261 log(dec_CBSP_PDU(c_kill_compl));
262}
263
Harald Welte08332302019-08-01 09:54:40 +0200264testcase TC_selftest_sabp() runs on test_CT {
265 const octetstring c_write := '00000080930000080006000211120007000240c0000f0010000113f0030282ec0613f0030282ec070001400100000d0002012a000900020000000400010100000056029f01b4d90d064297d9ec37e8fe96b3c9a0303bdd68341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d10012'O;
266
267 log(dec_SABP_PDU(c_write));
268 log(enc_SABP_PDU(dec_SABP_PDU(c_write)));
269
270 var template (value) Service_Areas_List sa_list := {
271 ts_SabpSai('62F224'O, '0023'O, '0042'O)
272 };
273 var template (value) SABP_PDU tx;
274
275 tx := ts_SABP_Write(int2bit(1, 16), int2bit(1, 16), sa_list, 23, 42, '00000000'B, '01011010'B);
276 log("Write: ", enc_SABP_PDU(valueof(tx)))
277
278 var Service_Areas_List sa_list2 := { valueof(ts_SabpSai('62F224'O, '1000'O, '0042'O)) };
279 for (var integer i := 0; i < 2500; i := i+1) {
280 sa_list2 := sa_list2 & {valueof(ts_SabpSai('62F224'O, '2000'O, int2oct(i,2))) };
281 }
282 tx := ts_SABP_Write(int2bit(2, 16), int2bit(2, 16), sa_list2, 23, 42, '00000000'B, '01011010'B);
283 log("Write: ", enc_SABP_PDU(valueof(tx)))
284
285 tx := ts_SABP_Restart(sa_list);
286 log("Restart: ", enc_SABP_PDU(valueof(tx)));
287}
288
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200289private function f_bsc_create_and_delete() runs on BSC_ConnHdlr {
290 var template (omit) BSSMAP_FIELD_CellIdentificationList cell_list_success := omit;
291 if (ispresent(g_pars.cell_list_success)) {
292 cell_list_success := g_pars.cell_list_success;
293 }
294 f_cbsp_handle_write(g_pars.exp_cbs_msg, 0, cell_list_success);
295 f_cbsp_handle_kill(0, g_pars.exp_cbs_msg.msg_id, g_pars.exp_cbs_msg.ser_nr,
296 exp_list:=cell_list_success, tx_list:=cell_list_success,
297 tx_fail_list:=omit, tx_compl_list:=omit,
298 channel_ind:=g_pars.exp_cbs_msg.channel_ind);
299}
Harald Welte08332302019-08-01 09:54:40 +0200300
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200301private function f_mme_create_and_delete() runs on MME_ConnHdlr {
302 f_sbcap_handle_write_replace_warn_req(g_pars.exp_cbs_msg, 0);
Pau Espin Pedrolae2e5152022-07-29 19:16:23 +0200303 if (ispresent(g_pars.write_replace_warning_ind_cause) and
304 ispresent(g_pars.bcast_cell_id_list)) {
305 f_sbcap_tx_write_replace_warn_ind(0, g_pars.exp_cbs_msg,
306 g_pars.write_replace_warning_ind_cause,
307 g_pars.bcast_cell_id_list)
308 }
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200309 f_sbcap_handle_stop_warn_req(0, g_pars.exp_cbs_msg);
310}
311
312function f_create_and_delete(CBS_Message msg)
Harald Welte08332302019-08-01 09:54:40 +0200313runs on test_CT {
314 var EcbeCbcMessage ecbe := f_cbs2ecbe(msg, "TTCN-3");
315 f_ecbe_tx_post_cbs(ecbe);
Harald Welte08332302019-08-01 09:54:40 +0200316 f_ecbe_rx_resp(201);
317
318 f_sleep(2.0);
319
320 f_ecbe_tx_delete_cbs(msg.msg_id);
Harald Welte08332302019-08-01 09:54:40 +0200321 f_ecbe_rx_resp(200);
322}
323
324private template (value) CBS_Message t_CBSmsg(uint16_t msg_id, uint16_t ser_nr) := {
325 msg_id := msg_id,
326 ser_nr := ser_nr,
327 old_ser_nr := omit,
328 cell_list := cil_BSS,
329 channel_ind := 0,
330 category := CBSP_CATEG_NORMAL,
331 rep_period := 5,
332 num_bcast_req := 3,
333 dcs := 1,
334 content := {
335 { '00'O, 1 }
336 }
337};
338
339/* specify a variety of different Cell Identifier formats to extend test coverage */
340testcase TC_ecbe_create_delete_cgi() runs on test_CT {
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200341 f_init(num_bsc := 1);
Harald Welte08332302019-08-01 09:54:40 +0200342 var template (value) BSSMAP_FIELD_CellIdentificationList cell_list_success;
343 var template (value) CBS_Message msg := t_CBSmsg(43, 16752);
344
345 cell_list_success := ts_BSSMAP_CIL_CGI({
346 ts_BSSMAP_CI_CGI('901'H, '70'H, 23, 42),
347 ts_BSSMAP_CI_CGI('901'H, '70'H, 24, 42),
348 ts_BSSMAP_CI_CGI('901'H, '70'H, 24, 43)
349 });
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200350 g_pars_BSC[0].start_fn := refers(f_bsc_create_and_delete);
351 g_pars_BSC[0].exp_cbs_msg := valueof(msg);
352 g_pars_BSC[0].cell_list_success := valueof(cell_list_success);
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200353 f_start();
354 f_create_and_delete(valueof(msg));
Pau Espin Pedrol9d8b6bf2022-06-23 12:19:47 +0200355 f_shutdown_helper();
Harald Welte08332302019-08-01 09:54:40 +0200356}
357testcase TC_ecbe_create_delete_lac_ci() runs on test_CT {
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200358 f_init(num_bsc := 1);
Harald Welte08332302019-08-01 09:54:40 +0200359 var template (value) BSSMAP_FIELD_CellIdentificationList cell_list_success;
360 var template (value) CBS_Message msg := t_CBSmsg(44, 16752);
361 cell_list_success := ts_BSSMAP_CIL_LAC_CI({
362 ts_BSSMAP_CI_LAC_CI(10001, 50001),
363 ts_BSSMAP_CI_LAC_CI(10002, 50002),
364 ts_BSSMAP_CI_LAC_CI(10003, 50003)
365 });
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200366 g_pars_BSC[0].start_fn := refers(f_bsc_create_and_delete);
367 g_pars_BSC[0].exp_cbs_msg := valueof(msg);
368 g_pars_BSC[0].cell_list_success := valueof(cell_list_success);
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200369 f_start();
370 f_create_and_delete(valueof(msg));
Pau Espin Pedrol9d8b6bf2022-06-23 12:19:47 +0200371 f_shutdown_helper();
Harald Welte08332302019-08-01 09:54:40 +0200372}
373testcase TC_ecbe_create_delete_lac() runs on test_CT {
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200374 f_init(num_bsc := 1);
Harald Welte08332302019-08-01 09:54:40 +0200375 var template (value) BSSMAP_FIELD_CellIdentificationList cell_list_success;
376 var template (value) CBS_Message msg := t_CBSmsg(45, 16752);
377 cell_list_success := ts_BSSMAP_CIL_LAC({
378 ts_BSSMAP_CI_LAC(10001),
379 ts_BSSMAP_CI_LAC(10002),
380 ts_BSSMAP_CI_LAC(10003)
381 });
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200382 g_pars_BSC[0].start_fn := refers(f_bsc_create_and_delete);
383 g_pars_BSC[0].exp_cbs_msg := valueof(msg);
384 g_pars_BSC[0].cell_list_success := valueof(cell_list_success);
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200385 f_start();
386 f_create_and_delete(valueof(msg));
Pau Espin Pedrol9d8b6bf2022-06-23 12:19:47 +0200387 f_shutdown_helper();
Harald Welte08332302019-08-01 09:54:40 +0200388}
389testcase TC_ecbe_create_delete_ci() runs on test_CT {
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200390 f_init(num_bsc := 1);
Harald Welte08332302019-08-01 09:54:40 +0200391 var template (value) BSSMAP_FIELD_CellIdentificationList cell_list_success;
392 var template (value) CBS_Message msg := t_CBSmsg(46, 16752);
393 cell_list_success := ts_BSSMAP_CIL_CI({
394 ts_BSSMAP_CI_CI(50001),
395 ts_BSSMAP_CI_CI(50002),
396 ts_BSSMAP_CI_CI(50003)
397 });
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200398 g_pars_BSC[0].start_fn := refers(f_bsc_create_and_delete);
399 g_pars_BSC[0].exp_cbs_msg := valueof(msg);
400 g_pars_BSC[0].cell_list_success := valueof(cell_list_success);
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200401 f_start();
402 f_create_and_delete(valueof(msg));
Pau Espin Pedrol9d8b6bf2022-06-23 12:19:47 +0200403 f_shutdown_helper();
Harald Welte08332302019-08-01 09:54:40 +0200404}
405testcase TC_ecbe_create_delete_lai() runs on test_CT {
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200406 f_init(num_bsc := 1);
Harald Welte08332302019-08-01 09:54:40 +0200407 var template (value) BSSMAP_FIELD_CellIdentificationList cell_list_success;
408 var template (value) CBS_Message msg := t_CBSmsg(47, 16752);
409 cell_list_success := ts_BSSMAP_CIL_LAI({
410 ts_BSSMAP_CI_LAI('901'H, '70'H, 25),
411 ts_BSSMAP_CI_LAI('901'H, '70'H, 26),
412 ts_BSSMAP_CI_LAI('901'H, '70'H, 27)
413 });
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200414 g_pars_BSC[0].start_fn := refers(f_bsc_create_and_delete);
415 g_pars_BSC[0].exp_cbs_msg := valueof(msg);
416 g_pars_BSC[0].cell_list_success := valueof(cell_list_success);
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200417 f_start();
418 f_create_and_delete(valueof(msg));
419 f_shutdown_helper();
420}
421
Pau Espin Pedrolae2e5152022-07-29 19:16:23 +0200422/* Create and delete message with MME available. MME reports
423 * Write-Replace-Warning-Indication and Stop-Warning-Indication to CBC
424 */
425testcase TC_ecbe_create_delete_mme_indication() runs on test_CT {
426 var template (value) CellId_Broadcast_List bcast_cell_id_li;
427 var template (value) CBS_Message msg := t_CBSmsg(48, 16752);
428
429 f_init(num_bsc := 0, num_mme := 1);
430
431 bcast_cell_id_li := {
432 ts_SBCAP_CellId_Broadcast_List_Item(ts_SBCAP_ECGI(f_enc_mcc_mnc('901'H, '70'H), 1234)),
433 ts_SBCAP_CellId_Broadcast_List_Item(ts_SBCAP_ECGI(f_enc_mcc_mnc('901'H, '70'H), 5678))
434 };
435 g_pars_MME[0].start_fn := refers(f_mme_create_and_delete);
436 g_pars_MME[0].exp_cbs_msg := valueof(msg);
437 g_pars_MME[0].write_replace_warning_ind_cause := SBC_AP_Cause_message_accepted;
438 g_pars_MME[0].bcast_cell_id_list := valueof(bcast_cell_id_li);
439 f_start();
440 f_create_and_delete(valueof(msg));
441 f_shutdown_helper();
442}
443
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200444/* Create and delete message with both BSC and MME available */
445testcase TC_ecbe_create_delete_bsc_and_mme() runs on test_CT {
446 f_init(num_bsc := 1, num_mme := 1);
447 var template (value) BSSMAP_FIELD_CellIdentificationList cell_list_success;
Pau Espin Pedrolae2e5152022-07-29 19:16:23 +0200448 var template (value) CellId_Broadcast_List bcast_cell_id_li;
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200449 var template (value) CBS_Message msg := t_CBSmsg(43, 16752);
450
451 cell_list_success := ts_BSSMAP_CIL_CGI({
452 ts_BSSMAP_CI_CGI('901'H, '70'H, 23, 42),
453 ts_BSSMAP_CI_CGI('901'H, '70'H, 24, 42),
454 ts_BSSMAP_CI_CGI('901'H, '70'H, 24, 43)
455 });
456 g_pars_BSC[0].start_fn := refers(f_bsc_create_and_delete);
457 g_pars_BSC[0].exp_cbs_msg := valueof(msg);
458 g_pars_BSC[0].cell_list_success := valueof(cell_list_success);
Pau Espin Pedrolae2e5152022-07-29 19:16:23 +0200459
460 bcast_cell_id_li := {
461 ts_SBCAP_CellId_Broadcast_List_Item(ts_SBCAP_ECGI(f_enc_mcc_mnc('901'H, '70'H), 1234))
462 };
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200463 g_pars_MME[0].start_fn := refers(f_mme_create_and_delete);
464 g_pars_MME[0].exp_cbs_msg := valueof(msg);
Pau Espin Pedrolae2e5152022-07-29 19:16:23 +0200465 g_pars_MME[0].write_replace_warning_ind_cause := SBC_AP_Cause_message_accepted;
466 g_pars_MME[0].bcast_cell_id_list := valueof(bcast_cell_id_li);
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200467 f_start();
468 f_create_and_delete(valueof(msg));
Pau Espin Pedrol9d8b6bf2022-06-23 12:19:47 +0200469 f_shutdown_helper();
Harald Welte08332302019-08-01 09:54:40 +0200470}
471
472control {
473 execute( TC_rx_keepalive() );
474 execute( TC_rx_keepalive_timeout() );
475 execute( TC_ecbe_create_delete_cgi() );
476 execute( TC_ecbe_create_delete_lac_ci() );
477 execute( TC_ecbe_create_delete_lac() );
478 execute( TC_ecbe_create_delete_ci() );
479 execute( TC_ecbe_create_delete_lai() );
Pau Espin Pedrolae2e5152022-07-29 19:16:23 +0200480 execute( TC_ecbe_create_delete_mme_indication() );
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200481 execute( TC_ecbe_create_delete_bsc_and_mme() );
Harald Welte08332302019-08-01 09:54:40 +0200482}
483
484}