msc: Introduce shared f_expect_clear()

Avoid having to copy+paste the matching of a channel clear/relesae

Change-Id: If070b079f2ffadb8065fb99d1c8951ac9baec88b
This commit is contained in:
Harald Welte 2018-01-27 14:25:46 +01:00
parent ad2952e063
commit 1ddc716eaf
2 changed files with 55 additions and 114 deletions

View File

@ -454,6 +454,41 @@ runs on BSC_ConnHdlr {
setverdict(pass);
}
/* expect a clear command */
function f_expect_clear(float t := 5.0) runs on BSC_ConnHdlr {
timer T := t;
T.start;
alt {
[] BSSAP.receive(tr_BSSMAP_ClearCommand) { }
[] BSSAP.receive {
setverdict(fail, "Unexpected BSSMAP while waiting for ClearCommand");
self.stop;
}
[] T.timeout {
setverdict(inconc, "Timeout waiting for ClearCommand");
self.stop;
}
}
BSSAP.send(ts_BSSMAP_ClearComplete);
T.start;
alt {
[] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {
setverdict(pass);
}
[] BSSAP.receive {
setverdict(fail, "Unexpected BSSMAP while waiting for SCCP Release");
self.stop;
}
[] T.timeout {
setverdict(inconc, "Timeout waiting for SCCP Release");
self.stop;
}
}
}

View File

@ -437,10 +437,7 @@ private function f_tc_lu_imsi_reject(charstring id, BSC_ConnHdlrPars pars) runs
self.stop;
}
}
BSSAP.receive(tr_BSSMAP_ClearCommand);
BSSAP.send(ts_BSSMAP_ClearComplete);
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
setverdict(pass);
f_expect_clear();
}
testcase TC_lu_imsi_reject() runs on MTC_CT {
var BSC_ConnHdlr vc_conn;
@ -467,10 +464,7 @@ private function f_tc_lu_imsi_timeout_gsup(charstring id, BSC_ConnHdlrPars pars)
self.stop;
}
}
BSSAP.receive(tr_BSSMAP_ClearCommand);
BSSAP.send(ts_BSSMAP_ClearComplete);
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
setverdict(pass);
f_expect_clear();
}
testcase TC_lu_imsi_timeout_gsup() runs on MTC_CT {
var BSC_ConnHdlr vc_conn;
@ -520,13 +514,7 @@ runs on BSC_ConnHdlr {
[] T.timeout { setverdict(inconc, "Timeout waiting for CM SERV REQ"); }
}
alt {
[] BSSAP.receive(tr_BSSMAP_ClearCommand) {
setverdict(pass);
}
[] BSSAP.receive { setverdict(fail, "Received unexpected BSSAP"); }
[] T.timeout { setverdict(inconc, "Timeout waiting for CM SERV REQ"); }
}
f_expect_clear();
}
testcase TC_cmserv_imsi_unknown() runs on MTC_CT {
var BSC_ConnHdlr vc_conn;
@ -573,10 +561,7 @@ private function f_tc_lu_auth_sai_timeout(charstring id, BSC_ConnHdlrPars pars)
/* The HLR would normally return an auth vector here, but we fail to do so. */
BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Rej));
BSSAP.receive(tr_BSSMAP_ClearCommand);
BSSAP.send(ts_BSSMAP_ClearComplete);
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
setverdict(pass);
f_expect_clear();
}
testcase TC_lu_auth_sai_timeout() runs on MTC_CT {
var BSC_ConnHdlr vc_conn;
@ -607,10 +592,7 @@ private function f_tc_lu_auth_sai_err(charstring id, BSC_ConnHdlrPars pars) runs
GSUP.send(ts_GSUP_SAI_ERR(g_pars.imsi, 13));
BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Rej));
BSSAP.receive(tr_BSSMAP_ClearCommand);
BSSAP.send(ts_BSSMAP_ClearComplete);
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
setverdict(pass);
f_expect_clear();
}
testcase TC_lu_auth_sai_err() runs on MTC_CT {
var BSC_ConnHdlr vc_conn;
@ -704,10 +686,7 @@ private function f_tc_lu_by_imei(charstring id, BSC_ConnHdlrPars pars) runs on B
[] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_MM_ID_Req)) { repeat; }
}
/* wait for normal teardown */
BSSAP.receive(tr_BSSMAP_ClearCommand);
BSSAP.send(ts_BSSMAP_ClearComplete);
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
setverdict(pass);
f_expect_clear();
}
testcase TC_lu_by_imei() runs on MTC_CT {
var BSC_ConnHdlr vc_conn;
@ -753,10 +732,7 @@ private function f_tc_lu_tmsi_noauth_unknown(charstring id, BSC_ConnHdlrPars par
}
/* wait for normal teardown */
BSSAP.receive(tr_BSSMAP_ClearCommand);
BSSAP.send(ts_BSSMAP_ClearComplete);
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
setverdict(pass);
f_expect_clear();
}
testcase TC_lu_by_tmsi_noauth_unknown() runs on MTC_CT {
var BSC_ConnHdlr vc_conn;
@ -780,10 +756,7 @@ private function f_tc_imsi_detach_by_imsi(charstring id, BSC_ConnHdlrPars pars)
BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));
/* wait for normal teardown */
BSSAP.receive(tr_BSSMAP_ClearCommand);
BSSAP.send(ts_BSSMAP_ClearComplete);
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
setverdict(pass);
f_expect_clear();
}
testcase TC_imsi_detach_by_imsi() runs on MTC_CT {
var BSC_ConnHdlr vc_conn;
@ -806,10 +779,7 @@ private function f_tc_imsi_detach_by_tmsi(charstring id, BSC_ConnHdlrPars pars)
BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));
/* wait for normal teardown */
BSSAP.receive(tr_BSSMAP_ClearCommand);
BSSAP.send(ts_BSSMAP_ClearComplete);
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
setverdict(pass);
f_expect_clear();
}
testcase TC_imsi_detach_by_tmsi() runs on MTC_CT {
var BSC_ConnHdlr vc_conn;
@ -832,10 +802,7 @@ private function f_tc_imsi_detach_by_imei(charstring id, BSC_ConnHdlrPars pars)
BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));
/* wait for normal teardown */
BSSAP.receive(tr_BSSMAP_ClearCommand);
BSSAP.send(ts_BSSMAP_ClearComplete);
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
setverdict(pass);
f_expect_clear();
}
testcase TC_imsi_detach_by_imei() runs on MTC_CT {
var BSC_ConnHdlr vc_conn;
@ -885,11 +852,7 @@ private function f_emerg_call(MobileIdentityLV mi) runs on BSC_ConnHdlr {
BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_CC_RELEASE(tid)));
/* clearing of radio channel */
BSSAP.receive(tr_BSSMAP_ClearCommand);
BSSAP.send(ts_BSSMAP_ClearComplete);
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
f_sleep(5.0);
f_expect_clear();
}
/* establish an emergency call by IMEI, no SIM inserted (and hence no IMSI) */
@ -900,10 +863,7 @@ private function f_tc_emerg_call_imei_reject(charstring id, BSC_ConnHdlrPars par
var PDU_ML3_MS_NW l3_info := valueof(ts_CM_SERV_REQ(CM_TYPE_EMERG_CALL, mi));
f_bssap_compl_l3(l3_info);
BSSAP.receive(tr_PDU_DTAP_MT(tr_CM_SERV_REJ('05'O)));
BSSAP.receive(tr_BSSMAP_ClearCommand);
BSSAP.send(ts_BSSMAP_ClearComplete);
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
setverdict(pass);
f_expect_clear();
}
testcase TC_emerg_call_imei_reject() runs on MTC_CT {
var BSC_ConnHdlr vc_conn;
@ -940,10 +900,7 @@ private function f_tc_cm_serv_req_vgcs_reject(charstring id, BSC_ConnHdlrPars pa
var PDU_ML3_MS_NW l3_info := valueof(ts_CM_SERV_REQ(CM_TYPE_VGCS, mi));
f_bssap_compl_l3(l3_info);
BSSAP.receive(tr_PDU_DTAP_MT(tr_CM_SERV_REJ(int2oct(32,1))));
BSSAP.receive(tr_BSSMAP_ClearCommand);
BSSAP.send(ts_BSSMAP_ClearComplete);
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
setverdict(pass);
f_expect_clear();
}
testcase TC_cm_serv_req_vgcs_reject() runs on MTC_CT {
var BSC_ConnHdlr vc_conn;
@ -964,10 +921,7 @@ private function f_tc_cm_serv_req_vbs_reject(charstring id, BSC_ConnHdlrPars par
var PDU_ML3_MS_NW l3_info := valueof(ts_CM_SERV_REQ(CM_TYPE_VBS, mi));
f_bssap_compl_l3(l3_info);
BSSAP.receive(tr_PDU_DTAP_MT(tr_CM_SERV_REJ(int2oct(32,1))));
BSSAP.receive(tr_BSSMAP_ClearCommand);
BSSAP.send(ts_BSSMAP_ClearComplete);
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
setverdict(pass);
f_expect_clear();
}
testcase TC_cm_serv_req_vbs_reject() runs on MTC_CT {
var BSC_ConnHdlr vc_conn;
@ -988,10 +942,7 @@ private function f_tc_cm_serv_req_lcs_reject(charstring id, BSC_ConnHdlrPars par
var PDU_ML3_MS_NW l3_info := valueof(ts_CM_SERV_REQ(CM_TYPE_LCS, mi));
f_bssap_compl_l3(l3_info);
BSSAP.receive(tr_PDU_DTAP_MT(tr_CM_SERV_REJ(int2oct(32,1))));
BSSAP.receive(tr_BSSMAP_ClearCommand);
BSSAP.send(ts_BSSMAP_ClearComplete);
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
setverdict(pass);
f_expect_clear();
}
testcase TC_cm_serv_req_lcs_reject() runs on MTC_CT {
var BSC_ConnHdlr vc_conn;
@ -1012,10 +963,7 @@ private function f_tc_cm_reest_req_reject(charstring id, BSC_ConnHdlrPars pars)
var PDU_ML3_MS_NW l3_info := valueof(ts_CM_REEST_REQ(0, mi));
f_bssap_compl_l3(l3_info);
BSSAP.receive(tr_PDU_DTAP_MT(tr_CM_SERV_REJ(int2oct(32,1))));
BSSAP.receive(tr_BSSMAP_ClearCommand);
BSSAP.send(ts_BSSMAP_ClearComplete);
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
setverdict(pass);
f_expect_clear();
}
testcase TC_cm_reest_req_reject() runs on MTC_CT {
var BSC_ConnHdlr vc_conn;
@ -1054,10 +1002,7 @@ private function f_tc_lu_auth_2G_fail(charstring id, BSC_ConnHdlrPars pars) runs
/* Expect LU REJECT with Cause == Illegal MS */
BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Rej('03'O)));
BSSAP.receive(tr_BSSMAP_ClearCommand);
BSSAP.send(ts_BSSMAP_ClearComplete);
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
setverdict(pass);
f_expect_clear();
}
testcase TC_lu_auth_2G_fail() runs on MTC_CT {
var BSC_ConnHdlr vc_conn;
@ -1146,20 +1091,7 @@ private function f_tc_establish_and_nothing(charstring id, BSC_ConnHdlrPars pars
f_perform_lu(false, true, true, false);
f_establish_fully(valueof(ts_MI_IMSI_LV(g_pars.imsi)), false, false);
timer T := 30.0;
T.start;
alt {
[] T.timeout { setverdict(fail, "Timeout waiting for channel release"); self.stop; }
[] BSSAP.receive(tr_BSSMAP_ClearCommand) {
BSSAP.send(ts_BSSMAP_ClearComplete);
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
setverdict(pass);
}
[] BSSAP.receive { repeat; }
[] MNCC.receive { repeat; }
[] GSUP.receive { repeat; }
[] MGCP.receive { repeat; }
}
f_expect_clear();
}
testcase TC_establish_and_nothing() runs on MTC_CT {
var BSC_ConnHdlr vc_conn;
@ -1183,20 +1115,7 @@ private function f_tc_mo_setup_and_nothing(charstring id, BSC_ConnHdlrPars pars)
BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_SETUP(cpars.transaction_id, cpars.called_party)));
timer T := 30.0;
T.start;
alt {
[] T.timeout { setverdict(fail, "Timeout waiting for channel release"); self.stop; }
[] BSSAP.receive(tr_BSSMAP_ClearCommand) {
BSSAP.send(ts_BSSMAP_ClearComplete);
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
setverdict(pass);
}
[] BSSAP.receive { repeat; }
[] MNCC.receive { repeat; }
[] GSUP.receive { repeat; }
[] MGCP.receive { repeat; }
}
f_expect_clear(30.0);
}
testcase TC_mo_setup_and_nothing() runs on MTC_CT {
var BSC_ConnHdlr vc_conn;
@ -1230,20 +1149,7 @@ private function f_tc_mo_crcx_ran_timeout(charstring id, BSC_ConnHdlrPars pars)
cpars.mgcp_ep := mgcp_cmd.line.ep;
/* never respond to this */
timer T := 30.0;
T.start;
alt {
[] T.timeout { setverdict(fail, "Timeout waiting for channel release"); self.stop; }
[] BSSAP.receive(tr_BSSMAP_ClearCommand) {
BSSAP.send(ts_BSSMAP_ClearComplete);
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
setverdict(pass);
}
[] BSSAP.receive { repeat; }
[] MNCC.receive { repeat; }
[] GSUP.receive { repeat; }
[] MGCP.receive { repeat; }
}
f_expect_clear(30.0);
}
testcase TC_mo_crcx_ran_timeout() runs on MTC_CT {
var BSC_ConnHdlr vc_conn;