<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/23555">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gbproxy: Verify BVC FSM state during bring-up<br><br>This adds IUT fsm state instrospection via the CTRL interface.<br><br>docker-playground will need to set "mp_gbproxy_ip" in its configs.<br><br>Change-Id: I272e43b9be8ba53d8a815e8ab099c939f63413a7<br>---<br>M gbproxy/GBProxy_Tests.ttcn<br>M library/Osmocom_Types.ttcn<br>2 files changed, 40 insertions(+), 1 deletion(-)<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/55/23555/1</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 91ccbb0..d3c6df6 100644</span><br><span>--- a/gbproxy/GBProxy_Tests.ttcn</span><br><span>+++ b/gbproxy/GBProxy_Tests.ttcn</span><br><span>@@ -33,6 +33,7 @@</span><br><span> </span><br><span> import from TELNETasp_PortType all;</span><br><span> import from Osmocom_VTY_Functions all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from Osmocom_CTRL_Adapter all;</span><br><span> </span><br><span> import from LLC_Types all;</span><br><span> import from LLC_Templates all;</span><br><span>@@ -46,6 +47,8 @@</span><br><span> const integer max_fr_info_size := 1600;</span><br><span> </span><br><span> modulepar {</span><br><span style="color: hsl(120, 100%, 40%);">+      charstring mp_gbproxy_ip := "127.0.0.1";</span><br><span style="color: hsl(120, 100%, 40%);">+    integer mp_gbproxy_ctrl_port := 4263;</span><br><span>        /* NRI bit-length. 0 for no pooling */</span><br><span>       integer mp_nri_bitlength := 5;</span><br><span>       roro_integer mp_sgsn_nri := {</span><br><span>@@ -330,7 +333,7 @@</span><br><span>  * tests that use interleave on SGSN_MGMT.receive() for each SGSN NSEI for example */</span><br><span> const integer NUM_SGSN := 2;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-type component test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+type component test_CT extends CTRL_Adapter_CT {</span><br><span>   var GbInstances g_pcu;</span><br><span>       var GbInstances g_sgsn;</span><br><span> </span><br><span>@@ -516,6 +519,14 @@</span><br><span>   }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private template (value) charstring ts_pcu_bvc_fsm_id(uint16_t nsei, uint16_t bvci) :=</span><br><span style="color: hsl(120, 100%, 40%);">+    "NSE" & f_int2str(nsei, 5) & "-BVC" & f_int2str(bvci, 5);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+function f_bvc_fsm_ensure_state(uint16_t nsei, uint16_t bvci, template (present) charstring exp)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on CTRL_Adapter_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrl_get_exp_inst_state(IPA_CTRL, "BSSGP-BVC", ts_pcu_bvc_fsm_id(nsei, bvci), exp);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> function f_init(float t_guard := 30.0) runs on test_CT {</span><br><span>     var roro_integer bvci_unblocked;</span><br><span>     var BssgpStatusIndication bsi;</span><br><span>@@ -529,6 +540,8 @@</span><br><span>         g_Tguard.start(t_guard);</span><br><span>     activate(as_gTguard(g_Tguard));</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+   f_ipa_ctrl_start_client(mp_gbproxy_ip, mp_gbproxy_ctrl_port);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>      var BssgpBvcConfigs bvcs := { };</span><br><span>     for (i := 0; i < lengthof(mp_gbconfigs); i := i+1) {</span><br><span>              g_pcu[i].cfg := mp_gbconfigs[i];</span><br><span>@@ -616,6 +629,25 @@</span><br><span>              }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* verify all SGSN-side BVC FSM in IUT are UNBLOCKED */</span><br><span style="color: hsl(120, 100%, 40%);">+       for (i := 0; i < lengthof(mp_nsconfig_sgsn); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+           f_bvc_fsm_ensure_state(mp_nsconfig_sgsn[i].nsei, 0, "UNBLOCKED");</span><br><span style="color: hsl(120, 100%, 40%);">+           /* iterate over list and check all BVCI */</span><br><span style="color: hsl(120, 100%, 40%);">+            for (var integer j := 0; j < lengthof(g_sgsn[i].cfg.bvc); j := j+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      var BssgpBvci bvci := g_sgsn[i].cfg.bvc[j].bvci;</span><br><span style="color: hsl(120, 100%, 40%);">+                      f_bvc_fsm_ensure_state(mp_nsconfig_sgsn[i].nsei, bvci, "UNBLOCKED");</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%);">+     /* verify all PCU-side BVC FSM in IUT are UNBLOCKED */</span><br><span style="color: hsl(120, 100%, 40%);">+        for (i := 0; i < lengthof(mp_nsconfig_pcu); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+            f_bvc_fsm_ensure_state(mp_nsconfig_pcu[i].nsei, 0, "UNBLOCKED");</span><br><span style="color: hsl(120, 100%, 40%);">+            /* iterate over list and check all BVCI */</span><br><span style="color: hsl(120, 100%, 40%);">+            for (var integer j := 0; j < lengthof(g_pcu[i].cfg.bvc); j := j+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       var BssgpBvci bvci := g_pcu[i].cfg.bvc[j].bvci;</span><br><span style="color: hsl(120, 100%, 40%);">+                       f_bvc_fsm_ensure_state(mp_nsconfig_pcu[i].nsei, bvci, "UNBLOCKED");</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>  /* re-start guard timer after all BVCs are up, so it only counts the actual test case */</span><br><span>     g_Tguard.start(t_guard);</span><br><span> }</span><br><span>diff --git a/library/Osmocom_Types.ttcn b/library/Osmocom_Types.ttcn</span><br><span>index 23f8fd9..3c0137c 100644</span><br><span>--- a/library/Osmocom_Types.ttcn</span><br><span>+++ b/library/Osmocom_Types.ttcn</span><br><span>@@ -51,6 +51,13 @@</span><br><span>      AF_INET6        ('0a'O)</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* like TTCN-3 int2str() but with padding of leading zeroes */</span><br><span style="color: hsl(120, 100%, 40%);">+function f_int2str(integer i, integer total_digits) return charstring {</span><br><span style="color: hsl(120, 100%, 40%);">+     var charstring istr := int2str(i);</span><br><span style="color: hsl(120, 100%, 40%);">+    var charstring padstr := hex2str(int2hex(0, total_digits - lengthof(istr)));</span><br><span style="color: hsl(120, 100%, 40%);">+  return padstr & istr;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* return random integer 0 <= ret < max. According to ETSI ES 201 873 C.6.1, rnd() returns *less* than 1, so</span><br><span>         * the returned int will always be ret < max, or ret <= (max-1). */</span><br><span> function f_rnd_int(integer max) return integer {</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/23555">change 23555</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/+/23555"/><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: I272e43b9be8ba53d8a815e8ab099c939f63413a7 </div>
<div style="display:none"> Gerrit-Change-Number: 23555 </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-MessageType: newchange </div>