MGCP_Emulation: allow moving ep handling to another test component
Will be used by MSC_Tests.TC_call_re_establishment in
Ifdff5573eeb3b3d41e8599b9b0228411d2576864,
where a call from one vc_conn gets re-established in another vc_conn.
Related: SYS#5130
Change-Id: Id46035e53c2870e1fdef1335dce42b2020f7cd54
diff --git a/library/MGCP_Emulation.ttcn b/library/MGCP_Emulation.ttcn
index 8ccc085..9a92b9c 100644
--- a/library/MGCP_Emulation.ttcn
+++ b/library/MGCP_Emulation.ttcn
@@ -193,6 +193,19 @@
mtc.stop;
}
+private function f_ep_table_change_connhdlr(MGCP_ConnHdlr comp_ref, MgcpEndpoint ep)
+runs on MGCP_Emulation_CT {
+ var integer i;
+ for (i := 0; i < sizeof(MgcpEndpointTable); i := i+1) {
+ if (MgcpEndpointTable[i].endpoint == ep) {
+ MgcpEndpointTable[i].comp_ref := comp_ref;
+ log("MGCP_Emulation_CT: MgcpEndpointTable[", i, "] now sends to ", comp_ref);
+ return;
+ }
+ }
+ setverdict(fail, "MGCP Endpoint Table: Couldn't find entry to move to ", comp_ref);
+ mtc.stop;
+}
/* Check if the given transaction ID is a pending CRCX. If yes, return true + remove */
private function f_trans_id_was_pending(MgcpTransId trans_id)
@@ -349,6 +362,10 @@
f_ep_table_del(vc_conn, ep);
MGCP_PROC.reply(MGCPEM_delete_ep:{ep, vc_conn}) to vc_conn;
}
+ [] MGCP_PROC.getcall(MGCPEM_change_connhdlr:{?,?}) -> param(ep, vc_conn) {
+ f_ep_table_change_connhdlr(vc_conn, ep);
+ MGCP_PROC.reply(MGCPEM_change_connhdlr:{ep, vc_conn}) to vc_conn;
+ }
}
}
@@ -370,9 +387,10 @@
signature MGCPEM_register(in ExpectCriteria cmd, in MGCP_ConnHdlr hdlr);
signature MGCPEM_delete_ep(in MgcpEndpoint ep, in MGCP_ConnHdlr hdlr);
+signature MGCPEM_change_connhdlr(in MgcpEndpoint ep, in MGCP_ConnHdlr hdlr);
type port MGCPEM_PROC_PT procedure {
- inout MGCPEM_register, MGCPEM_delete_ep;
+ inout MGCPEM_register, MGCPEM_delete_ep, MGCPEM_change_connhdlr;
} with { extension "internal" };
function f_get_mgcp_by_crit(ExpectCriteria crit)
@@ -462,6 +480,13 @@
}
}
+/* Move MGCP handling for a given MGW endpoint to a different MGCP_ConnHdlr component. */
+function f_mgcp_change_connhdlr(MgcpEndpoint ep) runs on MGCP_ConnHdlr {
+ MGCP_PROC.call(MGCPEM_change_connhdlr:{ep, self}) {
+ [] MGCP_PROC.getreply(MGCPEM_change_connhdlr:{?,?}) {};
+ }
+}
+
private function f_expect_table_init()
runs on MGCP_Emulation_CT {