From 5c449f346e2580fccbb266ec0587603ca8909ebd Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Tue, 27 Jul 2021 22:30:36 +0200 Subject: [PATCH] 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 --- library/MGCP_Emulation.ttcn | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/library/MGCP_Emulation.ttcn b/library/MGCP_Emulation.ttcn index 8ccc085ce..9a92b9cb1 100644 --- a/library/MGCP_Emulation.ttcn +++ b/library/MGCP_Emulation.ttcn @@ -193,6 +193,19 @@ runs on MGCP_Emulation_CT { 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 @@ function main(MGCPOps ops, MGCP_conn_parameters p, charstring id) runs on MGCP_E 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 @@ type record ExpectData { 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 @@ function f_create_mgcp_delete_ep(MgcpEndpoint ep) runs on MGCP_ConnHdlr { } } +/* 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 {