aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@osmocom.org>2020-11-18 12:16:59 +0100
committerHarald Welte <laforge@osmocom.org>2020-11-21 22:52:55 +0100
commitf8ef028c9faafa272cde77a8d10484e73a775b28 (patch)
tree1f26175263158c7e6a9581cf81a20213877e8324
parent80a249aa07ed0bc14d73194dc043f8158cc67c8d (diff)
gbproxy: Add test for load sharing function in SGSN->PCU direction
-rw-r--r--gbproxy/GBProxy_Tests.ttcn77
1 files changed, 77 insertions, 0 deletions
diff --git a/gbproxy/GBProxy_Tests.ttcn b/gbproxy/GBProxy_Tests.ttcn
index bf777cc8..1cb841f5 100644
--- a/gbproxy/GBProxy_Tests.ttcn
+++ b/gbproxy/GBProxy_Tests.ttcn
@@ -861,6 +861,79 @@ testcase TC_resume() runs on test_CT
f_cleanup();
}
+/* test the load-sharing between multiple NS-VC on the BSS side */
+private function f_TC_dl_ud_unidir(charstring id) runs on BSSGP_ConnHdlr {
+ var integer i;
+
+ for (i := 0; i < 10; i := i+1) {
+ var octetstring payload := f_rnd_octstring(i);
+ var template (value) PDU_BSSGP pdu_tx :=
+ ts_BSSGP_DL_UD(g_pars.tlli, payload, omit, ts_BSSGP_IMSI(g_pars.imsi));
+ SGSN[0].send(pdu_tx);
+ }
+ setverdict(pass);
+}
+testcase TC_load_sharing_dl() runs on test_CT_NS
+{
+ const integer num_ue := 10;
+ var BSSGP_ConnHdlr vc_conn[num_ue];
+ f_init();
+
+ /* all BVC are now fully brought up. We disconnect BSSGP from NS on the BSS
+ * side so we get the raw NsUnitdataIndication and hence observe different
+ * NSVCI */
+ disconnect(g_pcu[0].vc_NS:NS_SP, g_pcu[0].vc_BSSGP:BSCP);
+ connect(g_pcu[0].vc_NS:NS_SP, self:NS);
+
+ /* there may still be some NS-VCs coming up? After all, the BVC-RESET succeeds after the first
+ * of the NS-VC is ALIVE/UNBLOCKED */
+ f_sleep(3.0);
+
+ /* start parallel components generating DL-UNITDATA from the SGSN side */
+ for (var integer i:= 0; i < num_ue; i := i+1) {
+ vc_conn[i] := f_start_handler(refers(f_TC_dl_ud_unidir), testcasename(), g_pcu, g_sgsn, 5+i);
+ }
+
+ /* now start counting all the messages that were queued before */
+ /* TODO: We have a hard-coded assumption of 4 NS-VC in one NSE/NS-VCG here! */
+ var ro_integer rx_count := { 0, 0, 0, 0 };
+ timer T := 2.0;
+ T.start;
+ alt {
+ [] as_NsUdiCount(0, rx_count);
+ [] as_NsUdiCount(1, rx_count);
+ [] as_NsUdiCount(2, rx_count);
+ [] as_NsUdiCount(3, rx_count);
+ [] NS.receive(NsUnitdataIndication:{0,?,?,*,*}) { repeat; } /* signaling BVC */
+ [] NS.receive(NsStatusIndication:?) { repeat; }
+ [] NS.receive {
+ setverdict(fail, "Rx unexpected NS");
+ mtc.stop;
+ }
+ [] T.timeout {
+ }
+ }
+ for (var integer i := 0; i < lengthof(rx_count); i := i+1) {
+ log("Rx on NSVCI ", mp_nsconfig_pcu[0].nsvc[i].nsvci, ": ", rx_count[i]);
+ if (rx_count[i] == 0) {
+ setverdict(fail, "Data not shared over all NSVC");
+ }
+ }
+ setverdict(pass);
+}
+private altstep as_NsUdiCount(integer nsvc_idx, inout ro_integer roi) runs on test_CT_NS {
+ var NsUnitdataIndication udi;
+ var BssgpBvcConfig bvcc := g_pcu[0].cfg.bvc[0];
+ [] NS.receive(NsUnitdataIndication:{bvcc.bvci, g_pcu[0].cfg.nsei, mp_nsconfig_pcu[0].nsvc[nsvc_idx].nsvci, *, *}) -> value udi {
+ roi[nsvc_idx] := roi[nsvc_idx] + 1;
+ repeat;
+ }
+}
+type component test_CT_NS extends test_CT {
+ port NS_PT NS;
+};
+
+
control {
execute( TC_BVC_bringup() );
@@ -871,6 +944,10 @@ control {
execute( TC_radio_status() );
execute( TC_suspend() );
execute( TC_resume() );
+ if (false) {
+ /* don't enable this by default, as we don't yet have any automatic test setup for FR with 4 NS-VC */
+ execute( TC_load_sharing_dl() );
+ }
}