laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/33719 )
Change subject: BSC_Tests_ASCI: Add test to seize or release uplink by MSC ......................................................................
BSC_Tests_ASCI: Add test to seize or release uplink by MSC
The MSC will block (seize) or unblock (release) the uplink on one BSC, if a talker requests or releases uplink on a different BSC. An UPLINK BUSY or UPLINK FREE message es expected to be sent to the BTS.
Change-Id: I7ebf03662e81f59d76ca8d8fa29f581043053564 --- M bsc/BSC_Tests_ASCI.ttcn M bsc/MSC_ConnectionHandler.ttcn 2 files changed, 99 insertions(+), 4 deletions(-)
Approvals: laforge: Looks good to me, approved dexter: Looks good to me, but someone else must approve pespin: Looks good to me, but someone else must approve Jenkins Builder: Verified
diff --git a/bsc/BSC_Tests_ASCI.ttcn b/bsc/BSC_Tests_ASCI.ttcn index bfc66a9..70fcb4d 100644 --- a/bsc/BSC_Tests_ASCI.ttcn +++ b/bsc/BSC_Tests_ASCI.ttcn @@ -95,8 +95,9 @@ var boolean assign_res := false; var boolean assign_fail := false; /* Note: This timer is used to receive messages after the expected event. - * After timeout, the outcome of the test is checked. */ - timer T := 0.2; + * After timeout, the outcome of the test is checked. + * The timeout must be large enough, so all the messages pass before checking the outcome. */ + timer T := 1.0;
/* Wait for the COORD ports to be connected. */ f_sleep(1.0); @@ -155,6 +156,19 @@ if (g_pars.asci_test.vgcs_assign_ok) { T.start; } + if (g_pars.asci_test.vgcs_uplink_seized or + g_pars.asci_test.vgcs_uplink_release) { + log("VGCS: sending Uplink Seized Cmd"); + BSSAP.send(ts_BSSMAP_UplinkSeizedCmd(9, omit, omit, omit)); + } + if (g_pars.asci_test.vgcs_uplink_release) { + log("VGCS: sending Uplink Release Cmd"); + BSSAP.send(ts_BSSMAP_UplinkRelCmd(9)); + } + if (g_pars.asci_test.vgcs_uplink_seized or + g_pars.asci_test.vgcs_uplink_release) { + T.start; + } repeat; } [] COORD.receive(COORD_VGCS_ASSIGN_FAIL) { @@ -249,6 +263,24 @@ setverdict(pass); return; } + if (g_pars.asci_test.vgcs_uplink_seized) { + if (not uplink_busy) { + setverdict(fail, "VGCS: Uplink not busy as expected!"); + return; + } + log("VGCS: Uplink established+released and uplink marked free as expected!"); + setverdict(pass); + return; + } + if (g_pars.asci_test.vgcs_uplink_release) { + if (not uplink_free) { + setverdict(fail, "VGCS: Uplink not free as expected!"); + return; + } + log("VGCS: Uplink established+released and uplink marked free as expected!"); + setverdict(pass); + return; + } }
/* @@ -505,6 +537,50 @@ 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(); + + 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_seized := 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_release() 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_release := 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(); +} + control { execute( TC_vgcs_vbs_setup_only() ); execute( TC_vgcs_vbs_assignment() ); @@ -512,6 +588,8 @@ execute( TC_vgcs_vbs_talker_req() ); execute( TC_vgcs_vbs_talker_est() ); execute( TC_vgcs_vbs_talker_rel() ); + 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 433dab5..f919fa6 100644 --- a/bsc/MSC_ConnectionHandler.ttcn +++ b/bsc/MSC_ConnectionHandler.ttcn @@ -758,7 +758,9 @@ boolean vgcs_assign_fail, boolean vgcs_talker_req, boolean vgcs_talker_est, - boolean vgcs_talker_rel + boolean vgcs_talker_rel, + boolean vgcs_uplink_seized, + boolean vgcs_uplink_release };
type record TestHdlrParams { @@ -851,7 +853,9 @@ vgcs_assign_fail := false, vgcs_talker_req := false, vgcs_talker_est := false, - vgcs_talker_rel := false + vgcs_talker_rel := false, + vgcs_uplink_seized := false, + vgcs_uplink_release := false } }