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() );
}
diff --git a/bsc/MSC_ConnectionHandler.ttcn b/bsc/MSC_ConnectionHandler.ttcn
index b7760d0..269fb79 100644
--- a/bsc/MSC_ConnectionHandler.ttcn
+++ b/bsc/MSC_ConnectionHandler.ttcn
@@ -760,6 +760,7 @@
boolean vgcs_talker_fail,
boolean vgcs_talker_est,
boolean vgcs_talker_rel,
+ boolean vgcs_uplink_reject,
boolean vgcs_uplink_seized,
boolean vgcs_uplink_release,
boolean delay_bts,
@@ -858,6 +859,7 @@
vgcs_talker_fail := false,
vgcs_talker_est := false,
vgcs_talker_rel := false,
+ vgcs_uplink_reject := false,
vgcs_uplink_seized := false,
vgcs_uplink_release := false,
delay_bts := false,