asterisk: Introduce TC_ims_call_mo
The test validates establishing and hanging up a MO call:
SIP-UA -> Asterisk -> IMS-CORE.
SYS#6782
Change-Id: I3c6d8c109c392fa6e1036dcb69a7abb90b22fec7
diff --git a/asterisk/Asterisk_Tests.ttcn b/asterisk/Asterisk_Tests.ttcn
index e7d0616..4ac7eaf 100644
--- a/asterisk/Asterisk_Tests.ttcn
+++ b/asterisk/Asterisk_Tests.ttcn
@@ -65,6 +65,14 @@
const charstring broadcast_sip_extension := "0500";
+/* TODO: need to find correct RES, CK, IK, values for:
+ * Response: "a19de225d030e6e0ec20f6de5f9dd80d"
+ * CNonce Value: "9a6460bcc3c84a3eac69455a93b67a77"
+ */
+const charstring c_auth_res := "a19de225d030e6e0";
+const charstring c_auth_ck := "9a6460bcc3c84a3eac69455a93b67a77";
+const charstring c_auth_ik := "5238297dfcca759bd05d48ff49bc63fa";
+
function f_init_ConnHdlrPars(integer idx := 1) runs on test_CT return SIPConnHdlrPars {
var template (value) CallPars cp := t_CallPars(mp_local_sip_host, 1234 + 2*idx);
var template (value) SIPConnHdlrPars pars := t_Pars(mp_local_sip_host,
@@ -163,7 +171,7 @@
function f_start_handler_IMS(ims_void_fn fn, IMS_ConnHdlrPars pars)
runs on test_CT return IMS_ConnHdlr {
var IMS_ConnHdlr vc_conn;
- var charstring id := testcasename() & "-IMS_ConnHdlr-" & pars.user;
+ var charstring id := testcasename() & "-IMS_ConnHdlr-" & pars.subscr.imsi;
vc_conn := IMS_ConnHdlr.create(id) alive;
@@ -359,9 +367,43 @@
setverdict(pass);
}
+private function f_AMI_IMS_register(IMS_ConnHdlrPars pars) runs on test_CT
+{
+ /* Give some time for IMS_ConnHdlr to register SIP expect. This could be done through IMS_COORD. */
+ f_sleep(1.0);
+ /* Clear events: */
+ AMI_CLIENT.clear;
+
+ /* Announce network information, this should usually happen when UE
+ * becomes attached to network and before IMS APN is set up: */
+ f_ami_action_PJSIPAccessNetworkInfo(AMI_CLIENT, mp_volte_ims_outbound_registration,
+ f_ami_gen_PJSIPAccessNetworkInfo_Info_EUTRAN(pars.subscr.uli_str));
+
+ /* Trigger registration: */
+ f_ami_action_PJSIPRegister(AMI_CLIENT, mp_volte_ims_outbound_registration);
+
+ var charstring rand_str := oct2str(pars.subscr.rand);
+ var charstring autn_str := oct2str(pars.subscr.autn);
+ AMI_CLIENT.receive(tr_AMI_Event_AuthRequest(mp_volte_ims_outbound_registration,
+ rand := pattern @nocase rand_str,
+ autn := pattern @nocase autn_str));
+
+ f_ami_action_AuthResponse_RES(AMI_CLIENT,
+ mp_volte_ims_outbound_registration,
+ c_auth_res, c_auth_ck, c_auth_ik);
+
+ AMI_CLIENT.receive(tr_AMI_Event_Registry(f_sip_SipAddr_to_str(pars.subscr.local_sip_record),
+ "sip:" & mp_local_ims_host,
+ "Registered"));
+
+ /* TODO: test "Action: PJSIPUnregister" */
+
+ /* TODO: in another test emulating a call, test "Action: DedicatedBearerStatus" */
+}
+
/* Test SIP registration of local clients */
private function f_TC_ims_registration(charstring id) runs on IMS_ConnHdlr {
- f_create_sip_expect(valueof(ts_SipUrl_from_Addr_Union(g_pars.registrar_sip_record.addr)));
+ f_create_sip_expect(valueof(ts_SipUrl_from_Addr_Union(g_pars.subscr.registrar_sip_record.addr)));
as_IMS_register();
setverdict(pass);
}
@@ -372,46 +414,67 @@
pars := f_init_IMS_ConnHdlrPars();
vc_conn := f_start_handler_IMS(refers(f_TC_ims_registration), pars);
- /* Give some time for IMS_ConnHdlr to register SIP expect. This could be done through IMS_COORD. */
- f_sleep(1.0);
- /* Clear events: */
- AMI_CLIENT.clear;
-
- /* Announce network information, this should usually happen when UE
- * becomes attached to network and before IMS APN is set up: */
- f_ami_action_PJSIPAccessNetworkInfo(AMI_CLIENT, mp_volte_ims_outbound_registration,
- f_ami_gen_PJSIPAccessNetworkInfo_Info_EUTRAN(pars.uli_str));
-
- /* Trigger registration: */
- f_ami_action_PJSIPRegister(AMI_CLIENT, mp_volte_ims_outbound_registration);
-
- var charstring rand_str := oct2str(pars.rand);
- var charstring autn_str := oct2str(pars.autn);
- AMI_CLIENT.receive(tr_AMI_Event_AuthRequest(mp_volte_ims_outbound_registration,
- rand := pattern @nocase rand_str,
- autn := pattern @nocase autn_str));
- /* TODO: need to find correct RES, CK, IK, values for:
- * Response: "a19de225d030e6e0ec20f6de5f9dd80d"
- * CNonce Value: "9a6460bcc3c84a3eac69455a93b67a77"
- */
- f_ami_action_AuthResponse_RES(AMI_CLIENT,
- mp_volte_ims_outbound_registration,
- res := "a19de225d030e6e0",
- ck := "9a6460bcc3c84a3eac69455a93b67a77",
- ik := "5238297dfcca759bd05d48ff49bc63fa");
-
- AMI_CLIENT.receive(tr_AMI_Event_Registry(f_sip_SipAddr_to_str(pars.local_sip_record),
- "sip:" & mp_local_ims_host,
- "Registered"));
-
- /* TODO: test "Action: PJSIPUnregister" */
-
- /* TODO: in another test emulating a call, test "Action: DedicatedBearerStatus" */
+ f_AMI_IMS_register(pars);
vc_conn.done;
f_shutdown();
}
+/* Test SIP registration of local clients */
+private function f_TC_ims_call_mo(charstring id) runs on IMS_ConnHdlr {
+ f_create_sip_expect(valueof(ts_SipUrl_from_Addr_Union(g_pars.subscr.registrar_sip_record.addr)));
+ if (ispresent(g_pars.subscr.cp.called)) {
+ f_create_sip_expect(valueof(ts_SipUrl_from_Addr_Union(g_pars.subscr.cp.called.addr)));
+ }
+ as_IMS_register();
+ setverdict(pass);
+ as_IMS_mo_call_accept();
+ setverdict(pass);
+ COORD.send(COORD_CMD_CALL_ESTABLISHED);
+ as_IMS_exp_call_hangup(g_pars.subscr.cp.sip_seq_nr + 1);
+ setverdict(pass);
+}
+testcase TC_ims_call_mo() runs on test_CT {
+ var SIPConnHdlrPars sip_pars;
+ var IMS_ConnHdlrPars ims_pars;
+ var SIPConnHdlr vc_conn_sip;
+ var IMS_ConnHdlr vc_conn_ims;
+ const charstring c_ext_msisdn := "90829";
+
+ f_init();
+
+ sip_pars := f_init_ConnHdlrPars(idx := 1);
+ ims_pars := f_init_IMS_ConnHdlrPars();
+
+ sip_pars.cp.calling := sip_pars.registrar_sip_record;
+ sip_pars.cp.called := valueof(ts_SipAddr(ts_HostPort(sip_pars.remote_sip_host),
+ ts_UserInfo(c_ext_msisdn)));
+ ims_pars.subscr.cp.calling := valueof(ts_SipAddr(ts_HostPort(ims_pars.local_sip_host),
+ ts_UserInfo(ims_pars.subscr.msisdn)));
+ ims_pars.subscr.cp.called := valueof(ts_SipAddr(ts_HostPort(ims_pars.local_sip_host),
+ ts_UserInfo(c_ext_msisdn)));
+
+ vc_conn_ims := f_start_handler_IMS(refers(f_TC_ims_call_mo), ims_pars);
+ vc_conn_sip := f_start_handler(refers(f_TC_internal_call_mo), sip_pars);
+
+ COORD.receive(COORD_CMD_REGISTERED) from vc_conn_sip;
+
+ f_AMI_IMS_register(ims_pars);
+
+ COORD.send(COORD_CMD_START) to vc_conn_sip;
+ COORD.receive(COORD_CMD_CALL_ESTABLISHED) from vc_conn_sip;
+ IMS_COORD.receive(COORD_CMD_CALL_ESTABLISHED) from vc_conn_ims;
+
+ /* Call on-going */
+ f_sleep(1.0);
+
+ COORD.send(COORD_CMD_HANGUP) to vc_conn_sip;
+
+ vc_conn_sip.done;
+ vc_conn_ims.done;
+ f_shutdown();
+}
+
control {
execute( TC_internal_registration() );
execute( TC_internal_call_momt() );
@@ -419,6 +482,7 @@
execute( TC_internal_call_all_3registered() );
execute( TC_internal_call_all_4registered() );
execute( TC_ims_registration() );
+ execute( TC_ims_call_mo() );
}
}