asterisk: Introduce test TC_ims_reregistration
So far Asterisk seems to be doing "initial registration" during
re-registration, instead of using the existing security context.
This is "OK" afaiu, but not the best pick (TS 24.229 5.1.1.4.1).
Related: SYS#6983
Change-Id: Icaeec6e2be3469b9e49d4361ca2b039ab44683c0
diff --git a/asterisk/Asterisk_Tests.ttcn b/asterisk/Asterisk_Tests.ttcn
index cee7adc..6982146 100644
--- a/asterisk/Asterisk_Tests.ttcn
+++ b/asterisk/Asterisk_Tests.ttcn
@@ -561,6 +561,45 @@
true, false);
}
+/* Test IMS re-registration based on Expires (TS 24.229 5.1.1.4.1, RFC 3261 10.3)*/
+private function f_TC_ims_reregistration(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();
+
+ /* Re-Register: This should optimally be a as_IMS_2nd_register() instead... */
+ timer Trereg;
+ Trereg.start(int2float(g_pars.subscr.registrar_expires) - 5.0);
+ alt {
+ [] as_IMS_register();
+ [] Trereg.timeout {
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str(g_name & ": Timeout waiting for re-registration"));
+ }
+ }
+ Trereg.stop;
+
+ as_IMS_unregister();
+ setverdict(pass);
+}
+testcase TC_ims_reregistration() runs on test_CT {
+ var IMS_ConnHdlrPars pars;
+ var IMS_ConnHdlr vc_conn;
+ f_init();
+ pars := f_init_IMS_ConnHdlrPars();
+ pars.subscr.registrar_expires := 30;
+ vc_conn := f_start_handler_IMS(refers(f_TC_ims_reregistration), pars);
+
+ f_AMI_IMS_register(pars);
+
+ /* Re-Register: if this was a 2nd REGISTER, then reauth shouldn't be needed... */
+ as_AMI_IMS_register_Auth(pars, resync := false);
+
+ /* Trigger unregistration: */
+ f_AMI_IMS_unregister(pars);
+
+ vc_conn.done;
+ f_shutdown();
+}
+
/* Test IMS MO call emulating an MT which doesn't support precondition */
private function f_TC_ims_call_mo_IMS_ConnHdlr(charstring id) runs on IMS_ConnHdlr {
f_create_sip_expect(valueof(ts_SipUrl_from_Addr_Union(g_pars.subscr.registrar_sip_record.addr)));
@@ -741,6 +780,7 @@
execute( TC_ims_registration_timeout_resync_401Unauthorized() );
execute( TC_ims_registration_timeout_protected_100Trying() );
execute( TC_ims_registration_timeout_protected_200OK() );
+ execute( TC_ims_reregistration() );
execute( TC_ims_call_mo() );
execute( TC_ims_call_mo_noprecondition() );
execute( TC_ims_call_mt() );