lynxis lazus has uploaded this change for review.

View Change

remsim: server: add a client timeout test

1. Connect to the server
2. Don't answer to IPA PINGs
3. Server closes the connection
4. Client reconnects
5. Older server versions will crash

Change-Id: Iec52d3ce229c2ab84ab0ff9d8dbbff59b7f3fbd9
---
M remsim/REMSIM_Tests.ttcn
M remsim/RemsimServer_Tests.ttcn
2 files changed, 69 insertions(+), 0 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/54/42154/1
diff --git a/remsim/REMSIM_Tests.ttcn b/remsim/REMSIM_Tests.ttcn
index b97dea1..92c932c 100644
--- a/remsim/REMSIM_Tests.ttcn
+++ b/remsim/REMSIM_Tests.ttcn
@@ -14,6 +14,7 @@
import from RSPRO all;
import from RSPRO_Types all;
import from IPA_Types all;
+import from IPA_CodecPort all;
import from IPA_Emulation all;


@@ -43,6 +44,8 @@
type component rspro_client_CT {
var RSPRO_Client rspro[NUM_CLIENT];
port IPA_RSPRO_PT RSPRO[NUM_CLIENT];
+ port IPA_CFG_PT IPACFG[NUM_CLIENT];
+ port IPA_SP_PT IPAPORT[NUM_CLIENT];
};

private altstep as_ignore_id_ack(integer i := 0) runs on rspro_client_CT {
@@ -68,6 +71,8 @@

map(clnt.vc_IPA:IPA_PORT, system:IPA_CODEC_PT);
connect(clnt.vc_IPA:IPA_RSPRO_PORT, self:RSPRO[i]);
+ connect(clnt.vc_IPA:CFG_PORT, self:IPACFG[i]);
+ connect(clnt.vc_IPA:IPA_SP_PORT, self:IPAPORT[i]);

clnt.vc_IPA.start(IPA_Emulation.main_client(dst_host, dst_port, "", 10000+i, clnt.ccm_pars));

@@ -96,6 +101,8 @@
runs on rspro_client_CT {
clnt.vc_IPA.stop;
disconnect(clnt.vc_IPA:IPA_RSPRO_PORT, self:RSPRO[i]);
+ disconnect(clnt.vc_IPA:CFG_PORT, self:IPACFG[i]);
+ disconnect(clnt.vc_IPA:IPA_SP_PORT, self:IPAPORT[i]);
unmap(clnt.vc_IPA:IPA_PORT, system:IPA_CODEC_PT);
}

diff --git a/remsim/RemsimServer_Tests.ttcn b/remsim/RemsimServer_Tests.ttcn
index 23ea8cb..2901d48 100644
--- a/remsim/RemsimServer_Tests.ttcn
+++ b/remsim/RemsimServer_Tests.ttcn
@@ -22,6 +22,7 @@

import from Misc_Helpers all;
import from IPA_Emulation all;
+import from IPA_Types all;

import from HTTPmsg_Types all;
import from HTTPmsg_PortType all;
@@ -177,6 +178,66 @@
setverdict(pass);
}

+/* A client connects and stops answering to IPA PING/PONGs.
+ Do a re-connect. Older version of the server will crash. */
+testcase TC_connect_client_timeout_reconnect() runs on test_CT {
+ var ComponentIdentity rspro_id := valueof(ts_CompId(remsimClient, "foobar"));
+ var JsRoot js;
+ timer T := 80.0;
+
+ f_init();
+ g_T_guard.start(180.0);
+ f_rsres_init();
+ f_rspro_init(rspro[0], mp_server_ip, mp_server_port, rspro_id, 0);
+ rspro[0].rspro_client_slot := valueof(ts_ClientSlot(13,1));
+
+ js := f_rsres_get("/api/backend/v1/clients");
+ if (not match(js.clients, JsClients:{})) {
+ setverdict(fail, "Initial state not empty");
+ mtc.stop;
+ }
+ f_rspro_connect_client(0);
+ js := f_rsres_get("/api/backend/v1/clients");
+ if (not match(js.clients[0], tr_JsClient(CONNECTED_CLIENT, rspro[0].rspro_id))) {
+ setverdict(fail, "Non-matching JSON response");
+ mtc.stop;
+ }
+
+ /* stop answering IPA Ping */
+ var IpaCcmMsgtype ipa_ping_msg := IPAC_MSGT_PING;
+ var octetstring ipa_ping_data := int2oct(enum2int(ipa_ping_msg), 1);
+
+ f_ipa_cfg_chg_ccm_enabled(IPACFG[0], false);
+ T.start;
+ alt {
+ [] IPAPORT[0].receive(t_ASP_IPA_UD(IPAC_PROTO_CCM, ipa_ping_data)) {
+ log("Received PING. Not answering it.");
+ repeat;
+ }
+ [] RSPRO[0].receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_DOWN)) {}
+ [] T.timeout {
+ setverdict(fail, "Timed out. Server did not closed the connection.");
+ mtc.stop;
+ }
+ }
+
+
+ /* connect a second time for same Client ID */
+ f_rspro_init(rspro[1], mp_server_ip, mp_server_port, rspro_id, 1);
+ rspro[1].rspro_client_slot := valueof(ts_ClientSlot(13,1));
+ f_rspro_connect_client(1);
+
+ /* expect the first connection still to be active */
+ js := f_rsres_get("/api/backend/v1/clients");
+ if (not match(js.clients[0], tr_JsClient(CONNECTED_CLIENT, rspro[1].rspro_id))) {
+ setverdict(fail, "Non-matching JSON response");
+ mtc.stop;
+ }
+
+ setverdict(pass);
+}
+
+
testcase TC_connect_bank() runs on test_CT {
var ComponentIdentity rspro_id := valueof(ts_CompId(remsimBankd, "foobar"));
var JsRoot js;
@@ -597,6 +658,7 @@
execute( TC_connect_and_nothing() );
execute( TC_connect_client() );
execute( TC_connect_client_duplicate() );
+ execute( TC_connect_client_timeout_reconnect() );
execute( TC_connect_bank() );
execute( TC_connect_bank_duplicate() );
execute( TC_slotmap_add() );

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

Gerrit-MessageType: newchange
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Iec52d3ce229c2ab84ab0ff9d8dbbff59b7f3fbd9
Gerrit-Change-Number: 42154
Gerrit-PatchSet: 1
Gerrit-Owner: lynxis lazus <lynxis@fe80.eu>