pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/38045?usp=email )
Change subject: asterisk: Introduce test TC_ims_call_mo_after_tcp_conn_closed ......................................................................
asterisk: Introduce test TC_ims_call_mo_after_tcp_conn_closed
Related: SYS#7067 Change-Id: I90df69b2418557d7001dddee4b6930ebbc58066d --- M asterisk/Asterisk_Tests.ttcn M asterisk/IMS_ConnectionHandler.ttcn M asterisk/expected-results.xml 3 files changed, 31 insertions(+), 1 deletion(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/45/38045/1
diff --git a/asterisk/Asterisk_Tests.ttcn b/asterisk/Asterisk_Tests.ttcn index 8269c9f..20e01e7 100644 --- a/asterisk/Asterisk_Tests.ttcn +++ b/asterisk/Asterisk_Tests.ttcn @@ -870,7 +870,9 @@ IMS_COORD.receive(IMS_COORD_CMD_CALL_REJECTED); }
-private function f_TC_ims_call_mo(boolean use_precondition_ext := true, boolean use_session_timer := false, +private function f_TC_ims_call_mo(boolean close_tcp_after_registration := false, + boolean use_precondition_ext := true, + boolean use_session_timer := false, call_established_fn call_established_cb := refers(call_established_fn_sleep1), void_fn sip_fn := refers(f_TC_internal_call_mo), ims_void_fn ims_fn := refers(f_TC_ims_call_mo_IMS_ConnHdlr)) runs on test_CT { @@ -883,6 +885,7 @@
sip_pars := f_init_ConnHdlrPars(idx := 1); ims_pars := f_init_IMS_ConnHdlrPars(); + ims_pars.subscr.close_tcp_after_registration := close_tcp_after_registration;
f_ims_call_mo_configure(sip_pars, ims_pars); ims_pars.subscr.cp.support_precondition_ext := use_precondition_ext; @@ -944,6 +947,13 @@ f_TC_ims_call_mo(sip_fn := refers(f_TC_internal_call_mo_with_holdresume), ims_fn := refers(f_TC_ims_call_mo_IMS_ConnHdlr_with_holdresume)); } +/* TC_ims_call_mo, but IMS server closes the TCP conn used during 2nd register after ACKing it. + * Asterisk should consider it is still registered even if that TCP conn was closed, + * and MO call should work the same. + */ +testcase TC_ims_call_mo_after_tcp_conn_closed() runs on test_CT { + f_TC_ims_call_mo(close_tcp_after_registration := true); +}
/* Test a 2nd call initiated from a local SIP UA towards IMS after having HOLD the 1st one. */ private function call_established_fn_holdswitchresume(SIPConnHdlrPars sip_pars, IMS_ConnHdlrPars ims_pars) runs on test_CT { @@ -1266,6 +1276,7 @@ execute( TC_ims_call_mo_holdswitchresume_mo() ); execute( TC_ims_call_mo_2nd_mo_rejected() ); execute( TC_ims_call_mo_2nd_mt_rejected() ); + execute( TC_ims_call_mo_after_tcp_conn_closed() ); execute( TC_ims_call_mt() ); execute( TC_ims_call_mt_noprecondition() ); execute( TC_ims_call_mt_no_local_uas_registered() ); diff --git a/asterisk/IMS_ConnectionHandler.ttcn b/asterisk/IMS_ConnectionHandler.ttcn index 0c95108..12f624c 100644 --- a/asterisk/IMS_ConnectionHandler.ttcn +++ b/asterisk/IMS_ConnectionHandler.ttcn @@ -84,6 +84,7 @@ charstring msisdn, boolean support_video, boolean support_smsip, + boolean close_tcp_after_registration, /* Expected User-Location-Info in P-Access-Network-Info */ charstring uli_str, IMS_AuthVector auth, @@ -209,6 +210,7 @@ msisdn := msisdn, support_video := false, support_smsip := false, + close_tcp_after_registration := false, uli_str := "2380100010000101", auth := { /* The Nonce field is the Base64 encoded version of the RAND value and concatenated with the AUTN: */ @@ -1020,6 +1022,9 @@ supported := supported, userAgent := omit); SIP.send(tx_resp); + if (g_pars.subscr.close_tcp_after_registration) { + f_IMS_tcp_close(); + } } [fail_others] as_SIP_fail_resp(sip_expect_str); [fail_others] as_SIP_fail_req(sip_expect_str); @@ -1885,4 +1890,17 @@ [] as_IMS_exp_call_holdresume(tr_SDP_sendrecv, "sendrecv"); }
+function f_IMS_tcp_close() runs on IMS_ConnHdlr +{ + var ASP_SIP_close v_close:={addr:={ + remote_host := g_pars.subscr.remote_sip_host, + remote_port := g_pars.subscr.ipsec_remote_port_c, + local_host := g_pars.local_sip_host, + local_port := g_pars.local_sip_port, + protocol := TCP_E + }} + log("Closing TCP connection: ", v_close); + SIP.send(v_close); +} + } diff --git a/asterisk/expected-results.xml b/asterisk/expected-results.xml index 5a99ea3..5a7bc4d 100644 --- a/asterisk/expected-results.xml +++ b/asterisk/expected-results.xml @@ -21,6 +21,7 @@ <testcase classname='Asterisk_Tests' name='TC_ims_call_mo_holdswitchresume_mo' time='MASKED'/> <testcase classname='Asterisk_Tests' name='TC_ims_call_mo_2nd_mo_rejected' time='MASKED'/> <testcase classname='Asterisk_Tests' name='TC_ims_call_mo_2nd_mt_rejected' time='MASKED'/> + <testcase classname='Asterisk_Tests' name='TC_ims_call_mo_after_tcp_conn_closed' time='MASKED'/> <testcase classname='Asterisk_Tests' name='TC_ims_call_mt' time='MASKED'/> <testcase classname='Asterisk_Tests' name='TC_ims_call_mt_noprecondition' time='MASKED'/> <testcase classname='Asterisk_Tests' name='TC_ims_call_mt_no_local_uas_registered' time='MASKED'/>