<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/21634">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  pespin: Looks good to me, but someone else must approve
  laforge: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gbproxy: Test case for BVC flow control procedure<br><br>Related: OS#4891<br>Change-Id: I6daa5848bd59b42f152de783bfdc602d1f2da861<br>---<br>M gbproxy/GBProxy_Tests.ttcn<br>1 file changed, 71 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/gbproxy/GBProxy_Tests.ttcn b/gbproxy/GBProxy_Tests.ttcn</span><br><span>index 9bd0550..5e81c13 100644</span><br><span>--- a/gbproxy/GBProxy_Tests.ttcn</span><br><span>+++ b/gbproxy/GBProxy_Tests.ttcn</span><br><span>@@ -726,6 +726,7 @@</span><br><span>         port BSSGP_PT G_SGSN[NUM_SGSN];</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* connect the signaling BVC of each NSE to the G_PCU / G_SGSN ports */</span><br><span> private function f_global_init() runs on GlobalTest_CT {</span><br><span>       var integer i;</span><br><span>       for (i := 0; i < lengthof(g_sgsn); i := i+1) {</span><br><span>@@ -736,6 +737,17 @@</span><br><span>     }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* connect the first PTP BVC of each NSE to the G_PCU / G_SGSN ports */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_global_init_ptp() runs on GlobalTest_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var integer i;</span><br><span style="color: hsl(120, 100%, 40%);">+        for (i := 0; i < lengthof(g_sgsn); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+             connect(self:G_SGSN[i], g_sgsn[i].vc_BSSGP_BVC[0]:GLOBAL);</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+     for (i := 0; i < lengthof(g_pcu); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+              connect(self:G_PCU[i], g_pcu[i].vc_BSSGP_BVC[0]:GLOBAL);</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> /* Send 'tx' on PTP-BVCI from PCU; expect 'rx' on SGSN */</span><br><span> friend function f_global_pcu2sgsn(template (value) PDU_BSSGP tx, template (present) PDU_BSSGP exp_rx,</span><br><span>                                   integer pcu_idx := 0, integer sgsn_idx := 0) runs on GlobalTest_CT {</span><br><span>@@ -2324,6 +2336,64 @@</span><br><span>      f_cleanup();</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/***********************************************************************</span><br><span style="color: hsl(120, 100%, 40%);">+ * FLOW-CONTROL-BVC procedure</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%);">+private altstep as_g_count_sgsn(integer sgsn_idx, inout ro_integer roi,</span><br><span style="color: hsl(120, 100%, 40%);">+                           template PDU_BSSGP exp_rx, template (omit) PDU_BSSGP tx_reply)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on GlobalTest_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      [] G_SGSN[sgsn_idx].receive(exp_rx) {</span><br><span style="color: hsl(120, 100%, 40%);">+         roi := roi & { sgsn_idx };</span><br><span style="color: hsl(120, 100%, 40%);">+                if (ispresent(tx_reply)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                    G_SGSN[sgsn_idx].send(tx_reply);</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%);">+/* Send FC-BVC from simulated PCU; expect each SGSN to receive it; expect PCU to receive ACK */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_fc_bvc() runs on GlobalTest_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  f_init();</span><br><span style="color: hsl(120, 100%, 40%);">+     f_global_init_ptp();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        var template (value) PDU_BSSGP pdu_tx := t_BVC_FC_BVC(10240, 2000, 1024, 1000, '01'O);</span><br><span style="color: hsl(120, 100%, 40%);">+        /* we cannot use pdu_tx as there are some subtle differences in the length field :/ */</span><br><span style="color: hsl(120, 100%, 40%);">+        var template (present) PDU_BSSGP pdu_rx := tr_BVC_FC_BVC(10240, 2000, 1024, 1000, '01'O);</span><br><span style="color: hsl(120, 100%, 40%);">+     var template (omit) PDU_BSSGP ack_tx :=</span><br><span style="color: hsl(120, 100%, 40%);">+               t_BVC_FC_BVC_ACK(pdu_tx.pDU_BSSGP_FLOW_CONTROL_BVC.tag.unstructured_Value);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Send a FC-BVC from BSS to gbproxy, expect an ACK in response */</span><br><span style="color: hsl(120, 100%, 40%);">+    G_PCU[0].send(pdu_tx);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Activate altsteps: One for each SGSN-side PTP BVC port */</span><br><span style="color: hsl(120, 100%, 40%);">+  var ro_default defaults := {};</span><br><span style="color: hsl(120, 100%, 40%);">+        for (var integer i := 0; i < lengthof(g_sgsn); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+         var default d := activate(as_g_count_sgsn(i, g_roi, pdu_rx, ack_tx));</span><br><span style="color: hsl(120, 100%, 40%);">+         defaults := defaults & { d };</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%);">+   f_sleep(3.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       for (var integer i := 0; i < lengthof(defaults); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+               deactivate(defaults[i]);</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%);">+   /* check if BVC-block was received on all expected BVC */</span><br><span style="color: hsl(120, 100%, 40%);">+     for (var integer i := 0; i < lengthof(g_sgsn); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+         if (not ro_integer_contains(g_roi, i)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      setverdict(fail, "Missing BVC-FLOW-CONTROL on SGSN index ", i);</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%);">+   /* Expect ACK on PCU side */</span><br><span style="color: hsl(120, 100%, 40%);">+  G_PCU[0].receive(ack_tx);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   f_cleanup();</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> control {</span><br><span>     execute( TC_BVC_bringup() );</span><br><span>         execute( TC_ul_unitdata() );</span><br><span>@@ -2385,6 +2455,7 @@</span><br><span> </span><br><span> </span><br><span>         execute( TC_flush_ll() );</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_fc_bvc() );</span><br><span> }</span><br><span> </span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/21634">change 21634</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/+/21634"/><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: I6daa5848bd59b42f152de783bfdc602d1f2da861 </div>
<div style="display:none"> Gerrit-Change-Number: 21634 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>