pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/36093?usp=email )
Change subject: epdg: Add tests to validate concurrent connections ......................................................................
epdg: Add tests to validate concurrent connections
Change-Id: I842dacda56abe47afb19e951eaae746b5e8d9fe7 --- M epdg/EPDG_Tests.ttcn 1 file changed, 90 insertions(+), 8 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/93/36093/1
diff --git a/epdg/EPDG_Tests.ttcn b/epdg/EPDG_Tests.ttcn index 44dc80f..1ff4629 100644 --- a/epdg/EPDG_Tests.ttcn +++ b/epdg/EPDG_Tests.ttcn @@ -55,6 +55,14 @@ integer mp_diam_watchdog_initial_wait_sec := 6*3; }
+type port Coord_PT message +{ + inout charstring; +} with { extension "internal" }; +private const charstring COORD_CMD_READY := "COORD_CMD_READY"; +private const charstring COORD_CMD_START := "COORD_CMD_START"; +private const charstring COORD_CMD_ATTACHED := "COORD_CMD_ATTACHED"; +private const charstring COORD_CMD_STOP := "COORD_CMD_STOP";
type component MTC_CT { var DIAMETER_Emulation_CT vc_SWx; @@ -72,6 +80,8 @@ var GTPv2_Emulation_CT vc_GTP2; port GTP2EM_PT TEID0;
+ port Coord_PT COORD; + timer g_Tguard; };
@@ -93,7 +103,6 @@
f_diameter_expect_imsi(imsi);
- while (true) { alt { [] DIAMETER_CLIENT.receive(PDU_DIAMETER:?) -> value msg { @@ -119,8 +128,9 @@ port DIAMETEREM_PROC_PT SWx_PROC; port DIAMETER_Conn_PT S6b; port DIAMETEREM_PROC_PT S6b_PROC; + port Coord_PT COORD; }; - +type record of EPDG_ConnHdlr EPDG_ConnHdlrList;
type record BearerConfig { /* EPS Bearer ID */ @@ -157,12 +167,22 @@ } }
-private function f_init_pars(integer imsi_suffix := 1) +private function f_gen_addr_in_pool(integer idx := 0) return charstring +{ + /* Skip first 2 addresses reserved for TUN */ + var integer internal_idx := idx + 2; + var integer suffix := internal_idx rem (256*256); + var integer C := suffix / 256; + var integer D := suffix rem 256; + return "192.168." & int2str(C) & "." & int2str(D); +} + +private function f_init_pars(integer idx := 0) runs on MTC_CT return EPDG_ConnHdlrPars { var EPDG_ConnHdlrPars pars := { - imsi := f_gen_imsi(imsi_suffix), + imsi := f_rnd_imsi('26242'H), apn := "internet", - ue_ip := "192.168.123.50", + ue_ip := f_gen_addr_in_pool(idx), teic_local := '00000000'O, teic_remote := omit, bearer := { @@ -335,6 +355,9 @@ connect(vc_conn:S6b_PROC, vc_conn_s6b:DIAMETER_PROC_CLIENT); vc_conn_s6b.start(f_diam_connhldr_ct_main(pars.imsi));
+ /* COORD */ + connect(vc_conn:COORD, self:COORD); + vc_conn.start(f_init_handler(fn, id, pars)); return vc_conn; } @@ -711,7 +734,6 @@ f_initial_attach(); f_GSUP_PurgeMS_success(); } - testcase TC_authinfo_normal() runs on MTC_CT { var EPDG_ConnHdlrPars pars := f_init_pars(); var EPDG_ConnHdlr vc_conn; @@ -728,7 +750,6 @@ f_GTP2C_CreateBearer_success(); f_GSUP_PurgeMS_success(); } - testcase TC_ho_lte_to_wifi() runs on MTC_CT { var EPDG_ConnHdlrPars pars := f_init_pars(); var EPDG_ConnHdlr vc_conn; @@ -744,7 +765,6 @@ * cause="Access changed from non-3gpp to 3gpp" */ f_GTP2C_DeleteBearer_success(); } - testcase TC_ho_wifi_to_lte() runs on MTC_CT { var EPDG_ConnHdlrPars pars := f_init_pars(); var EPDG_ConnHdlr vc_conn; @@ -754,10 +774,63 @@ setverdict(pass); }
+private function f_TC_concurrent_ues(charstring id) runs on EPDG_ConnHdlr { + COORD.send(COORD_CMD_READY); + COORD.receive(COORD_CMD_START); + f_initial_attach(); + COORD.send(COORD_CMD_ATTACHED); + COORD.receive(COORD_CMD_STOP); + f_GSUP_PurgeMS_success(); +} +private function f_TC_concurrent_ues_MTC(integer num_ues) runs on MTC_CT { + var EPDG_ConnHdlrList vc_conn_list := {}; + var EPDG_ConnHdlr vc_conn; + f_init(t_guard := 100.0); + + for (var integer i := 0; i < num_ues; i := i + 1) { + var EPDG_ConnHdlrPars pars := f_init_pars(i); + vc_conn := f_start_handler(refers(f_TC_concurrent_ues), pars); + vc_conn_list := vc_conn_list & { vc_conn }; + } + + for (var integer i := 0; i < num_ues; i := i + 1) { + COORD.receive(COORD_CMD_READY) -> sender vc_conn; + } + + for (var integer i := 0; i < num_ues; i := i + 1) { + COORD.send(COORD_CMD_START) to vc_conn_list[i]; + } + + for (var integer i := 0; i < num_ues; i := i + 1) { + COORD.receive(COORD_CMD_ATTACHED) -> sender vc_conn; + } + + log("All attached!"); + f_sleep(1.0); + + for (var integer i := 0; i < num_ues; i := i + 1) { + COORD.send(COORD_CMD_STOP) to vc_conn_list[i]; + } + + for (var integer i := 0; i < num_ues; i := i + 1) { + vc_conn_list[i].done; + } + + setverdict(pass); +} +testcase TC_concurrent_ues2() runs on MTC_CT { + f_TC_concurrent_ues_MTC(2) +} +testcase TC_concurrent_ues100() runs on MTC_CT { + f_TC_concurrent_ues_MTC(100) +} + control { execute ( TC_authinfo_normal() ); execute ( TC_ho_lte_to_wifi() ); execute ( TC_ho_wifi_to_lte() ); + execute ( TC_concurrent_ues2() ); + execute ( TC_concurrent_ues100() ); }
}