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