bsc: Introduce test TC_paging_resp_unsol

With this test we want to verify that channels are released if BSC fails
to complete an L3 request, for instance because no pending Paging
CMD is found for a received Paging Response.

Related: OS#3680
Change-Id: Iabe8a51aa13d2fcfec4500cf7aab47d60cc138ce
diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 9b445f5..a155fef 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -1466,6 +1466,30 @@
 	f_shutdown_helper();
 }
 
+/* Verify how we handle unsolicited Paging Response, for instance because we
+ * receive a Paging Response after T3113 expired (and subscriber information was
+ * dropped). See OS#3680.
+ */
+testcase TC_paging_resp_unsol() runs on test_CT {
+
+	f_init(1);
+
+	var BSSAP_N_CONNECT_ind rx_c_ind;
+	var DchanTuple dt;
+	var PDU_ML3_MS_NW l3 := valueof(ts_PAG_RESP(valueof(ts_MI_IMSI_LV('001010008880018'H))));
+
+	/* Send CHAN RQD and wait for allocation; acknowledge it */
+	dt.rsl_chan_nr := f_chreq_act_ack();
+
+	/* Send unsolicited Paging response (no matching Paging CMD stored in BSC) */
+	f_ipa_tx(0, ts_RSL_EST_IND(dt.rsl_chan_nr, valueof(ts_RslLinkID_DCCH(0)), enc_PDU_ML3_MS_NW(l3)));
+
+	/* expect BSC to disable the channel */
+	f_expect_chan_rel(0, dt.rsl_chan_nr);
+	setverdict(pass);
+
+}
+
 /* Test RSL link drop causes counter increment */
 testcase TC_rsl_drop_counter() runs on test_CT {
 	var integer rsl_fail;
@@ -3407,6 +3431,7 @@
 	execute( TC_paging_imsi_a_reset() );
 	execute( TC_paging_imsi_load() );
 	execute( TC_paging_counter() );
+	execute( TC_paging_resp_unsol() );
 
 	execute( TC_rsl_drop_counter() );
 	execute( TC_rsl_unknown_unit_id() );