bsc: Introduce test TC_ctrl_location

Related: OS#2012
Change-Id: I3640f6889e3b6adc3b4601082f948543c64a2fe3
diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index c3275e1..00995bf 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -80,6 +80,8 @@
 	/* array of per-BTS RSL test ports */
 	port IPA_RSL_PT IPA_RSL[NUM_BTS];
 	port IPA_CODEC_PT IPA; /* Required for compilation of TC_rsl_unknown_unit_id() */
+	/* CTRL muxed over IPA in SCCPlite conn BSC<->MSC (or BSC-NAT) */
+	port IPA_CTRL_PT SCCPLITE_IPA_CTRL;
 
 	var MGCP_Emulation_CT vc_MGCP;
 	port TELNETasp_PT BSCVTY;
@@ -350,6 +352,7 @@
 		var RanOps ranops := MSC_RanOps;
 		ranops.use_osmux := g_osmux_enabled;
 		f_ran_adapter_init(g_bssap, mp_bssap_cfg, "VirtMSC", ranops);
+		connect(self:SCCPLITE_IPA_CTRL, g_bssap.vc_RAN:CTRL_CLIENT);
 		f_ran_adapter_start(g_bssap);
 	} else {
 		f_ran_adapter_init(g_bssap, mp_bssap_cfg, "VirtMSC", omit);
@@ -1204,6 +1207,32 @@
 	setverdict(pass);
 }
 
+/* Verify that Upon receival of SET "location", BSC forwards a TRAP
+  "location-state" over the SCCPlite IPA conn */
+testcase TC_ctrl_location() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+	var integer bts_nr := 0;
+
+	f_init(1, true);
+	f_sleep(1.0);
+
+	f_ctrl_set_bts(IPA_CTRL, bts_nr, "location", "1234567,fix3d,0.340000,0.560000,0.780000");
+	f_ctrl_exp_trap(SCCPLITE_IPA_CTRL, "bts." & int2str(bts_nr) & ".location-state",
+			"1234567,fix3d,0.340000,0.560000,0.780000,operational,unlocked,on,001,01");
+
+	f_ctrl_set(SCCPLITE_IPA_CTRL, "rf_locked", "1");
+	f_sleep(2.0);
+
+	f_ctrl_set_bts(IPA_CTRL, bts_nr, "location", "1234888,fix3d,0.350000,0.570000,0.790000");
+	f_ctrl_exp_trap(SCCPLITE_IPA_CTRL, "bts." & int2str(bts_nr) & ".location-state",
+			"1234888,fix3d,0.350000,0.570000,0.790000,operational,locked,off,001,01");
+
+	/* should match the one from  config */
+	f_ctrl_set(SCCPLITE_IPA_CTRL, "rf_locked", "0");
+
+	setverdict(pass);
+}
+
 function f_bssap_tx_ud(template PDU_BSSAP bssap) runs on test_CT {
 	BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap.sccp_addr_peer, g_bssap.sccp_addr_own, bssap));
 }
@@ -3987,6 +4016,9 @@
 	execute( TC_ctrl_msc_connection_status() );
 	execute( TC_ctrl_msc0_connection_status() );
 	execute( TC_ctrl() );
+	if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_SCCPlite_SERVER) {
+		execute( TC_ctrl_location() );
+	}
 
 	/* RSL DCHAN Channel ACtivation / Deactivation */
 	execute( TC_chan_act_noreply() );