<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/23811">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  fixeria: Looks good to me, but someone else must approve
  pespin: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pcu: Introduce test TC_n3103_max_t3169<br><br>Related: OS#5033<br>Change-Id: I90661ce249ff2a2040b9e82688cf413eb65e0c8e<br>---<br>M pcu/PCU_Tests.ttcn<br>1 file changed, 103 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn</span><br><span>index e946d96..a466732 100644</span><br><span>--- a/pcu/PCU_Tests.ttcn</span><br><span>+++ b/pcu/PCU_Tests.ttcn</span><br><span>@@ -1418,6 +1418,108 @@</span><br><span>       f_shutdown(__BFILE__, __LINE__, final := true);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Verify after N3103_MAX is reached, T3169 is started and upon timeout TBF is</span><br><span style="color: hsl(120, 100%, 40%);">+   freed and no longer available. Trigger it by sending a few UL blocks CTRL ACKING</span><br><span style="color: hsl(120, 100%, 40%);">+   the final UL ACK sent at us. */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_n3103_max_t3169() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  var PCUIF_info_ind info_ind;</span><br><span style="color: hsl(120, 100%, 40%);">+  var BTS_PDTCH_Block data_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+ var RlcmacDlBlock dl_block;</span><br><span style="color: hsl(120, 100%, 40%);">+   var uint32_t sched_fn;</span><br><span style="color: hsl(120, 100%, 40%);">+        var template (value) TsTrxBtsNum nr;</span><br><span style="color: hsl(120, 100%, 40%);">+  var template RlcmacDlBlock exp_ul_ack;</span><br><span style="color: hsl(120, 100%, 40%);">+        var template UlAckNackGprs exp_ul_ack_sub;</span><br><span style="color: hsl(120, 100%, 40%);">+    var GprsMS ms;</span><br><span style="color: hsl(120, 100%, 40%);">+        const integer N3103_MAX := 2; /* N3103 is usually somewhere 2-5 */</span><br><span style="color: hsl(120, 100%, 40%);">+    var integer N3103 := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+       timer T_3169 := 1.0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Initialize GPRS MS side */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init_gprs_ms();</span><br><span style="color: hsl(120, 100%, 40%);">+     ms := g_ms[0]; /* We only use first MS in this test */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Initialize the PCU interface abstraction */</span><br><span style="color: hsl(120, 100%, 40%);">+        info_ind := valueof(ts_PCUIF_INFO_default(c_PCUIF_Flags_noMCS));</span><br><span style="color: hsl(120, 100%, 40%);">+      info_ind.n3103 := N3103_MAX;</span><br><span style="color: hsl(120, 100%, 40%);">+  info_ind.t3169 := 1;</span><br><span style="color: hsl(120, 100%, 40%);">+  f_init_raw(testcasename(), info_ind);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Establish an Uplink TBF */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ms_establish_ul_tbf(ms);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ms_tx_ul_data_block_multi(ms, 5);</span><br><span style="color: hsl(120, 100%, 40%);">+   exp_ul_ack_sub := tr_UlAckNackGprs(*, tr_AckNackDescription('1'B), *);</span><br><span style="color: hsl(120, 100%, 40%);">+        exp_ul_ack := tr_RLCMAC_UL_ACK_NACK_GPRS(ms.ul_tbf.tfi, exp_ul_ack_sub);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    nr := ts_TsTrxBtsNum;</span><br><span style="color: hsl(120, 100%, 40%);">+ BTS.send(ts_PCUIF_RTS_REQ(nr.bts_nr, nr.trx_nr, nr.ts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+                               sapi := PCU_IF_SAPI_PDTCH, fn := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                           arfcn := f_trxnr2arfcn(valueof(nr.trx_nr)),</span><br><span style="color: hsl(120, 100%, 40%);">+                           block_nr := nr.blk_nr));</span><br><span style="color: hsl(120, 100%, 40%);">+    alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [N3103 < N3103_MAX] BTS.receive(tr_PCUIF_DATA_PDTCH(nr.bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        tr_PCUIF_DATA(nr.trx_nr, nr.ts_nr, sapi := PCU_IF_SAPI_PDTCH),</span><br><span style="color: hsl(120, 100%, 40%);">+                                        exp_ul_ack)) -> value data_msg {</span><br><span style="color: hsl(120, 100%, 40%);">+                if (not f_dl_block_rrbp_valid(data_msg.dl_block)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   setverdict(fail, "Unexpected DL BLOCK has no RRBP: ", data_msg.dl_block);</span><br><span style="color: hsl(120, 100%, 40%);">+                   f_shutdown(__BFILE__, __LINE__);</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%);">+           nr := ts_TsTrxBtsNum;</span><br><span style="color: hsl(120, 100%, 40%);">+         BTS.send(ts_PCUIF_RTS_REQ(nr.bts_nr, nr.trx_nr, nr.ts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+                                       sapi := PCU_IF_SAPI_PDTCH, fn := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   arfcn := f_trxnr2arfcn(valueof(nr.trx_nr)),</span><br><span style="color: hsl(120, 100%, 40%);">+                                   block_nr := nr.blk_nr));</span><br><span style="color: hsl(120, 100%, 40%);">+            N3103 := N3103 + 1;</span><br><span style="color: hsl(120, 100%, 40%);">+           if (N3103 == N3103_MAX) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     /* At this point in time (N3103_MAX reached), PCU is</span><br><span style="color: hsl(120, 100%, 40%);">+                   * moving the TBF to RELEASE state so no data/ctrl for</span><br><span style="color: hsl(120, 100%, 40%);">+                         * it is tx'ed, hence the dummy blocks: */</span><br><span style="color: hsl(120, 100%, 40%);">+                        T_3169.start;</span><br><span style="color: hsl(120, 100%, 40%);">+         }</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%);">+     [N3103 >= N3103_MAX] BTS.receive(tr_PCUIF_DATA_PDTCH(nr.bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+                                       tr_PCUIF_DATA(nr.trx_nr, nr.ts_nr, sapi := PCU_IF_SAPI_PDTCH),</span><br><span style="color: hsl(120, 100%, 40%);">+                                        exp_ul_ack)) -> value data_msg {</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(fail, "Unexpected UL ACK/NACK after reaching N3103_MAX");</span><br><span style="color: hsl(120, 100%, 40%);">+                f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] as_ms_rx_ignore_dummy(ms, nr);</span><br><span style="color: hsl(120, 100%, 40%);">+     [T_3169.running] T_3169.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+             log("T_3169 timeout");</span><br><span style="color: hsl(120, 100%, 40%);">+              /* Done in alt, wait for pending RTS initiated previously in</span><br><span style="color: hsl(120, 100%, 40%);">+           * above case before continuing (expect /* Dummy block): */</span><br><span style="color: hsl(120, 100%, 40%);">+           BTS.receive(tr_PCUIF_DATA_PDTCH(nr.bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+                                            tr_PCUIF_DATA(nr.trx_nr, nr.ts_nr, sapi := PCU_IF_SAPI_PDTCH),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                tr_RLCMAC_DUMMY_CTRL));</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] BTS.receive {</span><br><span style="color: hsl(120, 100%, 40%);">+              setverdict(fail, "Unexpected BTS message");</span><br><span style="color: hsl(120, 100%, 40%);">+         f_shutdown(__BFILE__, __LINE__);</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%);">+   /* Now that T3169 has expired, establishing a Ul TBF should provide same</span><br><span style="color: hsl(120, 100%, 40%);">+       * USFs as per previous TBF since they were freed at expiration time: */</span><br><span style="color: hsl(120, 100%, 40%);">+      var uint3_t old_usf[8] := ms.ul_tbf.usf;</span><br><span style="color: hsl(120, 100%, 40%);">+      var uint5_t old_tfi := ms.ul_tbf.tfi;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ms_establish_ul_tbf(ms);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (old_tfi != ms.ul_tbf.tfi) {</span><br><span style="color: hsl(120, 100%, 40%);">+               setverdict(fail, "Unexpected TFI change: ", ms.ul_tbf.tfi, " vs exp ", old_tfi);</span><br><span style="color: hsl(120, 100%, 40%);">+          f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     for (var integer i := 0; i < 8; i := i +1) {</span><br><span style="color: hsl(120, 100%, 40%);">+               if (ms.ul_tbf.usf[i] != old_usf[i]) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 setverdict(fail, "Unexpected USF change: ", ms.ul_tbf.usf[i], " vs exp ", old_usf[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+                    f_shutdown(__BFILE__, __LINE__);</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%);">+   f_shutdown(__BFILE__, __LINE__, final := true);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Verify that a Downlink TBF is kept available until T3191 fires, at which</span><br><span>  * point the TBF is no longer available. In order to get to start of T3191, we</span><br><span>  * have to wait for x2031 since that marks the IDLE TBF time, that is, the delay</span><br><span>@@ -5667,6 +5769,7 @@</span><br><span>    execute( TC_mcs_max_dl() );</span><br><span>  execute( TC_t3169() );</span><br><span>       execute( TC_n3101_max_t3169() );</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_n3103_max_t3169() );</span><br><span>     execute( TC_x2031_t3191() );</span><br><span>         execute( TC_zero_x2031_t3191() );</span><br><span>    execute( TC_t3193() );</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/23811">change 23811</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/+/23811"/><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: I90661ce249ff2a2040b9e82688cf413eb65e0c8e </div>
<div style="display:none"> Gerrit-Change-Number: 23811 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>