cbc: test concurrent CBS message

Test having more than one active CBS message being broadcasted to an
MME.

Related: OS#4945
Change-Id: Ie9208c33f3b2586e19b446318b6ae9da07a76506
diff --git a/cbc/CBC_Tests.ttcn b/cbc/CBC_Tests.ttcn
index 9beaddf..fdf3b0f 100644
--- a/cbc/CBC_Tests.ttcn
+++ b/cbc/CBC_Tests.ttcn
@@ -596,6 +596,63 @@
 	f_shutdown_helper();
 }
 
+/* Create 2 concurrent messages against an MME, then delete them */
+private function f_mme_TC_concurrent_cbs_msg_mme() runs on MME_ConnHdlr {
+	var CBS_Message msg[2];
+	msg[0] := g_pars.exp_cbs_msg;
+	msg[1] := msg[0];
+	msg[1].msg_id := msg[0].msg_id + 1;
+
+	for (var integer i := 0; i < lengthof(msg); i := i + 1) {
+		f_sbcap_handle_write_replace_warn_req(msg[i], 0);
+		if (ispresent(g_pars.write_replace_warning_ind_cause) and
+		    ispresent(g_pars.bcast_cell_id_list)) {
+			f_sbcap_tx_write_replace_warn_ind(0, msg[i],
+							  g_pars.write_replace_warning_ind_cause,
+							  g_pars.bcast_cell_id_list)
+		}
+	}
+	/* Now handle Stop: */
+	for (var integer i := 0; i < lengthof(msg); i := i + 1) {
+		f_sbcap_handle_stop_warn_req(0, msg[i]);
+	}
+}
+testcase TC_concurrent_cbs_msg_mme() runs on test_CT {
+	var template (value) CellId_Broadcast_List bcast_cell_id_li;
+	var CBS_Message msg[2];
+	var EcbeCbcMessage ecbe;
+
+	msg[0] := valueof(t_CBSmsg(49, 16752));
+	msg[1] := msg[0];
+	msg[1].msg_id := msg[0].msg_id + 1;
+
+	f_init(num_bsc := 0, num_mme := 1);
+
+	bcast_cell_id_li := {
+		ts_SBCAP_CellId_Broadcast_List_Item(ts_SBCAP_ECGI(f_enc_mcc_mnc('901'H, '70'H), 1234))
+	};
+	g_pars_MME[0].start_fn := refers(f_mme_TC_concurrent_cbs_msg_mme);
+	g_pars_MME[0].exp_cbs_msg := msg[0];
+	g_pars_MME[0].write_replace_warning_ind_cause := SBC_AP_Cause_message_accepted;
+	g_pars_MME[0].bcast_cell_id_list := valueof(bcast_cell_id_li);
+	f_start();
+
+	for (var integer i := 0; i < lengthof(msg); i := i + 1) {
+		ecbe := f_cbs2ecbe(msg[i], "TTCN-3");
+		f_ecbe_tx_post_cbs(ecbe);
+		f_ecbe_rx_resp(201);
+	}
+
+	f_sleep(2.0);
+
+	for (var integer i := 0; i < lengthof(msg); i := i + 1) {
+		f_ecbe_tx_delete_cbs(msg[i].msg_id);
+		f_ecbe_rx_resp(200);
+	}
+
+	f_shutdown_helper();
+}
+
 control {
 	execute( TC_rx_keepalive() );
 	execute( TC_rx_keepalive_timeout() );
@@ -609,6 +666,7 @@
 	execute( TC_ecbe_create_delete_bsc_and_mme() );
 	execute( TC_ecbe_create_delete_bsc_server() );
 	execute( TC_ecbe_create_delete_mme_server() );
+	execute( TC_concurrent_cbs_msg_mme() );
 }
 
 }