pespin has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/34546?usp=email )

Change subject: mgw: Factor out helper func to test data flows over endp with 2 
conns
......................................................................

mgw: Factor out helper func to test data flows over endp with 2 conns

The logic can be reused by AMR<->IuUP and IuUP<->IuUP tests.

Change-Id: Ic4f3c5bb687373bdae6942e1952797e76bfa3ffb
---
M mgw/MGCP_Test.ttcn
1 file changed, 58 insertions(+), 115 deletions(-)

Approvals:
  neels: Looks good to me, approved
  Jenkins Builder: Verified
  osmith: Looks good to me, but someone else must approve




diff --git a/mgw/MGCP_Test.ttcn b/mgw/MGCP_Test.ttcn
index 0cedb0e..ad564c1 100644
--- a/mgw/MGCP_Test.ttcn
+++ b/mgw/MGCP_Test.ttcn
@@ -2804,42 +2804,21 @@
                setverdict(pass);
        }

-       /* create two local RTP+IuUP emulations and pass data in both 
directions */
-       function f_tc_two_crcx_mdcx_and_iuup(charstring local_ip_a, charstring 
remote_ip_a,
-                                           IuUP_RabFlowCombinationList rfcl_a,
-                                           charstring local_ip_b, charstring 
remote_ip_b) runs on dummy_CT {
-               var RtpFlowData flow[2];
+       /* create two local emulations and pass data in both directions */
+       function f_two_crcx_mdcx_data_transfer(MgcpEndpoint ep, MgcpCallId 
call_id, inout RtpFlowData flow_a,
+                                              inout RtpFlowData flow_b, 
boolean tear_down_rtp := true) runs on dummy_CT {
                var RtpemStats stats[2];
                var MgcpResponse resp;
-               var MgcpEndpoint ep := c_mgw_ep_rtpbridge & "2@" & c_mgw_domain;
-               var MgcpCallId call_id := '1227'H;
                var integer num_pkts_tx[2];
                var integer temp;

-               f_init(ep);
-
                /* Create the first connection in receive only mode (RNC side, 
IuUP-Init active) */
-               flow[0] := valueof(t_RtpFlow(local_ip_a, remote_ip_a, 96, 
"VND.3GPP.IUFP/16000"));
-               flow[0].em.portnr := 10000;
-               flow[0].rtp_cfg := c_RtpemDefaultCfg;
-               flow[0].rtp_cfg.rx_payloads[0].payload_type := 
flow[0].codec_descr[0].pt;
-               flow[0].rtp_cfg.tx_payloads[0].payload_type := 
flow[0].codec_descr[0].pt;
-               flow[0].rtp_cfg.iuup_mode := true;
-               flow[0].rtp_cfg.iuup_cfg.active_init := true;
-               flow[0].rtp_cfg.iuup_cfg.rab_flow_combs := rfcl_a;
-               f_flow_create(RTPEM[0], ep, call_id, "recvonly", flow[0], true);
+               f_flow_create(RTPEM[0], ep, call_id, "recvonly", flow_a, true);
                f_rtpem_mode(RTPEM[0], RTPEM_MODE_RXONLY);

                /* Create the second connection. This connection will be also
-                * in receive only mode (CN side, IuUP-Init passive) */
-               flow[1] := valueof(t_RtpFlow(local_ip_b, remote_ip_b, 96, 
"VND.3GPP.IUFP/16000"));
-               flow[1].em.portnr := 20000;
-               flow[1].rtp_cfg := c_RtpemDefaultCfg;
-               flow[1].rtp_cfg.rx_payloads[0].payload_type := 
flow[1].codec_descr[0].pt;
-               flow[1].rtp_cfg.tx_payloads[0].payload_type := 
flow[1].codec_descr[0].pt;
-               flow[1].rtp_cfg.iuup_mode := true;
-               flow[1].rtp_cfg.iuup_cfg.active_init := false;
-               f_flow_create(RTPEM[1], ep, call_id, "recvonly", flow[1], true);
+                * in receive only mode (CN side, regular RTP) */
+               f_flow_create(RTPEM[1], ep, call_id, "recvonly", flow_b, true);
                f_rtpem_mode(RTPEM[1], RTPEM_MODE_RXONLY);

                /* The first leg starts transmitting */
@@ -2875,7 +2854,7 @@
                f_rtpem_mode(RTPEM[0], RTPEM_MODE_BIDIR);
                stats[1] := f_rtpem_stats_get(RTPEM[1]);
                num_pkts_tx[1] := stats[1].num_pkts_tx;
-               f_flow_modify(RTPEM[0], ep, call_id, "sendrecv", flow[0]);
+               f_flow_modify(RTPEM[0], ep, call_id, "sendrecv", flow_a);
                f_sleep(0.5);
                stats[0] := f_rtpem_stats_get(RTPEM[0]);
                if (stats[0].num_pkts_rx_err_disabled != 0) {
@@ -2894,7 +2873,7 @@
                f_rtpem_mode(RTPEM[1], RTPEM_MODE_BIDIR);
                stats[0] := f_rtpem_stats_get(RTPEM[0]);
                num_pkts_tx[0] := stats[0].num_pkts_tx;
-               f_flow_modify(RTPEM[1], ep, call_id, "sendrecv", flow[1]);
+               f_flow_modify(RTPEM[1], ep, call_id, "sendrecv", flow_b);
                f_sleep(2.0);

                stats[0] := f_rtpem_stats_get(RTPEM[0]);
@@ -2916,8 +2895,44 @@
                f_rtpem_stats_err_check(stats[1]);

                /* Tear down */
-               f_flow_delete(RTPEM[0]);
-               f_flow_delete(RTPEM[1], ep, call_id);
+               if (tear_down_rtp) {
+                       f_flow_delete(RTPEM[0]);
+                       f_flow_delete(RTPEM[1], ep, call_id);
+               }
+               setverdict(pass);
+       }
+
+       /* create two local RTP+IuUP emulations and pass data in both 
directions */
+       function f_tc_two_crcx_mdcx_and_iuup(charstring local_ip_a, charstring 
remote_ip_a,
+                                           IuUP_RabFlowCombinationList rfcl_a,
+                                           charstring local_ip_b, charstring 
remote_ip_b) runs on dummy_CT {
+               var RtpFlowData flow[2];
+               var MgcpEndpoint ep := c_mgw_ep_rtpbridge & "2@" & c_mgw_domain;
+               var MgcpCallId call_id := '1227'H;
+
+               f_init(ep);
+
+               /* Create the first connection in receive only mode (RNC side, 
IuUP-Init active) */
+               flow[0] := valueof(t_RtpFlow(local_ip_a, remote_ip_a, 96, 
"VND.3GPP.IUFP/16000"));
+               flow[0].em.portnr := 10000;
+               flow[0].rtp_cfg := c_RtpemDefaultCfg;
+               flow[0].rtp_cfg.rx_payloads[0].payload_type := 
flow[0].codec_descr[0].pt;
+               flow[0].rtp_cfg.tx_payloads[0].payload_type := 
flow[0].codec_descr[0].pt;
+               flow[0].rtp_cfg.iuup_mode := true;
+               flow[0].rtp_cfg.iuup_cfg.active_init := true;
+               flow[0].rtp_cfg.iuup_cfg.rab_flow_combs := rfcl_a;
+
+               /* Create the second connection. This connection will be also
+                * in receive only mode (CN side, IuUP-Init passive) */
+               flow[1] := valueof(t_RtpFlow(local_ip_b, remote_ip_b, 96, 
"VND.3GPP.IUFP/16000"));
+               flow[1].em.portnr := 20000;
+               flow[1].rtp_cfg := c_RtpemDefaultCfg;
+               flow[1].rtp_cfg.rx_payloads[0].payload_type := 
flow[1].codec_descr[0].pt;
+               flow[1].rtp_cfg.tx_payloads[0].payload_type := 
flow[1].codec_descr[0].pt;
+               flow[1].rtp_cfg.iuup_mode := true;
+               flow[1].rtp_cfg.iuup_cfg.active_init := false;
+
+               f_two_crcx_mdcx_data_transfer(ep, call_id, flow[0], flow[1], 
true);
                setverdict(pass);
        }
        testcase TC_two_crcx_mdcx_and_iuup() runs on dummy_CT {
@@ -2945,12 +2960,8 @@
                                            IuUP_RabFlowCombinationList rfcl_a,
                                            charstring local_ip_b, charstring 
remote_ip_b) runs on dummy_CT {
                var RtpFlowData flow[2];
-               var RtpemStats stats[2];
-               var MgcpResponse resp;
                var MgcpEndpoint ep := c_mgw_ep_rtpbridge & "2@" & c_mgw_domain;
                var MgcpCallId call_id := '1227'H;
-               var integer num_pkts_tx[2];
-               var integer temp;

                f_init(ep);

@@ -2966,8 +2977,6 @@
                flow[0].rtp_cfg.iuup_mode := true;
                flow[0].rtp_cfg.iuup_cfg.active_init := true;
                flow[0].rtp_cfg.iuup_cfg.rab_flow_combs := rfcl_a;
-               f_flow_create(RTPEM[0], ep, call_id, "recvonly", flow[0], true);
-               f_rtpem_mode(RTPEM[0], RTPEM_MODE_RXONLY);

                /* Create the second connection. This connection will be also
                 * in receive only mode (CN side, regular RTP) */
@@ -2980,85 +2989,8 @@
                /* flow[0].rtp_cfg.rx_payloads[0].fixed_payload converted 
AMR-IuUP->AMR-BE-RTP*/
                flow[1].rtp_cfg.rx_payloads[0].fixed_payload := 
'f3d3ca2567ffae00607d713a0f45db225ed2938ccca60ccd066924f298f7b5b8'O;
                flow[1].rtp_cfg.iuup_mode := false;
-               f_flow_create(RTPEM[1], ep, call_id, "recvonly", flow[1], true);
-               f_rtpem_mode(RTPEM[1], RTPEM_MODE_RXONLY);

-               /* The first leg starts transmitting */
-               f_rtpem_mode(RTPEM[0], RTPEM_MODE_TXONLY);
-               f_sleep(0.5);
-               stats[0] := f_rtpem_stats_get(RTPEM[0]);
-               if (stats[0].num_pkts_rx_err_disabled != 0) {
-                       setverdict(fail, "received packets from MGW on recvonly 
connection 0");
-                       mtc.stop;
-               }
-               stats[1] := f_rtpem_stats_get(RTPEM[1]);
-               if (stats[1].num_pkts_rx_err_disabled != 0) {
-                       setverdict(fail, "received packets from MGW on recvonly 
connection 1");
-                       mtc.stop;
-               }
-
-               /* The second leg starts transmitting a little later */
-               f_rtpem_mode(RTPEM[1], RTPEM_MODE_TXONLY);
-               f_sleep(1.0);
-               stats[0] := f_rtpem_stats_get(RTPEM[0]);
-               if (stats[0].num_pkts_rx_err_disabled != 0) {
-                       setverdict(fail, "received packets from MGW on recvonly 
connection 0");
-                       mtc.stop;
-               }
-               stats[1] := f_rtpem_stats_get(RTPEM[1]);
-               if (stats[1].num_pkts_rx_err_disabled != 0) {
-                       setverdict(fail, "received packets from MGW on recvonly 
connection 1");
-                       mtc.stop;
-               }
-
-               /* The first leg will now be switched into bidirectional
-                * mode, but we do not expect any data coming back yet. */
-               f_rtpem_mode(RTPEM[0], RTPEM_MODE_BIDIR);
-               stats[1] := f_rtpem_stats_get(RTPEM[1]);
-               num_pkts_tx[1] := stats[1].num_pkts_tx;
-               f_flow_modify(RTPEM[0], ep, call_id, "sendrecv", flow[0]);
-               f_sleep(0.5);
-               stats[0] := f_rtpem_stats_get(RTPEM[0]);
-               if (stats[0].num_pkts_rx_err_disabled != 0) {
-                       setverdict(fail, "received packets from MGW on recvonly 
connection 0");
-                       mtc.stop;
-               }
-               stats[1] := f_rtpem_stats_get(RTPEM[1]);
-               if (stats[1].num_pkts_rx_err_disabled != 0) {
-                       setverdict(fail, "received packets from MGW on recvonly 
connection 1");
-                       mtc.stop;
-               }
-
-               /* When the second leg is switched into bidirectional mode
-                * as well, then the MGW will connect the two together and
-                * we should see RTP streams passing through from both ends. */
-               f_rtpem_mode(RTPEM[1], RTPEM_MODE_BIDIR);
-               stats[0] := f_rtpem_stats_get(RTPEM[0]);
-               num_pkts_tx[0] := stats[0].num_pkts_tx;
-               f_flow_modify(RTPEM[1], ep, call_id, "sendrecv", flow[1]);
-               f_sleep(2.0);
-
-               stats[0] := f_rtpem_stats_get(RTPEM[0]);
-               stats[1] := f_rtpem_stats_get(RTPEM[1]);
-
-               temp := stats[0].num_pkts_tx - num_pkts_tx[0] - 
stats[1].num_pkts_rx;
-               if (temp > 3 or temp < -3) {
-                       setverdict(fail, "number of packets not within normal 
parameters:", temp);
-                       mtc.stop;
-               }
-
-               temp := stats[1].num_pkts_tx - num_pkts_tx[1] - 
stats[0].num_pkts_rx;
-               if (temp > 3 or temp < -3) {
-                       setverdict(fail, "number of packets not within normal 
parameters:", temp);
-                       mtc.stop;
-               }
-
-               f_rtpem_stats_err_check(stats[0]);
-               f_rtpem_stats_err_check(stats[1]);
-
-               /* Tear down */
-               f_flow_delete(RTPEM[0]);
-               f_flow_delete(RTPEM[1], ep, call_id);
+               f_two_crcx_mdcx_data_transfer(ep, call_id, flow[0], flow[1], 
true);
                setverdict(pass);
        }
        testcase TC_two_crcx_mdcx_and_iuup_rtp() runs on dummy_CT {

--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/34546?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ic4f3c5bb687373bdae6942e1952797e76bfa3ffb
Gerrit-Change-Number: 34546
Gerrit-PatchSet: 3
Gerrit-Owner: pespin <pes...@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanits...@sysmocom.de>
Gerrit-Reviewer: neels <nhofm...@sysmocom.de>
Gerrit-Reviewer: osmith <osm...@sysmocom.de>
Gerrit-Reviewer: pespin <pes...@sysmocom.de>
Gerrit-MessageType: merged

Reply via email to