BSC_Tests: Add new TC_chan_rel_a_reset
This test case tests for proper release of RF channels after the MSC
issues a BSSMAP RESET.
diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 09ba0a9..c366fe4 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -481,6 +481,55 @@
setverdict(pass);
}
+/* Test behavior of channel release after BSSMAP RESET from MSC */
+testcase TC_chan_rel_a_reset() runs on test_CT {
+ var RSL_Message rx_rsl;
+ var DchanTuple dt;
+ var RslLinkId main_dcch := valueof(ts_RslLinkID_DCCH(0));
+
+ f_init();
+ f_bssap_reset();
+
+ dt := f_est_dchan('23'O, 23, '00010203040506'O);
+
+ /* Clear the queue, it might still contain stuff like IMMEDIATE ASSIGN */
+ IPA_RSL[0].clear;
+
+ /* perform BSSAP RESET, expect RESET ACK and DISC.ind on connection */
+ BSSAP.send(ts_BSSAP_UNITDATA_req(g_sccp_addr_peer, g_sccp_addr_own, ts_BSSMAP_Reset(0)));
+ interleave {
+ [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(g_sccp_addr_own, g_sccp_addr_peer, tr_BSSMAP_ResetAck)) { }
+ [] BSSAP.receive(tr_BSSAP_DISC_ind(dt.sccp_conn_id, ?, ?)) { }
+ }
+
+ alt {
+ /* ignore DEACTIVATE SACCH (if any) */
+ [] IPA_RSL[0].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0,
+ tr_RSL_DEACT_SACCH(dt.rsl_chan_nr))) {
+ repeat;
+ }
+ /* acknowledge RLL release (if any)*/
+ [] IPA_RSL[0].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0,
+ tr_RSL_REL_REQ(dt.rsl_chan_nr, ?))) {
+ /* FIXME: Why are we getting this for LinkID SACCH? */
+ f_ipa_tx(0, ts_RSL_REL_CONF(dt.rsl_chan_nr, main_dcch));
+ repeat;
+ }
+ /* Expect RF channel release from BSC on Abis */
+ [] IPA_RSL[0].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0,
+ tr_RSL_MsgTypeD(RSL_MT_RF_CHAN_REL))) {
+ /* respond with CHAN REL ACK */
+ f_ipa_tx(0, ts_RSL_RF_CHAN_REL_ACK(dt.rsl_chan_nr));
+ }
+ /* ignore any user data */
+ [] IPA_RSL[0].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0, tr_RSL_MsgTypeR(?))) {
+ repeat;
+ }
+ }
+
+ setverdict(pass);
+}
+
testcase TC_ctrl_msc_connection_status() runs on test_CT {
var charstring ctrl_resp;
@@ -542,6 +591,7 @@
execute( TC_chan_rel_conn_fail() );
execute( TC_chan_rel_hard_clear() );
execute( TC_chan_rel_hard_rlsd() );
+ execute( TC_chan_rel_a_reset() );
}
}