BSC_Tests: Add new TC_chan_rel_hard_rlsd (MSC sends hard RLSD)
diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 6a33d89..b50728f 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -434,6 +434,46 @@
 	setverdict(pass);
 }
 
+/* Test behavior of channel release after hard RLSD from MSC */
+testcase TC_chan_rel_hard_rlsd() 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);
+
+	/* release the SCCP connection */
+	BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));
+
+	/* Clear the queue, it might still contain stuff like IMMEDIATE ASSIGN */
+	IPA_RSL[0].clear;
+	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));
+		}
+	}
+
+	setverdict(pass);
+}
+
 
 testcase TC_ctrl_msc_connection_status() runs on test_CT {
 	var charstring ctrl_resp;
@@ -494,6 +534,7 @@
 	execute( TC_chan_rel_rll_rel_ind() );
 	execute( TC_chan_rel_conn_fail() );
 	execute( TC_chan_rel_hard_clear() );
+	execute( TC_chan_rel_hard_rlsd() );
 }
 
 }