bsc: add TC_mscpool_sccp_n_pcstate_detaches_msc

Related: SYS#6319 OS#5917
Related: I3a0869598b8395601a16d78dbc46eec400c0ea84 (osmo-bsc)
Change-Id: Ia1aea4e33230d6a685b72ea5ba20dd9c7d265d44
This commit is contained in:
Neels Hofmeyr 2023-04-05 02:45:19 +02:00 committed by neels
parent 002658a071
commit 2bdc6b6e3e
1 changed files with 46 additions and 0 deletions

View File

@ -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() );