BSC_Test_ASCI: Add Talker detect with UPLINK REJECT COMMAND test

The talker requests uplink. The UPLINK REQUEST is rejected by the MSC.
The uplink is marked free again.

Change-Id: Iba4dd21a69d49e6a8508b15b823ffccc7f0dafc9
diff --git a/bsc/BSC_Tests_ASCI.ttcn b/bsc/BSC_Tests_ASCI.ttcn
index 78b4902..a97e0db 100644
--- a/bsc/BSC_Tests_ASCI.ttcn
+++ b/bsc/BSC_Tests_ASCI.ttcn
@@ -146,9 +146,15 @@
 			log("VGCS: delay uplink req ack");
 			f_delay_msc();
 		}
-		log("VGCS: sending uplink req ack");
-		BSSAP.send(ts_BSSMAP_UplinkReqAck(omit));
-		if (g_pars.asci_test.vgcs_talker_req) {
+		if (g_pars.asci_test.vgcs_uplink_reject) {
+			log("VGCS: sending uplink rej cmd");
+			BSSAP.send(ts_BSSMAP_UplinkRejCmd(9));
+		} else {
+			log("VGCS: sending uplink req ack");
+			BSSAP.send(ts_BSSMAP_UplinkReqAck(omit));
+		}
+		if (g_pars.asci_test.vgcs_talker_req or
+		    g_pars.asci_test.vgcs_uplink_reject) {
 			T.start;
 		}
 		repeat;
@@ -327,6 +333,15 @@
 		setverdict(pass);
 		return;
 	}
+	if (g_pars.asci_test.vgcs_uplink_reject) {
+		if (not uplink_free) {
+			setverdict(fail, "VGCS: Uplink not free as expected!");
+			return;
+		}
+		log("VGCS: Uplink rejected and uplink marked free as expected!");
+		setverdict(pass);
+		return;
+	}
 }
 
 /*
@@ -402,7 +417,8 @@
 		if (g_pars.asci_test.vgcs_talker_req or
 		    g_pars.asci_test.vgcs_talker_fail or
 		    g_pars.asci_test.vgcs_talker_est or
-		    g_pars.asci_test.vgcs_talker_rel) {
+		    g_pars.asci_test.vgcs_talker_rel or
+		    g_pars.asci_test.vgcs_uplink_reject) {
 			log("VGCS: sending talker det");
 			RSL.send(ts_RSL_TALKER_DET(g_chan_nr));
 		}
@@ -706,6 +722,28 @@
 	f_shutdown_helper();
 }
 
+testcase TC_vgcs_vbs_uplink_reject() runs on test_CT {
+	var MSC_ConnHdlr call_conn, chan_conn;
+	var TestHdlrParams pars := f_gen_test_hdlr_pars();
+
+	f_init(1, true);
+
+	pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
+	pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+
+	pars.asci_test.vgcs_uplink_reject := true;
+
+	call_conn := f_start_handler(refers(f_tc_vgcs_vbs_setup), pars);
+	chan_conn := f_start_handler(refers(f_tc_asci_assignment), pars);
+	/* Connect COORD ports of both functions. The functions will delay before using them. */
+	connect(call_conn:COORD, chan_conn:COORD);
+
+	call_conn.done;
+	chan_conn.done;
+
+	f_shutdown_helper();
+}
+
 testcase TC_vgcs_vbs_uplink_seized() runs on test_CT {
 	var MSC_ConnHdlr call_conn, chan_conn;
 	var TestHdlrParams pars := f_gen_test_hdlr_pars();
@@ -761,6 +799,7 @@
 	execute( TC_vgcs_vbs_talker_est_late_msc() );
 	execute( TC_vgcs_vbs_talker_rel() );
 	execute( TC_vgcs_vbs_talker_rel_late_msc() );
+	execute( TC_vgcs_vbs_uplink_reject() );
 	execute( TC_vgcs_vbs_uplink_seized() );
 	execute( TC_vgcs_vbs_uplink_release() );
 }