pespin submitted this change.

View Change

Approvals: fixeria: Looks good to me, approved Jenkins Builder: Verified jolly: Looks good to me, but someone else must approve
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(-)

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;

To view, visit change 42577. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: merged
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Id80982b6b968bbe462aeac2b9be646ab50eace83
Gerrit-Change-Number: 42577
Gerrit-PatchSet: 3
Gerrit-Owner: pespin <pespin@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de>
Gerrit-Reviewer: jolly <andreas@eversberg.eu>
Gerrit-Reviewer: osmith <osmith@sysmocom.de>
Gerrit-Reviewer: pespin <pespin@sysmocom.de>