<p>Harald Welte has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14346">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bts: Add test for expiring T200 N200+1 times<br><br>Change-Id: I9e1dbc889575f8952a4581551076829825b3b1cd<br>---<br>M bts/BTS_Tests_LAPDm.ttcn<br>1 file changed, 91 insertions(+), 0 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/46/14346/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bts/BTS_Tests_LAPDm.ttcn b/bts/BTS_Tests_LAPDm.ttcn</span><br><span>index 3ee91c4..b98ef80 100644</span><br><span>--- a/bts/BTS_Tests_LAPDm.ttcn</span><br><span>+++ b/bts/BTS_Tests_LAPDm.ttcn</span><br><span>@@ -847,7 +847,97 @@</span><br><span>  f_testmatrix_each_chan(pars, refers(f_TC_segm_concat_sacch));</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* TS 04.06 Section 5.8.2.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_n200_by_chan_nr(RslChannelNr chan_nr, RslLinkId link_id) return integer {</span><br><span style="color: hsl(120, 100%, 40%);">+  /* SACCH irrespective of physical channel type */</span><br><span style="color: hsl(120, 100%, 40%);">+     if (match(link_id, tr_RslLinkID_SACCH(?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+          return 5;</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     /* DCCH below */</span><br><span style="color: hsl(120, 100%, 40%);">+      select (chan_nr) {</span><br><span style="color: hsl(120, 100%, 40%);">+    case (t_RslChanNr_SDCCH4(?, ?)) { return 23; }</span><br><span style="color: hsl(120, 100%, 40%);">+        case (t_RslChanNr_SDCCH8(?, ?)) { return 23; }</span><br><span style="color: hsl(120, 100%, 40%);">+        case (t_RslChanNr_Bm(?)) { return 34; }</span><br><span style="color: hsl(120, 100%, 40%);">+       case (t_RslChanNr_Lm(?, ?)) { return 29; }</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+     setverdict(fail, "Unknown chan_nr ", chan_nr, " or link_id ", link_id);</span><br><span style="color: hsl(120, 100%, 40%);">+   return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Test if there are exactly N200+1 transmissions of I frames; inspired by 25.2.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_t200_n200(charstring id) runs on ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+  var RslLinkId link_id := valueof(ts_RslLinkID_DCCH(0));</span><br><span style="color: hsl(120, 100%, 40%);">+       var integer sapi := link_id.sapi;</span><br><span style="color: hsl(120, 100%, 40%);">+     var boolean is_sacch := false;</span><br><span style="color: hsl(120, 100%, 40%);">+        if (link_id.c == SACCH) {</span><br><span style="color: hsl(120, 100%, 40%);">+             is_sacch := true;</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     var integer n200 := f_n200_by_chan_nr(g_chan_nr, link_id);</span><br><span style="color: hsl(120, 100%, 40%);">+    var integer num_retrans := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ timer T := 3.0;</span><br><span style="color: hsl(120, 100%, 40%);">+       var default d;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      fp_common_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* some common altstep for meas res and other background noise */</span><br><span style="color: hsl(120, 100%, 40%);">+     d := activate(as_ignore_background(true));</span><br><span style="color: hsl(120, 100%, 40%);">+    RSL.clear;</span><br><span style="color: hsl(120, 100%, 40%);">+    LAPDM.clear;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        var octetstring l3_mo := f_rnd_octstring(20);</span><br><span style="color: hsl(120, 100%, 40%);">+ LAPDM.send(t_PH_DATA(0, is_sacch, ts_LAPDm_SABM(sapi, c_r:=cr_MO_CMD, p:=true, l3:=l3_mo)));</span><br><span style="color: hsl(120, 100%, 40%);">+  RSL.receive(tr_RSL_EST_IND(g_chan_nr, link_id, l3_mo));</span><br><span style="color: hsl(120, 100%, 40%);">+       LAPDM.receive(t_PH_DATA(0, is_sacch, tr_LAPDm_UA(sapi, cr_MT_RSP, f:=true, l3:=l3_mo)));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    var octetstring l3_mt := f_rnd_octstring(20);</span><br><span style="color: hsl(120, 100%, 40%);">+ RSL.send(ts_RSL_DATA_REQ(g_chan_nr, link_id, l3_mt));</span><br><span style="color: hsl(120, 100%, 40%);">+ /* first transmission, P = 0 */</span><br><span style="color: hsl(120, 100%, 40%);">+       LAPDM.receive(t_PH_DATA(0, is_sacch, tr_LAPDm_I(sapi, c_r:=cr_MT_CMD, p:=false,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                       nr:=0, ns:=0, l3:=l3_mt)));</span><br><span style="color: hsl(120, 100%, 40%);">+   deactivate(d);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* re-transmission, P = 1 */</span><br><span style="color: hsl(120, 100%, 40%);">+  [] LAPDM.receive(t_PH_DATA(0, is_sacch,</span><br><span style="color: hsl(120, 100%, 40%);">+                               tr_LAPDm_I(sapi, c_r:=cr_MT_CMD, p:=true, nr:=0, ns:=0, l3:=l3_mt))) {</span><br><span style="color: hsl(120, 100%, 40%);">+                num_retrans := num_retrans + 1;</span><br><span style="color: hsl(120, 100%, 40%);">+               if (num_retrans < n200) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  repeat;</span><br><span style="color: hsl(120, 100%, 40%);">+               } else if (num_retrans == n200) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     T.start; /* wait for some more time if there are more retransmissions */</span><br><span style="color: hsl(120, 100%, 40%);">+                      repeat;</span><br><span style="color: hsl(120, 100%, 40%);">+               } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      /* break */</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%);">+     [] LAPDM.receive(t_PH_DATA(0, false, tr_LAPDm_I(sapi, ?, ?, ?, ?, ?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+              setverdict(fail, "Received unexpected I frame");</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span style="color: hsl(120, 100%, 40%);">+     [not is_sacch] as_lapdm_acch();</span><br><span style="color: hsl(120, 100%, 40%);">+       [is_sacch] as_lapdm_dcch();</span><br><span style="color: hsl(120, 100%, 40%);">+   [] as_lapdm_idle();</span><br><span style="color: hsl(120, 100%, 40%);">+   [] as_rsl_meas_rep();</span><br><span style="color: hsl(120, 100%, 40%);">+ [num_retrans == n200] RSL.receive(tr_RSL_ERROR_IND(g_chan_nr, link_id, '01'O)) {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* break */</span><br><span style="color: hsl(120, 100%, 40%);">+           }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(fail, "Missing RSL RLL ERROR INDICATION");</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 (num_retrans == n200) {</span><br><span style="color: hsl(120, 100%, 40%);">+            setverdict(pass, "Received ", num_retrans, " on channel ", g_chan_nr, " link ", link_id);</span><br><span style="color: hsl(120, 100%, 40%);">+       } else if (num_retrans < n200) {</span><br><span style="color: hsl(120, 100%, 40%);">+           setverdict(fail, "Too few retransmissions (", num_retrans, "); N200=", n200,</span><br><span style="color: hsl(120, 100%, 40%);">+                         " on channel ", g_chan_nr, " link ", link_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%);">+   fp_common_fini();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_t200_n200() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       var ConnHdlrPars pars := valueof(t_Pars(t_RslChanNr_Bm(1), ts_RSL_ChanMode_SIGN));</span><br><span style="color: hsl(120, 100%, 40%);">+    f_testmatrix_each_chan(pars, refers(f_TC_t200_n200));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span> control {</span><br><span>    execute(TC_foo());</span><br><span>@@ -865,6 +955,7 @@</span><br><span>     execute(TC_iframe_timer_recovery());</span><br><span>         execute(TC_segm_concat_dcch());</span><br><span>      execute(TC_segm_concat_sacch());</span><br><span style="color: hsl(120, 100%, 40%);">+      execute(TC_t200_n200());</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/+/14346">change 14346</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/+/14346"/><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: I9e1dbc889575f8952a4581551076829825b3b1cd </div>
<div style="display:none"> Gerrit-Change-Number: 14346 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>