BTS_Tests: fix f_init_rsl(): expect all 4 transceivers to connect
Fixes TC_paging_{imsi,tmsi}_{200,80}percent test cases.
Change-Id: I32bb6d37929cde420a547e18eeb2f940e833316b
Related: OS#4546
diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 80804ec..e3d4beb 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -118,6 +118,7 @@
var RSL_Emulation_CT vc_RSL;
/* Direct RSL_CCHAN_PT */
port RSL_CCHAN_PT RSL_CCHAN;
+ timer g_rslem_up_timer;
/* L1CTL port (for classic tests) */
port L1CTL_PT L1CTL;
@@ -180,9 +181,14 @@
port PCUIF_CODEC_PT PCU;
}
-function f_init_rsl(charstring id) runs on test_CT {
- timer T := mp_ipa_up_timeout;
+private altstep as_rsl_init_guard() runs on test_CT {
+ [] g_rslem_up_timer.timeout {
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
+ "Timeout waiting for RSL bring up");
+ }
+}
+function f_init_rsl(charstring id) runs on test_CT {
vc_IPA := IPA_Emulation_CT.create(id & "-RSL-IPA");
vc_RSL := RSL_Emulation_CT.create(id & "-RSL");
@@ -193,14 +199,27 @@
vc_IPA.start(IPA_Emulation.main_server(mp_rsl_ip, mp_rsl_port));
vc_RSL.start(RSL_Emulation.main(false));
- T.start;
- alt {
- /* TODO: handle connection events from multiple transceivers */
- [] RSL_CCHAN.receive(tr_RSLEm_EV(RSLEM_EV_TRX_UP));
- [] T.timeout {
- Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for ASP_IPA_EVENT_UP");
- }
+ /* TTCN-3 offers no way to guard 'interleave' statements */
+ g_rslem_up_timer.start(mp_ipa_up_timeout);
+ var default d := activate(as_rsl_init_guard());
+
+ /* We expect all 4 transceivers to connect here (separate IPA/RSL connections).
+ * See https://gerrit.osmocom.org/q/Ib5ad31388ae25399ad09739aac3fdcb0b3a1f78b. */
+ interleave {
+ /* These events are sent by the RSL_Emulation_CT */
+ [] RSL_CCHAN.receive(tr_RSLEm_EV(RSLEM_EV_TRX_UP, IPAC_PROTO_RSL_TRX0));
+ [] RSL_CCHAN.receive(tr_RSLEm_EV(RSLEM_EV_TRX_UP, IPAC_PROTO_RSL_TRX1));
+ [] RSL_CCHAN.receive(tr_RSLEm_EV(RSLEM_EV_TRX_UP, IPAC_PROTO_RSL_TRX2));
+ [] RSL_CCHAN.receive(tr_RSLEm_EV(RSLEM_EV_TRX_UP, IPAC_PROTO_RSL_TRX3));
+ /* These messages (RF RESource INDication) are sent by the IUT itself */
+ [] RSL_CCHAN.receive(tr_ASP_RSL_UD(tr_RSL_RF_RES_IND, IPAC_PROTO_RSL_TRX0));
+ [] RSL_CCHAN.receive(tr_ASP_RSL_UD(tr_RSL_RF_RES_IND, IPAC_PROTO_RSL_TRX1));
+ [] RSL_CCHAN.receive(tr_ASP_RSL_UD(tr_RSL_RF_RES_IND, IPAC_PROTO_RSL_TRX2));
+ [] RSL_CCHAN.receive(tr_ASP_RSL_UD(tr_RSL_RF_RES_IND, IPAC_PROTO_RSL_TRX3));
}
+
+ g_rslem_up_timer.stop;
+ deactivate(d);
}
type record ConnHdlrPars {
@@ -2956,13 +2975,6 @@
integer num_overload
}
-/* receive + ignore RSL RF RES IND */
-altstep as_rsl_res_ind() runs on test_CT {
- [] RSL_CCHAN.receive(tr_ASP_RSL_UD(tr_RSL_RF_RES_IND)) {
- repeat;
- }
-}
-
/* Helper function for paging related testing */
private function f_TC_paging(PagingTestCfg cfg) runs on test_CT return PagingTestState {
f_init();
@@ -3045,7 +3057,6 @@
}
}
[] T_total.timeout { }
- [] as_rsl_res_ind();
}
}
@@ -3061,7 +3072,6 @@
[] T_wait.timeout {
Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Waiting for empty paging queue");
}
- [] as_rsl_res_ind();
}
log("num_paging_sent=", st.num_paging_sent, " rcvd_msgs=", st.num_paging_rcv_msgs,