BTS_Test_ASCI: Add Listener detection test

The MS sends UPLINK ACCESS. The BTS send RSL Listener DET message.
Another MS send UPLINK ACCESS. The BTS does not send another RSL
Listener DET message.

Change-Id: I544f492a32751d17f998a2143081c3763ba1dd29
Related: OS#4851
diff --git a/bts/BTS_Tests_ASCI.ttcn b/bts/BTS_Tests_ASCI.ttcn
index 315b67f..6814295 100644
--- a/bts/BTS_Tests_ASCI.ttcn
+++ b/bts/BTS_Tests_ASCI.ttcn
@@ -333,11 +333,90 @@
 	Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
 }
 
+private function f_TC_vgcs_listener_det(charstring id) runs on ConnHdlr
+{
+	var octetstring uplink_access := '25'O;
+	var RSL_Message rm;
+	var GsmFrameNumber fn;
+
+	f_l1_tune(L1CTL);
+	RSL.clear;
+
+	/* Activate channel on the BTS side. */
+	log("Activating VGCS channel.");
+	f_rsl_chan_act(g_pars.chan_mode);
+
+	/* Enable dedicated mode. */
+	f_l1ctl_est_dchan(L1CTL, g_pars);
+
+	/* Send UPLINK ACCESS on VGCS channel. */
+	log("Send UPLINK ACCESS.");
+	fn := f_L1CTL_RACH(L1CTL, oct2int(uplink_access), chan_nr := g_pars.chan_nr);
+
+	/* Wait for listener detection. */
+	timer T := 2.0;
+	T.start;
+	alt {
+	[] RSL.receive(tr_RSL_LISTENER_DET(g_pars.chan_nr, ?)) -> value rm {
+		log("RSL Talker Listener has been detected: ", rm);
+		T.stop;
+		}
+	[] RSL.receive(tr_RSL_CHAN_RQD(?, ?, ?, ?)) -> value rm {
+		setverdict(fail, "RSL_CHAN_RQD was not expected: ", rm);
+		T.stop;
+		}
+	[] RSL.receive { repeat; }
+	[] T.timeout {
+		setverdict(fail, "Timeout waiting for RSL Listener Detect.");
+		}
+	}
+
+	/* Send UPLINK ACCESS on VGCS channel. */
+	log("Send second UPLINK ACCESS.");
+	fn := f_L1CTL_RACH(L1CTL, oct2int(uplink_access), chan_nr := g_pars.chan_nr);
+
+	/* Wait for listener detection. */
+	T.start;
+	alt {
+	[] RSL.receive(tr_RSL_LISTENER_DET(g_pars.chan_nr, ?)) {
+		setverdict(fail, "RSL Listener Detect has been detected, but not expected!");
+		T.stop;
+		}
+	[] RSL.receive(tr_RSL_CHAN_RQD(?, ?, ?, ?)) -> value rm {
+		setverdict(fail, "RSL_CHAN_RQD was not expected: ", rm);
+		T.stop;
+		}
+	[] RSL.receive { repeat; }
+	[] T.timeout {
+		log("Timeout waiting for RSL Listener Detect, as expected.");
+		}
+	}
+
+	/* Deactivate and cleanup. */
+	f_vgcs_cleanup();
+}
+testcase TC_vgcs_listener_det() runs on test_CT
+{
+	var template RSL_IE_ChannelMode ch_mode;
+	var ConnHdlrPars pars;
+	var ConnHdlr vc_conn;
+
+	f_init();
+
+	ch_mode := ts_RSL_ChanMode(RSL_CHRT_TCH_F_GROUP, RSL_CMOD_SP_GSM1);
+	pars := valueof(t_Pars(t_RslChanNr_Bm(1), ch_mode));
+	vc_conn := f_start_handler(refers(f_TC_vgcs_listener_det), pars);
+	vc_conn.done;
+
+	Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
+}
+
 control {
 	execute( TC_vbs_notification() );
 	execute( TC_vgcs_uplink_free_and_busy() );
 	execute( TC_vgcs_talker_fail() );
 	execute( TC_vgcs_talker_est_rel() );
+	execute( TC_vgcs_listener_det() );
 
 }