<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14508">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc-sccplite: Fix expected DLCX in HO tests<br><br>* TTCN3 code was not ACKing the DLCXs, and as a result retransmitted<br>DLCX BSC->MGW were being counted as 2nd DLCX.<br><br>* In SCCPLite, only 1 DLCX is expected BSC->MGW, because the BSC only<br>takes care of the BTS-side conn in the endpoint, while MSC takes care of<br>the MSC-side conn (which is not sent in this case because doesn't really<br>involved the BSC other than forwarding the message, which will already<br>be tested in other places in forthcoming commits).<br><br>* Getting rid of retransmissions by ACKing the DLCX, it unconvers a bug<br>in TC_ho_out_fail_no_ho_detect when on AoIP, where BSC only deletes one<br>of the 2 previously created connections.<br><br>* Code is refactored into the function because its logic is made more<br>complex, and may be even more complex in forthcoming commits when we add<br>MGCP-over-IPA forwarding verification support.<br><br>Change-Id: Ia1d0db9af073760105cc8509e228e317dbea2268<br>---<br>M bsc/BSC_Tests.ttcn<br>1 file changed, 31 insertions(+), 64 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/08/14508/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn</span><br><span>index 00995bf..976bc46 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -2887,6 +2887,28 @@</span><br><span>         vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Expecting MGCP to DLCX the endpoint's two connections: towards BTS and towards MSC */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_expect_dlcx_conns(boolean exp_clear_cmpl := true) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+     var MgcpCommand mgcp;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       MGCP.receive(tr_DLCX()) -> value mgcp {</span><br><span style="color: hsl(120, 100%, 40%);">+                            log("Got first DLCX: ", mgcp);</span><br><span style="color: hsl(120, 100%, 40%);">+                              MGCP.send(ts_DLCX_ACK2(mgcp.line.trans_id));</span><br><span style="color: hsl(120, 100%, 40%);">+          };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* For SCCPLite, BSC doesn't handle the MSC-side */</span><br><span style="color: hsl(120, 100%, 40%);">+       if (g_pars.aoip) {</span><br><span style="color: hsl(120, 100%, 40%);">+            MGCP.receive(tr_DLCX()) -> value mgcp {</span><br><span style="color: hsl(120, 100%, 40%);">+                            log("Got second DLCX: ", mgcp);</span><br><span style="color: hsl(120, 100%, 40%);">+                             MGCP.send(ts_DLCX_ACK2(mgcp.line.trans_id));</span><br><span style="color: hsl(120, 100%, 40%);">+                  };</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (exp_clear_cmpl) {</span><br><span style="color: hsl(120, 100%, 40%);">+         BSSAP.receive(tr_BSSMAP_ClearComplete);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> private function f_tc_ho_out_of_this_bsc(charstring id) runs on MSC_ConnHdlr {</span><br><span>     g_pars := f_gen_test_hdlr_pars();</span><br><span> </span><br><span>@@ -2937,17 +2959,7 @@</span><br><span>       var BssmapCause cause := enum2int(cause_val);</span><br><span>        BSSAP.send(ts_BSSMAP_ClearCommand(cause));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  /* Expecting MGCP to DLCX the endpoint's two connections: towards BTS and towards MSC */</span><br><span style="color: hsl(0, 100%, 40%);">-    var MgcpCommand mgcp;</span><br><span style="color: hsl(0, 100%, 40%);">-   interleave {</span><br><span style="color: hsl(0, 100%, 40%);">-    [] BSSAP.receive(tr_BSSMAP_ClearComplete);</span><br><span style="color: hsl(0, 100%, 40%);">-      [] MGCP.receive(tr_DLCX()) -> value mgcp {</span><br><span style="color: hsl(0, 100%, 40%);">-                   log("Got first DLCX: ", mgcp);</span><br><span style="color: hsl(0, 100%, 40%);">-                }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] MGCP.receive(tr_DLCX()) -> value mgcp {</span><br><span style="color: hsl(0, 100%, 40%);">-                   log("Got second DLCX: ", mgcp);</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(120, 100%, 40%);">+     f_expect_dlcx_conns(true);</span><br><span>   setverdict(pass);</span><br><span>    f_sleep(1.0);</span><br><span> }</span><br><span>@@ -3154,14 +3166,10 @@</span><br><span>         [] BSSAP.receive(tr_BSSMAP_ClearRequest) {</span><br><span>                   log("Got BSSMAP Clear Request");</span><br><span>           }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] MGCP.receive(tr_DLCX()) -> value mgcp {</span><br><span style="color: hsl(0, 100%, 40%);">-                   log("Got first DLCX: ", mgcp);</span><br><span style="color: hsl(0, 100%, 40%);">-                }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] MGCP.receive(tr_DLCX()) -> value mgcp {</span><br><span style="color: hsl(0, 100%, 40%);">-                   log("Got second DLCX: ", mgcp);</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ f_expect_dlcx_conns(false);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>        setverdict(pass);</span><br><span>    f_sleep(1.0);</span><br><span> }</span><br><span>@@ -3305,17 +3313,7 @@</span><br><span>  var BssmapCause cause := enum2int(cause_val);</span><br><span>        BSSAP.send(ts_BSSMAP_ClearCommand(cause));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  /* Expecting MGCP to DLCX the endpoint's two connections: towards BTS and towards MSC */</span><br><span style="color: hsl(0, 100%, 40%);">-    var MgcpCommand mgcp;</span><br><span style="color: hsl(0, 100%, 40%);">-   interleave {</span><br><span style="color: hsl(0, 100%, 40%);">-    [] BSSAP.receive(tr_BSSMAP_ClearComplete);</span><br><span style="color: hsl(0, 100%, 40%);">-      [] MGCP.receive(tr_DLCX()) -> value mgcp {</span><br><span style="color: hsl(0, 100%, 40%);">-                   log("Got first DLCX: ", mgcp);</span><br><span style="color: hsl(0, 100%, 40%);">-                }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] MGCP.receive(tr_DLCX()) -> value mgcp {</span><br><span style="color: hsl(0, 100%, 40%);">-                   log("Got second DLCX: ", mgcp);</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(120, 100%, 40%);">+     f_expect_dlcx_conns(true);</span><br><span>   setverdict(pass);</span><br><span>    f_sleep(1.0);</span><br><span> </span><br><span>@@ -3397,17 +3395,7 @@</span><br><span>   var BssmapCause cause := enum2int(cause_val);</span><br><span>        BSSAP.send(ts_BSSMAP_ClearCommand(cause));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  /* Expecting MGCP to DLCX the endpoint's two connections: towards BTS and towards MSC */</span><br><span style="color: hsl(0, 100%, 40%);">-    var MgcpCommand mgcp;</span><br><span style="color: hsl(0, 100%, 40%);">-   interleave {</span><br><span style="color: hsl(0, 100%, 40%);">-    [] BSSAP.receive(tr_BSSMAP_ClearComplete);</span><br><span style="color: hsl(0, 100%, 40%);">-      [] MGCP.receive(tr_DLCX()) -> value mgcp {</span><br><span style="color: hsl(0, 100%, 40%);">-                   log("Got first DLCX: ", mgcp);</span><br><span style="color: hsl(0, 100%, 40%);">-                }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] MGCP.receive(tr_DLCX()) -> value mgcp {</span><br><span style="color: hsl(0, 100%, 40%);">-                   log("Got second DLCX: ", mgcp);</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(120, 100%, 40%);">+     f_expect_dlcx_conns(true);</span><br><span>   setverdict(pass);</span><br><span>    f_sleep(1.0);</span><br><span> }</span><br><span>@@ -3486,17 +3474,7 @@</span><br><span>  var BssmapCause cause := enum2int(cause_val);</span><br><span>        BSSAP.send(ts_BSSMAP_ClearCommand(cause));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  /* Expecting MGCP to DLCX the endpoint's two connections: towards BTS and towards MSC */</span><br><span style="color: hsl(0, 100%, 40%);">-    var MgcpCommand mgcp;</span><br><span style="color: hsl(0, 100%, 40%);">-   interleave {</span><br><span style="color: hsl(0, 100%, 40%);">-    [] BSSAP.receive(tr_BSSMAP_ClearComplete);</span><br><span style="color: hsl(0, 100%, 40%);">-      [] MGCP.receive(tr_DLCX()) -> value mgcp {</span><br><span style="color: hsl(0, 100%, 40%);">-                   log("Got first DLCX: ", mgcp);</span><br><span style="color: hsl(0, 100%, 40%);">-                }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] MGCP.receive(tr_DLCX()) -> value mgcp {</span><br><span style="color: hsl(0, 100%, 40%);">-                   log("Got second DLCX: ", mgcp);</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(120, 100%, 40%);">+     f_expect_dlcx_conns(true);</span><br><span>   setverdict(pass);</span><br><span>    f_sleep(1.0);</span><br><span> </span><br><span>@@ -3563,24 +3541,13 @@</span><br><span>  BSSAP.receive(tr_BSSMAP_HandoverFailure);</span><br><span> </span><br><span>        /* MSC plays dumb and sends no Clear Command */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- /* Expecting MGCP to DLCX the endpoint's two connections: towards BTS and towards MSC */</span><br><span>         var PDU_BSSAP rx_clear_request;</span><br><span style="color: hsl(0, 100%, 40%);">- var MgcpCommand mgcp;</span><br><span style="color: hsl(0, 100%, 40%);">-   interleave {</span><br><span style="color: hsl(0, 100%, 40%);">-    [] BSSAP.receive(tr_BSSMAP_ClearRequest) -> value rx_clear_request {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     BSSAP.receive(tr_BSSMAP_ClearRequest) -> value rx_clear_request {</span><br><span>                 var BssmapCause cause := bit2int(rx_clear_request.pdu.bssmap.clearRequest.cause.causeValue);</span><br><span>                 BSSAP.send(ts_BSSMAP_ClearCommand(cause));</span><br><span>   };</span><br><span style="color: hsl(0, 100%, 40%);">-      [] BSSAP.receive(tr_BSSMAP_ClearComplete);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      [] MGCP.receive(tr_DLCX()) -> value mgcp {</span><br><span style="color: hsl(0, 100%, 40%);">-                   log("Got first DLCX: ", mgcp);</span><br><span style="color: hsl(0, 100%, 40%);">-                }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] MGCP.receive(tr_DLCX()) -> value mgcp {</span><br><span style="color: hsl(0, 100%, 40%);">-                   log("Got second DLCX: ", mgcp);</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(120, 100%, 40%);">+     f_expect_dlcx_conns(true);</span><br><span>   setverdict(pass);</span><br><span>    f_sleep(1.0);</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14508">change 14508</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14508"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ia1d0db9af073760105cc8509e228e317dbea2268 </div>
<div style="display:none"> Gerrit-Change-Number: 14508 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>