pespin has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/37513?usp=email )


Change subject: asterisk: Introduce test TC_ims_call_mo_holdswitchresume_mo
......................................................................

asterisk: Introduce test TC_ims_call_mo_holdswitchresume_mo

Related: SYS#7003
Change-Id: I80ec326524501a2f0784291250e3d5fad6b04378
---
M asterisk/Asterisk_Tests.ttcn
M asterisk/expected-results.xml
2 files changed, 100 insertions(+), 0 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks 
refs/changes/13/37513/1

diff --git a/asterisk/Asterisk_Tests.ttcn b/asterisk/Asterisk_Tests.ttcn
index a97f2a4..8269c9f 100644
--- a/asterisk/Asterisk_Tests.ttcn
+++ b/asterisk/Asterisk_Tests.ttcn
@@ -237,6 +237,29 @@
        f_TC_internal_hangup_call_mo_unregister();
        setverdict(pass);
 }
+private function f_TC_internal_call_mo_with_holdswitchresume(charstring id) 
runs on SIPConnHdlr {
+       var CallPars cp0;
+       f_TC_internal_register_establish_call_mo();
+       f_sleep(1.0);
+       f_SIP_do_call_hold();
+
+       /* Backup state of 1st call params: */
+       cp0 := g_pars.cp;
+       g_pars.cp.called := 
valueof(ts_SipAddr(ts_HostPort(g_pars.remote_sip_host),
+                                              ts_UserInfo("123456")));
+       COORD.receive(COORD_CMD_START);
+       f_SIP_mo_call_setup(exp_update_to_direct_rtp := false);
+       log ("SIP: 2nd call ongoing");
+       COORD.send(COORD_CMD_CALL_ESTABLISHED);
+       COORD.receive(COORD_CMD_HANGUP);
+       f_SIP_do_call_hangup();
+
+       /* Restore 1s call metadata before hanging it up here: */
+       g_pars.cp := cp0;
+       f_SIP_do_call_resume();
+       f_TC_internal_hangup_call_mo_unregister();
+       setverdict(pass);
+}
 private function f_TC_internal_call_mo_rejected(charstring id) runs on 
SIPConnHdlr {
        f_SIP_register();
        COORD.send(COORD_CMD_REGISTERED);
@@ -791,6 +814,33 @@
        as_IMS_exp_call_resume();
        f_TC_ims_call_mo_IMS_ConnHdlr_hangup_call_unregister();
 }
+private function 
f_TC_ims_call_mo_IMS_ConnHdlr_with_holdswitchresume(charstring id) runs on 
IMS_ConnHdlr {
+       var IMS_ConnHdlrSubscrPars subscr0;
+       var Addr_Union called_addr;
+
+       f_TC_ims_call_mo_IMS_ConnHdlr_register_establish_call();
+
+       called_addr := g_pars.subscr.cp.called.addr;
+       called_addr.nameAddr.addrSpec.userInfo := 
valueof(ts_UserInfo("123456"));
+       f_create_sip_expect(valueof(ts_SipUrl_from_Addr_Union(called_addr)));
+
+       as_IMS_exp_call_hold();
+
+       /* Backup state of 1st call subscriber: */
+       subscr0 := g_pars.subscr;
+       g_pars.subscr.cp.called.addr := called_addr;
+       as_IMS_mo_call_accept();
+       COORD.send(COORD_CMD_CALL_ESTABLISHED);
+       log ("IMS: 2nd call ongoing");
+
+       as_IMS_exp_call_hangup(g_pars.subscr.cp.sip_seq_nr + 1);
+       COORD.send(IMS_COORD_CMD_CALL_FINISHED);
+       /* Restore 1s call metadata before hanging it up here: */
+       g_pars.subscr := subscr0;
+
+       as_IMS_exp_call_resume();
+       f_TC_ims_call_mo_IMS_ConnHdlr_hangup_call_unregister();
+}
 private function f_TC_ims_call_mo_IMS_ConnHdlr_2nd_mt_rejected(charstring id) 
runs on IMS_ConnHdlr {
        var IMS_ConnHdlrSubscrPars subscr0;
        var default d_trying, d_ringing, d_sessprog;
@@ -895,6 +945,44 @@
                         ims_fn := 
refers(f_TC_ims_call_mo_IMS_ConnHdlr_with_holdresume));
 }

+/* 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 {
+       var AMI_Msg ami_msg;
+       var charstring old_asterisk_chan_name := g_asterisk_chan_name; /* 
backup */
+       COORD.send(COORD_CMD_START);
+
+       IMS_COORD.receive(IMS_COORD_CMD_CALL_TRYING);
+       ami_msg := f_ami_wait_rx_msg(AMI_CLIENT,
+                                    
tr_AMI_Event_Newchannel(mp_volte_ims_outbound_registration),
+                                    fail_others := false);
+       g_asterisk_chan_name := valueof(f_ami_msg_get_value(ami_msg, 
AMI_FIELD_CHANNEL));
+       f_ami_action_DedicatedBearerStatus(AMI_CLIENT,
+                                          g_asterisk_chan_name,
+                                          "Up", fail_others := false);
+
+       COORD.receive(COORD_CMD_CALL_ESTABLISHED);
+       IMS_COORD.receive(COORD_CMD_CALL_ESTABLISHED);
+       /* 2nd call ongoing */
+       log ("test_CT: 2nd call ongoing");
+       f_sleep(1.0);
+       /* Tear down 2nd call: */
+       COORD.send(COORD_CMD_HANGUP);
+       IMS_COORD.receive(IMS_COORD_CMD_CALL_FINISHED);
+
+       /* Notify network released 2nd dedicated bearer: */
+       AMI_CLIENT.clear;
+       f_ami_action_DedicatedBearerStatus(AMI_CLIENT,
+                                          g_asterisk_chan_name,
+                                          "Down", fail_others := false);
+
+       g_asterisk_chan_name := old_asterisk_chan_name; /* restore */
+}
+testcase TC_ims_call_mo_holdswitchresume_mo() runs on test_CT {
+       f_TC_ims_call_mo(call_established_cb := 
refers(call_established_fn_holdswitchresume),
+                        sip_fn := 
refers(f_TC_internal_call_mo_with_holdswitchresume),
+                        ims_fn := 
refers(f_TC_ims_call_mo_IMS_ConnHdlr_with_holdswitchresume));
+}
+
 /* Test a 2nd call initiated from a local SIP UA towards IMS is rejected with
  * 503 Service Unavailable if IMS endpoint is already busy in a call. */
 private function call_established_fn_2ndrejected(SIPConnHdlrPars sip_pars, 
IMS_ConnHdlrPars ims_pars) runs on test_CT {
@@ -1175,6 +1263,7 @@
        execute( TC_ims_call_mo_session_timer() );
        execute( TC_ims_call_mo_noprecondition() );
        execute( TC_ims_call_mo_holdresume_mo() );
+       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_mt() );
diff --git a/asterisk/expected-results.xml b/asterisk/expected-results.xml
index dd665e4..5a99ea3 100644
--- a/asterisk/expected-results.xml
+++ b/asterisk/expected-results.xml
@@ -18,6 +18,7 @@
   <testcase classname='Asterisk_Tests' name='TC_ims_call_mo_session_timer' 
time='MASKED'/>
   <testcase classname='Asterisk_Tests' name='TC_ims_call_mo_noprecondition' 
time='MASKED'/>
   <testcase classname='Asterisk_Tests' name='TC_ims_call_mo_holdresume_mo' 
time='MASKED'/>
+  <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_mt' time='MASKED'/>

--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/37513?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I80ec326524501a2f0784291250e3d5fad6b04378
Gerrit-Change-Number: 37513
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>
Gerrit-MessageType: newchange

Reply via email to