pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42577?usp=email )
Change subject: msc: ASCI: Fix race condition in TC_assign_fail ......................................................................
msc: ASCI: Fix race condition in TC_assign_fail
The f_sleep(0.5) to delay the registration of the PC for the 2nd SCCP connection sometimes fired too late and we received the VGCS/VBS Assignment Request before the channel ConnHdlr was registered in RAN_Emulation. Then in turn we need to delay call establishment until the channel is ready. Implement proper synchronization points to make sure the order of registers is accomplished while making sure the 2 ConnHdlrs are registered before they need it.
Change-Id: Id80982b6b968bbe462aeac2b9be646ab50eace83 --- M msc/MSC_Tests_ASCI.ttcn 1 file changed, 22 insertions(+), 3 deletions(-)
Approvals: fixeria: Looks good to me, approved Jenkins Builder: Verified jolly: Looks good to me, but someone else must approve
diff --git a/msc/MSC_Tests_ASCI.ttcn b/msc/MSC_Tests_ASCI.ttcn index 135edb1..9abcc28 100644 --- a/msc/MSC_Tests_ASCI.ttcn +++ b/msc/MSC_Tests_ASCI.ttcn @@ -76,6 +76,8 @@ const charstring COORD_BCC_TERMINATION_FAIL := "BCC_TERMINATION_FAIL"; const charstring COORD_ASSIGNMENT := "ASSIGNMENT"; const charstring COORD_CLEAR := "CLEAR"; +const charstring N_CONNECT_PC_REGISTERED := "N_CONNECT_PC_REGISTERED" +const charstring N_CALL_ESTABLISH := "N_CALL_ESTABLISH"
template (value) DescriptiveGroupOrBroadcastCallReference_V ts_BSSMAP_IE_GroupCallRef(integer cr, @@ -143,6 +145,9 @@ var default mdcx := activate(as_optional_mgcp_mdcx(cpars.mgw_conn_2.mgw_rtp_ip, cpars.mgw_conn_2.mgw_rtp_port)); var default dlcx := activate(as_optional_mgcp_dlcx(cpars));
+ /* Wait for other components to be prepared for the call: */ + COORD.receive(N_CALL_ESTABLISH); + /* Establish connection using the service type, defined by the test. */ if (test == COORD_TEST_COMPLETE_VBS) { f_establish_fully(EST_TYPE_VBS); @@ -255,6 +260,7 @@ f_init_handler(pars);
f_create_bssmap_exp_n_connect(193); + COORD.send(N_CONNECT_PC_REGISTERED);
timer T := 7.0; T.start; @@ -388,9 +394,12 @@
f_init_handler(pars);
- /* Wait some time before registering, because this has to be the second connection to be registered. */ - f_sleep(0.5); + /* Wait for "control" to register first (VGCS/VBS Setup), because this has to be the second connection to be + * registered (VGCS/VBS Assignment Request). */ + COORD.receive(N_CONNECT_PC_REGISTERED); f_create_bssmap_exp_n_connect(193); + /* informwe applied the expect and we are ready: */ + COORD.send(N_CONNECT_PC_REGISTERED);
timer T := 7.0; T.start; @@ -464,9 +473,19 @@ connect(self:COORD_control, vc_conn_control:COORD); connect(self:COORD_channel, vc_conn_channel:COORD);
+ COORD_channel.send(test); COORD_call.send(test); COORD_control.send(test); - COORD_channel.send(test); + + /* We need to make sure control resgisters first to receive the first SCCP connection (VGCS/VBS Setup) + * and channel later to receive the follow-up (VGCS/VBS Assignment Request) */ + COORD_control.receive(N_CONNECT_PC_REGISTERED); + COORD_channel.send(N_CONNECT_PC_REGISTERED); + /* channel confirms it is also applied on its side: */ + COORD_channel.receive(N_CONNECT_PC_REGISTERED); + + /* Inform we we can start the call: */ + COORD_call.send(N_CALL_ESTABLISH);
/* Receive the test events until all three connections are released or not established. */ timer T := 7.0, Texit := 0.5;