Test case override of traffic profile settings. 87/64587/1
authorDanielMartinBuckley <daniel.m.buckley@intel.com>
Thu, 12 Jul 2018 12:11:00 +0000 (13:11 +0100)
committerAbhijit Sinha <abhijit.sinha@intel.com>
Tue, 6 Nov 2018 11:29:49 +0000 (11:29 +0000)
JIRA: YARDSTICK-1298

Allow the test case file e.g. "tc_prox_baremetal_l2fwd-4.yaml"
settings to override the values in the traffic_profile file
e.g. "prox_binsearch.yaml"

This is done by adding the "traffic_config" section to the
"options" section in the "test case file".

See below :-

  options:
    interface_speed_gbps: 10

    traffic_config:
      tolerated_loss: 0.001
      test_precision: 0.1
      packet_sizes: [64]
      duration: 30
      lower_bound: 0.0
      upper_bound: 100.0

    vnf__0:
      prox_path: /opt/nsb_bin/prox
      prox_config: "configs/handle_l2fwd-4.cfg"
      prox_args:
        "-t": ""

    tg__0:
      prox_path: /opt/nsb_bin/prox
      prox_config: "configs/gen_l2fwd-4.cfg"
      prox_args:
        "-e": ""
        "-t": ""

Precedence of the traffic settings.

1. Values provided in the "traffic_config" section, inside
   the "options" section, of the test case file
2. values provided in the "traffic_profile" section of the
   traffic_profile file

Change-Id: I6b4e123e865c9dab548f9ad28647f95b53410e8f
Signed-off-by: Daniel Martin Buckley <daniel.m.buckley@intel.com>
(cherry picked from commit 383c438cda94a1004bc9552a5993fe3ff3e6da8f)

yardstick/benchmark/scenarios/networking/vnf_generic.py
yardstick/tests/unit/benchmark/scenarios/networking/test_vnf_generic.py
yardstick/tests/unit/network_services/traffic_profile/test_prox_binsearch.py

index 20fff61..d8f0625 100644 (file)
@@ -161,8 +161,17 @@ class NetworkServiceTestCase(scenario_base.Scenario):
             tprofile_base.TrafficProfile.DOWNLINK: {},
             'extra_args': extra_args,
             'duration': self._get_duration()}
+
         traffic_vnfd = vnfdgen.generate_vnfd(tprofile, tprofile_data)
-        self.traffic_profile = tprofile_base.TrafficProfile.get(traffic_vnfd)
+
+        traffic_config = \
+            self.scenario_cfg.get("options", {}).get("traffic_config", {})
+
+        traffic_vnfd.setdefault("traffic_profile", {})
+        traffic_vnfd["traffic_profile"].update(traffic_config)
+
+        self.traffic_profile = \
+            tprofile_base.TrafficProfile.get(traffic_vnfd)
 
     def _get_topology(self):
         topology = self.scenario_cfg["topology"]
index 6bf2f2c..90248d1 100644 (file)
@@ -629,7 +629,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
     @mock.patch.object(vnfdgen, 'generate_vnfd')
     def test__fill_traffic_profile(self, mock_generate, mock_tprofile_get):
         fake_tprofile = mock.Mock()
-        fake_vnfd = mock.Mock()
+        fake_vnfd = mock.MagicMock()
         with mock.patch.object(self.s, '_get_traffic_profile',
                                return_value=fake_tprofile) as mock_get_tp:
             mock_generate.return_value = fake_vnfd
@@ -646,6 +646,22 @@ class TestNetworkServiceTestCase(unittest.TestCase):
             )
             mock_tprofile_get.assert_called_once_with(fake_vnfd)
 
+    @mock.patch.object(base.TrafficProfile, 'get')
+    @mock.patch.object(vnfdgen, 'generate_vnfd')
+    def test__fill_traffic_profile2(self, mock_generate, mock_tprofile_get):
+        fake_tprofile = mock.Mock()
+        fake_vnfd = {}
+        with mock.patch.object(self.s, '_get_traffic_profile',
+                               return_value=fake_tprofile) as mock_get_tp:
+            mock_generate.return_value = fake_vnfd
+
+            self.s.scenario_cfg["options"] = {"traffic_config": {"duration": 99899}}
+            self.s._fill_traffic_profile()
+            mock_get_tp.assert_called_once()
+            self.assertIn("traffic_profile", fake_vnfd)
+            self.assertIn("duration", fake_vnfd["traffic_profile"])
+            self.assertEqual(99899, fake_vnfd["traffic_profile"]["duration"])
+
     @mock.patch.object(utils, 'open_relative_file')
     def test__get_topology(self, mock_open_path):
         self.s.scenario_cfg['topology'] = 'fake_topology'
index c099033..4524eb7 100644 (file)
@@ -38,6 +38,12 @@ class TestProxBinSearchProfile(unittest.TestCase):
                 return fail_tuple, {}
             return success_tuple, {}
 
+        def side_effect_func(arg1, arg2):
+            if arg1 == "confirmation":
+                return arg2
+            else:
+                return {}
+
         tp_config = {
             'traffic_profile': {
                 'packet_sizes': [200],
@@ -51,11 +57,13 @@ class TestProxBinSearchProfile(unittest.TestCase):
         fail_tuple = ProxTestDataTuple(10.0, 1, 2, 3, 4, [5.6, 5.7, 5.8], 850, 1000, 123.4)
 
         traffic_generator = mock.MagicMock()
-        attrs1 = {'get.return_value' : 10}
+        attrs1 = {'get.return_value': 10}
         traffic_generator.scenario_helper.all_options.configure_mock(**attrs1)
 
-        attrs2 = {'__getitem__.return_value' : 10, 'get.return_value': 10}
+        attrs2 = {'__getitem__.return_value': 10, 'get.return_value': 10}
+        attrs3 = {'get.side_effect': side_effect_func}
         traffic_generator.scenario_helper.scenario_cfg["runner"].configure_mock(**attrs2)
+        traffic_generator.scenario_helper.scenario_cfg["options"].configure_mock(**attrs3)
 
         profile_helper = mock.MagicMock()
         profile_helper.run_test = target
@@ -68,7 +76,7 @@ class TestProxBinSearchProfile(unittest.TestCase):
 
         self.assertEqual(round(profile.current_lower, 2), 74.69)
         self.assertEqual(round(profile.current_upper, 2), 76.09)
-        self.assertEqual(len(runs), 77)
+        self.assertEqual(len(runs), 7)
 
         # Result Samples inc theor_max
         result_tuple = {'Actual_throughput': 5e-07,
@@ -121,6 +129,12 @@ class TestProxBinSearchProfile(unittest.TestCase):
                 return fail_tuple, {}
             return success_tuple, {}
 
+        def side_effect_func(arg1, _):
+            if arg1 == "confirmation":
+                return 2
+            else:
+                return {}
+
         tp_config = {
             'traffic_profile': {
                 'packet_sizes': [200],
@@ -138,7 +152,10 @@ class TestProxBinSearchProfile(unittest.TestCase):
         traffic_generator.scenario_helper.all_options.configure_mock(**attrs1)
 
         attrs2 = {'__getitem__.return_value': 0, 'get.return_value': 0}
+        attrs3 = {'get.side_effect': side_effect_func}
+
         traffic_generator.scenario_helper.scenario_cfg["runner"].configure_mock(**attrs2)
+        traffic_generator.scenario_helper.scenario_cfg["options"].configure_mock(**attrs3)
 
         profile_helper = mock.MagicMock()
         profile_helper.run_test = target
@@ -150,7 +167,7 @@ class TestProxBinSearchProfile(unittest.TestCase):
         profile.execute_traffic(traffic_generator)
         self.assertEqual(round(profile.current_lower, 2), 24.06)
         self.assertEqual(round(profile.current_upper, 2), 25.47)
-        self.assertEqual(len(runs), 7)
+        self.assertEqual(len(runs), 21)
 
     def test_execute_3(self):
         def target(*args, **_):
@@ -186,8 +203,6 @@ class TestProxBinSearchProfile(unittest.TestCase):
         profile.lower_bound = 99.0
         profile.execute_traffic(traffic_generator)
 
-
-        # Result Samples
         result_tuple = {'Actual_throughput': 0, 'theor_max_throughput': 0,
                         "Status": 'Result', "Next_Step": ''}
         profile.queue.put.assert_called_with(result_tuple)
@@ -226,6 +241,7 @@ class TestProxBinSearchProfile(unittest.TestCase):
         traffic_generator.scenario_helper.all_options.configure_mock(**attrs1)
 
         attrs2 = {'__getitem__.return_value': 0, 'get.return_value': 0}
+
         traffic_generator.scenario_helper.scenario_cfg["runner"].configure_mock(**attrs2)
 
         profile_helper = mock.MagicMock()