diff options
author | Daniel Willmann <dwillmann@sysmocom.de> | 2018-02-04 13:35:26 +0100 |
---|---|---|
committer | Daniel Willmann <dwillmann@sysmocom.de> | 2018-02-15 10:29:01 +0100 |
commit | 8b084374b5a7b1b69a1e1a27949d6f99f29c203c (patch) | |
tree | 4a62e6dc4c8424f306c42b16ab3739055269c907 /msc | |
parent | 84a2807822fc47df31b15b232e66e0ff6b4c1e92 (diff) |
MSC_Tests: Add CC sequence no. test with DTMF
Change-Id: I9674343acc18187b9e016bd8e0be470d5424046f
Diffstat (limited to 'msc')
-rw-r--r-- | msc/BSC_ConnectionHandler.ttcn | 61 | ||||
-rw-r--r-- | msc/MSC_Tests.ttcn | 19 |
2 files changed, 80 insertions, 0 deletions
diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn index 2d65a34c..97b26d2d 100644 --- a/msc/BSC_ConnectionHandler.ttcn +++ b/msc/BSC_ConnectionHandler.ttcn @@ -647,6 +647,67 @@ runs on BSC_ConnHdlr { setverdict(pass); } +function f_mo_seq_dtmf_dup(inout CallParameters cpars) +runs on BSC_ConnHdlr { + + timer T := 1.0; + var MobileIdentityLV mi; + var MNCC_PDU mncc; + var MgcpCommand mgcp_cmd; + var template PDU_ML3_MS_NW dtmf_dtap; + + /* If we have a TMSI, use TMSI instead of IMSI */ + if (ispresent(g_pars.tmsi)) { + mi := valueof(ts_MI_TMSI_LV(g_pars.tmsi)); + } else { + mi := valueof(ts_MI_IMSI_LV(g_pars.imsi)); + } + f_establish_fully(mi); + + /* Create MNCC and MGCP expect */ + f_create_mncc_expect(hex2str(cpars.called_party)); + f_create_mgcp_expect(ExpectCriteria:{omit,omit,omit}); + + BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_SETUP(cpars.transaction_id, cpars.called_party))); + MNCC.receive(tr_MNCC_SETUP_ind(?, tr_MNCC_number(hex2str(cpars.called_party)))) -> value mncc; + cpars.mncc_callref := mncc.u.signal.callref; + + /* Send DTMF */ + dtmf_dtap := ts_ML3_MO_CC_START_DTMF(cpars.transaction_id, "2"); + dtmf_dtap.msgs.cc.startDTMF.nsd := int2bit(2, 2); + BSSAP.send(ts_PDU_DTAP_MO(dtmf_dtap)); + T.start; + alt { + [] MNCC.receive(tr_MNCC_START_DTMF_ind(cpars.mncc_callref, "2")) {} + [] T.timeout { + setverdict(fail, "Timeout waiting for START_DTMF_ind"); + self.stop; + } + } + + BSSAP.send(ts_PDU_DTAP_MO(dtmf_dtap)); + T.start; + alt { + [] MNCC.receive(tr_MNCC_START_DTMF_ind(cpars.mncc_callref, "2")) { + setverdict(fail, "Received duplicate START_DTMF_ind"); + self.stop; + } + [] T.timeout { } + } + + dtmf_dtap := ts_ML3_MO_CC_START_DTMF(cpars.transaction_id, "3"); + dtmf_dtap.msgs.cc.startDTMF.nsd := int2bit(3, 2); + BSSAP.send(ts_PDU_DTAP_MO(dtmf_dtap)) + alt { + [] MNCC.receive(tr_MNCC_START_DTMF_ind(cpars.mncc_callref, "3")) { } + [] T.timeout { + setverdict(fail, "Received duplicate START_DTMF_ind"); + self.stop; + } + } + + setverdict(pass); +} /* expect a clear command */ function f_expect_clear(float t := 5.0) runs on BSC_ConnHdlr { timer T := t; diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn index 17995083..a8d9022a 100644 --- a/msc/MSC_Tests.ttcn +++ b/msc/MSC_Tests.ttcn @@ -1565,6 +1565,24 @@ testcase TC_lu_and_mt_call() runs on MTC_CT { vc_conn.done; } +/* Test MO Call SETUP with DTMF */ +private function f_tc_mo_setup_dtmf_dup(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr { + f_init_handler(pars); + var CallParameters cpars := valueof(t_CallParams('12345'H, 0)); + cpars.bss_rtp_port := 1110; + cpars.mgcp_connection_id_bss := '22222'H; + cpars.mgcp_connection_id_mss := '33333'H; + + f_perform_lu(true); + f_mo_seq_dtmf_dup(cpars); +} +testcase TC_mo_setup_and_dtmf_dup() runs on MTC_CT { + var BSC_ConnHdlr vc_conn; + f_init(); + + vc_conn := f_start_handler(refers(f_tc_mo_setup_dtmf_dup), testcasename(), 39); + vc_conn.done; +} @@ -1614,6 +1632,7 @@ control { execute( TC_mo_crcx_ran_timeout() ); execute( TC_mo_crcx_ran_reject() ); execute( TC_mt_crcx_ran_reject() ); + execute( TC_mo_setup_and_dtmf_dup() ); //execute( TC_mt_t310() ); execute( TC_gsup_cancel() ); execute( TC_lu_imsi_auth_tmsi_encr_1_13() ); |