aboutsummaryrefslogtreecommitdiffstats
path: root/msc
diff options
context:
space:
mode:
authorDaniel Willmann <dwillmann@sysmocom.de>2018-02-04 13:35:26 +0100
committerDaniel Willmann <dwillmann@sysmocom.de>2018-02-15 10:29:01 +0100
commit8b084374b5a7b1b69a1e1a27949d6f99f29c203c (patch)
tree4a62e6dc4c8424f306c42b16ab3739055269c907 /msc
parent84a2807822fc47df31b15b232e66e0ff6b4c1e92 (diff)
MSC_Tests: Add CC sequence no. test with DTMF
Diffstat (limited to 'msc')
-rw-r--r--msc/BSC_ConnectionHandler.ttcn61
-rw-r--r--msc/MSC_Tests.ttcn19
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() );