asterisk: Test auth resync procedure
A new test is added to validate the procedure, plus all refactoring
needed to accomodate for the new procedure.
Related: SYS#6961
Change-Id: I2c654c270aa908859ec0bbb4d1da30d58de99be4
diff --git a/asterisk/Asterisk_Tests.ttcn b/asterisk/Asterisk_Tests.ttcn
index 75c51e1..bb1ed90 100644
--- a/asterisk/Asterisk_Tests.ttcn
+++ b/asterisk/Asterisk_Tests.ttcn
@@ -364,7 +364,7 @@
setverdict(pass);
}
-private function f_AMI_IMS_register(IMS_ConnHdlrPars pars) runs on test_CT
+private function f_AMI_IMS_start_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);
@@ -378,22 +378,38 @@
/* Trigger registration: */
f_ami_action_PJSIPRegister(AMI_CLIENT, mp_volte_ims_outbound_registration);
+}
+private altstep as_AMI_IMS_register_Auth(IMS_ConnHdlrPars pars, boolean resync := false) runs on test_CT
+{
var charstring rand_str := oct2str(pars.subscr.auth.rand);
var charstring autn_str := oct2str(pars.subscr.auth.autn);
- AMI_CLIENT.receive(tr_AMI_Event_AuthRequest(mp_volte_ims_outbound_registration,
+ [not resync] AMI_CLIENT.receive(tr_AMI_Event_AuthRequest(mp_volte_ims_outbound_registration,
rand := pattern @nocase rand_str,
- autn := pattern @nocase autn_str));
+ autn := pattern @nocase autn_str)) {
+ f_ami_action_AuthResponse_RES(AMI_CLIENT,
+ mp_volte_ims_outbound_registration,
+ f_str_tolower(oct2str(pars.subscr.auth.res)),
+ f_str_tolower(oct2str(pars.subscr.auth.ck)),
+ f_str_tolower(oct2str(pars.subscr.auth.ik)));
- f_ami_action_AuthResponse_RES(AMI_CLIENT,
- mp_volte_ims_outbound_registration,
- f_str_tolower(oct2str(pars.subscr.auth.res)),
- f_str_tolower(oct2str(pars.subscr.auth.ck)),
- f_str_tolower(oct2str(pars.subscr.auth.ik)));
+ AMI_CLIENT.receive(tr_AMI_Event_Registry(f_sip_SipAddr_to_str(pars.subscr.local_sip_record),
+ "sip:" & mp_ims_domain,
+ "Registered"));
+ }
+ [resync] 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_AUTS(AMI_CLIENT,
+ mp_volte_ims_outbound_registration,
+ f_str_tolower(oct2str(pars.subscr.auth.auts)));
+ }
+}
- AMI_CLIENT.receive(tr_AMI_Event_Registry(f_sip_SipAddr_to_str(pars.subscr.local_sip_record),
- "sip:" & mp_ims_domain,
- "Registered"));
+private function f_AMI_IMS_register(IMS_ConnHdlrPars pars, boolean resync := false) runs on test_CT
+{
+ f_AMI_IMS_start_register(pars);
+ as_AMI_IMS_register_Auth(pars, resync := resync);
}
private function f_AMI_IMS_unregister(IMS_ConnHdlrPars pars) runs on test_CT
@@ -404,7 +420,7 @@
"Unregistered"));
}
-/* Test SIP registration of local clients */
+/* Test IMS registration of VoLTE UE */
private function f_TC_ims_registration(charstring id) runs on IMS_ConnHdlr {
f_create_sip_expect(valueof(ts_SipUrl_from_Addr_Union(g_pars.subscr.registrar_sip_record.addr)));
as_IMS_register();
@@ -430,6 +446,34 @@
f_shutdown();
}
+/* Test IMS registration of VoLTE UE. ISIM Resync case. */
+private function f_TC_ims_registration_resync(charstring id) runs on IMS_ConnHdlr {
+ f_create_sip_expect(valueof(ts_SipUrl_from_Addr_Union(g_pars.subscr.registrar_sip_record.addr)));
+ as_IMS_register(exp_auth_resync := true);
+ as_IMS_unregister();
+ setverdict(pass);
+}
+testcase TC_ims_registration_resync() runs on test_CT {
+ var IMS_ConnHdlrPars pars;
+ var IMS_ConnHdlr vc_conn;
+ f_init();
+ pars := f_init_IMS_ConnHdlrPars();
+ vc_conn := f_start_handler_IMS(refers(f_TC_ims_registration_resync), pars);
+
+ /* Emulate first Auth sync failure: */
+ f_AMI_IMS_register(pars, resync := true);
+ /* Second auth goes well: */
+ as_AMI_IMS_register_Auth(pars, resync := false);
+ /* Stay registered for one second */
+ f_sleep(1.0);
+
+ /* Trigger unregistration: */
+ f_AMI_IMS_unregister(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)));
@@ -568,6 +612,7 @@
execute( TC_internal_call_all_3registered() );
execute( TC_internal_call_all_4registered() );
execute( TC_ims_registration() );
+ execute( TC_ims_registration_resync() );
execute( TC_ims_call_mo() );
execute( TC_ims_call_mt() );
}