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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bts: Early terminate TC_rec_invalid_frame on error<br><br>Extra debugging is added because otherwise it's extremely difficul to<br>find at which state the test is when debugging sporadic failures.<br><br>In f_TC_rec_invalid_frame, timer T is reused because it was actually not<br>being used before, only defined in there.<br><br>Change-Id: If24a81bf20d293b87adf9f37111fc7d344f169f5<br>---<br>M bts/BTS_Tests_LAPDm.ttcn<br>1 file changed, 32 insertions(+), 21 deletions(-)<br><br></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 da78ccb..4d4a988 100644</span><br><span>--- a/bts/BTS_Tests_LAPDm.ttcn</span><br><span>+++ b/bts/BTS_Tests_LAPDm.ttcn</span><br><span>@@ -813,11 +813,16 @@</span><br><span>  f_testmatrix_each_chan(pars, refers(f_TC_nr_seq_error));</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function f_TC_rec_invalid_frame_txrx(integer sapi, LapdmFrame x) runs on ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_rec_invalid_frame_txrx(integer sapi, LapdmFrame x, integer line_nr) runs on ConnHdlr {</span><br><span>   LAPDM.send(t_PH_DATA(0, false, x));</span><br><span>  f_sleep(2.0); // T200</span><br><span>        LAPDM.send(t_PH_DATA(0, false, ts_LAPDm_RR(sapi, c_r:=cr_MO_CMD, p:=true, nr:=0)));</span><br><span style="color: hsl(0, 100%, 40%);">-     LAPDM.receive(t_PH_DATA(0, false, tr_LAPDm_RR(sapi, c_r:=cr_MT_RSP, p:=true , nr := 0)));</span><br><span style="color: hsl(120, 100%, 40%);">+     timer T1 := 2.0;</span><br><span style="color: hsl(120, 100%, 40%);">+      T1.start;</span><br><span style="color: hsl(120, 100%, 40%);">+     alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] LAPDM.receive(t_PH_DATA(0, false, tr_LAPDm_RR(sapi, c_r:=cr_MT_RSP, p:=true , nr := 0))) { T1.stop; }</span><br><span style="color: hsl(120, 100%, 40%);">+      [] T1.timeout{ Misc_Helpers.f_shutdown(__BFILE__, line_nr, fail, "Missing LAPDm_RR RSP"); }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> }</span><br><span> </span><br><span> /* 25.2.7     Test on receipt of invalid frames</span><br><span>@@ -842,84 +847,90 @@</span><br><span> </span><br><span>    /* MO Establish Request via LADPm: SAPI = 0, C = 0, P = 1, M = 0, 0 ≤ L ≤ N201.. */</span><br><span>      LAPDM.send(t_PH_DATA(0, false, ts_LAPDm_SABM(sapi, c_r:=cr_MO_CMD, p:=true, l3:=l3_mo)));</span><br><span style="color: hsl(0, 100%, 40%);">-       RSL.receive(tr_RSL_EST_IND(g_chan_nr, link_id, l3_mo));</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%);">+ [] RSL.receive(tr_RSL_EST_IND(g_chan_nr, link_id, l3_mo)) {}</span><br><span style="color: hsl(120, 100%, 40%);">+  [] T.timeout{ Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Missing RSL EST IND"); }</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     alt {</span><br><span>        /* UA: SAPI = 0, R = 0, F = 1, M = 0, L = L of SABM. */</span><br><span style="color: hsl(0, 100%, 40%);">- LAPDM.receive(t_PH_DATA(0, false, tr_LAPDm_UA(sapi, cr_MT_RSP, f:=true, l3:=l3_mo)));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+ [] LAPDM.receive(t_PH_DATA(0, false, tr_LAPDm_UA(sapi, cr_MT_RSP, f:=true, l3:=l3_mo))) { T.stop; }</span><br><span style="color: hsl(120, 100%, 40%);">+   [] T.timeout{ Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Missing LAPDm UA RSP"); }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> </span><br><span>        /* 1: One RR frame: SAPI = 0, R = 0, F = 0, M = 0, L > 0, N(R) = 1.</span><br><span>       RR frame with the Length indicator greater than zero and a faulty N(R); */</span><br><span>   var LapdmFrame x:= valueof(ts_LAPDm_RR(sapi, c_r:=cr_MO_CMD, p:=false, nr:=1));</span><br><span>      x.ab.payload := f_rnd_octstring(5);</span><br><span style="color: hsl(0, 100%, 40%);">-     f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_TC_rec_invalid_frame_txrx(0, x, __LINE__);</span><br><span>         /* 3: One REJ frame: SAPI = 0, R = 0, F = 0, M = 0, L = 0, N(R) = 1, EA = 0.</span><br><span>         EJ frame with the EA bit set to zero and a faulty N(R); */</span><br><span>   x:= valueof(ts_LAPDm_REJ(sapi, c_r:=cr_MO_CMD, p:=false, nr:=1));</span><br><span>    x.ab.addr.ea := false;</span><br><span style="color: hsl(0, 100%, 40%);">-  f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_TC_rec_invalid_frame_txrx(0, x, __LINE__);</span><br><span>         /* 4: One SABM frame: SAPI = 0, C = 1, P = 1, M = 0, L = 0, EL = 0.</span><br><span>  SABM frame with the EL bit set to zero; */</span><br><span>   l3_mo := ''O;</span><br><span>        x:= valueof(ts_LAPDm_SABM(sapi, c_r:=cr_MO_CMD, p:=true, l3:=l3_mo));</span><br><span>        x.ab.el := 0;</span><br><span style="color: hsl(0, 100%, 40%);">-   f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_TC_rec_invalid_frame_txrx(0, x, __LINE__);</span><br><span>         /* 5: One DM frame: SAPI = 0, R = 0, F = 1, M = 0, L > 0.</span><br><span>         DM frame with the Length indicator greater than zero;*/</span><br><span>      x:= valueof(ts_LAPDm_DM(sapi, c_r:=cr_MO_CMD, f:=true));</span><br><span>     x.ab.payload := f_rnd_octstring(5);</span><br><span style="color: hsl(0, 100%, 40%);">-     f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_TC_rec_invalid_frame_txrx(0, x, __LINE__);</span><br><span>         /* 6: One DISC frame: SAPI = 0, C = 1, P = 1, M = 1, L = 0.</span><br><span>  DISC frame with the M bit set to 1; */</span><br><span>       x:= valueof(ts_LAPDm_DISC(sapi, c_r:=cr_MO_CMD, p:=true));</span><br><span>   x.ab.m := true;</span><br><span style="color: hsl(0, 100%, 40%);">- f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_TC_rec_invalid_frame_txrx(0, x, __LINE__);</span><br><span>         /* 7: One UA frame: SAPI = 0, R = 0, F = 0, M = 0, L = 0, EA = 0.</span><br><span>    UA frame with the EA bit set to zero*/</span><br><span>       x:= valueof(ts_LAPDm_UA(sapi, c_r:=cr_MO_CMD, f:=false, l3:=''O));</span><br><span>   x.ab.addr.ea := false;</span><br><span style="color: hsl(0, 100%, 40%);">-  f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_TC_rec_invalid_frame_txrx(0, x, __LINE__);</span><br><span>         /* 8: One I frame: SAPI = 0, C = 1, P = 0, M = 0, L > N201, N(R) = 0, N(S) = 6.</span><br><span>   I frame with the Length indicator greater than N201;*/</span><br><span>       x:= valueof(ts_LAPDm_I(sapi, c_r:=cr_MO_CMD, p:=true, nr := 0, ns := 6, l3 := f_rnd_octstring(25)))</span><br><span style="color: hsl(0, 100%, 40%);">-     f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_TC_rec_invalid_frame_txrx(0, x, __LINE__);</span><br><span>         /* 9: One I frame: SAPI = 0, C = 1, P = 0, M = 1, L < N201, N(R) = 0, N(S) = 7.</span><br><span>   I frame with the M bit set to 1 and the Length indicator less than N201;*/</span><br><span>   x:= valueof(ts_LAPDm_I(sapi, c_r:=cr_MO_CMD, p:=true, nr := 0, ns := 7, l3 := f_rnd_octstring(5)))</span><br><span>   x.ab.m := true;</span><br><span style="color: hsl(0, 100%, 40%);">- f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_TC_rec_invalid_frame_txrx(0, x, __LINE__);</span><br><span>         /* 10: One RR frame: SAPI = 0, C = 1, P = 1, M = 0, L = 0, N(R) = 0. */</span><br><span>      x:= valueof(ts_LAPDm_RR(sapi, c_r:=cr_MO_CMD, p:=true, nr:=0));</span><br><span style="color: hsl(0, 100%, 40%);">- f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_TC_rec_invalid_frame_txrx(0, x, __LINE__);</span><br><span> </span><br><span>     /* command frames with correct Address and Length indicator field and a non-implemented control field */</span><br><span>     /* 12: One command frame with Control Field = xxx1 1101. */</span><br><span>  x:= valueof(ts_LAPDm_RR(sapi, c_r:=cr_MO_CMD, p:=false, nr:=1));</span><br><span>     x.ab.ctrl.other := bit2int('00011101'B);</span><br><span style="color: hsl(0, 100%, 40%);">-        f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_TC_rec_invalid_frame_txrx(0, x, __LINE__);</span><br><span>         /* 13: One command frame with Control field = xxx1 1011. */</span><br><span>  x:= valueof(ts_LAPDm_RR(sapi, c_r:=cr_MO_CMD, p:=false, nr:=1));</span><br><span>     x.ab.ctrl.other := bit2int('00011011'B);</span><br><span style="color: hsl(0, 100%, 40%);">-        f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_TC_rec_invalid_frame_txrx(0, x, __LINE__);</span><br><span>         /* 14: One command frame with Control field = xxx1 0111. */</span><br><span>  x:= valueof(ts_LAPDm_RR(sapi, c_r:=cr_MO_CMD, p:=false, nr:=1));</span><br><span>     x.ab.ctrl.other := bit2int('00010001'B);</span><br><span style="color: hsl(0, 100%, 40%);">-        f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_TC_rec_invalid_frame_txrx(0, x, __LINE__);</span><br><span>         /* 15: One command frame with Control field = 01x1 1111. */</span><br><span>  x:= valueof(ts_LAPDm_RR(sapi, c_r:=cr_MO_CMD, p:=false, nr:=1));</span><br><span>     x.ab.ctrl.other := bit2int('01011111'B);</span><br><span style="color: hsl(0, 100%, 40%);">-        f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_TC_rec_invalid_frame_txrx(0, x, __LINE__);</span><br><span>         /* 16: One command frame with Control field = 1xx1 1111. */</span><br><span>  x:= valueof(ts_LAPDm_RR(sapi, c_r:=cr_MO_CMD, p:=false, nr:=1));</span><br><span>     x.ab.ctrl.other := bit2int('10011111'B);</span><br><span style="color: hsl(0, 100%, 40%);">-        f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_TC_rec_invalid_frame_txrx(0, x, __LINE__);</span><br><span>         /* 17: One command frame with Control field = 0011 0011. */</span><br><span>  x:= valueof(ts_LAPDm_RR(sapi, c_r:=cr_MO_CMD, p:=false, nr:=1));</span><br><span>     x.ab.ctrl.other := bit2int('00110011'B);</span><br><span style="color: hsl(0, 100%, 40%);">-        f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_TC_rec_invalid_frame_txrx(0, x, __LINE__);</span><br><span>         /* 18: One command frame with Control field = 1xx1 0011. */</span><br><span>  x:= valueof(ts_LAPDm_RR(sapi, c_r:=cr_MO_CMD, p:=false, nr:=1));</span><br><span>     x.ab.ctrl.other := bit2int('10010011'B);</span><br><span style="color: hsl(0, 100%, 40%);">-        f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_TC_rec_invalid_frame_txrx(0, x, __LINE__);</span><br><span> </span><br><span>     deactivate(d);</span><br><span>       fp_common_fini();</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/16529">change 16529</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/+/16529"/><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: If24a81bf20d293b87adf9f37111fc7d344f169f5 </div>
<div style="display:none"> Gerrit-Change-Number: 16529 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </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: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>