From 2bdc6b6e3e7694ffafbd8910d9534431bf4ae205 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Wed, 5 Apr 2023 02:45:19 +0200 Subject: [PATCH] bsc: add TC_mscpool_sccp_n_pcstate_detaches_msc Related: SYS#6319 OS#5917 Related: I3a0869598b8395601a16d78dbc46eec400c0ea84 (osmo-bsc) Change-Id: Ia1aea4e33230d6a685b72ea5ba20dd9c7d265d44 --- bsc/BSC_Tests.ttcn | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn index bfab0fa4d..39c82ab87 100644 --- a/bsc/BSC_Tests.ttcn +++ b/bsc/BSC_Tests.ttcn @@ -9161,6 +9161,50 @@ testcase TC_mscpool_no_allow_attach_valid_nri() runs on test_CT { f_shutdown_helper(); } +/* When an MSC point-code gets an SCCP N-PCSTATE saying it is unreachable, immediately mark the MSC as unusable. */ +testcase TC_mscpool_sccp_n_pcstate_detaches_msc() runs on test_CT { + + f_init(nr_bts := 3, handler_mode := true, nr_msc := 2); + f_sleep(1.0); + + /* Control which MSC gets chosen next by the round-robin, otherwise + * would be randomly affected by which other tests ran before this. */ + f_vty_transceive(BSCVTY, "mscpool roundrobin next 0"); + + f_ctrs_msc_init(); + + var MSC_ConnHdlr vc_conn1; + var TestHdlrParams pars1 := f_gen_test_hdlr_pars(bssap_idx := 0); + pars1.mscpool.rsl_idx := 0; + pars1.mscpool.l3_info := valueof(ts_LU_REQ(LU_Type_IMSI_Attach, valueof(ts_MI_IMSI_LV('001010000000001'H)), '00F110'O)); + vc_conn1 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars1); + vc_conn1.done; + f_ctrs_msc_expect(0, "mscpool:subscr:new"); + + var MSC_ConnHdlr vc_conn2; + var TestHdlrParams pars2 := f_gen_test_hdlr_pars(bssap_idx := 1); + pars2.mscpool.rsl_idx := 1; + pars2.mscpool.l3_info := valueof(ts_CM_SERV_REQ(CM_TYPE_MO_CALL, valueof(ts_MI_IMSI_LV('001010000000002'H)))); + vc_conn2 := f_start_handler(refers(f_tc_mscpool_compl_l3), pars2); + vc_conn2.done; + f_ctrs_msc_expect(1, "mscpool:subscr:new"); + + f_logp(BSCVTY, "disconnecting msc0"); + /* Disconnect the first MSC */ + f_ran_adapter_cleanup(g_bssap[0]); + + /* Now round-robin would wrap to the first MSC, but since the first MSC is disconnected, it wraps around to msc + * 2 again. */ + var MSC_ConnHdlr vc_conn3; + var TestHdlrParams pars3 := f_gen_test_hdlr_pars(bssap_idx := 1); + pars3.mscpool.rsl_idx := 2; + pars3.mscpool.l3_info := valueof(ts_PAG_RESP(valueof(ts_MI_IMSI_LV('001010000000003'H)))); + 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(); +} + /* Allow/Deny emergency calls globally via VTY */ private function f_vty_allow_emerg_msc(boolean allow) runs on test_CT { f_vty_enter_cfg_msc(BSCVTY, 0); @@ -12463,6 +12507,8 @@ control { execute( TC_mscpool_paging_and_response_tmsi() ); execute( TC_mscpool_no_allow_attach_round_robin() ); execute( TC_mscpool_no_allow_attach_valid_nri() ); + + execute( TC_mscpool_sccp_n_pcstate_detaches_msc() ); } execute( TC_early_conn_fail() );