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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bts: Add TC_sms_cb_cmd_cbch_sdcch{4,8}_default_only<br><br>Add a most basic CBCH DEFAULT message test: Ensure *only* the<br>default message is sent if a default is set.<br><br>Related: OS#4011<br>Change-Id: Iab03fa88b759759a493516d43090c4df63f7b06f<br>---<br>M bts/BTS_Tests_SMSCB.ttcn<br>1 file changed, 105 insertions(+), 12 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bts/BTS_Tests_SMSCB.ttcn b/bts/BTS_Tests_SMSCB.ttcn</span><br><span>index 6835f02..34e17be 100644</span><br><span>--- a/bts/BTS_Tests_SMSCB.ttcn</span><br><span>+++ b/bts/BTS_Tests_SMSCB.ttcn</span><br><span>@@ -97,10 +97,15 @@</span><br><span>        mtc.stop;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_cbch_fn2tb(uint32_t fn) return integer</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      return (fn/51) mod 8; /* TS 05.02 Section 6.5.4 */</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Verify the CBCH TB scheduling rules of TS 05.02 Section 6.5.4 */</span><br><span> private function f_cbch_fn_verify(uint32_t fn, CBCH_Block cb)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    var integer tb := (fn/51) mod 8; /* TS 05.02 Section 6.5.4 */</span><br><span style="color: hsl(120, 100%, 40%);">+ var integer tb := f_cbch_fn2tb(fn);</span><br><span>  if (cb.block_type.seq_nr == 15 /* null */) {</span><br><span>                 /* always permitted */</span><br><span>               return;</span><br><span>@@ -115,12 +120,8 @@</span><br><span>       }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* shared function doing the heavy lifting for most CBCH tests */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_TC_smscb(CbchTestPars pars) runs on test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-     var L1ctlDlMessage dl;</span><br><span style="color: hsl(0, 100%, 40%);">-  var boolean cmd_seen_once := false;</span><br><span style="color: hsl(0, 100%, 40%);">-     var integer i, j;</span><br><span style="color: hsl(0, 100%, 40%);">-       timer T := 5.0;</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_smscb_setup(inout CbchTestPars pars) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    var integer i;</span><br><span> </span><br><span>   f_cbch_compute_exp_blocks(pars);</span><br><span> </span><br><span>@@ -153,6 +154,24 @@</span><br><span>                                  valueof(ts_RSL_IE_CbCmdType(msg.rsl_cb_cmd, rsl_last_block));</span><br><span>                RSL_CCHAN.send(ts_RSL_UD(ts_RSL_SMSCB_CMD(cmd_type, msg.payload)));</span><br><span>  }</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 function f_smscb_cleanup() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  /* reset timeslot 0 channel combination to default */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_config2(BSCVTY, {"network", "bts 0", "trx 0", "timeslot 0"},</span><br><span style="color: hsl(120, 100%, 40%);">+                            "phys_chan_config CCCH+SDCCH4");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_vty_config2(BSCVTY, {"network", "bts 0", "trx 0", "timeslot 6"},</span><br><span style="color: hsl(120, 100%, 40%);">+                            "phys_chan_config SDCCH8");</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%);">+/* shared function doing the heavy lifting for most CBCH tests */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_smscb(CbchTestPars pars) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       var L1ctlDlMessage dl;</span><br><span style="color: hsl(120, 100%, 40%);">+        var integer i, j;</span><br><span style="color: hsl(120, 100%, 40%);">+     timer T := 5.0 * int2float(lengthof(pars.msgs));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    f_smscb_setup(pars);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       T.start;</span><br><span>     /* Expect this to show up exactly once on the basic CBCH (four blocks) */</span><br><span>    alt {</span><br><span>@@ -202,11 +221,57 @@</span><br><span>                }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   /* reset timeslot 0 channel combination to default */</span><br><span style="color: hsl(0, 100%, 40%);">-   f_vty_config2(BSCVTY, {"network", "bts 0", "trx 0", "timeslot 0"},</span><br><span style="color: hsl(0, 100%, 40%);">-                              "phys_chan_config CCCH+SDCCH4");</span><br><span style="color: hsl(0, 100%, 40%);">-      f_vty_config2(BSCVTY, {"network", "bts 0", "trx 0", "timeslot 6"},</span><br><span style="color: hsl(0, 100%, 40%);">-                              "phys_chan_config SDCCH8");</span><br><span style="color: hsl(120, 100%, 40%);">+ f_smscb_cleanup();</span><br><span style="color: hsl(120, 100%, 40%);">+    Misc_Helpers.f_shutdown(__BFILE__, __LINE__, 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%);">+private function f_TC_smscb_default_only(CbchTestPars pars) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       var L1ctlDlMessage dl;</span><br><span style="color: hsl(120, 100%, 40%);">+        timer T := 5.0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     f_smscb_setup(pars);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* ensure whatever initial NULL messages have all been drained */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_sleep(5.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ L1CTL.clear;</span><br><span style="color: hsl(120, 100%, 40%);">+</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%);">+ [] L1CTL.receive(tr_L1CTL_DATA_IND(t_RslChanNr_CBCH(0))) -> value dl {</span><br><span style="color: hsl(120, 100%, 40%);">+             var integer tb := f_cbch_fn2tb(dl.dl_info.frame_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+          log("CBCH: ", dl);</span><br><span style="color: hsl(120, 100%, 40%);">+          var CBCH_Block cb := dec_CBCH_Block(dl.payload.data_ind.payload);</span><br><span style="color: hsl(120, 100%, 40%);">+             /* detect the proper CBCH messages; check frame number */</span><br><span style="color: hsl(120, 100%, 40%);">+             f_cbch_fn_verify(dl.dl_info.frame_nr, cb);</span><br><span style="color: hsl(120, 100%, 40%);">+            if (tb >= 4) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     /* skip extended CBCH for now */</span><br><span style="color: hsl(120, 100%, 40%);">+                      repeat;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (not match(cb, tr_CBCH_Block)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   setverdict(fail, "Illegal CBCH Block received: ", cb);</span><br><span style="color: hsl(120, 100%, 40%);">+              } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      var uint4_t rx_seq_nr := cb.block_type.seq_nr;</span><br><span style="color: hsl(120, 100%, 40%);">+                        var template CBCH_Block tr;</span><br><span style="color: hsl(120, 100%, 40%);">+                   if (rx_seq_nr < lengthof(pars.msgs[0].blocks)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                           var CbchBlock b := pars.msgs[0].blocks[rx_seq_nr];</span><br><span style="color: hsl(120, 100%, 40%);">+                            tr := tr_CBCH_Block(b.seq_nr, b.is_last, b.payload);</span><br><span style="color: hsl(120, 100%, 40%);">+                  } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              tr := tr_CBCH_Block(15, ?, ?);</span><br><span style="color: hsl(120, 100%, 40%);">+                        }</span><br><span style="color: hsl(120, 100%, 40%);">+                     if (match(cb, tr)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                          setverdict(pass); /* FIXME: check that all blocks are received? */</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%);">+                              setverdict(fail, "Unexpected CBCH block ", cb, ", expected ", tr);</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%);">+     [] L1CTL.receive { repeat; }</span><br><span style="color: hsl(120, 100%, 40%);">+  [] T.timeout {}</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_smscb_cleanup();</span><br><span style="color: hsl(120, 100%, 40%);">+    /* don't shut down; some tests still want to continue */</span><br><span> }</span><br><span> </span><br><span> private const CbchTestMsgs msgs_1m_1b_norm := {</span><br><span>@@ -260,6 +325,13 @@</span><br><span>        omit }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private const CbchTestMsgs msgs_1m_3b_default := {</span><br><span style="color: hsl(120, 100%, 40%);">+ { RSL_CB_CMD_DEFAULT, 2, '001000320f1141660c344dd3cba09a0c000000000000'O &</span><br><span style="color: hsl(120, 100%, 40%);">+                                '000102030405060708090a0b0c0d0e0f101213141516'O &</span><br><span style="color: hsl(120, 100%, 40%);">+                         '101112131415161718191a1b1c1d1e1f202223242526'O,</span><br><span style="color: hsl(120, 100%, 40%);">+        omit }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* transmit single-block SMSCB COMMAND */</span><br><span> testcase TC_sms_cb_cmd_sdcch4_1block() runs on test_CT {</span><br><span>       var CbchTestPars pars := {</span><br><span>@@ -356,6 +428,25 @@</span><br><span>    f_TC_smscb(pars);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* set a DEFAULT message; verify it gets transmitted all the time */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_sms_cb_cmd_sdcch4_default_only() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      var CbchTestPars pars := {</span><br><span style="color: hsl(120, 100%, 40%);">+            use_sdcch4 := true,</span><br><span style="color: hsl(120, 100%, 40%);">+           msgs := msgs_1m_3b_default</span><br><span style="color: hsl(120, 100%, 40%);">+    };</span><br><span style="color: hsl(120, 100%, 40%);">+    f_TC_smscb_default_only(pars);</span><br><span style="color: hsl(120, 100%, 40%);">+        Misc_Helpers.f_shutdown(__BFILE__, __LINE__, pass);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_sms_cb_cmd_sdcch8_default_only() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        var CbchTestPars pars := {</span><br><span style="color: hsl(120, 100%, 40%);">+            use_sdcch4 := true,</span><br><span style="color: hsl(120, 100%, 40%);">+           msgs := msgs_1m_3b_default</span><br><span style="color: hsl(120, 100%, 40%);">+    };</span><br><span style="color: hsl(120, 100%, 40%);">+    f_TC_smscb_default_only(pars);</span><br><span style="color: hsl(120, 100%, 40%);">+        Misc_Helpers.f_shutdown(__BFILE__, __LINE__, 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%);">+</span><br><span> /* SMSCB TODO:</span><br><span>    * multiple SMS BC CMD at the same time: Ensure all of them are sent exactly once</span><br><span>    * extended CBCH vs. normal CBCH</span><br><span>@@ -369,6 +460,7 @@</span><br><span>      execute( TC_sms_cb_cmd_sdcch4_4block() );</span><br><span>    execute( TC_sms_cb_cmd_sdcch4_multi() );</span><br><span>     execute( TC_sms_cb_cmd_sdcch4_schedule() );</span><br><span style="color: hsl(120, 100%, 40%);">+   execute( TC_sms_cb_cmd_sdcch4_default_only() );</span><br><span>      if (false) { /* FIXME: SDCCH/8 support broken, needs trxcon + L1CTL work */</span><br><span>  execute( TC_sms_cb_cmd_sdcch8_1block() );</span><br><span>    execute( TC_sms_cb_cmd_sdcch8_2block() );</span><br><span>@@ -376,6 +468,7 @@</span><br><span>      execute( TC_sms_cb_cmd_sdcch8_4block() );</span><br><span>    execute( TC_sms_cb_cmd_sdcch8_multi() );</span><br><span>     execute( TC_sms_cb_cmd_sdcch8_schedule() );</span><br><span style="color: hsl(120, 100%, 40%);">+   execute( TC_sms_cb_cmd_sdcch8_default_only() );</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/14102">change 14102</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/14102"/><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: Iab03fa88b759759a493516d43090c4df63f7b06f </div>
<div style="display:none"> Gerrit-Change-Number: 14102 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </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>