Add tests for OS#2714, "close RSL connections from unknown Unit ID".
This adds two new tests: One for RSL, and a second one which performs
the same test on the OML port. Both tests open an IPA connection and
send a unit ID which is unknown to the BSC. The tests expect the BSC
to close the connection immediately.
We need to add handling for a socket error in IPA_Emulation because
otherwise these tests do not pass reliably as some closed connections
are not properly detected.
Change-Id: I6a947d7411a016e4d7650031396cae3575756453
diff --git a/library/IPA_Emulation.ttcn b/library/IPA_Emulation.ttcn
index b3e28e9..53a86ec 100644
--- a/library/IPA_Emulation.ttcn
+++ b/library/IPA_Emulation.ttcn
@@ -23,6 +23,7 @@
import from MTP3asp_Types all;
import from MTP3asp_PortType all;
import from RSL_Types all;
+import from Socket_API_Definitions all;
import from MGCP_Types all;
import from GSUP_Types all;
@@ -132,7 +133,7 @@
port IPA_SP_PT IPA_SP_PORT;
var boolean g_initialized := false;
- var ConnectionId g_ipa_conn_id := -1;
+ var IPL4asp_Types.ConnectionId g_ipa_conn_id := -1;
/* Are we a BSC/MGW (truel) or MSC (false) */
var boolean g_is_bsc_mgw;
@@ -167,10 +168,10 @@
};
/* Function to use to connect as client to a remote IPA Server */
-function f_connect(charstring remote_host, PortNumber remote_port,
- charstring local_host, PortNumber local_port,
+function f_connect(charstring remote_host, IPL4asp_Types.PortNumber remote_port,
+ charstring local_host, IPL4asp_Types.PortNumber local_port,
IPA_CCM_Parameters ccm_pars := c_IPA_default_ccm_pars) runs on IPA_Emulation_CT {
- var Result res;
+ var IPL4asp_Types.Result res;
res := IPA_CodecPort_CtrlFunct.f_IPL4_connect(IPA_PORT, remote_host, remote_port,
local_host, local_port, 0, { tcp:={} });
g_ipa_conn_id := res.connId;
@@ -179,9 +180,9 @@
}
/* Function to use to bind to a local port as IPA server, accepting remote clients */
-function f_bind(charstring local_host, PortNumber local_port,
+function f_bind(charstring local_host, IPL4asp_Types.PortNumber local_port,
IPA_CCM_Parameters ccm_pars := c_IPA_default_ccm_pars) runs on IPA_Emulation_CT {
- var Result res;
+ var IPL4asp_Types.Result res;
res := IPA_CodecPort_CtrlFunct.f_IPL4_listen(IPA_PORT,
local_host, local_port, { tcp:={} });
g_ipa_conn_id := res.connId;
@@ -324,21 +325,21 @@
return ret;
}
-private function f_from_asp(ConnectionId connId, ASP_IPA_Unitdata ipa_tx) return IPA_Send {
+private function f_from_asp(IPL4asp_Types.ConnectionId connId, ASP_IPA_Unitdata ipa_tx) return IPA_Send {
var IPA_Send ret := valueof(t_IPA_Send(connId, ipa_tx.streamId, ipa_tx.payload,
ipa_tx.streamIdExt));
return ret;
}
-private function f_from_rsl(ConnectionId connId, ASP_RSL_Unitdata rsl_tx) return IPA_Send {
+private function f_from_rsl(IPL4asp_Types.ConnectionId connId, ASP_RSL_Unitdata rsl_tx) return IPA_Send {
var octetstring payload := enc_RSL_Message(rsl_tx.rsl);
var IPA_Send ret := valueof(t_IPA_Send(connId, rsl_tx.streamId, payload));
return ret;
}
/* main function to use for a client-side IPA implementation */
-function main_client(charstring remote_host, PortNumber remote_port,
- charstring local_host, PortNumber local_port,
+function main_client(charstring remote_host, IPL4asp_Types.PortNumber remote_port,
+ charstring local_host, IPL4asp_Types.PortNumber local_port,
IPA_CCM_Parameters ccm_pars := c_IPA_default_ccm_pars) runs on IPA_Emulation_CT {
g_mode := IPA_MODE_CLIENT;
f_connect(remote_host, remote_port, local_host, local_port, ccm_pars);
@@ -347,7 +348,7 @@
}
/* main function to use for a server-side IPA implementation */
-function main_server(charstring local_host, PortNumber local_port) runs on IPA_Emulation_CT {
+function main_server(charstring local_host, IPL4asp_Types.PortNumber local_port) runs on IPA_Emulation_CT {
g_mode := IPA_MODE_SERVER;
f_bind(local_host, local_port);
ScanEvents();
@@ -389,6 +390,7 @@
var ASP_IPA_Unitdata ipa_ud;
var ASP_MTP3_TRANSFERreq mtp_req;
var ASP_Event asp_evt;
+ var Socket_API_Definitions.PortEvent port_evt;
var MgcpCommand mgcp_cmd;
var MgcpResponse mgcp_rsp;
var CtrlMessage ctrl_msg;
@@ -456,6 +458,13 @@
self.stop;
}
+ [] IPA_PORT.receive(Socket_API_Definitions.PortEvent:{result:={errorCode:=ERROR_SOCKET, connId:=?, os_error_code:=?, os_error_text:=?}}) -> value port_evt {
+ log("PortEvent: ERROR_SOCKET: ", port_evt);
+ g_ipa_conn_id := -1;
+ f_send_IPA_EVT(t_ASP_IPA_EVT_UD(ASP_IPA_EVENT_DOWN));
+ self.stop;
+ }
+
/* Received SCCP -> down into IPA */
[] MTP3_SP_PORT.receive(ASP_MTP3_TRANSFERreq: ?) -> value mtp_req {
var IPA_Send ipa_tx := valueof(t_IPA_Send(g_ipa_conn_id, IPAC_PROTO_SCCP,