pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/37290?usp=email )
Change subject: asterisk: Introduce test TC_ims_reregistration ......................................................................
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 --- M asterisk/Asterisk_Tests.ttcn M asterisk/expected-results.xml 2 files changed, 55 insertions(+), 0 deletions(-)
Approvals: Jenkins Builder: Verified fixeria: Looks good to me, but someone else must approve pespin: Looks good to me, approved
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() ); diff --git a/asterisk/expected-results.xml b/asterisk/expected-results.xml index 31a03e5..65a495b 100644 --- a/asterisk/expected-results.xml +++ b/asterisk/expected-results.xml @@ -12,6 +12,7 @@ <testcase classname='Asterisk_Tests' name='TC_ims_registration_timeout_resync_401Unauthorized' time='MASKED'/> <testcase classname='Asterisk_Tests' name='TC_ims_registration_timeout_protected_100Trying' time='MASKED'/> <testcase classname='Asterisk_Tests' name='TC_ims_registration_timeout_protected_200OK' time='MASKED'/> + <testcase classname='Asterisk_Tests' name='TC_ims_reregistration' time='MASKED'/> <testcase classname='Asterisk_Tests' name='TC_ims_call_mo' time='MASKED'/> <testcase classname='Asterisk_Tests' name='TC_ims_call_mo_noprecondition' time='MASKED'/> <testcase classname='Asterisk_Tests' name='TC_ims_call_mt' time='MASKED'/>