<p>Harald Welte has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/14190">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Fully implement TC_pcu_data_req_{wrong_{bts,trx,ts},ts_inactive}()<br><br>The four existing test in BTS_Tests.ttcn so far didn't have any chance<br>to verify if the invalid messages actually ended up on the air interface<br>or not.  By moving them to BTS_Tests_virtphy, we can finally add that<br>missing part.<br><br>Change-Id: Ie05d6b1530bd4d4cf4eaa574b068870682439ee4<br>Related: OS#4023<br>---<br>M bts/BTS_Tests.ttcn<br>M bts/BTS_Tests_virtphy.ttcn<br>2 files changed, 81 insertions(+), 48 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/90/14190/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn</span><br><span>index a555a83..f4f828f 100644</span><br><span>--- a/bts/BTS_Tests.ttcn</span><br><span>+++ b/bts/BTS_Tests.ttcn</span><br><span>@@ -3307,45 +3307,6 @@</span><br><span>     }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* Send DATA.req on invalid BTS */</span><br><span style="color: hsl(0, 100%, 40%);">-testcase TC_pcu_data_req_wrong_bts() runs on test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-      f_init_pcu_test();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      f_TC_pcu_act_req(0, 0, 7, true);</span><br><span style="color: hsl(0, 100%, 40%);">-        f_pcu_data_req(23, 0, 7, 0, 0, PCU_IF_SAPI_PDTCH, c_PCU_DATA);</span><br><span style="color: hsl(0, 100%, 40%);">-  /* FIXME: how to check this wasn't actually sent and didn't crash BTS? */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_sleep(10.0);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Send DATA.req on invalid TRX */</span><br><span style="color: hsl(0, 100%, 40%);">-testcase TC_pcu_data_req_wrong_trx() runs on test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">- f_init_pcu_test();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      f_TC_pcu_act_req(0, 0, 7, true);</span><br><span style="color: hsl(0, 100%, 40%);">-        f_pcu_data_req(0, 100, 7, 0, 0, PCU_IF_SAPI_PDTCH, c_PCU_DATA);</span><br><span style="color: hsl(0, 100%, 40%);">- /* FIXME: how to check this wasn't actually sent and didn't crash BTS? */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_sleep(10.0);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Send DATA.req on invalid timeslot */</span><br><span style="color: hsl(0, 100%, 40%);">-testcase TC_pcu_data_req_wrong_ts() runs on test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-     f_init_pcu_test();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      f_TC_pcu_act_req(0, 0, 7, true);</span><br><span style="color: hsl(0, 100%, 40%);">-        f_pcu_data_req(0, 0, 70, 0, 0, PCU_IF_SAPI_PDTCH, c_PCU_DATA);</span><br><span style="color: hsl(0, 100%, 40%);">-  /* FIXME: how to check this wasn't actually sent and didn't crash BTS? */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_sleep(10.0);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Send DATA.req on timeslot that hasn't been activated */</span><br><span style="color: hsl(0, 100%, 40%);">-testcase TC_pcu_data_req_ts_inactive() runs on test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-   f_init_pcu_test();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      f_pcu_data_req(0, 0, 7, 0, 0, PCU_IF_SAPI_PDTCH, c_PCU_DATA);</span><br><span style="color: hsl(0, 100%, 40%);">-   /* FIXME: how to check this wasn't actually sent and didn't crash BTS? */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_sleep(2.0);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /* Send AGCH from PCU; check it appears on Um side */</span><br><span> testcase TC_pcu_data_req_agch() runs on test_CT {</span><br><span>         timer T := 3.0;</span><br><span>@@ -4965,10 +4926,6 @@</span><br><span>             execute( TC_pcu_deact_req() );</span><br><span>               execute( TC_pcu_deact_req_wrong_ts() );</span><br><span>              execute( TC_pcu_ver_si13() );</span><br><span style="color: hsl(0, 100%, 40%);">-           execute( TC_pcu_data_req_wrong_bts() );</span><br><span style="color: hsl(0, 100%, 40%);">-         execute( TC_pcu_data_req_wrong_trx() );</span><br><span style="color: hsl(0, 100%, 40%);">-         execute( TC_pcu_data_req_wrong_ts() );</span><br><span style="color: hsl(0, 100%, 40%);">-          execute( TC_pcu_data_req_ts_inactive() );</span><br><span>            execute( TC_pcu_data_req_agch() );</span><br><span>           execute( TC_pcu_data_req_imm_ass_pch() );</span><br><span>            execute( TC_pcu_rach_content() );</span><br><span>diff --git a/bts/BTS_Tests_virtphy.ttcn b/bts/BTS_Tests_virtphy.ttcn</span><br><span>index fd82d6e..33b37e0 100644</span><br><span>--- a/bts/BTS_Tests_virtphy.ttcn</span><br><span>+++ b/bts/BTS_Tests_virtphy.ttcn</span><br><span>@@ -39,25 +39,37 @@</span><br><span>  ***********************************************************************/</span><br><span> </span><br><span> private function f_pcu_to_l1(uint8_t bts_nr, uint8_t trx_nr, uint8_t ts_nr,</span><br><span style="color: hsl(0, 100%, 40%);">-                         PCUIF_Sapi sapi, octetstring data) runs on test_CT</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(120, 100%, 40%);">+                           PCUIF_Sapi sapi, octetstring data, boolean expect_data := true,</span><br><span style="color: hsl(120, 100%, 40%);">+                       boolean wait_rts := true)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on test_CT {</span><br><span>    timer T := 5.0;</span><br><span style="color: hsl(120, 100%, 40%);">+       var L1ctlDlMessage rx_dl;</span><br><span> </span><br><span>        PCU.clear;</span><br><span style="color: hsl(0, 100%, 40%);">-      f_pcu_wait_rts_and_data_req(bts_nr, trx_nr, ts_nr, sapi, data);</span><br><span style="color: hsl(120, 100%, 40%);">+       if (wait_rts) {</span><br><span style="color: hsl(120, 100%, 40%);">+               f_pcu_wait_rts_and_data_req(bts_nr, trx_nr, ts_nr, sapi, data);</span><br><span style="color: hsl(120, 100%, 40%);">+       } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              f_pcu_data_req(bts_nr, trx_nr, ts_nr, 0, 0, sapi, data);</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span> </span><br><span>        T.start;</span><br><span>     alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] L1CTL.receive(tr_L1CTL_DATA_IND(t_RslChanNr_PDCH(ts_nr), ?, data)) {</span><br><span style="color: hsl(120, 100%, 40%);">+       [expect_data] L1CTL.receive(tr_L1CTL_DATA_IND(t_RslChanNr_PDCH(ts_nr), ?, data)) {</span><br><span>           /* FIXME: why is fn of DATA_IND different to fn of RTS / DATA_REQ above? */</span><br><span>          setverdict(pass);</span><br><span>            }</span><br><span style="color: hsl(120, 100%, 40%);">+     [not expect_data] L1CTL.receive(tr_L1CTL_DATA_IND(t_RslChanNr_PDCH(ts_nr), ?, data)) -> value rx_dl {</span><br><span style="color: hsl(120, 100%, 40%);">+              setverdict(fail, "Received unexpected ", rx_dl);</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span>    [] L1CTL.receive {</span><br><span>           repeat;</span><br><span>              }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+        [expect_data] T.timeout {</span><br><span>            setverdict(fail, "Timeout waiting for ", data);</span><br><span>            }</span><br><span style="color: hsl(120, 100%, 40%);">+     [not expect_data] 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>    }</span><br><span> }</span><br><span> </span><br><span>@@ -105,12 +117,76 @@</span><br><span>   f_pcu_to_l1(0, 0, 7, PCU_IF_SAPI_PTCCH, data);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Send DATA.req on invalid BTS */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_pcu_data_req_wrong_bts() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   var TfiUsfArr tua := f_TfiUsfArrInit();</span><br><span style="color: hsl(120, 100%, 40%);">+       var octetstring data := '0000'O & f_rnd_octstring(21);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  f_virtphy_common();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ f_TC_pcu_act_req(0, 0, 7, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_TfiUsfArrSet(tua, 7, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_L1CTL_TBF_CFG(L1CTL, false, tua);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_pcu_to_l1(23, 0, 7, PCU_IF_SAPI_PDTCH, data, false, false);</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 DATA.req on invalid TRX */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_pcu_data_req_wrong_trx() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        var TfiUsfArr tua := f_TfiUsfArrInit();</span><br><span style="color: hsl(120, 100%, 40%);">+       var octetstring data := '0000'O & f_rnd_octstring(21);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  f_virtphy_common();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ f_TC_pcu_act_req(0, 0, 7, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_TfiUsfArrSet(tua, 7, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_L1CTL_TBF_CFG(L1CTL, false, tua);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_pcu_to_l1(0, 100, 7, PCU_IF_SAPI_PDTCH, data, false, false);</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 DATA.req on invalid timeslot */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_pcu_data_req_wrong_ts() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   var TfiUsfArr tua := f_TfiUsfArrInit();</span><br><span style="color: hsl(120, 100%, 40%);">+       var octetstring data := '0000'O & f_rnd_octstring(21);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  f_virtphy_common();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ f_TC_pcu_act_req(0, 0, 7, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_TfiUsfArrSet(tua, 7, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_L1CTL_TBF_CFG(L1CTL, false, tua);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_pcu_to_l1(0, 0, 70, PCU_IF_SAPI_PDTCH, data, false, false);</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 DATA.req on timeslot that hasn't been activated */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_pcu_data_req_ts_inactive() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  var TfiUsfArr tua := f_TfiUsfArrInit();</span><br><span style="color: hsl(120, 100%, 40%);">+       var octetstring data := '0000'O & f_rnd_octstring(21);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  f_virtphy_common();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ f_TfiUsfArrSet(tua, 7, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_L1CTL_TBF_CFG(L1CTL, false, tua);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_pcu_to_l1(0, 0, 7, PCU_IF_SAPI_PDTCH, data, false, false);</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> </span><br><span> </span><br><span> control {</span><br><span>     if (mp_pcu_socket != "") {</span><br><span>                 execute( TC_pcu_data_req_pdtch() );</span><br><span>          execute( TC_pcu_data_req_ptcch() );</span><br><span style="color: hsl(120, 100%, 40%);">+           execute( TC_pcu_data_req_wrong_bts() );</span><br><span style="color: hsl(120, 100%, 40%);">+               execute( TC_pcu_data_req_wrong_trx() );</span><br><span style="color: hsl(120, 100%, 40%);">+               execute( TC_pcu_data_req_wrong_ts() );</span><br><span style="color: hsl(120, 100%, 40%);">+                execute( TC_pcu_data_req_ts_inactive() );</span><br><span>    } else {</span><br><span>             log("PCU socket path not available, skipping PCU tests");</span><br><span>  }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/14190">change 14190</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/14190"/><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: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ie05d6b1530bd4d4cf4eaa574b068870682439ee4 </div>
<div style="display:none"> Gerrit-Change-Number: 14190 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>