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


Change subject: stp: Fix brokeness in TC_tmt_loadshare
......................................................................

stp: Fix brokeness in TC_tmt_loadshare

The test was not even setting the traffic-mode in the UIT.
Furthermore, it was expecting pure round-robin behavior, which was the
older behavior of osmo-stp when loadshare traffic-mode was selected.

Actually split the test into 2, naming them properly (since round robin
is not a AS traffic mode in itself, but a possible implementation of the
loadshare traffic-mode.

The new test validates the usual loadshare traffic-mode based on SLS
distribution.

Related: SYS#7112
Depends: libosmo-sigtran.git Change-Id I61340549c596f1c04bc2269dbc165c327bf72037
Change-Id: I16d81cb2f88bb2927f248182ad4f8f27c8c24859
---
M stp/STP_Tests_M3UA.ttcn
M stp/expected-results.xml
2 files changed, 105 insertions(+), 9 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks 
refs/changes/51/39651/1

diff --git a/stp/STP_Tests_M3UA.ttcn b/stp/STP_Tests_M3UA.ttcn
index 3fb3fc0..063256b 100644
--- a/stp/STP_Tests_M3UA.ttcn
+++ b/stp/STP_Tests_M3UA.ttcn
@@ -585,24 +585,24 @@
                }
 }

-/* test "traffic-mode load-share" behavior */
-testcase TC_tmt_loadshare() runs on RAW_M3UA_CT {
+/* test "traffic-mode roundrobin" behavior (distributing within ASPs of a 
given AS in roundrobin fashion). */
+testcase TC_tmt_loadshare_roundrobin() runs on RAW_M3UA_CT {
        var integer i;

        f_init_m3ua();

+       f_vty_config2(VTY, {"cs7 instance 0", "as as-receiver m3ua"}, 
"traffic-mode round-robin");
+
        var OCT4 rctx_sender := int2oct(f_m3ua_cli_config(0).routing_ctx, 4);
        var OCT4 pc_sender := int2oct(f_m3ua_cli_config(0).point_code, 4);
        var OCT4 rctx_receiver := int2oct(f_m3ua_cli_config(1).routing_ctx, 4);
        var OCT4 pc_receiver := int2oct(f_m3ua_cli_config(1).point_code, 4);

-       /* FIXME: configure the STP via VTY to set traffic-mode */
-
        /* bring up the 'sender' side (single ASP in AS) */
        f_M3UA_asp_up_act(0, omit, rctx_sender);

        /* activate the first 'receiver' side ASP */
-       f_M3UA_asp_up_act(1, c_M3UA_TMT_loadshare, omit); // TODO: rctx
+       f_M3UA_asp_up_act(1, omit, omit); // TODO: rctx

        /* verify traffic is routed from sender to [sole] receiver */
        for (i := 0; i < 10; i := i+1) {
@@ -610,12 +610,12 @@
        }

        /* activate the second 'receiver' side ASP (no NOTIFY) */
-       f_M3UA_asp_up_act(2, c_M3UA_TMT_loadshare, omit, c_M3UA_ST_I_AS_ACTIVE, 
omit); // TODO: rctx
+       f_M3UA_asp_up_act(2, omit, omit, c_M3UA_ST_I_AS_ACTIVE, omit); // TODO: 
rctx

        /* verify traffic is routed from sender to new receiver */
        const integer iter_per_asp := 5;
        var Integers num_rx := {};
-       for (i := 0; i < g_m3ua_num_clients; i := i + 1) {
+       for (i := 0; i < 3; i := i + 1) {
                num_rx := num_rx & {0};
        }
        for (i := 0; i < 2*iter_per_asp; i := i+1) {
@@ -640,6 +640,100 @@
        setverdict(pass);

        f_clear_m3ua();
+
+       f_vty_config2(VTY, {"cs7 instance 0", "as as-receiver m3ua"}, "no 
traffic-mode");
+}
+
+private altstep as_count_rx_sls(integer idx, template (present) PDU_M3UA exp, 
inout Integers sls_counter, inout integer rx_counter)
+runs on RAW_M3UA_CT {
+       var M3UA_RecvFrom rx;
+       [] M3UA[idx].receive(t_M3UA_RecvFrom(exp)) -> value rx {
+               var integer sls := 
oct2int(rx.msg.m3UA_DATA.messageParameters.protocol_Data.sLS);
+               sls_counter[sls] := sls_counter[sls] + 1;
+               rx_counter := rx_counter + 1;
+               }
+}
+
+/* test "traffic-mode load-share" behavior. Validates ASP Loadsharing scenario 
(distributing traffic within ASPs of one AS).
+ * NOTE: This test does not validate AS Loadsharing, (distributing traffic 
within linksets/ASs of a combined linkset). */
+testcase TC_tmt_loadshare_sls() runs on RAW_M3UA_CT {
+       var integer i;
+
+       f_init_m3ua();
+
+       f_vty_config2(VTY, {"cs7 instance 0", "as as-receiver m3ua"}, 
"traffic-mode loadshare");
+
+       var OCT4 rctx_sender := int2oct(f_m3ua_cli_config(0).routing_ctx, 4);
+       var OCT4 pc_sender := int2oct(f_m3ua_cli_config(0).point_code, 4);
+       var OCT4 rctx_receiver := int2oct(f_m3ua_cli_config(1).routing_ctx, 4);
+       var OCT4 pc_receiver := int2oct(f_m3ua_cli_config(1).point_code, 4);
+
+       /* bring up the 'sender' side (single ASP in AS) */
+       f_M3UA_asp_up_act(0, omit, rctx_sender);
+
+       /* activate the first 'receiver' side ASP */
+       f_M3UA_asp_up_act(1, c_M3UA_TMT_loadshare, omit); // TODO: rctx
+
+       /* verify traffic is routed from sender to [sole] receiver */
+       for (i := 0; i < 10; i := i+1) {
+               f_test_traffic(0, rctx_sender, pc_sender, 1, rctx_receiver, 
pc_receiver);
+       }
+
+       /* activate the second 'receiver' side ASP (no NOTIFY) */
+       f_M3UA_asp_up_act(2, c_M3UA_TMT_loadshare, omit, c_M3UA_ST_I_AS_ACTIVE, 
omit); // TODO: rctx
+
+       /* verify traffic is routed from sender to new receiver */
+       const integer iter_per_asp := 20;
+       const integer NUM_SLS := 16; /* SLS in ITU is 4 bits. */
+       var integer num_rx_1 := 0;
+       var integer num_rx_2 := 0;
+       var Integers sls_num_rx_1 := {};
+       var Integers sls_num_rx_2 := {};
+       for (i := 0; i < NUM_SLS; i := i + 1) {
+               sls_num_rx_1 := sls_num_rx_1 & {0};
+               sls_num_rx_2 := sls_num_rx_2 & {0};
+       }
+       for (i := 0; i < 2*iter_per_asp; i := i+1) {
+               var octetstring data := f_rnd_octstring_rnd_len(100);
+               var template (value) M3UA_Protocol_Data tx_pd;
+               var template (present) M3UA_Protocol_Data rx_pd;
+               /* Distribute traffic over ASPs based on SLS, since OPC is 
always the same.
+                * SLS in ITU is 4 bits. */
+               var OCT1 sls := int2oct(i mod 16, 1);
+               tx_pd := ts_M3UA_protocol_data(pc_sender, pc_receiver, '23'O, 
'00'O, '00'O, sls, data);
+               rx_pd := tr_M3UA_protocol_data(pc_sender, pc_receiver, '23'O, 
'00'O, '00'O, sls, data);
+               f_M3UA_send(0, ts_M3UA_DATA(rctx_sender, tx_pd), 1);
+               alt {
+               [] as_count_rx_sls(1, tr_M3UA_DATA(rctx_receiver, rx_pd), 
sls_num_rx_1, num_rx_1);
+               [] as_count_rx_sls(2, tr_M3UA_DATA(rctx_receiver, rx_pd), 
sls_num_rx_2, num_rx_2);
+               }
+       }
+
+       /* Make sure traffic was sent over both ASPs and that it was 
distributed: */
+       if (num_rx_1 == 0) {
+               Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Rx 0 
packets in 1st ASP!");
+       }
+       if (num_rx_2 == 0) {
+               Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Rx 0 
packets in 2nd ASP!");
+       }
+       if (num_rx_1 + num_rx_2 != 2*iter_per_asp) {
+               Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
+                                       log2str("Rx ", num_rx_1 + num_rx_2 ," 
packets in total vs exp ", 2*iter_per_asp));
+       }
+
+       /* Check that a given SLS is not forwarded to both ASPs: */
+       for (i := 0; i < NUM_SLS; i := i+1) {
+               if (sls_num_rx_1[i] > 0 and sls_num_rx_2[i] > 0) {
+                       Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
+                                               log2str("Rx packets for SLS ", 
i, " in both ASPs!"));
+               }
+
+       }
+       setverdict(pass);
+
+       f_clear_m3ua();
+
+       f_vty_config2(VTY, {"cs7 instance 0", "as as-receiver m3ua"}, "no 
traffic-mode");
 }

 /* test "traffic-mode broadcast" behavior */
@@ -1414,7 +1508,8 @@
        execute( TC_asp_act_loadshare() );
        execute( TC_asp_act_broadcast() );
        execute( TC_tmt_override() );
-       execute( TC_tmt_loadshare() );
+       execute( TC_tmt_loadshare_roundrobin() );
+       execute( TC_tmt_loadshare_sls() );
        execute( TC_tmt_broadcast() );
        execute( TC_act_rctx_data_no_rctx() );
 
diff --git a/stp/expected-results.xml b/stp/expected-results.xml
index bc9c861..a764349 100644
--- a/stp/expected-results.xml
+++ b/stp/expected-results.xml
@@ -8,7 +8,8 @@
   <testcase classname='STP_Tests_M3UA' name='TC_asp_act_loadshare' 
time='MASKED'/>
   <testcase classname='STP_Tests_M3UA' name='TC_asp_act_broadcast' 
time='MASKED'/>
   <testcase classname='STP_Tests_M3UA' name='TC_tmt_override' time='MASKED'/>
-  <testcase classname='STP_Tests_M3UA' name='TC_tmt_loadshare' time='MASKED'/>
+  <testcase classname='STP_Tests_M3UA' name='TC_tmt_loadshare_roundrobin' 
time='MASKED'/>
+  <testcase classname='STP_Tests_M3UA' name='TC_tmt_loadshare_sls' 
time='MASKED'/>
   <testcase classname='STP_Tests_M3UA' name='TC_tmt_broadcast' time='MASKED'/>
   <testcase classname='STP_Tests_M3UA' name='TC_act_rctx_data_no_rctx' 
time='MASKED'/>
   <testcase classname='STP_Tests_M3UA' name='TC_m3ua_tcp_cli' time='MASKED'/>

--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/39651?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: I16d81cb2f88bb2927f248182ad4f8f27c8c24859
Gerrit-Change-Number: 39651
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pes...@sysmocom.de>

Reply via email to