From 1ddc716eaf5091537c6fae574f14a7b44db55d4e Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sat, 27 Jan 2018 14:25:46 +0100 Subject: [PATCH] msc: Introduce shared f_expect_clear() Avoid having to copy+paste the matching of a channel clear/relesae Change-Id: If070b079f2ffadb8065fb99d1c8951ac9baec88b --- msc_tests/BSC_ConnectionHandler.ttcn | 35 +++++++ msc_tests/MSC_Tests.ttcn | 134 ++++----------------------- 2 files changed, 55 insertions(+), 114 deletions(-) diff --git a/msc_tests/BSC_ConnectionHandler.ttcn b/msc_tests/BSC_ConnectionHandler.ttcn index 97c02b8c9..a7ce1eae9 100644 --- a/msc_tests/BSC_ConnectionHandler.ttcn +++ b/msc_tests/BSC_ConnectionHandler.ttcn @@ -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; + } + } +} + diff --git a/msc_tests/MSC_Tests.ttcn b/msc_tests/MSC_Tests.ttcn index 2e9176f86..c241d74f5 100644 --- a/msc_tests/MSC_Tests.ttcn +++ b/msc_tests/MSC_Tests.ttcn @@ -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;