laforge submitted this change.

View Change

Approvals: laforge: Looks good to me, but someone else must approve jolly: Looks good to me, approved Jenkins Builder: Verified
asterisk: Rework test TC_ims_call_mo_after_tcp_conn_closed with new expectancies

Previous expected behavior (and Asterisk-UE implementation) was wrong.
Since recently, Asterisk behaves better, that is, whenever the TCP conn
is dropped by the peer, it will attempt re-connecting and
re-registering.

Related: SYS#7398
Change-Id: I7ec1e8e30c4d72be96c8e300e0d038e63ba0e600
---
M asterisk/Asterisk_Tests.ttcn
M asterisk/IMS_ConnectionHandler.ttcn
2 files changed, 65 insertions(+), 15 deletions(-)

diff --git a/asterisk/Asterisk_Tests.ttcn b/asterisk/Asterisk_Tests.ttcn
index dccf9fa..84ccb76 100644
--- a/asterisk/Asterisk_Tests.ttcn
+++ b/asterisk/Asterisk_Tests.ttcn
@@ -870,8 +870,7 @@
IMS_COORD.receive(IMS_COORD_CMD_CALL_REJECTED);
}

-private function f_TC_ims_call_mo(boolean close_tcp_after_registration := false,
- boolean use_precondition_ext := true,
+private function f_TC_ims_call_mo(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),
@@ -885,7 +884,6 @@

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;
@@ -947,13 +945,6 @@
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 {
@@ -1019,6 +1010,70 @@
ims_fn := refers(f_TC_ims_call_mo_IMS_ConnHdlr_2nd_mt_rejected));
}

+/* TC_ims_call_mo, but IMS server closes the TCP conn used during 2nd register after ACKing it.
+ * Asterisk should then re-connect and re-register before placing a call towards IMS. */
+private function f_TC_ims_call_mo_after_tcp_conn_closed_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)));
+ /* First full register at the IMS: */
+ as_IMS_register();
+ f_sleep(1.0);
+ /* IMS closes TCP conn (TCP FIN/ACK): */
+ f_IMS_tcp_close();
+ /* Proceed similar to TC_ims_call_mo: expect new full register + MO call: */
+ f_TC_ims_call_mo_IMS_ConnHdlr(id);
+}
+testcase TC_ims_call_mo_after_tcp_conn_closed() runs on test_CT {
+ var SIPConnHdlrPars sip_pars;
+ var IMS_ConnHdlrPars ims_pars;
+ var SIPConnHdlr vc_conn_sip;
+ var IMS_ConnHdlr vc_conn_ims;
+
+ f_init();
+
+ sip_pars := f_init_ConnHdlrPars(idx := 1);
+ ims_pars := f_init_IMS_ConnHdlrPars();
+
+ f_ims_call_mo_configure(sip_pars, ims_pars);
+ ims_pars.subscr.cp.support_precondition_ext := true;
+ ims_pars.subscr.cp.require_precondition_ext := true;
+ ims_pars.subscr.cp.mo.tx_coord_cmd_invite_trying := true;
+ ims_pars.subscr.cp.mo.support_timer_enable := false;
+
+ vc_conn_ims := f_start_handler_IMS(refers(f_TC_ims_call_mo_after_tcp_conn_closed_IMS_ConnHdlr), 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);
+ /* Here IMS_ConnHdlr will have dropped the TCP conn from IMS. */
+ as_AMI_IMS_register_Auth(ims_pars);
+
+ f_ims_call_mo_establish(vc_conn_sip, vc_conn_ims);
+
+ /* Call on-going */
+ var call_established_fn call_established_cb := refers(call_established_fn_sleep1);
+ call_established_cb.apply(sip_pars, ims_pars);
+
+ COORD.send(COORD_CMD_HANGUP) to vc_conn_sip;
+ IMS_COORD.receive(IMS_COORD_CMD_CALL_FINISHED) from vc_conn_ims;
+
+ /* Notify network released dedicated bearer: */
+ AMI_CLIENT.clear;
+ f_ami_action_DedicatedBearerStatus(AMI_CLIENT,
+ g_asterisk_chan_name,
+ "Down", fail_others := false);
+
+ /* Trigger unregistration: */
+ f_sleep(1.0);
+ COORD.send(COORD_CMD_UNREGISTER) to vc_conn_sip;
+ AMI_CLIENT.clear;
+ f_AMI_IMS_unregister(ims_pars);
+
+ vc_conn_sip.done;
+ vc_conn_ims.done;
+ f_shutdown();
+}
+
/* Test MT call initiated by IMS */
private function f_TC_ims_call_mt_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)));
diff --git a/asterisk/IMS_ConnectionHandler.ttcn b/asterisk/IMS_ConnectionHandler.ttcn
index 39abc59..2f4168a 100644
--- a/asterisk/IMS_ConnectionHandler.ttcn
+++ b/asterisk/IMS_ConnectionHandler.ttcn
@@ -84,7 +84,6 @@
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,
@@ -211,7 +210,6 @@
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: */
@@ -1022,9 +1020,6 @@
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);

To view, visit change 39824. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: merged
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I7ec1e8e30c4d72be96c8e300e0d038e63ba0e600
Gerrit-Change-Number: 39824
Gerrit-PatchSet: 2
Gerrit-Owner: pespin <pespin@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: jolly <andreas@eversberg.eu>
Gerrit-Reviewer: laforge <laforge@osmocom.org>