From b9d09f99ee07a31fcb59a2008c25aa28ebe09a2f Mon Sep 17 00:00:00 2001 From: Vadim Yanitskiy Date: Wed, 6 Jun 2018 05:29:24 +0700 Subject: msc/USSD: add unknown request code testcase The idea of this testcase is to check reaction of the network on reception of USSD request with unknown/unhandled request code. It is not clearly defined by the GSM specs, how the network should react in such cases, but looking at GSM TS 04.80, section 4.3.2 "Error types description", the UnexpectedDataValue error looks suitable. Commercial networks also use this error when an unknown request code is sent. Change-Id: I6a3fcaafc37972a38c13722f0b511ea5e1e3fbd8 --- msc/MSC_Tests.ttcn | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'msc/MSC_Tests.ttcn') diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn index 05d6b4f6..7b8740c0 100644 --- a/msc/MSC_Tests.ttcn +++ b/msc/MSC_Tests.ttcn @@ -2163,6 +2163,59 @@ testcase TC_lu_and_ussd_single_req() runs on MTC_CT { vc_conn.done; } +private function f_tc_lu_and_ussd_wrong_code(charstring id, BSC_ConnHdlrPars pars) +runs on BSC_ConnHdlr { + f_init_handler(pars); + + /* Perform location update */ + f_perform_lu(); + + /* Send CM Service Request for SS/USSD */ + f_establish_fully(EST_TYPE_SS_ACT); + + /* Compose a new SS/REGISTER message with request */ + var template (value) PDU_ML3_MS_NW ussd_req := ts_ML3_MO_SS_REGISTER( + tid := 1, /* We just need a single transaction */ + ti_flag := c_TIF_ORIG, /* Sent from the side that originates the TI */ + facility := f_USSD_FACILITY_IE_INVOKE( + invoke_id := 5, /* Phone may not start from 0 or 1 */ + op_code := SS_OP_CODE_PROCESS_USS_REQ, + ussd_string := "*#999#" + ) + ); + + /* Compose SS/RELEASE_COMPLETE template with expected response */ + var template PDU_ML3_NW_MS ussd_rsp := tr_ML3_MT_SS_RELEASE_COMPLETE( + tid := 1, /* Response should arrive within the same transaction */ + ti_flag := c_TIF_REPL, /* Sent to the side that originates the TI */ + facility := f_USSD_FACILITY_IE_RETURN_ERROR( + invoke_id := 5, /* InvokeID shall be the same for both REQ and RSP */ + err_code := SS_ERR_CODE_UNEXPECTED_DATA_VALUE + ) + ); + + /* Request own number request */ + BSSAP.send(ts_PDU_DTAP_MO(ussd_req)); + alt { + /* We expect RELEASE_COMPLETE message with the response */ + [] BSSAP.receive(tr_PDU_DTAP_MT(ussd_rsp)) { + setverdict(pass); + } + [] BSSAP.receive { + setverdict(fail, "Unknown/unexpected BSSAP received"); + self.stop; + } + } + + f_expect_clear(); +} +testcase TC_lu_and_ussd_wrong_code() runs on MTC_CT { + var BSC_ConnHdlr vc_conn; + f_init(); + vc_conn := f_start_handler(refers(f_tc_lu_and_ussd_wrong_code), 47); + vc_conn.done; +} + /* TODO (SMS): * different user data lengths * SMPP transaction mode with unsuccessful delivery @@ -2245,6 +2298,7 @@ control { execute( TC_smpp_mt_sms() ); execute( TC_lu_and_ussd_single_req() ); + execute( TC_lu_and_ussd_wrong_code() ); /* Run this last: at the time of writing this test crashes the MSC */ execute( TC_lu_imsi_auth_tmsi_encr_3_1_log_msc_debug() ); -- cgit v1.2.3