Merge "VNF interfaces are sorted by "vpci" address before being populated"
authorRoss Brattain <ross.b.brattain@intel.com>
Fri, 2 Mar 2018 21:44:13 +0000 (21:44 +0000)
committerGerrit Code Review <gerrit@opnfv.org>
Fri, 2 Mar 2018 21:44:13 +0000 (21:44 +0000)
tests/unit/network_services/traffic_profile/test_prox_profile.py
yardstick/network_services/traffic_profile/prox_profile.py
yardstick/network_services/vnf_generic/vnf/tg_prox.py

index 078e72b..e5b3609 100644 (file)
@@ -31,14 +31,25 @@ if stl_patch:
 
 class TestProxProfile(unittest.TestCase):
 
+    def test_sort_vpci(self):
+        traffic_generator = mock.Mock()
+        interface_1 = {'virtual-interface': {'vpci': 'id1'}, 'name': 'name1'}
+        interface_2 = {'virtual-interface': {'vpci': 'id2'}, 'name': 'name2'}
+        interface_3 = {'virtual-interface': {'vpci': 'id3'}, 'name': 'name3'}
+        interfaces = [interface_2, interface_3, interface_1]
+        traffic_generator.vnfd_helper = {
+            'vdu': [{'external-interface': interfaces}]}
+        output = ProxProfile.sort_vpci(traffic_generator)
+        self.assertEqual([interface_1, interface_2, interface_3], output)
+
     def test_fill_samples(self):
         samples = {}
+
         traffic_generator = mock.MagicMock()
-        traffic_generator.vpci_if_name_ascending = [
+        interfaces = [
             ['id1', 'name1'],
-            ['id2', 'name2'],
+            ['id2', 'name2']
         ]
-
         traffic_generator.resource_helper.sut.port_stats.side_effect = [
             list(range(12)),
             list(range(10, 22)),
@@ -54,7 +65,9 @@ class TestProxProfile(unittest.TestCase):
                 'out_packets': 17,
             },
         }
-        ProxProfile.fill_samples(samples, traffic_generator)
+        with mock.patch.object(ProxProfile, 'sort_vpci', return_value=interfaces):
+            ProxProfile.fill_samples(samples, traffic_generator)
+
         self.assertDictEqual(samples, expected)
 
     def test_init(self):
index 170dfd9..343ef1d 100644 (file)
@@ -28,9 +28,23 @@ class ProxProfile(TrafficProfile):
     This profile adds a single stream at the beginning of the traffic session
     """
 
+    @staticmethod
+    def sort_vpci(traffic_gen):
+        """Return the list of external interfaces ordered by vpci and name
+
+        :param traffic_gen: (ProxTrafficGen) traffic generator
+        :return: list of ordered interfaces
+        """
+        def key_func(interface):
+            return interface['virtual-interface']['vpci'], interface['name']
+
+        return sorted(traffic_gen.vnfd_helper['vdu'][0]['external-interface'],
+                      key=key_func)
+
     @staticmethod
     def fill_samples(samples, traffic_gen):
-        for vpci_idx, intf in enumerate(traffic_gen.vpci_if_name_ascending):
+        vpci_if_name_ascending = ProxProfile.sort_vpci(traffic_gen)
+        for vpci_idx, intf in enumerate(vpci_if_name_ascending):
             name = intf[1]
             # TODO: VNFDs KPIs values needs to be mapped to TRex structure
             xe_port = traffic_gen.resource_helper.sut.port_stats([vpci_idx])
index 151252c..282dd92 100644 (file)
@@ -30,20 +30,6 @@ class ProxTrafficGen(SampleVNFTrafficGen):
     LUA_PARAMETER_NAME = "gen"
     WAIT_TIME = 1
 
-    @staticmethod
-    def _sort_vpci(vnfd):
-        """
-
-        :param vnfd: vnfd.yaml
-        :return: trex_cfg.yaml file
-        """
-
-        def key_func(interface):
-            return interface["virtual-interface"]["vpci"], interface["name"]
-
-        ext_intf = vnfd["vdu"][0]["external-interface"]
-        return sorted(ext_intf, key=key_func)
-
     def __init__(self, name, vnfd, setup_env_helper_type=None, resource_helper_type=None):
         # don't call superclass, use custom wrapper of ProxApproxVnf
         self._vnf_wrapper = ProxApproxVnf(name, vnfd, setup_env_helper_type, resource_helper_type)
@@ -59,10 +45,6 @@ class ProxTrafficGen(SampleVNFTrafficGen):
         self._tg_process = None
         self._traffic_process = None
 
-        # used for generating stats
-        self.vpci_if_name_ascending = self._sort_vpci(vnfd)
-        self.resource_helper.vpci_if_name_ascending = self._sort_vpci(vnfd)
-
     def terminate(self):
         self._vnf_wrapper.terminate()
         super(ProxTrafficGen, self).terminate()