blob: 9c9c644ad2a72c5f2241cd528de98fbdec52a40a [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;
41 integer mp_local_cbsp_port := 9999;
Pau Espin Pedrol7c13cb72022-06-16 19:03:44 +020042 integer mp_local_sbcap_port := 9998;
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),
118 exp_cbs_msg := omit
119 };
120 return pars;
121}
122
123private function f_init_mme(integer idx, charstring id) runs on test_CT return MME_ConnHdlr {
124 var MME_ConnHdlr vc_conn;
125 id := id & "-MME" & int2str(idx);
126 vc_conn := MME_ConnHdlr.create(id) alive;
127 g_pars_MME[idx] := f_init_pars_mme(mp_local_sbcap_port + idx, mp_cbc_host, mp_cbc_sbcap_port);
128 return vc_conn;
129}
130
131private function f_start_mme(integer idx, charstring id, MME_ConnHdlrPars pars)
132 runs on test_CT {
133 id := id & "-MME" & int2str(idx);
134 g_vc_conn_MME[idx] := f_init_mme(idx, id);
135 g_vc_conn_MME[idx].start(f_MME_ConnHdlr_main(id, pars));
136}
137
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200138private function f_init(integer num_bsc := 0, integer num_mme := 0) runs on test_CT {
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200139 f_http_init(mp_cbc_host, mp_cbc_ecbe_port);
140
141 g_num_bsc := num_bsc;
142 for (var integer i := 0; i < g_num_bsc; i := i + 1) {
143 g_vc_conn_BSC[i] := f_init_bsc(i, testcasename());
144 }
145
146 g_num_mme := num_mme;
147 for (var integer i := 0; i < g_num_mme; i := i + 1) {
148 g_vc_conn_MME[i] := f_init_mme(i, testcasename());
Harald Welte08332302019-08-01 09:54:40 +0200149 }
150}
151
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200152function f_start() runs on test_CT {
Pau Espin Pedrol3dfa8072022-07-29 16:29:43 +0200153 for (var integer i := 0; i < g_num_bsc; i := i + 1) {
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200154 f_start_bsc(i, testcasename(), g_pars_BSC[i]);
155 }
156 for (var integer i := 0; i < g_num_mme; i := i + 1) {
157 f_start_mme(i, testcasename(), g_pars_MME[i]);
158 }
159 f_sleep(2.0); /* wait all conns connected */
160}
161
Harald Welte08332302019-08-01 09:54:40 +0200162/* test whether or not we receive a valid KEEP-ALIVE from the CBC */
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200163private function f_bsc_TC_rx_keepalive() runs on BSC_ConnHdlr {
Harald Welte08332302019-08-01 09:54:40 +0200164 var CBSP_PDU rx;
165 var CBSP_IE ie;
Harald Welte08332302019-08-01 09:54:40 +0200166 rx := f_cbsp_exp(tr_CBSP_KEEP_ALIVE(?));
167 f_cbsp_find_ie(rx, CBSP_IEI_KEEP_ALIVE_REP_PERIOD, ie);
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200168}
169testcase TC_rx_keepalive() runs on test_CT {
Harald Welte08332302019-08-01 09:54:40 +0200170
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200171 f_init(num_bsc := 1);
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200172 g_pars_BSC[0].start_fn := refers(f_bsc_TC_rx_keepalive);
173 f_start();
Pau Espin Pedrol9d8b6bf2022-06-23 12:19:47 +0200174 f_shutdown_helper();
Harald Welte08332302019-08-01 09:54:40 +0200175}
176
177/* test whether CBC terminates connection if KEEP-ALIVE is not answered by BSC */
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200178private function f_bsc_TC_rx_keepalive_timeout() runs on BSC_ConnHdlr {
Harald Welte08332302019-08-01 09:54:40 +0200179 var CBSP_PDU rx;
180 var CBSP_IE ie;
181 var integer ka_rep_per_s;
182
Harald Welte08332302019-08-01 09:54:40 +0200183 rx := f_cbsp_exp(tr_CBSP_KEEP_ALIVE(?));
184 f_cbsp_find_ie(rx, CBSP_IEI_KEEP_ALIVE_REP_PERIOD, ie);
185
186 /* sleep for longer than the keep-alive period */
187 ka_rep_per_s := f_cbsp_period2s(ie.body.keep_alive_rep_period);
188 f_sleep(int2float(ka_rep_per_s + 5));
189
190 /* expect the CBSP connection to be closed */
191 CBSP[0].receive(PortEvent:{connClosed:=?})
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200192}
193testcase TC_rx_keepalive_timeout() runs on test_CT {
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200194 f_init(num_bsc := 1);
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200195 g_pars_BSC[0].start_fn := refers(f_bsc_TC_rx_keepalive_timeout);
196 f_start();
Pau Espin Pedrol9d8b6bf2022-06-23 12:19:47 +0200197 f_shutdown_helper();
Harald Welte08332302019-08-01 09:54:40 +0200198}
199
Harald Welte08332302019-08-01 09:54:40 +0200200private const BSSMAP_FIELD_CellIdentificationList cil_BSS := {
201 cIl_allInBSS := ''O
202};
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200203private function f_bsc_TC_write_replace() runs on BSC_ConnHdlr {
204 f_cbsp_handle_write(g_pars.exp_cbs_msg);
205 f_sleep(100.0);
206}
Harald Welte08332302019-08-01 09:54:40 +0200207testcase TC_write_replace() runs on test_CT {
Harald Welte08332302019-08-01 09:54:40 +0200208 var CBS_Message msg := {
209 msg_id := 42,
210 ser_nr := 16752,
211 old_ser_nr := omit,
212 cell_list := cil_BSS,
213 channel_ind := 0,
214 category := CBSP_CATEG_NORMAL,
215 rep_period := 5,
216 num_bcast_req := 3,
217 dcs := 1,
218 content := {
219 { '00'O, 1 }
220 }
221 };
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200222
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200223 f_init(num_bsc := 1);
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200224 g_pars_BSC[0].exp_cbs_msg := msg;
225 g_pars_BSC[0].start_fn := refers(f_bsc_TC_write_replace);
226 f_start();
Pau Espin Pedrol9d8b6bf2022-06-23 12:19:47 +0200227 f_shutdown_helper();
Harald Welte08332302019-08-01 09:54:40 +0200228}
229
230testcase TC_selftest() runs on test_CT {
231 const octetstring c_load_q := '0700000d0400080000f110012345671200'O;
232 const octetstring c_load_q_compl := '0800000f0a000a0000f1100123456700001200'O;
233 const octetstring c_reset := '1000000b0400080000f11001234567'O;
234 const octetstring c_reset_compl := '1100000b0400080000f11001234567'O;
235 const octetstring c_msg_sts_q := '0a0000130e022b0200000400080000f110012345671200'O;
236 const octetstring c_msg_sts_q_fail := '0c0000140e022b0200000900090000f11001234567021200'O;
237 const octetstring c_kill := '040000110e00000200000400080000f11001234567'O;
238 const octetstring c_kill_fail := '060000120e00000200000900090000f1100123456702'O;
239 const octetstring c_write_repl := '010000c70e022b0300300400080000f110012345671200050006000407000613020c400107f4f29c9e769f5de337b90c921d1b8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d100'O;
240 const octetstring c_write_repl_compl := '020000130e022b0300300400080000f110012345671200'O;
241 const octetstring c_write_repl_fail := '030000140e022b0300300900090000f110012345670d1200'O;
242 const octetstring c_msg_s_q := '0a0000130e022b0200900400080000f110012345671200'O;
243 const octetstring c_msg_s_q_compl := '0b0000160e022b02009008000b0000f110012345670008001200'O;
244 const octetstring c_kill_compl := '050000160e022b02008008000b0000f110012345670006001200'O;
245
246 log(dec_CBSP_PDU(c_load_q));
247 log(dec_CBSP_PDU(c_load_q_compl));
248 log(dec_CBSP_PDU(c_reset));
249 log(dec_CBSP_PDU(c_reset_compl));
250 log(dec_CBSP_PDU(c_msg_sts_q));
251 log(dec_CBSP_PDU(c_msg_sts_q_fail));
252 log(dec_CBSP_PDU(c_kill));
253 log(dec_CBSP_PDU(c_kill_fail));
254 log(dec_CBSP_PDU(c_write_repl));
255 log(dec_CBSP_PDU(c_write_repl_compl));
256 log(dec_CBSP_PDU(c_write_repl_fail));
257 log(dec_CBSP_PDU(c_msg_s_q));
258 log(dec_CBSP_PDU(c_msg_s_q_compl));
259 log(dec_CBSP_PDU(c_kill_compl));
260}
261
Harald Welte08332302019-08-01 09:54:40 +0200262testcase TC_selftest_sabp() runs on test_CT {
263 const octetstring c_write := '00000080930000080006000211120007000240c0000f0010000113f0030282ec0613f0030282ec070001400100000d0002012a000900020000000400010100000056029f01b4d90d064297d9ec37e8fe96b3c9a0303bdd68341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d168341a8d46a3d10012'O;
264
265 log(dec_SABP_PDU(c_write));
266 log(enc_SABP_PDU(dec_SABP_PDU(c_write)));
267
268 var template (value) Service_Areas_List sa_list := {
269 ts_SabpSai('62F224'O, '0023'O, '0042'O)
270 };
271 var template (value) SABP_PDU tx;
272
273 tx := ts_SABP_Write(int2bit(1, 16), int2bit(1, 16), sa_list, 23, 42, '00000000'B, '01011010'B);
274 log("Write: ", enc_SABP_PDU(valueof(tx)))
275
276 var Service_Areas_List sa_list2 := { valueof(ts_SabpSai('62F224'O, '1000'O, '0042'O)) };
277 for (var integer i := 0; i < 2500; i := i+1) {
278 sa_list2 := sa_list2 & {valueof(ts_SabpSai('62F224'O, '2000'O, int2oct(i,2))) };
279 }
280 tx := ts_SABP_Write(int2bit(2, 16), int2bit(2, 16), sa_list2, 23, 42, '00000000'B, '01011010'B);
281 log("Write: ", enc_SABP_PDU(valueof(tx)))
282
283 tx := ts_SABP_Restart(sa_list);
284 log("Restart: ", enc_SABP_PDU(valueof(tx)));
285}
286
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200287private function f_bsc_create_and_delete() runs on BSC_ConnHdlr {
288 var template (omit) BSSMAP_FIELD_CellIdentificationList cell_list_success := omit;
289 if (ispresent(g_pars.cell_list_success)) {
290 cell_list_success := g_pars.cell_list_success;
291 }
292 f_cbsp_handle_write(g_pars.exp_cbs_msg, 0, cell_list_success);
293 f_cbsp_handle_kill(0, g_pars.exp_cbs_msg.msg_id, g_pars.exp_cbs_msg.ser_nr,
294 exp_list:=cell_list_success, tx_list:=cell_list_success,
295 tx_fail_list:=omit, tx_compl_list:=omit,
296 channel_ind:=g_pars.exp_cbs_msg.channel_ind);
297}
Harald Welte08332302019-08-01 09:54:40 +0200298
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200299private function f_mme_create_and_delete() runs on MME_ConnHdlr {
300 f_sbcap_handle_write_replace_warn_req(g_pars.exp_cbs_msg, 0);
301 f_sbcap_handle_stop_warn_req(0, g_pars.exp_cbs_msg);
302}
303
304function f_create_and_delete(CBS_Message msg)
Harald Welte08332302019-08-01 09:54:40 +0200305runs on test_CT {
306 var EcbeCbcMessage ecbe := f_cbs2ecbe(msg, "TTCN-3");
307 f_ecbe_tx_post_cbs(ecbe);
Harald Welte08332302019-08-01 09:54:40 +0200308 f_ecbe_rx_resp(201);
309
310 f_sleep(2.0);
311
312 f_ecbe_tx_delete_cbs(msg.msg_id);
Harald Welte08332302019-08-01 09:54:40 +0200313 f_ecbe_rx_resp(200);
314}
315
316private template (value) CBS_Message t_CBSmsg(uint16_t msg_id, uint16_t ser_nr) := {
317 msg_id := msg_id,
318 ser_nr := ser_nr,
319 old_ser_nr := omit,
320 cell_list := cil_BSS,
321 channel_ind := 0,
322 category := CBSP_CATEG_NORMAL,
323 rep_period := 5,
324 num_bcast_req := 3,
325 dcs := 1,
326 content := {
327 { '00'O, 1 }
328 }
329};
330
331/* specify a variety of different Cell Identifier formats to extend test coverage */
332testcase TC_ecbe_create_delete_cgi() runs on test_CT {
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200333 f_init(num_bsc := 1);
Harald Welte08332302019-08-01 09:54:40 +0200334 var template (value) BSSMAP_FIELD_CellIdentificationList cell_list_success;
335 var template (value) CBS_Message msg := t_CBSmsg(43, 16752);
336
337 cell_list_success := ts_BSSMAP_CIL_CGI({
338 ts_BSSMAP_CI_CGI('901'H, '70'H, 23, 42),
339 ts_BSSMAP_CI_CGI('901'H, '70'H, 24, 42),
340 ts_BSSMAP_CI_CGI('901'H, '70'H, 24, 43)
341 });
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200342 g_pars_BSC[0].start_fn := refers(f_bsc_create_and_delete);
343 g_pars_BSC[0].exp_cbs_msg := valueof(msg);
344 g_pars_BSC[0].cell_list_success := valueof(cell_list_success);
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200345 f_start();
346 f_create_and_delete(valueof(msg));
Pau Espin Pedrol9d8b6bf2022-06-23 12:19:47 +0200347 f_shutdown_helper();
Harald Welte08332302019-08-01 09:54:40 +0200348}
349testcase TC_ecbe_create_delete_lac_ci() runs on test_CT {
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200350 f_init(num_bsc := 1);
Harald Welte08332302019-08-01 09:54:40 +0200351 var template (value) BSSMAP_FIELD_CellIdentificationList cell_list_success;
352 var template (value) CBS_Message msg := t_CBSmsg(44, 16752);
353 cell_list_success := ts_BSSMAP_CIL_LAC_CI({
354 ts_BSSMAP_CI_LAC_CI(10001, 50001),
355 ts_BSSMAP_CI_LAC_CI(10002, 50002),
356 ts_BSSMAP_CI_LAC_CI(10003, 50003)
357 });
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200358 g_pars_BSC[0].start_fn := refers(f_bsc_create_and_delete);
359 g_pars_BSC[0].exp_cbs_msg := valueof(msg);
360 g_pars_BSC[0].cell_list_success := valueof(cell_list_success);
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200361 f_start();
362 f_create_and_delete(valueof(msg));
Pau Espin Pedrol9d8b6bf2022-06-23 12:19:47 +0200363 f_shutdown_helper();
Harald Welte08332302019-08-01 09:54:40 +0200364}
365testcase TC_ecbe_create_delete_lac() runs on test_CT {
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200366 f_init(num_bsc := 1);
Harald Welte08332302019-08-01 09:54:40 +0200367 var template (value) BSSMAP_FIELD_CellIdentificationList cell_list_success;
368 var template (value) CBS_Message msg := t_CBSmsg(45, 16752);
369 cell_list_success := ts_BSSMAP_CIL_LAC({
370 ts_BSSMAP_CI_LAC(10001),
371 ts_BSSMAP_CI_LAC(10002),
372 ts_BSSMAP_CI_LAC(10003)
373 });
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200374 g_pars_BSC[0].start_fn := refers(f_bsc_create_and_delete);
375 g_pars_BSC[0].exp_cbs_msg := valueof(msg);
376 g_pars_BSC[0].cell_list_success := valueof(cell_list_success);
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200377 f_start();
378 f_create_and_delete(valueof(msg));
Pau Espin Pedrol9d8b6bf2022-06-23 12:19:47 +0200379 f_shutdown_helper();
Harald Welte08332302019-08-01 09:54:40 +0200380}
381testcase TC_ecbe_create_delete_ci() runs on test_CT {
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200382 f_init(num_bsc := 1);
Harald Welte08332302019-08-01 09:54:40 +0200383 var template (value) BSSMAP_FIELD_CellIdentificationList cell_list_success;
384 var template (value) CBS_Message msg := t_CBSmsg(46, 16752);
385 cell_list_success := ts_BSSMAP_CIL_CI({
386 ts_BSSMAP_CI_CI(50001),
387 ts_BSSMAP_CI_CI(50002),
388 ts_BSSMAP_CI_CI(50003)
389 });
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200390 g_pars_BSC[0].start_fn := refers(f_bsc_create_and_delete);
391 g_pars_BSC[0].exp_cbs_msg := valueof(msg);
392 g_pars_BSC[0].cell_list_success := valueof(cell_list_success);
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200393 f_start();
394 f_create_and_delete(valueof(msg));
Pau Espin Pedrol9d8b6bf2022-06-23 12:19:47 +0200395 f_shutdown_helper();
Harald Welte08332302019-08-01 09:54:40 +0200396}
397testcase TC_ecbe_create_delete_lai() runs on test_CT {
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200398 f_init(num_bsc := 1);
Harald Welte08332302019-08-01 09:54:40 +0200399 var template (value) BSSMAP_FIELD_CellIdentificationList cell_list_success;
400 var template (value) CBS_Message msg := t_CBSmsg(47, 16752);
401 cell_list_success := ts_BSSMAP_CIL_LAI({
402 ts_BSSMAP_CI_LAI('901'H, '70'H, 25),
403 ts_BSSMAP_CI_LAI('901'H, '70'H, 26),
404 ts_BSSMAP_CI_LAI('901'H, '70'H, 27)
405 });
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200406 g_pars_BSC[0].start_fn := refers(f_bsc_create_and_delete);
407 g_pars_BSC[0].exp_cbs_msg := valueof(msg);
408 g_pars_BSC[0].cell_list_success := valueof(cell_list_success);
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200409 f_start();
410 f_create_and_delete(valueof(msg));
411 f_shutdown_helper();
412}
413
414/* Create and delete message with both BSC and MME available */
415testcase TC_ecbe_create_delete_bsc_and_mme() runs on test_CT {
416 f_init(num_bsc := 1, num_mme := 1);
417 var template (value) BSSMAP_FIELD_CellIdentificationList cell_list_success;
418 var template (value) CBS_Message msg := t_CBSmsg(43, 16752);
419
420 cell_list_success := ts_BSSMAP_CIL_CGI({
421 ts_BSSMAP_CI_CGI('901'H, '70'H, 23, 42),
422 ts_BSSMAP_CI_CGI('901'H, '70'H, 24, 42),
423 ts_BSSMAP_CI_CGI('901'H, '70'H, 24, 43)
424 });
425 g_pars_BSC[0].start_fn := refers(f_bsc_create_and_delete);
426 g_pars_BSC[0].exp_cbs_msg := valueof(msg);
427 g_pars_BSC[0].cell_list_success := valueof(cell_list_success);
Pau Espin Pedrol4ff118a2022-07-28 17:37:47 +0200428 g_pars_MME[0].start_fn := refers(f_mme_create_and_delete);
429 g_pars_MME[0].exp_cbs_msg := valueof(msg);
430 f_start();
431 f_create_and_delete(valueof(msg));
Pau Espin Pedrol9d8b6bf2022-06-23 12:19:47 +0200432 f_shutdown_helper();
Harald Welte08332302019-08-01 09:54:40 +0200433}
434
435control {
436 execute( TC_rx_keepalive() );
437 execute( TC_rx_keepalive_timeout() );
438 execute( TC_ecbe_create_delete_cgi() );
439 execute( TC_ecbe_create_delete_lac_ci() );
440 execute( TC_ecbe_create_delete_lac() );
441 execute( TC_ecbe_create_delete_ci() );
442 execute( TC_ecbe_create_delete_lai() );
Pau Espin Pedrol19763462022-07-29 10:47:33 +0200443 execute( TC_ecbe_create_delete_bsc_and_mme() );
Harald Welte08332302019-08-01 09:54:40 +0200444}
445
446}