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


Change subject: remsim: server: add a client timeout test
......................................................................

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 https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42154?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

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 <[email protected]>

Reply via email to