<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/13334">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Harald Welte: Looks good to me, approved
  Max: Looks good to me, but someone else must approve
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pcu: Add SNS tests for SGSN-originated BVC-RESET handling<br><br>Change-Id: Ib6b80acf98711f4749da4faf549b02ff2b82425f<br>---<br>M pcu/PCU_Tests_RAW.ttcn<br>M pcu/PCU_Tests_RAW_SNS.ttcn<br>2 files changed, 76 insertions(+), 8 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/pcu/PCU_Tests_RAW.ttcn b/pcu/PCU_Tests_RAW.ttcn</span><br><span>index a30829e..6022d36 100644</span><br><span>--- a/pcu/PCU_Tests_RAW.ttcn</span><br><span>+++ b/pcu/PCU_Tests_RAW.ttcn</span><br><span>@@ -172,6 +172,29 @@</span><br><span>               }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Transmit BSSGP RESET for given BVCI and expect ACK */</span><br><span style="color: hsl(120, 100%, 40%);">+function f_tx_bvc_reset_rx_ack(BssgpBvci bvci, integer idx := 0, boolean exp_ack := true)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on RAW_NS_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  var PDU_BSSGP bssgp_tx := valueof(ts_BVC_RESET(BSSGP_CAUSE_NET_SV_CAP_MOD_GT_ZERO_KBPS, bvci,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 mp_gb_cfg.cell_id));</span><br><span style="color: hsl(120, 100%, 40%);">+  timer T := 5.0;</span><br><span style="color: hsl(120, 100%, 40%);">+       NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_NS_UNITDATA(t_SduCtrlB, 0, enc_PDU_BSSGP(bssgp_tx))));</span><br><span style="color: hsl(120, 100%, 40%);">+ T.start;</span><br><span style="color: hsl(120, 100%, 40%);">+      alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [exp_ack] NSCP[idx].receive(t_NS_RecvFrom(tr_NS_UNITDATA(t_SduCtrlB, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 decmatch tr_BVC_RESET_ACK(bvci, ?)))) {</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%);">+     [exp_ack] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+         setverdict(fail, "No response to BVC-RESET");</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     [not exp_ack] T.timeout {</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%);">+     [] NSCP[idx].receive { repeat; }</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> /* Receive a BSSGP RESET for given BVCI and ACK it */</span><br><span> altstep as_rx_bvc_reset_tx_ack(BssgpBvci bvci, boolean oneshot := false, integer idx := 0) runs on RAW_NS_CT {</span><br><span>    var NS_RecvFrom ns_rf;</span><br><span>diff --git a/pcu/PCU_Tests_RAW_SNS.ttcn b/pcu/PCU_Tests_RAW_SNS.ttcn</span><br><span>index 7f71744..7513196 100644</span><br><span>--- a/pcu/PCU_Tests_RAW_SNS.ttcn</span><br><span>+++ b/pcu/PCU_Tests_RAW_SNS.ttcn</span><br><span>@@ -186,7 +186,7 @@</span><br><span>    setverdict(pass);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function f_sns_bringup_1c1u() runs on RAW_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_sns_bringup_1c1u(boolean sgsn_originated_reset := false) runs on RAW_Test_CT {</span><br><span>     /* Activate two NS codec ports */</span><br><span>    f_init_ns_codec();</span><br><span>   f_init_ns_codec(1);</span><br><span>@@ -208,9 +208,14 @@</span><br><span>   f_outgoing_ns_alive(0);</span><br><span>      f_outgoing_ns_alive(1);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     /* Expect BVC-RESET for signaling (0) and ptp BVCI */</span><br><span style="color: hsl(0, 100%, 40%);">-   as_rx_bvc_reset_tx_ack(0, oneshot := true);</span><br><span style="color: hsl(0, 100%, 40%);">-     as_rx_bvc_reset_tx_ack(mp_gb_cfg.bvci, oneshot := true);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (sgsn_originated_reset) {</span><br><span style="color: hsl(120, 100%, 40%);">+          f_tx_bvc_reset_rx_ack(0);</span><br><span style="color: hsl(120, 100%, 40%);">+             f_tx_bvc_reset_rx_ack(mp_gb_cfg.bvci);</span><br><span style="color: hsl(120, 100%, 40%);">+        } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* Expect BVC-RESET for signaling (0) and ptp BVCI */</span><br><span style="color: hsl(120, 100%, 40%);">+         as_rx_bvc_reset_tx_ack(0, oneshot := true);</span><br><span style="color: hsl(120, 100%, 40%);">+           as_rx_bvc_reset_tx_ack(mp_gb_cfg.bvci, oneshot := true);</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span>    /* Expect UNBLOCK for ptp BVCI on signaling NS-VC (idx==0) */</span><br><span>        as_rx_bvc_unblock_tx_ack(mp_gb_cfg.bvci, oneshot := true);</span><br><span> </span><br><span>@@ -226,7 +231,7 @@</span><br><span>         setverdict(pass);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function f_sns_bringup_1c1u_separate() runs on RAW_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_sns_bringup_1c1u_separate(boolean sgsn_originated_reset := false) runs on RAW_Test_CT {</span><br><span>   /* Activate two NS codec ports */</span><br><span>    f_init_ns_codec();</span><br><span>   f_init_ns_codec(1);</span><br><span>@@ -253,9 +258,14 @@</span><br><span>   /* ensure there's no response to NS-ALIVE sent on idx==0 */</span><br><span>      f_outgoing_ns_alive_no_ack(idx := 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       /* Expect BVC-RESET for signaling BVCI=0 and ptp BVCI */</span><br><span style="color: hsl(0, 100%, 40%);">-        as_rx_bvc_reset_tx_ack(0, oneshot := true, idx := 1);</span><br><span style="color: hsl(0, 100%, 40%);">-   as_rx_bvc_reset_tx_ack(mp_gb_cfg.bvci, oneshot := true, idx := 1);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (sgsn_originated_reset) {</span><br><span style="color: hsl(120, 100%, 40%);">+          f_tx_bvc_reset_rx_ack(0, idx := 1);</span><br><span style="color: hsl(120, 100%, 40%);">+           f_tx_bvc_reset_rx_ack(mp_gb_cfg.bvci, idx := 1);</span><br><span style="color: hsl(120, 100%, 40%);">+      } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* Expect BVC-RESET for signaling BVCI=0 and ptp BVCI */</span><br><span style="color: hsl(120, 100%, 40%);">+              as_rx_bvc_reset_tx_ack(0, oneshot := true, idx := 1);</span><br><span style="color: hsl(120, 100%, 40%);">+         as_rx_bvc_reset_tx_ack(mp_gb_cfg.bvci, oneshot := true, idx := 1);</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span>    /* Expect UNBLOCK for ptp BVCI on signaling NS-VC (idx==1) */</span><br><span>        as_rx_bvc_unblock_tx_ack(mp_gb_cfg.bvci, oneshot := true, idx := 1);</span><br><span> </span><br><span>@@ -272,6 +282,39 @@</span><br><span>      setverdict(pass);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Test full IP-SNS bring-up with two NS-VCs, one sig-only and one user-only and use</span><br><span style="color: hsl(120, 100%, 40%);">+ * SGSN-originated BVC-RESET rather than BSS-originated */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_sns_1c1u_so_bvc_reset() runs on RAW_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       f_sns_bringup_1c1u_separate(sgsn_originated_reset := true);</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Transmit BVC-RESET before NS-ALIVE of PCU was ACKed: expect no response */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_sns_1c1u_so_bvc_reset_too_early() runs on RAW_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Activate two NS codec ports */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init_ns_codec();</span><br><span style="color: hsl(120, 100%, 40%);">+    f_init_ns_codec(1);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init_ns_codec(2);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init_pcuif();</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Perform Size + BSS-originated config */</span><br><span style="color: hsl(120, 100%, 40%);">+    f_incoming_sns_size();</span><br><span style="color: hsl(120, 100%, 40%);">+        f_incoming_sns_config();</span><br><span style="color: hsl(120, 100%, 40%);">+      /* perform SGSN-originated config using idx==0 for signalling and idx==1 for user traffic */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_outgoing_sns_config_1c1u_separate();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* DON'T ACK ANY INBOUND NS-ALIVE HERE! */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* perform outgoing ALIVE procedure for both NS-VCs */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_outgoing_ns_alive(1);</span><br><span style="color: hsl(120, 100%, 40%);">+       f_outgoing_ns_alive(2);</span><br><span style="color: hsl(120, 100%, 40%);">+       /* ensure there's no response to NS-ALIVE sent on idx==0 */</span><br><span style="color: hsl(120, 100%, 40%);">+       f_outgoing_ns_alive_no_ack(idx := 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Transmit BVC-RESET and expect no ACK*/</span><br><span style="color: hsl(120, 100%, 40%);">+     f_tx_bvc_reset_rx_ack(0, idx := 1, exp_ack := false);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_tx_bvc_reset_rx_ack(mp_gb_cfg.bvci, idx := 1, exp_ack := false);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Test adding new IP endpoints at runtime */</span><br><span> testcase TC_sns_add() runs on RAW_Test_CT {</span><br><span>      f_sns_bringup_1c1u();</span><br><span>@@ -343,6 +386,8 @@</span><br><span>  execute( TC_sns_so_config_success() );</span><br><span>       execute( TC_sns_1c1u() );</span><br><span>    execute( TC_sns_1c1u_separate() );</span><br><span style="color: hsl(120, 100%, 40%);">+    execute( TC_sns_1c1u_so_bvc_reset() );</span><br><span style="color: hsl(120, 100%, 40%);">+        execute( TC_sns_1c1u_so_bvc_reset_too_early() );</span><br><span>     execute( TC_sns_add() );</span><br><span>     execute( TC_sns_del() );</span><br><span>     execute( TC_sns_chg_weight() );</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/13334">change 13334</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/13334"/><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-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: Ib6b80acf98711f4749da4faf549b02ff2b82425f </div>
<div style="display:none"> Gerrit-Change-Number: 13334 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-Reviewer: Max <msuraev@sysmocom.de> </div>