module RemsimClient_Tests { /* Integration Tests for osmo-remsim-client * (C) 2019 by Harald Welte * All rights reserved. * * Released under the terms of GNU General Public License, Version 2 or * (at your option) any later version. * * SPDX-License-Identifier: GPL-2.0-or-later * * This test suite tests osmo-remsim-client by attaching to the external interfaces. */ import from Osmocom_Types all; import from IPA_Emulation all; import from RSPRO all; import from RSPRO_Types all; import from RSPRO_Server all; import from REMSIM_Tests all; type component client_test_CT extends rspro_server_CT { var ComponentIdentity g_srv_comp_id, g_bankd_comp_id; }; private function f_init() runs on client_test_CT { g_srv_comp_id := valueof(ts_CompId(remsimServer, "ttcn-server")); g_bankd_comp_id := valueof(ts_CompId(remsimBankd, "ttcn-bankd")); f_rspro_srv_init(0, mp_server_ip, mp_server_port, g_srv_comp_id); f_rspro_srv_init(1, mp_bankd_ip, mp_bankd_port, g_bankd_comp_id, exp_connect := false); } /* ConnectClientReq from client to remsim-server */ testcase TC_srv_connectClient() runs on client_test_CT { f_init(); as_connectClientReq(); setverdict(pass); f_sleep(1.0); } /* ConnectClientReq from client to remsim-server */ testcase TC_srv_connectClient_reject() runs on client_test_CT { f_init(); as_connectClientReq(res := illegalClientId); /* expect disconnect by client */ RSPRO_SRV[0].receive(t_ASP_IPA_EVT_UD(ASP_IPA_EVENT_DOWN)); setverdict(pass); f_sleep(1.0); } /* ConnectClientReq from client to remsim-server */ testcase TC_srv_connectClient_configClientBank() runs on client_test_CT { var BankSlot bslot := { 1, 0 }; f_init(); as_connectClientReq(); f_rspro_config_client_bank(bslot, ts_IpPort(ts_IPv4(mp_bankd_ip), mp_bankd_port)); f_rspro_srv_exp_connect(1); as_connectClientReq(i := 1); setverdict(pass); f_sleep(1.0); } /* Test if client re-connects to server after connection is lost */ testcase TC_srv_reconnect() runs on client_test_CT { var BankSlot bslot := { 1, 0 }; f_init(); as_connectClientReq(); /* disconnect the client from server and expect re-establish + re-connect */ f_rspro_srv_fini(0); f_rspro_srv_init(0, mp_server_ip, mp_server_port, g_srv_comp_id, exp_connect := true); as_connectClientReq(i := 0); setverdict(pass); f_sleep(1.0); } /* Test if client re-connects to bank after connection is lost */ testcase TC_bank_reconnect() runs on client_test_CT { var BankSlot bslot := { 1, 0 }; f_init(); as_connectClientReq(); f_rspro_config_client_bank(bslot, ts_IpPort(ts_IPv4(mp_bankd_ip), mp_bankd_port)); f_rspro_srv_exp_connect(1); as_connectClientReq(i := 1); /* disconnect the client from bankd and expect re-establish + re-connect */ f_rspro_srv_fini(1); f_rspro_srv_init(1, mp_bankd_ip, mp_bankd_port, g_bankd_comp_id, exp_connect := true); as_connectClientReq(i := 1); setverdict(pass); f_sleep(1.0); } /* TODO: * send a configClientBankIpReq and change the bank of an active client * send a configClientBankSlotReq and chagne the bank slot of an active client * test keepalive mechanism: do we get IPA PING? * test keepalive mechanism: do we see disconnect+reconnect if we don't respond to IPA PING? * test actual APDU transfers * test messages in invalid state, e.g. APDUs before we're connected to a bank * test messages on server connection which are only permitted on bankd connection */ control { execute( TC_srv_connectClient() ); execute( TC_srv_connectClient_reject() ); execute( TC_srv_connectClient_configClientBank() ); execute( TC_srv_reconnect() ); execute( TC_bank_reconnect() ); } }