BSC_Test_ASCI: Add Talker detect with link fail test

The talker requests uplink. Instead of receiving link establishment from
the BTS, the BSC receives a link failure. The MSC expects to receive an
UPLINK RELEASE INDICATION, caused by radio link failure.

Change-Id: Ied56a6bdc0bfa541b1419e63e9e209ed20af804c
This commit is contained in:
Andreas Eversberg 2023-07-20 12:22:58 +02:00
parent 92c2dca4ed
commit cfdbb3ef65
2 changed files with 51 additions and 0 deletions

View File

@ -92,6 +92,7 @@ private function f_tc_vgcs_vbs_setup(charstring id) runs on MSC_ConnHdlr {
var boolean uplink_req := false;
var boolean uplink_req_conf := false;
var boolean uplink_rel_ind := false;
var boolean uplink_rel_ind_failure := false;
var boolean assign_res := false;
var boolean assign_fail := false;
/* Note: This timer is used to receive messages after the expected event.
@ -150,6 +151,14 @@ private function f_tc_vgcs_vbs_setup(charstring id) runs on MSC_ConnHdlr {
}
repeat;
}
[] BSSAP.receive(tr_BSSMAP_UplinkRelInd(GSM0808_CAUSE_RADIO_INTERFACE_FAILURE, omit)) -> value rx_bssap {
log("VGCS: received uplink rel ind, caused by failure");
uplink_rel_ind_failure := true;
if (g_pars.asci_test.vgcs_talker_fail) {
T.start;
}
repeat;
}
[] COORD.receive(COORD_VGCS_ASSIGN_RES) {
log("VGCS: got assignment result at call control");
assign_res := true;
@ -236,6 +245,19 @@ private function f_tc_vgcs_vbs_setup(charstring id) runs on MSC_ConnHdlr {
setverdict(pass);
return;
}
if (g_pars.asci_test.vgcs_talker_fail) {
if (not uplink_rel_ind_failure) {
setverdict(fail, "VGCS: No uplink release indication as expected!");
return;
}
if (not uplink_free) {
setverdict(fail, "VGCS: Uplink not free as expected!");
return;
}
log("VGCS: Uplink release and uplink marked free as expected!");
setverdict(pass);
return;
}
if (g_pars.asci_test.vgcs_talker_est) {
if (not uplink_req_conf) {
setverdict(fail, "VGCS: No uplink request confirm as expected!");
@ -343,11 +365,16 @@ private function f_tc_asci_assignment(charstring id) runs on MSC_ConnHdlr {
log("VGCS: got assignment result on channel");
COORD.send(COORD_VGCS_ASSIGN_RES);
if (g_pars.asci_test.vgcs_talker_req or
g_pars.asci_test.vgcs_talker_fail or
g_pars.asci_test.vgcs_talker_est or
g_pars.asci_test.vgcs_talker_rel) {
log("VGCS: sending talker det");
RSL.send(ts_RSL_TALKER_DET(g_chan_nr));
}
if (g_pars.asci_test.vgcs_talker_fail) {
log("VGCS: sending RSL failure ind");
RSL.send(ts_RSL_CONN_FAIL_IND(g_chan_nr, RSL_ERR_TALKER_ACC_FAIL));
}
if (g_pars.asci_test.vgcs_talker_est or
g_pars.asci_test.vgcs_talker_rel) {
log("VGCS: sending RSL etabish ind");
@ -493,6 +520,28 @@ testcase TC_vgcs_vbs_talker_req() runs on test_CT {
f_shutdown_helper();
}
testcase TC_vgcs_vbs_talker_fail() runs on test_CT {
var MSC_ConnHdlr call_conn, chan_conn;
var TestHdlrParams pars := f_gen_test_hdlr_pars();
f_init(1, true);
pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
pars.asci_test.vgcs_talker_fail := true;
call_conn := f_start_handler(refers(f_tc_vgcs_vbs_setup), pars);
chan_conn := f_start_handler(refers(f_tc_asci_assignment), pars);
/* Connect COORD ports of both functions. The functions will delay before using them. */
connect(call_conn:COORD, chan_conn:COORD);
call_conn.done;
chan_conn.done;
f_shutdown_helper();
}
testcase TC_vgcs_vbs_talker_est() runs on test_CT {
var MSC_ConnHdlr call_conn, chan_conn;
var TestHdlrParams pars := f_gen_test_hdlr_pars();
@ -586,6 +635,7 @@ control {
execute( TC_vgcs_vbs_assignment() );
execute( TC_vgcs_vbs_assignment_fail() );
execute( TC_vgcs_vbs_talker_req() );
execute( TC_vgcs_vbs_talker_fail() );
execute( TC_vgcs_vbs_talker_est() );
execute( TC_vgcs_vbs_talker_rel() );
execute( TC_vgcs_vbs_uplink_seized() );

View File

@ -757,6 +757,7 @@ type record ASCITest {
boolean vgcs_assign_ok,
boolean vgcs_assign_fail,
boolean vgcs_talker_req,
boolean vgcs_talker_fail,
boolean vgcs_talker_est,
boolean vgcs_talker_rel,
boolean vgcs_uplink_seized,