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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Stop tests after failures<br><br>Call mtc.stop after setverdict(fail), add reasons to most failures and<br>fail with verdict error for internal errors.<br><br>Change-Id: I9b618235939fa41160b9be6677b121963d3ec857<br>---<br>M bsc/BSC_Tests.ttcn<br>M bsc/MSC_ConnectionHandler.ttcn<br>M hlr/HLR_Tests.ttcn<br>M mgw/MGCP_Test.ttcn<br>M mgw/RTP_Endpoint.ttcn<br>M msc/BSC_ConnectionHandler.ttcn<br>M msc/MSC_Tests.ttcn<br>M pcu/GPRS_TBF.ttcn<br>M pcu/PCU_Tests.ttcn<br>M selftest/Selftest.ttcn<br>M sgsn/SGSN_Tests.ttcn<br>M sip/SIP_Tests.ttcn<br>M sysinfo/Test.ttcn<br>13 files changed, 189 insertions(+), 112 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 2897a0b..d71d3dc 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -113,14 +113,8 @@</span><br><span> }</span><br><span> </span><br><span> private function f_shutdown_helper() runs on test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-      for (var integer i := 0; i < NUM_BTS; i := i+1) {</span><br><span style="color: hsl(0, 100%, 40%);">-            if (isbound(bts[i]) and isbound(bts[i].rsl)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                  f_ipa_rsl_stop(bts[i].rsl);</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%);">-       f_ipa_ctrl_stop();</span><br><span style="color: hsl(0, 100%, 40%);">-      all port.stop;</span><br><span>       setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     mtc.stop;</span><br><span> }</span><br><span> </span><br><span> private function f_legacy_bssap_reset() runs on test_CT {</span><br><span>@@ -199,7 +193,7 @@</span><br><span>        [] IPA_RSL[i].receive { repeat }</span><br><span>     [] T.timeout {</span><br><span>               setverdict(fail, "Timeout RSL waiting for ASP_IPA_EVENT_ID_ACK");</span><br><span style="color: hsl(0, 100%, 40%);">-             self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> }</span><br><span>@@ -230,7 +224,7 @@</span><br><span>                 f_sleep(0.1);</span><br><span>                if (not T.running) {</span><br><span>                         setverdict(fail, "Timeout waiting for oml-connection-state ", status);</span><br><span style="color: hsl(0, 100%, 40%);">-                        self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> }</span><br><span>@@ -240,7 +234,7 @@</span><br><span>         var BSSAP_N_UNITDATA_ind ud_ind;</span><br><span>     [] T_guard.timeout {</span><br><span>                         setverdict(fail, "Timeout of T_guard");</span><br><span style="color: hsl(0, 100%, 40%);">-                       self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            }</span><br><span>    /* always respond with RESET ACK to RESET */</span><br><span>         [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(?, ?, tr_BSSMAP_Reset)) -> value ud_ind {</span><br><span>@@ -253,7 +247,7 @@</span><br><span> altstep no_bssmap_reset() runs on test_CT {</span><br><span>     [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(?, ?, tr_BSSMAP_Reset)) {</span><br><span>             setverdict(fail, "unexpected BSSMAP Reset");</span><br><span style="color: hsl(0, 100%, 40%);">-          self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>    }</span><br><span> }</span><br><span> </span><br><span>@@ -340,7 +334,7 @@</span><br><span>     [] IPA_RSL[bts_nr].receive { repeat; }</span><br><span>       [] T.timeout {</span><br><span>               setverdict(fail, "Timeout expecting ", t_rx);</span><br><span style="color: hsl(0, 100%, 40%);">-         self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span>    return rx_rsl_ud.rsl;</span><br><span>@@ -1325,7 +1319,7 @@</span><br><span>        alt {</span><br><span>        [] IPA_RSL[0].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0, tr_RSL_PAGING_CMD(?))) {</span><br><span>            setverdict(fail, "Received PAGING after LOAD_IND(0)");</span><br><span style="color: hsl(0, 100%, 40%);">-                self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    [] T_retrans.timeout {</span><br><span>               /* re-trnsmit the zero-space LOAD IND to avoid BSC 'auto credit' */</span><br><span>@@ -1404,15 +1398,15 @@</span><br><span>        alt {</span><br><span>        [] IPA_RSL[0].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0, tr_RSL_PAGING_CMD(?))) {</span><br><span>            setverdict(fail, "Received PAGING after A-RESET");</span><br><span style="color: hsl(0, 100%, 40%);">-            self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    [] IPA_RSL[1].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0, tr_RSL_PAGING_CMD(?))) {</span><br><span>            setverdict(fail, "Received PAGING after A-RESET");</span><br><span style="color: hsl(0, 100%, 40%);">-            self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    [] IPA_RSL[2].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0, tr_RSL_PAGING_CMD(?))) {</span><br><span>            setverdict(fail, "Received PAGING after A-RESET");</span><br><span style="color: hsl(0, 100%, 40%);">-            self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    [] T.timeout {</span><br><span>               setverdict(pass);</span><br><span>@@ -1467,10 +1461,9 @@</span><br><span>   }</span><br><span>    [] IPA_RSL[0].receive { repeat }</span><br><span>     [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            return false;</span><br><span>                }</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>    return false;</span><br><span> }</span><br><span> </span><br><span>@@ -1762,7 +1755,7 @@</span><br><span>       }</span><br><span>    case else {</span><br><span>          setverdict(fail, "Unsupported codec ", a_elem);</span><br><span style="color: hsl(0, 100%, 40%);">-               self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>    }</span><br><span>    }</span><br><span>    return ret;</span><br><span>@@ -1835,7 +1828,7 @@</span><br><span>  var RSL_IE_Body mode_ie;</span><br><span>     if (f_rsl_find_ie(rsl, RSL_IE_CHAN_MODE, mode_ie) == false) {</span><br><span>                setverdict(fail, "Couldn't find CHAN_MODE IE");</span><br><span style="color: hsl(0, 100%, 40%);">-           self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>    }</span><br><span>    var template RSL_IE_Body t_mode_ie := f_rsl_chmod_tmpl_from_codec(g_pars.ass_codec_list.codecElements[0]);</span><br><span>   if (not match(mode_ie, t_mode_ie)) {</span><br><span>@@ -1846,7 +1839,7 @@</span><br><span>         if (g_pars.expect_mr_conf_ie != omit) {</span><br><span>              if (f_rsl_find_ie(rsl, RSL_IE_MR_CONFIG, mr_conf) == false) {</span><br><span>                        setverdict(fail, "Missing MR CONFIG IE in RSL Chan Activ");</span><br><span style="color: hsl(0, 100%, 40%);">-                   self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            }</span><br><span>            log("found RSL MR CONFIG IE: ", mr_conf);</span><br><span> </span><br><span>@@ -1858,7 +1851,7 @@</span><br><span>              if (f_rsl_find_ie(rsl, RSL_IE_MR_CONFIG, mr_conf) == true) {</span><br><span>                         log("found RSL MR CONFIG IE: ", mr_conf);</span><br><span>                  setverdict(fail, "Found MR CONFIG IE in RSL Chan Activ, expecting omit");</span><br><span style="color: hsl(0, 100%, 40%);">-                     self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> }</span><br><span>@@ -1973,7 +1966,7 @@</span><br><span>       alt {</span><br><span>        [] BSSAP.receive(PDU_BSSAP:?) -> value bssap {</span><br><span>            setverdict(fail, "Unexpected BSSMAP ", bssap);</span><br><span style="color: hsl(0, 100%, 40%);">-                self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    [] T.timeout {</span><br><span>               setverdict(pass);</span><br><span>@@ -2087,7 +2080,7 @@</span><br><span>            ss_nr := chan_nr.u.sdcch8.sub_chan;</span><br><span>  } else {</span><br><span>             setverdict(fail, "Invalid ChanNr ", chan_nr);</span><br><span style="color: hsl(0, 100%, 40%);">-         self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>    }</span><br><span> </span><br><span>        var charstring cmd := "bts "&int2str(bts_nr)&" trx "&int2str(trx_nr)&</span><br><span>@@ -2337,7 +2330,7 @@</span><br><span>    var charstring mode := f_ts_dyn_mode_get(bts_nr, trx_nr, ts_nr);</span><br><span>     if (not match(mode, exp)) {</span><br><span>          setverdict(fail, "Unexpected TS Mode: ", mode);</span><br><span style="color: hsl(0, 100%, 40%);">-               self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>    }</span><br><span> }</span><br><span> </span><br><span>diff --git a/bsc/MSC_ConnectionHandler.ttcn b/bsc/MSC_ConnectionHandler.ttcn</span><br><span>index a82728a..102c30e 100644</span><br><span>--- a/bsc/MSC_ConnectionHandler.ttcn</span><br><span>+++ b/bsc/MSC_ConnectionHandler.ttcn</span><br><span>@@ -147,7 +147,7 @@</span><br><span>                }</span><br><span>    }</span><br><span>    setverdict(fail, "Only 2 Connections per EP!");</span><br><span style="color: hsl(0, 100%, 40%);">-       self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+    mtc.stop;</span><br><span> }</span><br><span> </span><br><span> /* Helper function to pick a specific connection by its cid. Since we reach out</span><br><span>@@ -160,7 +160,7 @@</span><br><span>          }</span><br><span>    }</span><br><span>    setverdict(fail, "No Connection for ID ", cid);</span><br><span style="color: hsl(0, 100%, 40%);">-       self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+    mtc.stop;</span><br><span> }</span><br><span> </span><br><span> /* altstep for handling of IPACC media related commands. Activated by as_Media() to test</span><br><span>@@ -189,7 +189,7 @@</span><br><span>                 b_unused := f_rsl_find_ie(rsl, RSL_IE_IPAC_CONN_ID, ie);</span><br><span>             if (g_media.bts.conn_id != ie.ipa_conn_id) {</span><br><span>                         setverdict(fail, "IPA MDCX for unknown ConnId", rsl);</span><br><span style="color: hsl(0, 100%, 40%);">-                 self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            }</span><br><span>            /* mandatory */</span><br><span>              b_unused := f_rsl_find_ie(rsl, RSL_IE_IPAC_REMOTE_IP, ie);</span><br><span>@@ -233,7 +233,7 @@</span><br><span>             b_unused := f_rsl_find_ie(rsl, RSL_IE_IPAC_CONN_ID, ie);</span><br><span>             if (g_media.bts1.conn_id != ie.ipa_conn_id) {</span><br><span>                        setverdict(fail, "IPA MDCX for unknown ConnId", rsl);</span><br><span style="color: hsl(0, 100%, 40%);">-                 self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            }</span><br><span>            /* mandatory */</span><br><span>              b_unused := f_rsl_find_ie(rsl, RSL_IE_IPAC_REMOTE_IP, ie);</span><br><span>@@ -269,7 +269,7 @@</span><br><span>             if (match(mgcp_cmd.line.ep, t_MGCP_EP_wildcard)) {</span><br><span>                   if (cid != 0) {</span><br><span>                              setverdict(fail, "MGCP wildcard EP only works in first CRCX");</span><br><span style="color: hsl(0, 100%, 40%);">-                                self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                            mtc.stop;</span><br><span>                    }</span><br><span>                    /* we keep the endpoint name allocated during MediaState_init */</span><br><span>             } else {</span><br><span>@@ -575,12 +575,12 @@</span><br><span>     }</span><br><span>    else {</span><br><span>               setverdict(fail, "Unknown ChDesc!");</span><br><span style="color: hsl(0, 100%, 40%);">-          self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>    }</span><br><span> </span><br><span>        if (ch_desc.octet3 and4b '10'O == '10'O) {</span><br><span>           setverdict(fail, "No support for Hopping");</span><br><span style="color: hsl(0, 100%, 40%);">-           self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>    } else {</span><br><span>             var OCT2 concat := ch_desc.octet3 & ch_desc.octet4;</span><br><span>              arfcn := oct2int(concat);</span><br><span>@@ -670,7 +670,7 @@</span><br><span>                      repeat;</span><br><span>              } else {</span><br><span>                     setverdict(fail, "Unexpected L3 received", l3);</span><br><span style="color: hsl(0, 100%, 40%);">-                       self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            }</span><br><span>            }</span><br><span>    [st.rr_ass_cmpl_seen] RSL.receive(tr_RSL_REL_REQ(st.old_chan_nr, tr_RslLinkID_DCCH(0))) {</span><br><span>@@ -955,7 +955,7 @@</span><br><span>      }</span><br><span>    log("g_media ", g_media);</span><br><span>  if (not isbound(bssap)) {</span><br><span style="color: hsl(0, 100%, 40%);">-               self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>    }</span><br><span> </span><br><span>        /* When the BSC detects that LCLS is possible it will cross the</span><br><span>@@ -1019,7 +1019,7 @@</span><br><span>                      repeat;</span><br><span>              } else {</span><br><span>                     setverdict(fail, "Unexpected L3 received", l3);</span><br><span style="color: hsl(0, 100%, 40%);">-                       self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            }</span><br><span>            }</span><br><span>    [st.rr_ho_cmpl_seen] as_Media_ipacc();</span><br><span>diff --git a/hlr/HLR_Tests.ttcn b/hlr/HLR_Tests.ttcn</span><br><span>index 51d45ba..753f92e 100644</span><br><span>--- a/hlr/HLR_Tests.ttcn</span><br><span>+++ b/hlr/HLR_Tests.ttcn</span><br><span>@@ -91,7 +91,7 @@</span><br><span> private altstep as_Tguard() runs on test_CT {</span><br><span>     [] g_Tguard.timeout {</span><br><span>                setverdict(fail, "g_Tguard timeout");</span><br><span style="color: hsl(0, 100%, 40%);">-         self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>    }</span><br><span> }</span><br><span> </span><br><span>@@ -131,7 +131,7 @@</span><br><span>             [legacy] GSUP.receive(ASP_IPA_Event:{up_down := ASP_IPA_EVENT_UP}) { }</span><br><span>               [] T.timeout {</span><br><span>                       setverdict(fail, "No connection to GSUP Port");</span><br><span style="color: hsl(0, 100%, 40%);">-                       self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> }</span><br><span>@@ -270,7 +270,7 @@</span><br><span>         var charstring ret := f_vty_transceive_ret(pt, cmd);</span><br><span>         if (not match(ret, exp_ret)) {</span><br><span>               setverdict(fail, "Non-matching VTY response: ", ret);</span><br><span style="color: hsl(0, 100%, 40%);">-         self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>    }</span><br><span> }</span><br><span> </span><br><span>@@ -359,7 +359,7 @@</span><br><span>     [] GSUP.receive { repeat; }</span><br><span>  [] T.timeout {</span><br><span>               setverdict(fail, "Timeout waiting for SAI response");</span><br><span style="color: hsl(0, 100%, 40%);">-         self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span>    return ret;</span><br><span>@@ -405,7 +405,7 @@</span><br><span>    [] GSUP.receive { repeat; }</span><br><span>  [] T.timeout {</span><br><span>               setverdict(fail, "Timeout waiting for UL response");</span><br><span style="color: hsl(0, 100%, 40%);">-          self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span>    return ret;</span><br><span>@@ -443,7 +443,7 @@</span><br><span>    [] GSUP.receive { repeat; }</span><br><span>  [] T.timeout {</span><br><span>               setverdict(fail, "Timeout waiting for PURGE response");</span><br><span style="color: hsl(0, 100%, 40%);">-               self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span>    return ret;</span><br><span>diff --git a/mgw/MGCP_Test.ttcn b/mgw/MGCP_Test.ttcn</span><br><span>index 659d5f1..82ed608 100644</span><br><span>--- a/mgw/MGCP_Test.ttcn</span><br><span>+++ b/mgw/MGCP_Test.ttcn</span><br><span>@@ -71,7 +71,7 @@</span><br><span>                         res := MGCP_CodecPort_CtrlFunct.f_IPL4_connect(MGCP, mp_remote_ip, mp_remote_udp_port, mp_local_ip, mp_local_udp_port, 0, { udp := {} });</span><br><span>                    if (not ispresent(res.connId)) {</span><br><span>                             setverdict(fail, "Could not connect MGCP, check your configuration");</span><br><span style="color: hsl(0, 100%, 40%);">-                         self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                            mtc.stop;</span><br><span>                    }</span><br><span>                    g_mgcp_conn_id := res.connId;</span><br><span> </span><br><span>@@ -180,9 +180,15 @@</span><br><span>             T.start;</span><br><span>             alt {</span><br><span>                        [] MGCP.receive(mrt) -> value mrf { }</span><br><span style="color: hsl(0, 100%, 40%);">-                        [] MGCP.receive(tr_MGCP_RecvFrom_R(?)) { setverdict(fail); }</span><br><span style="color: hsl(120, 100%, 40%);">+                  [] MGCP.receive(tr_MGCP_RecvFrom_R(?)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                              setverdict(fail, "Response didn't match template");</span><br><span style="color: hsl(120, 100%, 40%);">+                             mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                             }</span><br><span>                    [] MGCP.receive { repeat; }</span><br><span style="color: hsl(0, 100%, 40%);">-                     [] T.timeout { setverdict(fail); }</span><br><span style="color: hsl(120, 100%, 40%);">+                    [] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+                                setverdict(fail, "Timeout waiting for response to ", cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+                          mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                             }</span><br><span>            }</span><br><span>            T.stop;</span><br><span> </span><br><span>@@ -202,7 +208,8 @@</span><br><span>                            return str2hex(par.val);</span><br><span>                     }</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-               setverdict(fail);</span><br><span style="color: hsl(120, 100%, 40%);">+             setverdict(fail, "Could not find conn id for MgcpReponse");</span><br><span style="color: hsl(120, 100%, 40%);">+         mtc.stop;</span><br><span>            return '00000000'H;</span><br><span>  }</span><br><span> </span><br><span>@@ -390,12 +397,14 @@</span><br><span>                   payload type should be visible in the SDP of the response. */</span><br><span>             if (resp.sdp.media_list[0].media_field.fmts[0] != "0") {</span><br><span>                   setverdict(fail, "SDP contains unexpected codec");</span><br><span style="color: hsl(120, 100%, 40%);">+                  mtc.stop;</span><br><span>            }</span><br><span> </span><br><span>                /* See also OS#2658: We also expect the MGW to assign a port</span><br><span>                    number to us. */</span><br><span>          if (isbound(resp.sdp.media_list[0].media_field.ports.port_number) == false) {</span><br><span>                        setverdict(fail, "SDP does not contain a port number");</span><br><span style="color: hsl(120, 100%, 40%);">+                     mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> </span><br><span>@@ -579,6 +588,7 @@</span><br><span>          }</span><br><span>            if (f_mgcp_find_param(resp_msg, "Z", ep_assigned) == false) {</span><br><span>                      setverdict(fail, "No SpecificEndpointName in MGCP response", resp);</span><br><span style="color: hsl(120, 100%, 40%);">+                 mtc.stop;</span><br><span>            }</span><br><span> </span><br><span>                /* clean-up */</span><br><span>@@ -611,6 +621,7 @@</span><br><span>                         }</span><br><span>                    if (f_mgcp_find_param(resp_msg, "Z", ep_assigned[i]) == false) {</span><br><span>                           setverdict(fail, "No SpecificEndpointName in MGCP response", resp);</span><br><span style="color: hsl(120, 100%, 40%);">+                         mtc.stop;</span><br><span>                    }</span><br><span>            }</span><br><span> </span><br><span>@@ -920,6 +931,7 @@</span><br><span>          stats[1] := f_rtpem_stats_get(RTPEM[1]);</span><br><span>             if (not f_rtpem_stats_compare(stats[0], stats[1])) {</span><br><span>                         setverdict(fail, "RTP endpoint statistics don't match");</span><br><span style="color: hsl(120, 100%, 40%);">+                        mtc.stop;</span><br><span>            }</span><br><span>            setverdict(pass);</span><br><span>    }</span><br><span>@@ -1047,6 +1059,7 @@</span><br><span>            stats[1] := f_rtpem_stats_get(RTPEM[1]);</span><br><span>             if (not f_rtpem_stats_compare(stats[0], stats[1], tolerance)) {</span><br><span>                      setverdict(fail, "RTP endpoint statistics don't match");</span><br><span style="color: hsl(120, 100%, 40%);">+                        mtc.stop;</span><br><span>            }</span><br><span> </span><br><span>                setverdict(pass);</span><br><span>@@ -1092,10 +1105,12 @@</span><br><span>          stats[0] := f_rtpem_stats_get(RTPEM[0]);</span><br><span>             if (stats[0].num_pkts_rx_err_disabled != 0) {</span><br><span>                        setverdict(fail, "received packets from MGW on recvonly connection");</span><br><span style="color: hsl(120, 100%, 40%);">+                       mtc.stop;</span><br><span>            }</span><br><span>            stats[1] := f_rtpem_stats_get(RTPEM[1]);</span><br><span>             if (stats[1].num_pkts_rx_err_disabled != 0) {</span><br><span>                        setverdict(fail, "received packets from MGW on recvonly connection");</span><br><span style="color: hsl(120, 100%, 40%);">+                       mtc.stop;</span><br><span>            }</span><br><span> </span><br><span>                /* The second leg starts transmitting a little later */</span><br><span>@@ -1104,10 +1119,12 @@</span><br><span>            stats[0] := f_rtpem_stats_get(RTPEM[0]);</span><br><span>             if (stats[0].num_pkts_rx_err_disabled != 0) {</span><br><span>                        setverdict(fail, "received packets from MGW on recvonly connection");</span><br><span style="color: hsl(120, 100%, 40%);">+                       mtc.stop;</span><br><span>            }</span><br><span>            stats[1] := f_rtpem_stats_get(RTPEM[1]);</span><br><span>             if (stats[1].num_pkts_rx_err_disabled != 0) {</span><br><span>                        setverdict(fail, "received packets from MGW on recvonly connection");</span><br><span style="color: hsl(120, 100%, 40%);">+                       mtc.stop;</span><br><span>            }</span><br><span> </span><br><span>                /* The first leg will now be switched into bidirectional</span><br><span>@@ -1117,10 +1134,12 @@</span><br><span>           stats[0] := f_rtpem_stats_get(RTPEM[0]);</span><br><span>             if (stats[1].num_pkts_rx_err_disabled != 0) {</span><br><span>                        setverdict(fail, "received packets from MGW on recvonly connection");</span><br><span style="color: hsl(120, 100%, 40%);">+                       mtc.stop;</span><br><span>            }</span><br><span>            stats[1] := f_rtpem_stats_get(RTPEM[1]);</span><br><span>             if (stats[1].num_pkts_rx_err_disabled != 0) {</span><br><span>                        setverdict(fail, "received packets from MGW on recvonly connection");</span><br><span style="color: hsl(120, 100%, 40%);">+                       mtc.stop;</span><br><span>            }</span><br><span> </span><br><span>                /* When the second leg is switched into bidirectional mode</span><br><span>@@ -1142,11 +1161,13 @@</span><br><span>                 temp := stats[0].num_pkts_tx - num_pkts_tx[0] - stats[1].num_pkts_rx;</span><br><span>                if (temp > 3 or temp < -3) {</span><br><span>                   setverdict(fail, "number of packets not within normal parameters");</span><br><span style="color: hsl(120, 100%, 40%);">+                 mtc.stop;</span><br><span>            }</span><br><span> </span><br><span>                temp := stats[1].num_pkts_tx - num_pkts_tx[1] - stats[0].num_pkts_rx;</span><br><span>                if (temp > 3 or temp < -3) {</span><br><span>                   setverdict(fail, "number of packets not within normal parameters");</span><br><span style="color: hsl(120, 100%, 40%);">+                 mtc.stop;</span><br><span>            }</span><br><span> </span><br><span>                /* Tear down */</span><br><span>@@ -1197,6 +1218,7 @@</span><br><span>              stats[1] := f_rtpem_stats_get(RTPEM[1]);</span><br><span>             if (not f_rtpem_stats_compare(stats[0], stats[1])) {</span><br><span>                         setverdict(fail, "RTP endpoint statistics don't match");</span><br><span style="color: hsl(120, 100%, 40%);">+                        mtc.stop;</span><br><span>            }</span><br><span> </span><br><span>                setverdict(pass);</span><br><span>@@ -1254,10 +1276,12 @@</span><br><span>          stats[1] := f_rtpem_stats_get(RTPEM[1]);</span><br><span>             if (not f_rtpem_stats_compare(stats[0], stats[1], 5)) {</span><br><span>                      setverdict(fail, "RTP endpoint statistics don't match");</span><br><span style="color: hsl(120, 100%, 40%);">+                        mtc.stop;</span><br><span>            }</span><br><span>            stats[2] := f_rtpem_stats_get(RTPEM[2]);</span><br><span>             if (stats[2].num_pkts_rx_err_disabled != 0) {</span><br><span>                        setverdict(fail, "received packets on old leg after handover");</span><br><span style="color: hsl(120, 100%, 40%);">+                     mtc.stop;</span><br><span>            }</span><br><span> </span><br><span>                setverdict(pass);</span><br><span>diff --git a/mgw/RTP_Endpoint.ttcn b/mgw/RTP_Endpoint.ttcn</span><br><span>index 3c939a2..c73aa58 100644</span><br><span>--- a/mgw/RTP_Endpoint.ttcn</span><br><span>+++ b/mgw/RTP_Endpoint.ttcn</span><br><span>@@ -111,7 +111,7 @@</span><br><span>                                     sub.local_name, sub.local_port, sub.connection_id, { udp := {} });</span><br><span>           if (not ispresent(res.connId)) {</span><br><span>                     setverdict(fail, "Could not connect RTP, check your configuration");</span><br><span style="color: hsl(0, 100%, 40%);">-                  self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            }</span><br><span>            /* connect without previous bind: save conenction id allocated by IPL4asp */</span><br><span>                 if (sub.connection_id == -1) {</span><br><span>@@ -136,7 +136,7 @@</span><br><span>                 res := f_IPL4_listen(RTP, sub.local_name, sub.local_port, { udp := {} });</span><br><span>            if (not ispresent(res.connId)) {</span><br><span>                     setverdict(fail, "Could not listen to RTP, check your configuration");</span><br><span style="color: hsl(0, 100%, 40%);">-                        self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            }</span><br><span>            sub.connection_id := res.connId;</span><br><span>     }</span><br><span>diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn</span><br><span>index 803cb4d..4e02d6c 100644</span><br><span>--- a/msc/BSC_ConnectionHandler.ttcn</span><br><span>+++ b/msc/BSC_ConnectionHandler.ttcn</span><br><span>@@ -109,7 +109,7 @@</span><br><span> private altstep as_Tguard() runs on BSC_ConnHdlr {</span><br><span>   [] g_Tguard.timeout {</span><br><span>                setverdict(fail, "Tguard timeout");</span><br><span style="color: hsl(0, 100%, 40%);">-           self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>    }</span><br><span> }</span><br><span> </span><br><span>@@ -183,7 +183,7 @@</span><br><span>     [] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_CONF_IND) {}</span><br><span>  [] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {</span><br><span>                   setverdict(fail, "DISC.ind from SCCP");</span><br><span style="color: hsl(0, 100%, 40%);">-                       self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> }</span><br><span>@@ -294,7 +294,7 @@</span><br><span>                         }</span><br><span>            [] BSSAP.receive(tr_BSSMAP_CipherModeCmd(?, g_pars.vec.kc)) {</span><br><span>                        setverdict(fail, "Wrong ciphering algorithm mask in CiphModCmd");</span><br><span style="color: hsl(0, 100%, 40%);">-                     self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>                    }</span><br><span>            }</span><br><span>            /* FIXME: Send the best available algorithm */</span><br><span>@@ -331,7 +331,7 @@</span><br><span>                         if (not ispresent(lu_acc.mobileIdentityTLV) or</span><br><span>                           not ischosen(lu_acc.mobileIdentityTLV.mobileIdentityLV.mobileIdentityV.oddEvenInd_identity.tmsi_ptmsi)) {</span><br><span>                                setverdict(fail, "Expected TMSI but no TMSI was allocated");</span><br><span style="color: hsl(0, 100%, 40%);">-                          self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                            mtc.stop;</span><br><span>                    } else {</span><br><span>                             g_pars.tmsi := lu_acc.mobileIdentityTLV.mobileIdentityLV.mobileIdentityV.oddEvenInd_identity.tmsi_ptmsi.octets;</span><br><span>                              BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_TmsiRealloc_Cmpl));</span><br><span>@@ -340,13 +340,13 @@</span><br><span>                      if (ispresent(lu_acc.mobileIdentityTLV) and</span><br><span>                      ischosen(lu_acc.mobileIdentityTLV.mobileIdentityLV.mobileIdentityV.oddEvenInd_identity.tmsi_ptmsi)) {</span><br><span>                            setverdict(fail, "Expected no TMSI but TMSI was allocated");</span><br><span style="color: hsl(0, 100%, 40%);">-                          self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                            mtc.stop;</span><br><span>                    }</span><br><span>            }</span><br><span>            }</span><br><span>    [] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Rej)) {</span><br><span>                 setverdict(fail, "Expected LU ACK, but received LU REJ");</span><br><span style="color: hsl(0, 100%, 40%);">-             self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span>    /* FIXME: there could be pending SMS or other common procedures by the MSC, let's ignore them */</span><br><span>@@ -695,7 +695,7 @@</span><br><span>   [] MNCC.receive(tr_MNCC_START_DTMF_ind(cpars.mncc_callref, "2")) {}</span><br><span>        [] T.timeout {</span><br><span>               setverdict(fail, "Timeout waiting for START_DTMF_ind");</span><br><span style="color: hsl(0, 100%, 40%);">-               self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> </span><br><span>@@ -704,7 +704,7 @@</span><br><span>  alt {</span><br><span>        [] MNCC.receive(tr_MNCC_START_DTMF_ind(cpars.mncc_callref, "2")) {</span><br><span>                 setverdict(fail, "Received duplicate START_DTMF_ind");</span><br><span style="color: hsl(0, 100%, 40%);">-                self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    [] T.timeout { }</span><br><span>     }</span><br><span>@@ -716,7 +716,7 @@</span><br><span>      [] MNCC.receive(tr_MNCC_START_DTMF_ind(cpars.mncc_callref, "3")) { }</span><br><span>       [] T.timeout {</span><br><span>               setverdict(fail, "Received duplicate START_DTMF_ind");</span><br><span style="color: hsl(0, 100%, 40%);">-                self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> </span><br><span>@@ -732,13 +732,13 @@</span><br><span>                        }</span><br><span>            [] BSSAP.receive {</span><br><span>                   setverdict(fail, "Unexpected BSSMAP while waiting for SCCP Release");</span><br><span style="color: hsl(0, 100%, 40%);">-                 self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>                    }</span><br><span>            }</span><br><span>            }</span><br><span>    [] BSSAP.receive {</span><br><span>           setverdict(fail, "Unexpected BSSMAP while waiting for ClearCommand");</span><br><span style="color: hsl(0, 100%, 40%);">-         self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span> }</span><br><span> </span><br><span>@@ -750,7 +750,7 @@</span><br><span>     [] as_clear_cmd_compl_disc(t) { }</span><br><span>    [] T.timeout {</span><br><span>               setverdict(fail, "Timeout waiting for ClearCommand/Release");</span><br><span style="color: hsl(0, 100%, 40%);">-         self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> }</span><br><span>@@ -808,7 +808,7 @@</span><br><span> private altstep as_other_sms() runs on BSC_ConnHdlr {</span><br><span>        [] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_SMS(?, ?, ?), ?)) {</span><br><span>                setverdict(fail, "Unexpected SMS related PDU from MSC");</span><br><span style="color: hsl(0, 100%, 40%);">-              self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>    }</span><br><span> }</span><br><span> </span><br><span>diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn</span><br><span>index a18b9b0..161744c 100644</span><br><span>--- a/msc/MSC_Tests.ttcn</span><br><span>+++ b/msc/MSC_Tests.ttcn</span><br><span>@@ -133,7 +133,7 @@</span><br><span> private altstep as_Tguard_direct() runs on MTC_CT {</span><br><span>         [] Tguard_direct.timeout {</span><br><span>           setverdict(fail, "Tguard timeout");</span><br><span style="color: hsl(0, 100%, 40%);">-           self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>    }</span><br><span> }</span><br><span> </span><br><span>@@ -213,7 +213,7 @@</span><br><span>             [] GSUP_IPA_EVENT.receive(t_ASP_IPA_EVT_UD(ASP_IPA_EVENT_UP)) { }</span><br><span>            [] T.timeout {</span><br><span>                       setverdict(fail, "No connection to GSUP Port");</span><br><span style="color: hsl(0, 100%, 40%);">-                       self.stop</span><br><span style="color: hsl(120, 100%, 40%);">+                     mtc.stop</span><br><span>             }</span><br><span>    }</span><br><span> }</span><br><span>@@ -226,7 +226,7 @@</span><br><span>         g_initialized := true;</span><br><span> </span><br><span>   if (num_bsc > NUM_BSC) {</span><br><span style="color: hsl(0, 100%, 40%);">-             setverdict(fail, "excess number of BSC instances requested");</span><br><span style="color: hsl(120, 100%, 40%);">+               testcase.stop("excess number of BSC instances requested");</span><br><span>         }</span><br><span> </span><br><span>        for (var integer i := 0; i < num_bsc; i := i + 1) {</span><br><span>@@ -234,7 +234,7 @@</span><br><span>                         f_bssap_init(g_bssap[i], mp_bssap_cfg[i], "MSC_Test_" & int2str(i), BSC_BssmapOps);</span><br><span>                    f_bssap_start(g_bssap[i]);</span><br><span>           } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        setverdict(fail, "missing BSSAP configuration");</span><br><span style="color: hsl(120, 100%, 40%);">+                    testcase.stop("missing BSSAP configuration");</span><br><span>              }</span><br><span>    }</span><br><span> </span><br><span>@@ -529,7 +529,7 @@</span><br><span>                  }</span><br><span>            [] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Acc)) {</span><br><span>                         setverdict(fail, "Expecting LU REJ, but got ACCEPT");</span><br><span style="color: hsl(0, 100%, 40%);">-                 self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span>    f_expect_clear();</span><br><span>@@ -558,7 +558,7 @@</span><br><span>                      }</span><br><span>            [] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Acc)) {</span><br><span>                         setverdict(fail, "Expecting LU REJ, but got ACCEPT");</span><br><span style="color: hsl(0, 100%, 40%);">-                 self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span>    f_expect_clear();</span><br><span>@@ -605,11 +605,18 @@</span><br><span>    alt {</span><br><span>        [] BSSAP.receive(tr_PDU_DTAP_MT(tr_CM_SERV_REJ)) { }</span><br><span>         //[] BSSAP.receive(tr_PDU_DTAP_MT(tr_CM_SERV_ACC)) { }</span><br><span style="color: hsl(0, 100%, 40%);">-  [] BSSAP.receive { setverdict(fail, "Received unexpected BSSAP"); }</span><br><span style="color: hsl(120, 100%, 40%);">+ [] BSSAP.receive {</span><br><span style="color: hsl(120, 100%, 40%);">+            setverdict(fail, "Received unexpected BSSAP");</span><br><span style="color: hsl(120, 100%, 40%);">+              mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>    [] GSUP.receive(tr_GSUP_UL_REQ(g_pars.imsi)) {</span><br><span>               setverdict(fail, "Unexpected GSUP UL REQ");</span><br><span style="color: hsl(120, 100%, 40%);">+         mtc.stop;</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] T.timeout { setverdict(fail, "Timeout waiting for CM SERV REQ"); }</span><br><span style="color: hsl(120, 100%, 40%);">+       [] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(fail, "Timeout waiting for CM SERV REQ");</span><br><span style="color: hsl(120, 100%, 40%);">+                mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>    }</span><br><span> </span><br><span>        f_expect_clear();</span><br><span>@@ -730,6 +737,7 @@</span><br><span>      /* See https://osmocom.org/issues/2862 */</span><br><span>    [] BSSAP.receive(tr_BSSMAP_ClearCommand) {</span><br><span>                   setverdict(fail, "Got a second Clear Command, only one expected");</span><br><span style="color: hsl(120, 100%, 40%);">+                  mtc.stop;</span><br><span>                    repeat;</span><br><span>              }</span><br><span>    [] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {}</span><br><span>@@ -840,6 +848,7 @@</span><br><span>            }</span><br><span>    [] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Rej)) {</span><br><span>                 setverdict(fail, "Expected LU ACK, but received REJ");</span><br><span style="color: hsl(120, 100%, 40%);">+              mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> </span><br><span>@@ -1127,7 +1136,7 @@</span><br><span>        [] as_clear_cmd_compl_disc();</span><br><span>        [] T.timeout {</span><br><span>               setverdict(fail, "Timeout waiting for ClearCommand or SCCP Release");</span><br><span style="color: hsl(0, 100%, 40%);">-         self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span>    setverdict(pass);</span><br><span>@@ -1161,7 +1170,7 @@</span><br><span>    [] as_clear_cmd_compl_disc();</span><br><span>        [] T.timeout {</span><br><span>               setverdict(fail, "Timeout waiting for ClearCommand or SCCP Release");</span><br><span style="color: hsl(0, 100%, 40%);">-         self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span>    setverdict(pass);</span><br><span>@@ -1305,7 +1314,10 @@</span><br><span>   timer T := 30.0;</span><br><span>     T.start;</span><br><span>     alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] T.timeout { setverdict(fail, "Timeout waiting for channel release"); self.stop; }</span><br><span style="color: hsl(120, 100%, 40%);">+        [] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(fail, "Timeout waiting for channel release");</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>    [] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_CC_RELEASE(cpars.transaction_id))) {</span><br><span>               BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_REL_COMPL(cpars.transaction_id)));</span><br><span>            repeat;</span><br><span>@@ -1317,7 +1329,10 @@</span><br><span>      * the current implementation, there is no recovery mechanism implemented</span><br><span>     * and a DLCX can not be performed as the MSC does not know a specific</span><br><span>        * endpoint yet. */</span><br><span style="color: hsl(0, 100%, 40%);">-     [] MGCP.receive { setverdict(fail, "Unexpected MGCP message"); self.stop; }</span><br><span style="color: hsl(120, 100%, 40%);">+ [] MGCP.receive {</span><br><span style="color: hsl(120, 100%, 40%);">+             setverdict(fail, "Unexpected MGCP message");</span><br><span style="color: hsl(120, 100%, 40%);">+                mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>    [] as_clear_cmd_compl_disc();</span><br><span>        }</span><br><span> }</span><br><span>@@ -1405,7 +1420,10 @@</span><br><span>      timer T := 30.0;</span><br><span>     T.start;</span><br><span>     alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] T.timeout { setverdict(fail, "Timeout waiting for channel release"); self.stop; }</span><br><span style="color: hsl(120, 100%, 40%);">+        [] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(fail, "Timeout waiting for channel release");</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>    [] BSSAP.receive { repeat; }</span><br><span>         [] MNCC.receive { repeat; }</span><br><span>  [] GSUP.receive { repeat; }</span><br><span>@@ -1449,7 +1467,10 @@</span><br><span>         timer T := 190.0;</span><br><span>    T.start;</span><br><span>     alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] T.timeout { setverdict(fail, "Timeout waiting for T310"); self.stop; }</span><br><span style="color: hsl(120, 100%, 40%);">+   [] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(fail, "Timeout waiting for T310");</span><br><span style="color: hsl(120, 100%, 40%);">+               mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>    [] MNCC.receive(tr_MNCC_DISC_ind(cpars.mncc_callref)) {</span><br><span>              MNCC.send(ts_MNCC_REL_req(cpars.mncc_callref, valueof(ts_MNCC_cause(23))));</span><br><span>          }</span><br><span>@@ -1496,7 +1517,7 @@</span><br><span>    [] GSUP.receive(tr_GSUP_CL_RES(g_pars.imsi)) { }</span><br><span>     [] GSUP.receive(tr_GSUP_CL_ERR(g_pars.imsi)) {</span><br><span>               setverdict(fail, "Received GSUP Location Cancel Error");</span><br><span style="color: hsl(0, 100%, 40%);">-              self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> </span><br><span>@@ -1508,7 +1529,7 @@</span><br><span>        [] BSSAP.receive(tr_PDU_DTAP_MT(tr_CM_SERV_REJ)) { }</span><br><span>         [] BSSAP.receive {</span><br><span>           setverdict(fail, "Received unexpected BSSAP instead of CM SERV REJ");</span><br><span style="color: hsl(0, 100%, 40%);">-         self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span>    setverdict(pass);</span><br><span>@@ -1581,11 +1602,11 @@</span><br><span>          }</span><br><span>    [] BSSAP.receive(tr_BSSMAP_CipherModeCmd(?,?)) {</span><br><span>             setverdict(fail, "CipherModeCommand despite no A5 intersection");</span><br><span style="color: hsl(0, 100%, 40%);">-             self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    [] BSSAP.receive {</span><br><span>           setverdict(fail, "Unknown/unexpected BSSAP received");</span><br><span style="color: hsl(0, 100%, 40%);">-                self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span>    setverdict(pass);</span><br><span>@@ -1648,11 +1669,11 @@</span><br><span>          }</span><br><span>    [] BSSAP.receive(tr_BSSMAP_CipherModeCmd(?,?)) {</span><br><span>             setverdict(fail, "CipherModeCommand despite no A5 intersection");</span><br><span style="color: hsl(0, 100%, 40%);">-             self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    [] BSSAP.receive {</span><br><span>           setverdict(fail, "Unknown/unexpected BSSAP received");</span><br><span style="color: hsl(0, 100%, 40%);">-                self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span>    setverdict(pass);</span><br><span>@@ -1764,6 +1785,7 @@</span><br><span>    [reset_ack_seen == true] T.timeout { setverdict(pass) }</span><br><span>      [reset_ack_seen == false] T.timeout {</span><br><span>                setverdict(fail, "no BSSMAP RESET ACK seen!");</span><br><span style="color: hsl(120, 100%, 40%);">+              mtc.stop;</span><br><span>    }</span><br><span>    }       </span><br><span> }</span><br><span>@@ -1999,7 +2021,7 @@</span><br><span>        case ('110'B) { return abbreviated; }</span><br><span>        }</span><br><span>    setverdict(fail, "Unknown TON ", ton);</span><br><span style="color: hsl(0, 100%, 40%);">-        self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+    mtc.stop;</span><br><span> }</span><br><span> /* convert GSM L3 NPI to SMPP_NPI enum */</span><br><span> function f_sm_npi_from_gsm(BIT4 npi) return SMPP_NPI {</span><br><span>@@ -2014,7 +2036,7 @@</span><br><span>        case ('1010'B) { return ermes; }</span><br><span>     }</span><br><span>    setverdict(fail, "Unknown NPI ", npi);</span><br><span style="color: hsl(0, 100%, 40%);">-        self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+    mtc.stop;</span><br><span> }</span><br><span> </span><br><span> /* build a SMPP_SM from SmsParameters */</span><br><span>@@ -2154,7 +2176,7 @@</span><br><span>               }</span><br><span>    [] BSSAP.receive {</span><br><span>           setverdict(fail, "Unknown/unexpected BSSAP received");</span><br><span style="color: hsl(0, 100%, 40%);">-                self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> </span><br><span>@@ -2217,7 +2239,7 @@</span><br><span>                }</span><br><span>    [] BSSAP.receive {</span><br><span>           setverdict(fail, "Unknown/unexpected BSSAP received");</span><br><span style="color: hsl(0, 100%, 40%);">-                self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> </span><br><span>diff --git a/pcu/GPRS_TBF.ttcn b/pcu/GPRS_TBF.ttcn</span><br><span>index 3e8658e..951cf4a 100644</span><br><span>--- a/pcu/GPRS_TBF.ttcn</span><br><span>+++ b/pcu/GPRS_TBF.ttcn</span><br><span>@@ -121,7 +121,7 @@</span><br><span>         var integer idx := n - us.et.v_a;</span><br><span>    if (idx < 0 or idx > lengthof(us.et.v_b)) {</span><br><span>            setverdict(fail, "UlTbf: Cannot ACK ", n, " while V(A) is ", us.et.v_a);</span><br><span style="color: hsl(0, 100%, 40%);">-            self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>    }</span><br><span>    /* set the bit in the acknowledge state array */</span><br><span>     us.et.v_b[idx] := '1'B;</span><br><span>@@ -411,7 +411,7 @@</span><br><span> </span><br><span> function f_dl_tbf_is_in_window(integer bsn) return boolean {</span><br><span>    setverdict(fail, "pleaes implement me");</span><br><span style="color: hsl(0, 100%, 40%);">-      self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+    mtc.stop;</span><br><span> }</span><br><span> </span><br><span> function f_dl_tbf_is_received(inout DlTbfState ds, integer bsn) return boolean {</span><br><span>@@ -471,7 +471,7 @@</span><br><span>         var integer bsn := db.mac_hdr.hdr_ext.bsn;</span><br><span>   if (db.mac_hdr.hdr_ext.tfi != ds.tfi) {</span><br><span>              setverdict(fail, "Unexpected TFI of DL Data Block ", db);</span><br><span style="color: hsl(0, 100%, 40%);">-             self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>    }</span><br><span>    f_dl_tbf_mark_received(ds, bsn);</span><br><span>     if (ds.tbf.ack_mode) {</span><br><span>@@ -480,7 +480,7 @@</span><br><span>                  * SNS */</span><br><span>            if (bsn < ds.er.v_q or bsn > ds.er.v_q + ds.tbf.ws) {</span><br><span>                  setverdict(fail, "Unexpected BSN outside of window ", bsn);</span><br><span style="color: hsl(0, 100%, 40%);">-                   self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            }</span><br><span> </span><br><span>                /* In RLC acknowledged mode, the value of V(Q) shall be updated when the RLC</span><br><span>diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn</span><br><span>index 6e36f68..dfd380d 100644</span><br><span>--- a/pcu/PCU_Tests.ttcn</span><br><span>+++ b/pcu/PCU_Tests.ttcn</span><br><span>@@ -131,7 +131,8 @@</span><br><span>              log("NS Expected: ", b);</span><br><span> </span><br><span>               if (a != b) {</span><br><span style="color: hsl(0, 100%, 40%);">-                   setverdict(fail);</span><br><span style="color: hsl(120, 100%, 40%);">+                     setverdict(fail, "Values mismatch", a, b);</span><br><span style="color: hsl(120, 100%, 40%);">+                  mtc.stop;</span><br><span>            } else {</span><br><span>                     setverdict(pass);</span><br><span>            }</span><br><span>@@ -188,7 +189,10 @@</span><br><span>             alt {</span><br><span>                        [] BSSGP.receive(t_BssgpStsInd(?, ?, BVC_S_UNBLOCKED)) { }</span><br><span>                   [] BSSGP.receive { repeat; }</span><br><span style="color: hsl(0, 100%, 40%);">-                    [] T.timeout { setverdict(fail); }</span><br><span style="color: hsl(120, 100%, 40%);">+                    [] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+                                setverdict(fail, "Timeout establishing BSSGP connection");</span><br><span style="color: hsl(120, 100%, 40%);">+                          mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span>            }</span><br><span>            T.stop</span><br><span>               log("BSSGP successfully initialized");</span><br><span>@@ -233,7 +237,7 @@</span><br><span>                       [] L1.receive { repeat; }</span><br><span>                    [] T.timeout {</span><br><span>                               setverdict(fail, "Timeout establishing UL TBF");</span><br><span style="color: hsl(0, 100%, 40%);">-                              self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                            mtc.stop;</span><br><span>                    }</span><br><span>            }</span><br><span>            T.stop;</span><br><span>@@ -275,6 +279,7 @@</span><br><span>                }</span><br><span>    [] T.timeout {</span><br><span>               setverdict(fail, "Timeout waiting for ", bd_exp);</span><br><span style="color: hsl(120, 100%, 40%);">+           mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> }</span><br><span>@@ -365,7 +370,8 @@</span><br><span>                 log("LLC Expected: ", b);</span><br><span> </span><br><span>              if (a != b) {</span><br><span style="color: hsl(0, 100%, 40%);">-                   setverdict(fail);</span><br><span style="color: hsl(120, 100%, 40%);">+                     setverdict(fail, "LLC input ", b, " != expected ", a);</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            } else {</span><br><span>                     setverdict(pass);</span><br><span>            }</span><br><span>@@ -437,7 +443,10 @@</span><br><span>             log("Dec: ", udb);</span><br><span>                 var octetstring enc := enc_RlcmacUlBlock(udb);</span><br><span>               log("Enc: ", enc);</span><br><span style="color: hsl(0, 100%, 40%);">-            if (enc != buf) { setverdict(fail, "Re-encoded data doesn't equal input data"); }</span><br><span style="color: hsl(120, 100%, 40%);">+               if (enc != buf) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     setverdict(fail, "Re-encoded data doesn't equal input data");</span><br><span style="color: hsl(120, 100%, 40%);">+                   mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>    }</span><br><span> </span><br><span>        function f_rlcmac_uld_decenc(in octetstring buf) {</span><br><span>@@ -447,7 +456,10 @@</span><br><span>            log("Dec: ", udb);</span><br><span>                 var octetstring enc := enc_RlcmacUlDataBlock(udb);</span><br><span>           log("Enc: ", enc);</span><br><span style="color: hsl(0, 100%, 40%);">-            if (enc != buf) { setverdict(fail, "Re-encoded data doesn't equal input data"); }</span><br><span style="color: hsl(120, 100%, 40%);">+               if (enc != buf) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     setverdict(fail, "Re-encoded data doesn't equal input data");</span><br><span style="color: hsl(120, 100%, 40%);">+                   mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>    }</span><br><span> </span><br><span>        function f_rlcmac_dld_decenc(in octetstring buf) {</span><br><span>@@ -457,7 +469,10 @@</span><br><span>            log("Dec: ", udb);</span><br><span>                 var octetstring enc := enc_RlcmacDlDataBlock(udb);</span><br><span>           log("Enc: ", enc);</span><br><span style="color: hsl(0, 100%, 40%);">-            if (enc != buf) { setverdict(fail, "Re-encoded data doesn't equal input data"); }</span><br><span style="color: hsl(120, 100%, 40%);">+               if (enc != buf) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     setverdict(fail, "Re-encoded data doesn't equal input data");</span><br><span style="color: hsl(120, 100%, 40%);">+                   mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>    }</span><br><span> </span><br><span> </span><br><span>@@ -561,7 +576,7 @@</span><br><span>              [] L1.receive { repeat };</span><br><span>            [] T.timeout {</span><br><span>                       setverdict(fail, "Timeout waiting for IMM ASS")</span><br><span style="color: hsl(0, 100%, 40%);">-                       self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>                    }</span><br><span>            }</span><br><span>            T.stop;</span><br><span>diff --git a/selftest/Selftest.ttcn b/selftest/Selftest.ttcn</span><br><span>index 826d244..8411b3d 100644</span><br><span>--- a/selftest/Selftest.ttcn</span><br><span>+++ b/selftest/Selftest.ttcn</span><br><span>@@ -57,7 +57,7 @@</span><br><span>     res := IPL4asp_PortType.f_IPL4_connect(IP, "127.0.0.1", 55555, "", -1,-1, {tcp:={}});</span><br><span>    if (not ispresent(res.connId)) {</span><br><span>             setverdict(fail, "Could not connect to TCP port, check your configuration");</span><br><span style="color: hsl(0, 100%, 40%);">-          self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>    }</span><br><span>    g_ip_conn_id := res.connId;</span><br><span> }</span><br><span>diff --git a/sgsn/SGSN_Tests.ttcn b/sgsn/SGSN_Tests.ttcn</span><br><span>index 78086af..0a20dd6 100644</span><br><span>--- a/sgsn/SGSN_Tests.ttcn</span><br><span>+++ b/sgsn/SGSN_Tests.ttcn</span><br><span>@@ -134,7 +134,7 @@</span><br><span>          [] GSUP_IPA_EVENT.receive(t_ASP_IPA_EVT_UD(ASP_IPA_EVENT_UP)) { }</span><br><span>            [] T.timeout {</span><br><span>                       setverdict(fail, "No connection to GSUP Port");</span><br><span style="color: hsl(0, 100%, 40%);">-                       self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> }</span><br><span>@@ -240,7 +240,7 @@</span><br><span> private altstep as_Tguard() runs on BSSGP_ConnHdlr {</span><br><span>         [] g_Tguard.timeout {</span><br><span>                setverdict(fail, "Tguard timeout");</span><br><span style="color: hsl(0, 100%, 40%);">-           self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>    }</span><br><span> }</span><br><span> </span><br><span>@@ -385,19 +385,19 @@</span><br><span>   if (not (g_pars.bssgp_cell_id.ra_id.lai.mcc_mnc == aa_plmn)) {</span><br><span>                 setverdict(fail, "mismatching PLMN in Attach Accept: " & hex2str(aa_plmn)</span><br><span>                               & "; expected " & hex2str(g_pars.bssgp_cell_id.ra_id.lai.mcc_mnc));</span><br><span style="color: hsl(0, 100%, 40%);">-                  self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>  }</span><br><span>    g_pars.ra := aa.routingAreaIdentification;</span><br><span>   if (ispresent(aa.allocatedPTMSI)) {</span><br><span>          if (not g_pars.net.expect_ptmsi) {</span><br><span>                   setverdict(fail, "unexpected P-TMSI allocation");</span><br><span style="color: hsl(0, 100%, 40%);">-                     self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            }</span><br><span>            f_upd_ptmsi_and_tlli(aa.allocatedPTMSI.mobileIdentityLV.mobileIdentityV.oddEvenInd_identity.tmsi_ptmsi.octets);</span><br><span>      }</span><br><span>    if (ispresent(aa.msIdentity)) {</span><br><span>              setverdict(fail, "unexpected TMSI allocation in non-combined attach");</span><br><span style="color: hsl(0, 100%, 40%);">-                self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>    }</span><br><span>    /* P-TMSI.sig */</span><br><span>     if (ispresent(aa.ptmsiSignature)) {</span><br><span>@@ -414,13 +414,13 @@</span><br><span>  if (ispresent(ra.allocatedPTMSI)) {</span><br><span>          if (not g_pars.net.expect_ptmsi) {</span><br><span>                   setverdict(fail, "unexpected P-TMSI allocation");</span><br><span style="color: hsl(0, 100%, 40%);">-                     self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            }</span><br><span>            f_upd_ptmsi_and_tlli(ra.allocatedPTMSI.mobileIdentityLV.mobileIdentityV.oddEvenInd_identity.tmsi_ptmsi.octets);</span><br><span>      }</span><br><span>    if (ispresent(ra.msIdentity)) {</span><br><span>              setverdict(fail, "unexpected TMSI allocation in non-combined attach");</span><br><span style="color: hsl(0, 100%, 40%);">-                self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>    }</span><br><span>    /* P-TMSI.sig */</span><br><span>     if (ispresent(ra.ptmsiSignature)) {</span><br><span>@@ -540,6 +540,7 @@</span><br><span>            }</span><br><span>    [] BSSGP.receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT(?))) {</span><br><span>             setverdict(fail, "Wrong Attach Reject Cause");</span><br><span style="color: hsl(120, 100%, 40%);">+              mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> }</span><br><span>@@ -608,6 +609,7 @@</span><br><span>         [] BSSGP.receive(tr_BD_L3_MT(tr_GMM_ATTACH_ACCEPT('001'B, ?, ?))) -> value bd {</span><br><span>           f_process_attach_accept(bd.l3_mt.msgs.gprs_mm.attachAccept);</span><br><span>                 setverdict(fail);</span><br><span style="color: hsl(120, 100%, 40%);">+             mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> }</span><br><span>@@ -637,6 +639,7 @@</span><br><span>         [] BSSGP.receive(tr_BD_L3_MT(tr_GMM_ATTACH_ACCEPT('001'B, ?, ?))) -> value bd {</span><br><span>           f_process_attach_accept(bd.l3_mt.msgs.gprs_mm.attachAccept);</span><br><span>                 setverdict(fail);</span><br><span style="color: hsl(120, 100%, 40%);">+             mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> }</span><br><span>@@ -718,6 +721,7 @@</span><br><span>                 }</span><br><span>    [] BSSGP.receive(tr_BD_L3_MT(tr_GMM_ATTACH_ACCEPT(*, *, *))) {</span><br><span>               setverdict(fail);</span><br><span style="color: hsl(120, 100%, 40%);">+             mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> }</span><br><span>@@ -771,6 +775,7 @@</span><br><span>                 }</span><br><span>    [] BSSGP.receive(tr_BD_L3_MT(tr_GMM_RAU_REJECT)) {</span><br><span>           setverdict(fail, "Unexpected RAU Reject");</span><br><span style="color: hsl(120, 100%, 40%);">+          mtc.stop;</span><br><span>            }</span><br><span>    [] BSSGP.receive { repeat; }</span><br><span>         }</span><br><span>@@ -796,10 +801,12 @@</span><br><span>    alt {</span><br><span>        [not expect_purge] GSUP.receive(tr_GSUP_PURGE_MS_REQ(?)) {</span><br><span>           setverdict(fail, "Unexpected GSUP PURGE MS for unregistered TLLI");</span><br><span style="color: hsl(120, 100%, 40%);">+         mtc.stop;</span><br><span>            }</span><br><span>    [power_off] BSSGP.receive(tr_BD_L3_MT(tr_GMM_DET_ACCEPT_MT)) -> value bd {</span><br><span>                g_pars.ra := omit;</span><br><span>           setverdict(fail, "Unexpected ATTACH ACCEPT in no-power-off DETACH");</span><br><span style="color: hsl(120, 100%, 40%);">+                mtc.stop;</span><br><span>            /* TODO: check if any PDP contexts are deactivated on network side? */</span><br><span>               }</span><br><span>    [power_off] T.timeout {</span><br><span>@@ -930,9 +937,11 @@</span><br><span>               }</span><br><span>    [exp_rej] BSSGP.receive(tr_BD_L3_MT(tr_SM_ACT_PDP_ACCEPT)) {</span><br><span>                 setverdict(fail, "Unexpected PDP CTX ACT ACC");</span><br><span style="color: hsl(120, 100%, 40%);">+             mtc.stop;</span><br><span>            }</span><br><span>    [not exp_rej] BSSGP.receive(tr_BD_L3_MT(tr_SM_ACT_PDP_REJ(apars.tid, ?))) {</span><br><span>          setverdict(fail, "Unexpected PDP CTX ACT FAIL");</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>            }</span><br><span>    [not exp_rej] BSSGP.receive(tr_BD_L3_MT(tr_SM_ACT_PDP_ACCEPT(apars.tid, apars.sapi))) {</span><br><span>              setverdict(pass);</span><br><span>@@ -1159,9 +1168,11 @@</span><br><span>           }</span><br><span>    [] GTP.receive(tr_GTPC_MsgType(?, createPDPContextRequest, ?)) {</span><br><span>             setverdict(fail, "Unexpected GTP PDP CTX ACT");</span><br><span style="color: hsl(120, 100%, 40%);">+             mtc.stop;</span><br><span>            }</span><br><span>    [] BSSGP.receive(tr_BD_L3_MT(tr_SM_ACT_PDP_ACCEPT(?, ?))) {</span><br><span>          setverdict(fail, "Unexpected SM PDP CTX ACT ACK");</span><br><span style="color: hsl(120, 100%, 40%);">+          mtc.stop;</span><br><span>            }</span><br><span>    [] BSSGP.receive { repeat; }</span><br><span>         }</span><br><span>@@ -1403,10 +1414,11 @@</span><br><span>          [] BSSGP.receive(tr_BD_L3_MT(tr_GMM_DET_REQ_MT(*, *, *))) {</span><br><span>                  T.stop;</span><br><span>                      setverdict(fail, "Unexpected GMM Detach Request");</span><br><span style="color: hsl(120, 100%, 40%);">+                  mtc.stop;</span><br><span>            }</span><br><span>            [] T.timeout {</span><br><span>                       setverdict(pass);</span><br><span style="color: hsl(0, 100%, 40%);">-                       self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            }</span><br><span>            [] BSSGP.receive {</span><br><span>                   repeat;</span><br><span>@@ -1569,6 +1581,7 @@</span><br><span>      }</span><br><span>    if (count_req != 5) {</span><br><span>                setverdict(fail, "Did not received GMM ID Request Type IMEI 5 times!");</span><br><span style="color: hsl(120, 100%, 40%);">+             mtc.stop;</span><br><span>    }</span><br><span>    setverdict(pass);</span><br><span> }</span><br><span>@@ -1616,6 +1629,7 @@</span><br><span>       }</span><br><span>    if (count_req != 5) {</span><br><span>                setverdict(fail, "Did not received GMM ID Request Type IMSI 5 times!");</span><br><span style="color: hsl(120, 100%, 40%);">+             mtc.stop;</span><br><span>    }</span><br><span>    setverdict(pass);</span><br><span> }</span><br><span>@@ -1675,6 +1689,7 @@</span><br><span>       alt {</span><br><span>                [] BSSGP.receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT(?))) {</span><br><span>                     setverdict(fail, "Received unexpected GMM Attach REJECT");</span><br><span style="color: hsl(120, 100%, 40%);">+                  mtc.stop;</span><br><span>            }</span><br><span>            [] BSSGP.receive(tr_BD_L3_MT(tr_GMM_ATTACH_ACCEPT(*, *, *))) -> value bd {</span><br><span>                        f_process_attach_accept(bd.l3_mt.msgs.gprs_mm.attachAccept);</span><br><span>@@ -1730,6 +1745,7 @@</span><br><span>         }</span><br><span>    if (count_req != 5) {</span><br><span>                setverdict(fail, "Did not received GMM Attach Complete.");</span><br><span style="color: hsl(120, 100%, 40%);">+          mtc.stop;</span><br><span>    }</span><br><span>    setverdict(pass);</span><br><span> }</span><br><span>diff --git a/sip/SIP_Tests.ttcn b/sip/SIP_Tests.ttcn</span><br><span>index f690dc7..24b3622 100644</span><br><span>--- a/sip/SIP_Tests.ttcn</span><br><span>+++ b/sip/SIP_Tests.ttcn</span><br><span>@@ -131,7 +131,7 @@</span><br><span> private altstep as_Tguard() runs on ConnHdlr {</span><br><span>  [] g_Tguard.timeout {</span><br><span>                setverdict(fail, "Tguard timeout");</span><br><span style="color: hsl(0, 100%, 40%);">-           self.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span>    }</span><br><span> }</span><br><span> </span><br><span>diff --git a/sysinfo/Test.ttcn b/sysinfo/Test.ttcn</span><br><span>index 02a2279..c35da91 100644</span><br><span>--- a/sysinfo/Test.ttcn</span><br><span>+++ b/sysinfo/Test.ttcn</span><br><span>@@ -139,8 +139,8 @@</span><br><span>    /* ensure a given TC slot of the SI vector contains given SI type at least once at TC */</span><br><span>     function f_ensure_si_vec_contains(SystemInformationVectorPerTc arr, integer tc, RrMessageType key, boolean ext_bcch := false) {</span><br><span>              if (not f_si_vecslot_contains(arr[tc], key, ext_bcch)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        log("Fail: No ", key, " in TC=", tc, "!");</span><br><span style="color: hsl(0, 100%, 40%);">-                        setverdict(fail);</span><br><span style="color: hsl(120, 100%, 40%);">+                     setverdict(fail, "Fail: No ", key, " in TC=", tc, "!");</span><br><span style="color: hsl(120, 100%, 40%);">+                 mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> </span><br><span>@@ -180,8 +180,8 @@</span><br><span>  /* ensure a given TC slot of the SI vector contains given SI type at least N out of M times at TC */</span><br><span>         function f_ensure_si_vec_contains_n_of_m(SystemInformationVectorPerTc arr, integer tc, RrMessageType key, boolean ext_bcch := false, integer n, integer m) {</span><br><span>                 if (not f_si_vecslot_contains_n_of_m(arr[tc], key, ext_bcch, n, m)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                   log("Fail: Not ", n, "/", m, " of ", key, " in TC=", tc, "!");</span><br><span style="color: hsl(0, 100%, 40%);">-                        setverdict(fail);</span><br><span style="color: hsl(120, 100%, 40%);">+                     setverdict(fail, "Fail: Not ", n, "/", m, " of ", key, " in TC=", tc, "!");</span><br><span style="color: hsl(120, 100%, 40%);">+                 mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> </span><br><span>@@ -202,8 +202,8 @@</span><br><span>  /* ensure a given TC slot of the SI vector contains only given SI type */</span><br><span>    function f_ensure_si_vec_contains_only(SystemInformationVectorPerTc arr, integer tc, RrMessageType key, boolean ext_bcch := false) {</span><br><span>                 if (not f_si_vecslot_contains_only(arr[tc], key, ext_bcch)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                   log("Fail: Not all ", key, " in TC=", tc, "!");</span><br><span style="color: hsl(0, 100%, 40%);">-                   setverdict(fail);</span><br><span style="color: hsl(120, 100%, 40%);">+                     setverdict(fail, "Fail: Not all ", key, " in TC=", tc, "!");</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> </span><br><span>@@ -233,6 +233,7 @@</span><br><span>          for (i := 0; i < sizeof(si_per_tc); i := i + 1) {</span><br><span>                         if (sizeof(si_per_tc[i]) == 0) {</span><br><span>                             setverdict(fail, "No SI messages for TC=0!");</span><br><span style="color: hsl(120, 100%, 40%);">+                               mtc.stop;</span><br><span>                    }</span><br><span>            }</span><br><span>            if (cfg.si1_present) {</span><br><span>@@ -313,6 +314,7 @@</span><br><span>                         }</span><br><span>                    if (f_si_vec_contains(si_per_tc, SYSTEM_INFORMATION_TYPE_13alt)) {</span><br><span>                           setverdict(fail, "Cannot have SI13alt and SI13");</span><br><span style="color: hsl(120, 100%, 40%);">+                           mtc.stop;</span><br><span>                    }</span><br><span>            }</span><br><span>            if (cfg.si16_present or cfg.si17_present) {</span><br><span>@@ -323,6 +325,7 @@</span><br><span>                    }</span><br><span>                    if (f_si_vec_contains(si_per_tc, SYSTEM_INFORMATION_TYPE_22)) {</span><br><span>                              setverdict(fail, "Cannot have SI16/SI17 and SI22!");</span><br><span style="color: hsl(120, 100%, 40%);">+                                mtc.stop;</span><br><span>                    }</span><br><span>                    if (not cfg.bcch_extended) {</span><br><span>                                 testcase.stop("Error: SI16/SI17 requires BCCH Extd!");</span><br><span>@@ -368,6 +371,7 @@</span><br><span>                       }</span><br><span>                    if (f_si_vec_contains(si_per_tc, SYSTEM_INFORMATION_TYPE_13)) {</span><br><span>                              setverdict(fail, "Cannot have SI13alt and SI13");</span><br><span style="color: hsl(120, 100%, 40%);">+                           mtc.stop;</span><br><span>                    }</span><br><span>                    if (not cfg.bcch_extended) {</span><br><span>                                 f_ensure_si_vec_contains_n_of_m(si_per_tc, 4, SYSTEM_INFORMATION_TYPE_13alt, false, 1, 4);</span><br><span>@@ -399,6 +403,7 @@</span><br><span>                             f_ensure_si_vec_contains_n_of_m(si_per_tc, 4, SYSTEM_INFORMATION_TYPE_21, true, 1, 4);</span><br><span>                               if (f_si_vecslot_contains(si_per_tc[4], SYSTEM_INFORMATION_TYPE_21)) {</span><br><span>                                       setverdict(fail, "Cannot have SI21 on BCCH Norm if BCCH Extd enabled!");</span><br><span style="color: hsl(120, 100%, 40%);">+                                    mtc.stop;</span><br><span>                            }</span><br><span>                    }</span><br><span>            }</span><br><span>@@ -413,6 +418,7 @@</span><br><span>                      if (f_si_vec_contains(si_per_tc, SYSTEM_INFORMATION_TYPE_16) or</span><br><span>                          f_si_vec_contains(si_per_tc, SYSTEM_INFORMATION_TYPE_17)) {</span><br><span>                              setverdict(fail, "Cannot have SI16/SI17 and SI22!");</span><br><span style="color: hsl(120, 100%, 40%);">+                                mtc.stop;</span><br><span>                    }</span><br><span>                    if (not cfg.bcch_extended) {</span><br><span>                                 testcase.stop("Error: SI22 requires BCCH Extd!");</span><br><span>@@ -484,6 +490,7 @@</span><br><span>            var SystemInformation si := f_gsmtap_get_si(pt, msg_type);</span><br><span>           if (not match(si, t)) {</span><br><span>                      setverdict(fail, "SI ", si, " doesn't match ", t);</span><br><span style="color: hsl(120, 100%, 40%);">+                    mtc.stop;</span><br><span>            } else {</span><br><span>                     setverdict(pass);</span><br><span>            }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/9907">change 9907</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/9907"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I9b618235939fa41160b9be6677b121963d3ec857 </div>
<div style="display:none"> Gerrit-Change-Number: 9907 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: daniel <dwillmann@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Pau Espin Pedrol <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: daniel <dwillmann@sysmocom.de> </div>
<div style="display:none"> Gerrit-CC: Vadim Yanitskiy <axilirator@gmail.com> </div>