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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc: Call f_shutdown_helper() on all tests missing it<br><br>This should hopefully avoid sporadic errors during tear down of tests<br>such as TC_si_acc_rotate.<br><br>Change-Id: I8c8a1061b546576b7a5c4b11f20dfc887aaab6e0<br>---<br>M bsc/BSC_Tests.ttcn<br>1 file changed, 145 insertions(+), 53 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn</span><br><span>index 9e0fae3..7f670d2 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -1148,7 +1148,7 @@</span><br><span> </span><br><span>   IPA_RSL[0].send(ts_ASP_RSL_UD(ts_RSL_CHAN_RQD('23'O, 23)));</span><br><span>  rsl_unused := f_exp_ipa_rx(0, tr_RSL_MsgTypeD(RSL_MT_CHAN_ACTIV));</span><br><span style="color: hsl(0, 100%, 40%);">-      setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* verify if the "chreq:total" counter increments as expected */</span><br><span>@@ -1164,7 +1164,7 @@</span><br><span>  rsl_unused := f_exp_ipa_rx(0, tr_RSL_MsgTypeD(RSL_MT_CHAN_ACTIV));</span><br><span>   f_ctrl_get_exp_ratectr_abs(IPA_CTRL, "bts", 0, "chreq:total", chreq_total+1);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* CHAN RQD -> CHAN ACT -> CHAN ACT ACK -> RF CHAN REL */</span><br><span>@@ -1177,7 +1177,7 @@</span><br><span>  /* expect BSC to disable the channel again if there's no RLL EST IND */</span><br><span>  rx_rsl := f_exp_ipa_rx(0, tr_RSL_MsgTypeD(RSL_MT_RF_CHAN_REL), T3101_MAX);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Normal variant */</span><br><span>@@ -1236,7 +1236,7 @@</span><br><span>        /* expect BSC to disable the channel again if there's no response from MSC */</span><br><span>    /* MS waits 20s (T3210) at LU; 10s (T3230) at CM SERV REQ and 5s (T3220) AT detach */</span><br><span>        f_expect_chan_rel(0, chan_nr, expect_rll_rel_req := false);</span><br><span style="color: hsl(0, 100%, 40%);">-     setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Test behavior if MSC answers with CREF to CR */</span><br><span>@@ -1257,7 +1257,7 @@</span><br><span> </span><br><span>      /* expect BSC to disable the channel */</span><br><span>      f_expect_chan_rel(0, chan_nr, expect_rll_rel_req := false);</span><br><span style="color: hsl(0, 100%, 40%);">-     setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* CHAN RQD -> CHAN ACT -> CHAN ACT NACK -> RF CHAN REL */</span><br><span>@@ -1280,7 +1280,7 @@</span><br><span> </span><br><span>     f_ctrl_get_exp_ratectr_abs(IPA_CTRL, "bts", 0, "chan_act:nack", chact_nack+1);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Test for channel exhaustion due to RACH overload */</span><br><span>@@ -1329,6 +1329,7 @@</span><br><span>              }</span><br><span>    [] IPA_RSL[0].receive { repeat; }</span><br><span>    }</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Test channel deactivation due to silence from MS */</span><br><span>@@ -1360,6 +1361,7 @@</span><br><span>              setverdict(fail, "Unexpected RSL message!");</span><br><span>               }</span><br><span>    }</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /***********************************************************************</span><br><span>@@ -1374,7 +1376,7 @@</span><br><span>    BSSAP.send(ts_BSSAP_CONNECT_req(g_bssap[bssap_idx].sccp_addr_peer, g_bssap[bssap_idx].sccp_addr_own,</span><br><span>                                         2342, ts_BSSMAP_AssignmentReq));</span><br><span>     BSSAP.receive(tr_BSSAP_DISC_ind(2342, ?, ?));</span><br><span style="color: hsl(0, 100%, 40%);">-   setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Test behavior if MSC answers with CREF to CR */</span><br><span>@@ -1405,6 +1407,7 @@</span><br><span>          }</span><br><span>    [] BSSAP.receive { repeat; }</span><br><span>         }</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* generate an assignment request for either AoIP or SCCPlite */</span><br><span>@@ -1492,6 +1495,7 @@</span><br><span>    ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelTypeCSD);</span><br><span>    //exp_fail.pdu.bssmap.assignmentFailure.cause.causeValue := int2bit(enum2int(GSM0808_CAUSE_REQ_CODEC_TYPE_OR_CONFIG_UNAVAIL), 7);</span><br><span>    f_assignment_exp(ass_cmd, exp_fail, "BSC accepted Assignment for CSD");</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_assignment_ctm() runs on test_CT {</span><br><span>@@ -1500,6 +1504,7 @@</span><br><span>      ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelTypeCTM);</span><br><span>    //exp_fail.pdu.bssmap.assignmentFailure.cause.causeValue := int2bit(enum2int(GSM0808_CAUSE_REQ_CODEC_TYPE_OR_CONFIG_UNAVAIL), 7);</span><br><span>    f_assignment_exp(ass_cmd, exp_fail, "BSC accepted Assignment for Speech+CTM");</span><br><span style="color: hsl(120, 100%, 40%);">+      f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> type record DchanTuple {</span><br><span>@@ -1577,7 +1582,7 @@</span><br><span>    /* wait for SCCP emulation to do its job */</span><br><span>  f_sleep(1.0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Test behavior of channel release after CONN FAIL IND from BTS */</span><br><span>@@ -1606,7 +1611,7 @@</span><br><span>         /* wait for SCCP emulation to do its job */</span><br><span>  f_sleep(1.0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Test behavior of early CONN FAIL IND from BTS (before EST IND!) */</span><br><span>@@ -1629,7 +1634,7 @@</span><br><span>       /* BTS<-BSC: respond with CHAN REL ACK */</span><br><span>         f_ipa_tx(0, ts_RSL_RF_CHAN_REL_ACK(dt.rsl_chan_nr));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Test behavior of late CONN FAIL IND from BTS (ater REL IND!) */</span><br><span>@@ -1662,7 +1667,7 @@</span><br><span>  /* BSC<-MSC: MSC disconnects as requested. */</span><br><span>     BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> function f_expect_chan_rel(integer bts_nr, RslChannelNr rsl_chan_nr,</span><br><span>@@ -1797,7 +1802,7 @@</span><br><span>        }</span><br><span> </span><br><span>        f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false);</span><br><span style="color: hsl(0, 100%, 40%);">-      setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Test behavior of channel release after Clear Command with CSFB indicator from MSC */</span><br><span>@@ -1820,7 +1825,7 @@</span><br><span>     }</span><br><span> </span><br><span>        f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false, is_csfb := true);</span><br><span style="color: hsl(0, 100%, 40%);">-     setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Test behavior of channel release after hard RLSD from MSC */</span><br><span>@@ -1835,7 +1840,7 @@</span><br><span>     BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));</span><br><span> </span><br><span>       f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false);</span><br><span style="color: hsl(0, 100%, 40%);">-      setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Test behavior of channel release after hard RLSD from MSC and MS is not responding to RLL REL REQ */</span><br><span>@@ -1850,7 +1855,7 @@</span><br><span>     BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));</span><br><span> </span><br><span>       f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false);</span><br><span style="color: hsl(0, 100%, 40%);">-      setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Test behavior of channel release after BSSMAP RESET from MSC */</span><br><span>@@ -1872,7 +1877,7 @@</span><br><span>  }</span><br><span> </span><br><span>        f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false);</span><br><span style="color: hsl(0, 100%, 40%);">-      setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Verify T(iar) triggers and releases the channel */</span><br><span>@@ -1889,7 +1894,7 @@</span><br><span> </span><br><span>   dt := f_est_dchan('23'O, 23, '00010203040506'O);</span><br><span>     f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false);</span><br><span style="color: hsl(0, 100%, 40%);">-      setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> private function f_tc_chan_rel_rr_cause(myBSSMAP_Cause clear_cmd_cause, template RR_Cause expect_rr_cause)</span><br><span>@@ -1905,7 +1910,7 @@</span><br><span>  }</span><br><span> </span><br><span>        f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false, expect_rr_cause := expect_rr_cause);</span><br><span style="color: hsl(0, 100%, 40%);">-  setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Test that Clear Command cause codes affect the RR Channel Release cause code */</span><br><span>@@ -1940,7 +1945,7 @@</span><br><span>  [] T.timeout {}</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Test behavior if RSL EST IND for invalid SAPI */</span><br><span>@@ -1965,7 +1970,7 @@</span><br><span>         [] T.timeout {}</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Test behavior if RSL EST IND for invalid SAPI */</span><br><span>@@ -1989,7 +1994,7 @@</span><br><span>         [] T.timeout {}</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Test behavior if RSL EST IND for invalid SACCH */</span><br><span>@@ -2013,7 +2018,7 @@</span><br><span>        [] T.timeout {}</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> private function f_exp_sapi_n_reject(template (present) GsmSapi sapi := ?,</span><br><span>@@ -2070,7 +2075,7 @@</span><br><span>  BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));</span><br><span>   f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Check if we get SAPI N Reject on receipt of unexpected RLL ERROR INDication */</span><br><span>@@ -2098,7 +2103,7 @@</span><br><span>   BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));</span><br><span>   f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Check if we get SAPI N Reject due to a SAPI=3 link establishment timeout */</span><br><span>@@ -2124,12 +2129,13 @@</span><br><span>    BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));</span><br><span>   f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_si_default() runs on test_CT {</span><br><span>  f_init(0);</span><br><span>   f_init_bts_and_check_sysinfo(0, expect_si := SystemInformationConfig_default);</span><br><span style="color: hsl(120, 100%, 40%);">+        f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* We're testing SI2quater with lists of EARFCNs. Instead of just incrementing EARFCNs, also pick some from the edges of</span><br><span>@@ -2239,46 +2245,57 @@</span><br><span> </span><br><span> testcase TC_si2quater_2_earfcns() runs on test_CT {</span><br><span>   f_tc_si2quater_n_earfcns(2);</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_si2quater_3_earfcns() runs on test_CT {</span><br><span>         f_tc_si2quater_n_earfcns(3);</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_si2quater_4_earfcns() runs on test_CT {</span><br><span>         f_tc_si2quater_n_earfcns(4);</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_si2quater_5_earfcns() runs on test_CT {</span><br><span>         f_tc_si2quater_n_earfcns(5);</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_si2quater_6_earfcns() runs on test_CT {</span><br><span>         f_tc_si2quater_n_earfcns(6);</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_si2quater_12_earfcns() runs on test_CT {</span><br><span>        f_tc_si2quater_n_earfcns(12);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_si2quater_23_earfcns() runs on test_CT {</span><br><span>        f_tc_si2quater_n_earfcns(23);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_si2quater_32_earfcns() runs on test_CT {</span><br><span>        f_tc_si2quater_n_earfcns(32);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_si2quater_33_earfcns() runs on test_CT {</span><br><span>        f_tc_si2quater_n_earfcns(33);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_si2quater_42_earfcns() runs on test_CT {</span><br><span>        f_tc_si2quater_n_earfcns(42);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_si2quater_48_earfcns() runs on test_CT {</span><br><span>        f_tc_si2quater_n_earfcns(48);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* verify the VTY error response when adding too many EARFCNs, and showing that osmo-bsc still sends 16 SI2quater with</span><br><span>@@ -2312,6 +2329,7 @@</span><br><span>      for (var integer i := 1; i < 48; i := i + 1) {</span><br><span>            f_bts_0_cfg(BSCVTY, {"si2quater neighbor-list del earfcn " & int2str(f_test_si2quater_earfcn_by_idx(i))});</span><br><span>     }</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> private function f_acc09_count_allowed(AccessControlClass acc) return uint8_t</span><br><span>@@ -2398,6 +2416,7 @@</span><br><span> </span><br><span>   f_bts_0_cfg(BSCVTY, {"access-control-class-rotate 10",</span><br><span>                          "rach access-control-class 5 allowed"});</span><br><span style="color: hsl(120, 100%, 40%);">+       f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* verify ACC startup ramp+rotate feature */</span><br><span>@@ -2458,6 +2477,7 @@</span><br><span>        f_bts_0_cfg(BSCVTY, {"access-control-class-rotate 10",</span><br><span>                          "rach access-control-class 4 allowed",</span><br><span>                             "no access-control-class-ramping"});</span><br><span style="color: hsl(120, 100%, 40%);">+   f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_ctrl_msc_connection_status() runs on test_CT {</span><br><span>@@ -2467,7 +2487,7 @@</span><br><span> </span><br><span>      /* See https://osmocom.org/issues/2729 */</span><br><span>    f_ctrl_get_exp(IPA_CTRL, "msc_connection_status", "connected");</span><br><span style="color: hsl(0, 100%, 40%);">-     setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_ctrl_msc0_connection_status() runs on test_CT {</span><br><span>@@ -2476,7 +2496,7 @@</span><br><span>         f_init(1);</span><br><span> </span><br><span>       f_ctrl_get_exp(IPA_CTRL, "msc.0.connection_status", "connected");</span><br><span style="color: hsl(0, 100%, 40%);">-   setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_ctrl() runs on test_CT {</span><br><span>@@ -2508,7 +2528,7 @@</span><br><span> </span><br><span>    f_ctrl_get_exp_ratectr_abs(IPA_CTRL, "bsc", 0, "paging:attempted", 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Verify that Upon receival of SET "location", BSC forwards a TRAP</span><br><span>@@ -2534,7 +2554,7 @@</span><br><span>       /* should match the one from  config */</span><br><span>      f_ctrl_set(SCCPLITE_IPA_CTRL, "rf_locked", "0");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> </span><br><span>@@ -2935,7 +2955,7 @@</span><br><span>            }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Test RSL link drop causes counter increment */</span><br><span>@@ -2950,7 +2970,7 @@</span><br><span> </span><br><span>       f_ctrl_get_exp_ratectr_abs(IPA_CTRL, "bts", 0, "rsl_fail", rsl_fail+1);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* TODO: Test OML link drop causes counter increment */</span><br><span>@@ -2996,6 +3016,7 @@</span><br><span>     } else {</span><br><span>             setverdict(fail, "Timeout RSL waiting for connection to close");</span><br><span>   }</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> </span><br><span>@@ -3006,6 +3027,7 @@</span><br><span>    } else {</span><br><span>             setverdict(fail, "Timeout OML waiting for connection to close");</span><br><span>   }</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> </span><br><span>@@ -3083,6 +3105,7 @@</span><br><span>    f_sleep(1.0);</span><br><span>        vc_conn := f_start_handler(refers(f_tc_ciph_mode_a5), pars);</span><br><span>         vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> testcase TC_ciph_mode_a5_1() runs on test_CT {</span><br><span>  var MSC_ConnHdlr vc_conn;</span><br><span>@@ -3093,6 +3116,7 @@</span><br><span>    f_sleep(1.0);</span><br><span>        vc_conn := f_start_handler(refers(f_tc_ciph_mode_a5), pars);</span><br><span>         vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> testcase TC_ciph_mode_a5_3() runs on test_CT {</span><br><span>  var MSC_ConnHdlr vc_conn;</span><br><span>@@ -3103,6 +3127,7 @@</span><br><span>    f_sleep(1.0);</span><br><span>        vc_conn := f_start_handler(refers(f_tc_ciph_mode_a5), pars);</span><br><span>         vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* establish initial channel, enable ciphering followed by assignment to ciphered channel */</span><br><span>@@ -3122,6 +3147,7 @@</span><br><span>        f_sleep(1.0);</span><br><span>        vc_conn := f_start_handler(refers(f_tc_assignment_aoip_tla_v6), pars);</span><br><span>       vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> </span><br><span>@@ -3144,6 +3170,7 @@</span><br><span>    f_sleep(1.0);</span><br><span>        vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5), pars);</span><br><span>     vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> testcase TC_assignment_fr_a5_1() runs on test_CT {</span><br><span>      var MSC_ConnHdlr vc_conn;</span><br><span>@@ -3154,6 +3181,7 @@</span><br><span>    f_sleep(1.0);</span><br><span>        vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5), pars);</span><br><span>     vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> testcase TC_assignment_fr_a5_3() runs on test_CT {</span><br><span>      var MSC_ConnHdlr vc_conn;</span><br><span>@@ -3164,6 +3192,7 @@</span><br><span>    f_sleep(1.0);</span><br><span>        vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5), pars);</span><br><span>     vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Expect ASSIGNMENT FAIL if mandatory IE is missing */</span><br><span>@@ -3186,6 +3215,7 @@</span><br><span> </span><br><span>         vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5_1_codec_missing));</span><br><span>   vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> private function f_tc_assignment_fr_a5_4(charstring id) runs on MSC_ConnHdlr {</span><br><span>@@ -3209,6 +3239,7 @@</span><br><span> </span><br><span>  vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5_4));</span><br><span>         vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> </span><br><span>@@ -3238,6 +3269,7 @@</span><br><span> </span><br><span>        vc_conn := f_start_handler(refers(f_tc_assignment_sign));</span><br><span>    vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /***********************************************************************</span><br><span>@@ -3448,6 +3480,7 @@</span><br><span>    pars.ass_codec_list := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));</span><br><span>        vc_conn := f_start_handler(refers(f_TC_assignment_codec), pars);</span><br><span>     vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_assignment_codec_hr() runs on test_CT {</span><br><span>@@ -3460,6 +3493,7 @@</span><br><span>         pars.ass_codec_list := valueof(ts_BSSMAP_IE_CodecList({ts_CodecHR}));</span><br><span>        vc_conn := f_start_handler(refers(f_TC_assignment_codec), pars);</span><br><span>     vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_assignment_codec_efr() runs on test_CT {</span><br><span>@@ -3472,6 +3506,7 @@</span><br><span>        pars.ass_codec_list := valueof(ts_BSSMAP_IE_CodecList({ts_CodecEFR}));</span><br><span>       vc_conn := f_start_handler(refers(f_TC_assignment_codec), pars);</span><br><span>     vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Allow 5,90k only (current default config) */</span><br><span>@@ -3529,6 +3564,7 @@</span><br><span> </span><br><span>         vc_conn := f_start_handler(refers(f_TC_assignment_codec), pars);</span><br><span>     vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_assignment_codec_amr_h() runs on test_CT {</span><br><span>@@ -3553,6 +3589,7 @@</span><br><span> </span><br><span>  vc_conn := f_start_handler(refers(f_TC_assignment_codec), pars);</span><br><span>     vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> function f_TC_assignment_codec_amr(boolean fr, octetstring mrconf, bitstring s8_s0, bitstring exp_s8_s0)</span><br><span>@@ -3616,56 +3653,67 @@</span><br><span>  * set. */</span><br><span> testcase TC_assignment_codec_amr_f_S1() runs on test_CT {</span><br><span>       f_TC_assignment_codec_amr(true, '289520882208'O, '00000010'B, '00000010'B);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Set S1, we expect an AMR multirate configuration IE with the lower three</span><br><span>  * rates set. */</span><br><span> testcase TC_assignment_codec_amr_h_S1() runs on test_CT {</span><br><span>        f_TC_assignment_codec_amr(false, '2815208820'O, '00000010'B, '00000010'B);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Set S1 and two other rates, we expect an AMR MULTIRATE CONFIGURATION IE with</span><br><span>  * all four rates (and only S1 set in the ASSIGNMENT COMPLETE) */</span><br><span> testcase TC_assignment_codec_amr_f_S124() runs on test_CT {</span><br><span>         f_TC_assignment_codec_amr(true, '289520882208'O, '00010110'B, '00000010'B);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Set S1 and two other rates, we expect an AMR MULTIRATE CONFIGURATION IE with</span><br><span>  * all four rates (and only S1 set in the ASSIGNMENT COMPLETE) */</span><br><span> testcase TC_assignment_codec_amr_h_S124() runs on test_CT {</span><br><span>         f_TC_assignment_codec_amr(false, '2815208820'O, '00010110'B, '00000010'B);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* The following block of tests selects more and more rates until all four</span><br><span>  * possible rates are in the active set (full rate) */</span><br><span> testcase TC_assignment_codec_amr_f_S0() runs on test_CT {</span><br><span>   f_TC_assignment_codec_amr(true, '2801'O, '00000001'B, '00000001'B);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_assignment_codec_amr_f_S02() runs on test_CT {</span><br><span>  f_TC_assignment_codec_amr(true, '28052080'O, '00000101'B, '00000101'B);</span><br><span style="color: hsl(120, 100%, 40%);">+       f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_assignment_codec_amr_f_S024() runs on test_CT {</span><br><span>         f_TC_assignment_codec_amr(true, '2815208820'O, '00010101'B, '00010101'B);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_assignment_codec_amr_f_S0247() runs on test_CT {</span><br><span>        f_TC_assignment_codec_amr(true, '289520882208'O, '10010101'B, '10010101'B);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* The following block of tests selects more and more rates until all three</span><br><span>  * possible rates are in the active set (half rate) */</span><br><span> testcase TC_assignment_codec_amr_h_S0() runs on test_CT {</span><br><span>  f_TC_assignment_codec_amr(false, '2801'O, '00000001'B, '00000001'B);</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_assignment_codec_amr_h_S02() runs on test_CT {</span><br><span>  f_TC_assignment_codec_amr(false, '28052080'O, '00000101'B, '00000101'B);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_assignment_codec_amr_h_S024() runs on test_CT {</span><br><span>         f_TC_assignment_codec_amr(false, '2815208820'O, '00010101'B, '00010101'B);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* The following block tests what happens when the MSC does offer rate</span><br><span>@@ -3678,6 +3726,7 @@</span><br><span>      /* Try to include 12,2k in into the active set even though the channel</span><br><span>       * is half rate only. The BSC is expected to remove the 12,0k */</span><br><span>      f_TC_assignment_codec_amr(false, '2815208820'O, '10010101'B, '00010101'B);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_assignment_codec_amr_f_S01234567() runs on test_CT {</span><br><span>@@ -3685,6 +3734,7 @@</span><br><span>    * Also S1 is selected, this setting will be prefered and we should</span><br><span>   * get 12.2k, 7,40k, 5,90k, and 4,75k in the active set. */</span><br><span>   f_TC_assignment_codec_amr(true, '289520882208'O, '11111111'B, '00000010'B);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_assignment_codec_amr_f_S0234567() runs on test_CT {</span><br><span>@@ -3692,21 +3742,25 @@</span><br><span>   * select the currently supported rates, which are also 12.2k, 7,40k,</span><br><span>         * 5,90k, and 4,75k, into the active set. */</span><br><span>  f_TC_assignment_codec_amr(true, '289520882208'O, '11111101'B, '10010101'B);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_assignment_codec_amr_f_zero() runs on test_CT {</span><br><span>         /* Try to select no rates at all */</span><br><span>  f_TC_assignment_codec_amr_fail(true, '00000000'B);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_assignment_codec_amr_f_unsupp() runs on test_CT {</span><br><span>       /* Try to select only unsupported rates */</span><br><span>   f_TC_assignment_codec_amr_fail(true, '01101000'B);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_assignment_codec_amr_h_S7() runs on test_CT {</span><br><span>   /* Try to select 12,2k for half rate */</span><br><span>      f_TC_assignment_codec_amr_fail(false, '10000000'B);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> private function f_disable_all_tch_f() runs on test_CT {</span><br><span>@@ -3841,7 +3895,7 @@</span><br><span>    vc_conn := f_start_handler(refers(f_TC_assignment_codec_xr_exhausted_req_hr));</span><br><span>       vc_conn.done;</span><br><span>        f_enable_all_tch();</span><br><span style="color: hsl(0, 100%, 40%);">-     setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Request a FR channel while all FR channels are exhausted, this is expected</span><br><span>@@ -3855,7 +3909,7 @@</span><br><span>       vc_conn := f_start_handler(refers(f_TC_assignment_codec_xr_exhausted_req_fr_fail));</span><br><span>  vc_conn.done;</span><br><span>        f_enable_all_tch();</span><br><span style="color: hsl(0, 100%, 40%);">-     setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Request a FR (prefered) or alternatively a HR channel while all FR channels</span><br><span>@@ -3869,7 +3923,7 @@</span><br><span>      vc_conn := f_start_handler(refers(f_TC_assignment_codec_fr_exhausted_req_fr_hr));</span><br><span>    vc_conn.done;</span><br><span>        f_enable_all_tch();</span><br><span style="color: hsl(0, 100%, 40%);">-     setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Request a HR (prefered) or alternatively a FR channel while all FR channels</span><br><span>@@ -3883,7 +3937,7 @@</span><br><span>      vc_conn := f_start_handler(refers(f_TC_assignment_codec_fr_exhausted_req_hr_fr));</span><br><span>    vc_conn.done;</span><br><span>        f_enable_all_tch();</span><br><span style="color: hsl(0, 100%, 40%);">-     setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Request a FR channel while all HR channels are exhausted, this is expected</span><br><span>@@ -3897,7 +3951,7 @@</span><br><span>       vc_conn := f_start_handler(refers(f_TC_assignment_codec_xr_exhausted_req_fr));</span><br><span>       vc_conn.done;</span><br><span>        f_enable_all_tch();</span><br><span style="color: hsl(0, 100%, 40%);">-     setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Request a HR channel while all HR channels are exhausted, this is expected</span><br><span>@@ -3911,7 +3965,7 @@</span><br><span>       vc_conn := f_start_handler(refers(f_TC_assignment_codec_xr_exhausted_req_hr_fail));</span><br><span>  vc_conn.done;</span><br><span>        f_enable_all_tch();</span><br><span style="color: hsl(0, 100%, 40%);">-     setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Request a HR (prefered) or alternatively a FR channel while all HR channels</span><br><span>@@ -3925,7 +3979,7 @@</span><br><span>      vc_conn := f_start_handler(refers(f_TC_assignment_codec_hr_exhausted_req_hr_fr));</span><br><span>    vc_conn.done;</span><br><span>        f_enable_all_tch();</span><br><span style="color: hsl(0, 100%, 40%);">-     setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Request a FR (prefered) or alternatively a HR channel while all HR channels</span><br><span>@@ -3939,7 +3993,7 @@</span><br><span>      vc_conn := f_start_handler(refers(f_TC_assignment_codec_hr_exhausted_req_fr_hr));</span><br><span>    vc_conn.done;</span><br><span>        f_enable_all_tch();</span><br><span style="color: hsl(0, 100%, 40%);">-     setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Allow FR and HR, but prefer HR */</span><br><span>@@ -3977,7 +4031,7 @@</span><br><span>        f_enable_all_tch();</span><br><span>  vc_conn := f_start_handler(refers(f_TC_assignment_codec_req_hr_fr));</span><br><span>         vc_conn.done;</span><br><span style="color: hsl(0, 100%, 40%);">-   setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Request a FR (prefered) or alternatively a HR channel, it is expected that</span><br><span>@@ -3989,7 +4043,7 @@</span><br><span>       f_enable_all_tch();</span><br><span>  vc_conn := f_start_handler(refers(f_TC_assignment_codec_req_fr_hr));</span><br><span>         vc_conn.done;</span><br><span style="color: hsl(0, 100%, 40%);">-   setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_assignment_osmux() runs on test_CT {</span><br><span>@@ -4015,6 +4069,7 @@</span><br><span> </span><br><span>        vc_conn := f_start_handler(refers(f_TC_assignment_codec), pars);</span><br><span>     vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* test the procedure of the MSC requesting a Classmark Update:</span><br><span>@@ -4040,6 +4095,7 @@</span><br><span>     f_sleep(1.0);</span><br><span>        vc_conn := f_start_handler(refers(f_tc_classmark));</span><br><span>  vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Send a CommonID from the simulated MSC and verify that the information is used to</span><br><span>@@ -4067,6 +4123,7 @@</span><br><span>        f_sleep(1.0);</span><br><span>        vc_conn := f_start_handler(refers(f_tc_common_id));</span><br><span>  vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> private function f_est_single_l3(template PDU_ML3_MS_NW l3) runs on MSC_ConnHdlr {</span><br><span>@@ -4105,6 +4162,7 @@</span><br><span>  f_sleep(1.0);</span><br><span>        vc_conn := f_start_handler(refers(f_tc_unsol_ass_fail));</span><br><span>     vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> </span><br><span>@@ -4119,6 +4177,7 @@</span><br><span>    f_sleep(1.0);</span><br><span>        vc_conn := f_start_handler(refers(f_tc_unsol_ass_compl));</span><br><span>    vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> </span><br><span>@@ -4133,6 +4192,7 @@</span><br><span>    f_sleep(1.0);</span><br><span>        vc_conn := f_start_handler(refers(f_tc_unsol_ho_fail));</span><br><span>      vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> </span><br><span>@@ -4153,6 +4213,7 @@</span><br><span>    f_sleep(1.0);</span><br><span>        vc_conn := f_start_handler(refers(f_tc_err_82_short_msg));</span><br><span>   vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> </span><br><span>@@ -4174,6 +4235,7 @@</span><br><span>    f_sleep(1.0);</span><br><span>        vc_conn := f_start_handler(refers(f_tc_err_84_unknown_msg));</span><br><span>         vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /***********************************************************************</span><br><span>@@ -4286,6 +4348,7 @@</span><br><span>    f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:attempted");</span><br><span>       f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:completed");</span><br><span>       f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Expecting MGCP to DLCX the endpoint's two connections: towards BTS and towards MSC */</span><br><span>@@ -4395,6 +4458,7 @@</span><br><span>        f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted");</span><br><span>    f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:completed");</span><br><span>    f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* BSC asks for inter-BSC HO, but the MSC decides that it won't happen and</span><br><span>@@ -4452,6 +4516,7 @@</span><br><span>      f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted");</span><br><span>    f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout");</span><br><span>      f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* BSC asks for inter-BSC HO, receives BSSMAP Handover Command, but MS reports</span><br><span>@@ -4546,6 +4611,7 @@</span><br><span>      f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted");</span><br><span>    f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:failed");</span><br><span>       f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* BSC asks for inter-BSC-out HO, receives BSSMAP Handover Command, but then no reply is received about HO outcome</span><br><span>@@ -4643,6 +4709,7 @@</span><br><span>  f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted");</span><br><span>    f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout");</span><br><span>      f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> private function f_tc_ho_into_this_bsc(charstring id) runs on MSC_ConnHdlr {</span><br><span>@@ -4732,12 +4799,14 @@</span><br><span> testcase TC_ho_into_this_bsc() runs on test_CT {</span><br><span>  var TestHdlrParams pars := f_gen_test_hdlr_pars();</span><br><span>   f_tc_ho_into_this_bsc_main(pars);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_ho_into_this_bsc_tla_v6() runs on test_CT {</span><br><span>     var TestHdlrParams pars := f_gen_test_hdlr_pars();</span><br><span>   pars.host_aoip_tla := "::6";</span><br><span>       f_tc_ho_into_this_bsc_main(pars);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> private function f_tc_ho_in_fail_msc_clears(charstring id) runs on MSC_ConnHdlr {</span><br><span>@@ -4819,6 +4888,7 @@</span><br><span>   f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted");</span><br><span>     f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:stopped");</span><br><span>       f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> private function f_tc_ho_in_fail_msc_clears_after_ho_detect(charstring id) runs on MSC_ConnHdlr {</span><br><span>@@ -4884,7 +4954,6 @@</span><br><span>   BSSAP.send(ts_BSSMAP_ClearCommand(cause));</span><br><span> </span><br><span>       f_expect_dlcx_conns();</span><br><span style="color: hsl(0, 100%, 40%);">-  setverdict(pass);</span><br><span>    f_sleep(1.0);</span><br><span> }</span><br><span> testcase TC_ho_in_fail_msc_clears_after_ho_detect() runs on test_CT {</span><br><span>@@ -4907,6 +4976,7 @@</span><br><span>  f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted");</span><br><span>     f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:stopped");</span><br><span>       f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* The new BSS's lchan times out before the MSC decides that handover failed. */</span><br><span>@@ -4971,10 +5041,7 @@</span><br><span>       BSSAP.send(ts_BSSMAP_ClearCommand(cause));</span><br><span> </span><br><span>       f_expect_dlcx_conns();</span><br><span style="color: hsl(0, 100%, 40%);">-  setverdict(pass);</span><br><span>    f_sleep(1.0);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   setverdict(pass);</span><br><span> }</span><br><span> testcase TC_ho_in_fail_no_detect() runs on test_CT {</span><br><span>       var MSC_ConnHdlr vc_conn;</span><br><span>@@ -4996,6 +5063,7 @@</span><br><span>    f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted");</span><br><span>     f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:error");</span><br><span>         f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Same as f_tc_ho_in_fail_no_detect, but MSC fails to send a Clear Command */</span><br><span>@@ -5052,7 +5120,6 @@</span><br><span>              BSSAP.send(ts_BSSMAP_ClearCommand(cause));</span><br><span>   };</span><br><span>   f_expect_dlcx_conns();</span><br><span style="color: hsl(0, 100%, 40%);">-  setverdict(pass);</span><br><span>    f_sleep(1.0);</span><br><span> }</span><br><span> testcase TC_ho_in_fail_no_detect2() runs on test_CT {</span><br><span>@@ -5075,6 +5142,7 @@</span><br><span>  f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted");</span><br><span>     f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:error");</span><br><span>         f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> type record of charstring Commands;</span><br><span>@@ -5291,6 +5359,7 @@</span><br><span>         f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:failed");</span><br><span> </span><br><span>      f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> private function f_tc_ho_neighbor_config_2(charstring id) runs on MSC_ConnHdlr {</span><br><span>@@ -5340,6 +5409,7 @@</span><br><span>    f_ctrs_bsc_and_bts_add(0, "handover:error");</span><br><span> </span><br><span>   f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> private function f_tc_ho_neighbor_config_3(charstring id) runs on MSC_ConnHdlr {</span><br><span>@@ -5388,6 +5458,7 @@</span><br><span>    f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:failed");</span><br><span> </span><br><span>      f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> private function f_tc_ho_neighbor_config_4(charstring id) runs on MSC_ConnHdlr {</span><br><span>@@ -5443,6 +5514,7 @@</span><br><span>    f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout");</span><br><span> </span><br><span>  f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> private function f_tc_ho_neighbor_config_5(charstring id) runs on MSC_ConnHdlr {</span><br><span>@@ -5484,6 +5556,7 @@</span><br><span>    f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout");</span><br><span> </span><br><span>  f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> private function f_tc_ho_neighbor_config_6(charstring id) runs on MSC_ConnHdlr {</span><br><span>@@ -5524,6 +5597,7 @@</span><br><span>    f_ctrs_bsc_and_bts_add(0, "handover:error");</span><br><span> </span><br><span>   f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> private function f_tc_ho_neighbor_config_7(charstring id) runs on MSC_ConnHdlr {</span><br><span>@@ -5577,6 +5651,7 @@</span><br><span>    f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:timeout");</span><br><span> </span><br><span>  f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* OS#3041: Open and close N connections in a normal fashion, and expect no</span><br><span>@@ -5830,7 +5905,7 @@</span><br><span>         /* clean up config */</span><br><span>        f_ts_set_chcomb(0, 0, 6, "PDCH");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Test IPA PDCH activation NACK */</span><br><span>@@ -5867,7 +5942,7 @@</span><br><span>         /* clean up config */</span><br><span>        f_ts_set_chcomb(0, 0, 6, "PDCH");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> </span><br><span>@@ -5936,7 +6011,7 @@</span><br><span>    /* clean up config */</span><br><span>        f_ts_set_chcomb(0, 0, 6, "PDCH");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Test Osmocom dyn PDCH activation NACK behavior */</span><br><span>@@ -5965,7 +6040,7 @@</span><br><span>        /* clean up config */</span><br><span>        f_ts_set_chcomb(0, 0, 6, "PDCH");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_chopped_ipa_ping() runs on test_CT {</span><br><span>@@ -5973,6 +6048,7 @@</span><br><span>    for (var integer i := 0; i < lengthof(bsc_ipa_ports); i := i + 1) {</span><br><span>               IPA_Testing.f_run_TC_chopped_ipa_ping(mp_bsc_ip, bsc_ipa_ports[i], CONNECT_TO_SERVER);</span><br><span>       }</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_chopped_ipa_payload() runs on test_CT {</span><br><span>@@ -5981,6 +6057,7 @@</span><br><span>         for (var integer i := 0; i < lengthof(bsc_ipa_ports); i := i + 1) {</span><br><span>               IPA_Testing.f_run_TC_chopped_ipa_payload(mp_bsc_ip, bsc_ipa_ports[i], CONNECT_TO_SERVER);</span><br><span>    }</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Verify the BSC sends the MS Power Parameters IE during CHAN ACT to make sure</span><br><span>@@ -5995,6 +6072,7 @@</span><br><span>     f_sleep(1.0);</span><br><span>        vc_conn := f_start_handler(refers(f_tc_assignment_fr_a5), pars);</span><br><span>     vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /***********************************************************************</span><br><span>@@ -6144,6 +6222,7 @@</span><br><span>    vc_conn.done;</span><br><span> </span><br><span>    f_ctrs_msc_expect(0, "mscpool:subscr:new", 4);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Three Layer 3 Complete by IMSI are round-robin'ed across two connected MSCs */</span><br><span>@@ -6184,6 +6263,7 @@</span><br><span>       vc_conn3 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars3);</span><br><span>   vc_conn3.done;</span><br><span>       f_ctrs_msc_expect(0, "mscpool:subscr:new");</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Three LU by TMSI are round-robin'ed across two connected MSCs, because they contain the NULL-NRI 0</span><br><span>@@ -6225,6 +6305,7 @@</span><br><span>   vc_conn3 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars3);</span><br><span>   vc_conn3.done;</span><br><span>       f_ctrs_msc_expect(0, "mscpool:subscr:reattach");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Three LU by TMSI are round-robin'ed across two connected MSCs, because they contain the NULL-NRI 1</span><br><span>@@ -6267,6 +6348,7 @@</span><br><span>   vc_conn3 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars3);</span><br><span>   vc_conn3.done;</span><br><span>       f_ctrs_msc_expect(0, "mscpool:subscr:reattach");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Three Layer 3 Complete by TMSI are round-robin'ed across two connected MSCs, because they contain an NRI not</span><br><span>@@ -6311,6 +6393,7 @@</span><br><span>         vc_conn3 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars3);</span><br><span>   vc_conn3.done;</span><br><span>       f_ctrs_msc_expect(0, "mscpool:subscr:new");</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Three Layer 3 Complete by TMSI are round-robin'ed across two connected MSCs, because they contain an NRI</span><br><span>@@ -6361,6 +6444,7 @@</span><br><span>     f_ctrs_msc_add(2, "mscpool:subscr:attach_lost");</span><br><span>   f_ctrs_msc_add(0, "mscpool:subscr:new");</span><br><span>   f_ctrs_msc_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Three Layer 3 Complete by TMSI with valid NRI for the second MSC are all directed to the second MSC (configured in</span><br><span>@@ -6404,6 +6488,7 @@</span><br><span>       vc_conn3 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars3);</span><br><span>   vc_conn3.done;</span><br><span>       f_ctrs_msc_expect(1, "mscpool:subscr:known");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Layer 3 Complete by TMSI with valid NRI for the third MSC are directed to the third MSC (configured in osmo-bsc.cfg),</span><br><span>@@ -6447,6 +6532,7 @@</span><br><span>    vc_conn3 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars3);</span><br><span>   vc_conn3.done;</span><br><span>       f_ctrs_msc_expect(1, "mscpool:subscr:new");</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* LU with a TMSI but indicating a different PLMN in its previous LAI: ignore the NRI. */</span><br><span>@@ -6480,6 +6566,7 @@</span><br><span>   vc_conn2 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars2);</span><br><span>   vc_conn2.done;</span><br><span>       f_ctrs_msc_expect(2, "mscpool:subscr:known");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Make sure that whichever MSC paged a subscriber will also get the Paging Response. Page by IMSI, which would be</span><br><span>@@ -6509,7 +6596,6 @@</span><br><span>  /* Despite the round robin pointing at the second MSC ('roundrobin next 1'), the earlier Paging for the same IMSI</span><br><span>     * causes this Paging Response to go to the first MSC (bssap_idx := 0). */</span><br><span>   f_perform_compl_l3(RSL, ts_PAG_RESP(valueof(ts_MI_IMSI_LV(imsi))) );</span><br><span style="color: hsl(0, 100%, 40%);">-    setverdict(pass);</span><br><span>    f_sleep(1.0);</span><br><span> }</span><br><span> testcase TC_mscpool_paging_and_response_imsi() runs on test_CT {</span><br><span>@@ -6530,6 +6616,7 @@</span><br><span>       vc_conn1 := f_start_handler(refers(f_tc_mscpool_paging_imsi), pars1);</span><br><span>        vc_conn1.done;</span><br><span>       f_ctrs_msc_expect(0, "mscpool:subscr:paged");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Make sure that whichever MSC paged a subscriber will also get the Paging Response.  Page by TMSI with an NRI value</span><br><span>@@ -6561,7 +6648,6 @@</span><br><span>        * third MSC ('roundrobin next 2'), the earlier Paging for the same TMSI causes this Paging Response to go to</span><br><span>         * the first MSC (bssap_idx := 0). */</span><br><span>        f_perform_compl_l3(RSL, ts_PAG_RESP(valueof(ts_MI_TMSI_NRI_LV(nri_v))) );</span><br><span style="color: hsl(0, 100%, 40%);">-       setverdict(pass);</span><br><span>    f_sleep(1.0);</span><br><span> }</span><br><span> testcase TC_mscpool_paging_and_response_tmsi() runs on test_CT {</span><br><span>@@ -6582,6 +6668,7 @@</span><br><span>       vc_conn1 := f_start_handler(refers(f_tc_mscpool_paging_tmsi), pars1);</span><br><span>        vc_conn1.done;</span><br><span>       f_ctrs_msc_expect(0, "mscpool:subscr:paged");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* For round-robin, skip an MSC that has 'no allow-attach' set. */</span><br><span>@@ -6623,6 +6710,7 @@</span><br><span>  vc_conn3 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars3);</span><br><span>   vc_conn3.done;</span><br><span>       f_ctrs_msc_expect(0, "mscpool:subscr:new");</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* An MSC that has 'no allow-attach' set should still serve subscribers that are already attached according to their</span><br><span>@@ -6666,6 +6754,7 @@</span><br><span>        vc_conn3 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars3);</span><br><span>   vc_conn3.done;</span><br><span>       f_ctrs_msc_expect(2, "mscpool:subscr:new");</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Allow/Deny emergency calls globally via VTY */</span><br><span>@@ -6769,6 +6858,7 @@</span><br><span>   f_vty_allow_emerg_bts(true, 0);</span><br><span>      vc_conn := f_start_handler(refers(f_TC_assignment_emerg_setup_allow), pars);</span><br><span>         vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* EMERGENCY CALL situation #2, forbidden globally but allowed by BTS */</span><br><span>@@ -6783,6 +6873,7 @@</span><br><span>    f_vty_allow_emerg_bts(true, 0);</span><br><span>      vc_conn := f_start_handler(refers(f_TC_assignment_emerg_setup_deny), pars);</span><br><span>  vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* EMERGENCY CALL situation #3, allowed globally but forbidden by BTS */</span><br><span>@@ -6802,6 +6893,7 @@</span><br><span>    f_vty_allow_emerg_bts(false, 0);</span><br><span>     vc_conn := f_start_handler(refers(f_TC_assignment_emerg_setup_deny), pars);</span><br><span>  vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Test what happens when an emergency call arrives while all TCH channels are</span><br><span>@@ -6843,7 +6935,7 @@</span><br><span>      f_ipa_tx(0, ts_RSL_CHAN_ACT_ACK(chan_nr, 33));</span><br><span>       rx_rsl := f_exp_ipa_rx(0, tr_RSL_IMM_ASSIGN(0));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> /* Hopping parameters per a timeslot */</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20257">change 20257</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/+/20257"/><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: I8c8a1061b546576b7a5c4b11f20dfc887aaab6e0 </div>
<div style="display:none"> Gerrit-Change-Number: 20257 </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>