Merge "IXIA traffic stops running after first iteration"
authorEmma Foley <emma.l.foley@intel.com>
Thu, 16 Aug 2018 15:27:23 +0000 (15:27 +0000)
committerGerrit Code Review <gerrit@opnfv.org>
Thu, 16 Aug 2018 15:27:23 +0000 (15:27 +0000)
yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py
yardstick/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py

index 4d3bc2c..5203ffd 100644 (file)
@@ -60,7 +60,7 @@ class IxiaResourceHelper(ClientResourceHelper):
     def stop_collect(self):
         self._terminated.value = 1
 
-    def generate_samples(self, ports, key=None):
+    def generate_samples(self, ports, duration, key=None):
         stats = self.get_stats()
 
         samples = {}
@@ -78,10 +78,8 @@ class IxiaResourceHelper(ClientResourceHelper):
                     "tx_throughput_mbps": float(stats["Tx_Rate_Mbps"][port_num]),
                     "in_packets": int(stats["Valid_Frames_Rx"][port_num]),
                     "out_packets": int(stats["Frames_Tx"][port_num]),
-                    # NOTE(ralonsoh): we need to make the traffic injection
-                    # time variable.
-                    "RxThroughput": int(stats["Valid_Frames_Rx"][port_num]) / 30,
-                    "TxThroughput": int(stats["Frames_Tx"][port_num]) / 30,
+                    "RxThroughput": int(stats["Valid_Frames_Rx"][port_num]) / duration,
+                    "TxThroughput": int(stats["Frames_Tx"][port_num]) / duration,
                 }
                 if key:
                     avg_latency = stats["Store-Forward_Avg_latency_ns"][port_num]
@@ -129,13 +127,11 @@ class IxiaResourceHelper(ClientResourceHelper):
                     self, self.client, mac)
                 self.client_started.value = 1
                 # pylint: disable=unnecessary-lambda
-                utils.wait_until_true(lambda: self.client.is_traffic_stopped())
-                samples = self.generate_samples(traffic_profile.ports)
+                utils.wait_until_true(lambda: self.client.is_traffic_stopped(),
+                                      timeout=traffic_profile.config.duration * 2)
+                samples = self.generate_samples(traffic_profile.ports,
+                                                traffic_profile.config.duration)
 
-                # NOTE(ralonsoh): the traffic injection duration is fixed to 30
-                # seconds. This parameter is configurable and must be retrieved
-                # from the traffic_profile.full_profile information.
-                # Every flow must have the same duration.
                 completed, samples = traffic_profile.get_drop_percentage(
                     samples, min_tol, max_tol, first_run=first_run)
                 self._queue.put(samples)
index ddb6324..ec0e6aa 100644 (file)
@@ -18,6 +18,7 @@ import mock
 import six
 import unittest
 
+from yardstick.common import utils
 from yardstick.benchmark import contexts
 from yardstick.benchmark.contexts import base as ctx_base
 from yardstick.network_services.libs.ixia_libs.ixnet import ixnet_api
@@ -57,6 +58,7 @@ class TestIxiaResourceHelper(unittest.TestCase):
 
     def test_run_traffic(self):
         mock_tprofile = mock.Mock()
+        mock_tprofile.config.duration = 10
         mock_tprofile.get_drop_percentage.return_value = True, 'fake_samples'
         ixia_rhelper = tg_rfc2544_ixia.IxiaResourceHelper(mock.Mock())
         ixia_rhelper.rfc_helper = mock.Mock()
@@ -64,7 +66,8 @@ class TestIxiaResourceHelper(unittest.TestCase):
         ixia_rhelper.vnfd_helper.port_pairs.all_ports = []
         with mock.patch.object(ixia_rhelper, 'generate_samples'), \
                 mock.patch.object(ixia_rhelper, '_build_ports'), \
-                mock.patch.object(ixia_rhelper, '_initialize_client'):
+                mock.patch.object(ixia_rhelper, '_initialize_client'), \
+                mock.patch.object(utils, 'wait_until_true'):
             ixia_rhelper.run_traffic(mock_tprofile)
 
         self.assertEqual('fake_samples', ixia_rhelper._queue.get())