From 51382b303cd0c8bb63fbcd7a0144b186a24c07d7 Mon Sep 17 00:00:00 2001 From: Rodolfo Alonso Hernandez Date: Fri, 2 Mar 2018 17:44:03 +0000 Subject: VNF interfaces are sorted by "vpci" address before being populated In [1], VNF interfaces in TG PROX are sorted by "vpci" address, before this value is populated in "vnfd_helper". "vpci_if_name_ascending" is only used in TP ProxPofile [2] to generate the stats. This patch delays this sorting process until the stats generation. [1]https://github.com/opnfv/yardstick/blob/a74ad5a1ec1a73389c5983440b2031b0bc72cea1/yardstick/network_services/vnf_generic/vnf/tg_prox.py#L62-L64 [2]https://github.com/opnfv/yardstick/blob/a74ad5a1ec1a73389c5983440b2031b0bc72cea1/yardstick/network_services/traffic_profile/prox_profile.py#L33 JIRA: YARDSTICK-1044 Change-Id: I988dc48f9a82baa1c64f728d9e6d54f2f4bae010 Signed-off-by: Rodolfo Alonso Hernandez --- .../traffic_profile/test_prox_profile.py | 21 +++++++++++++++++---- .../traffic_profile/prox_profile.py | 16 +++++++++++++++- .../network_services/vnf_generic/vnf/tg_prox.py | 18 ------------------ 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/tests/unit/network_services/traffic_profile/test_prox_profile.py b/tests/unit/network_services/traffic_profile/test_prox_profile.py index 078e72b8e..e5b36096f 100644 --- a/tests/unit/network_services/traffic_profile/test_prox_profile.py +++ b/tests/unit/network_services/traffic_profile/test_prox_profile.py @@ -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): diff --git a/yardstick/network_services/traffic_profile/prox_profile.py b/yardstick/network_services/traffic_profile/prox_profile.py index 170dfd96f..343ef1da2 100644 --- a/yardstick/network_services/traffic_profile/prox_profile.py +++ b/yardstick/network_services/traffic_profile/prox_profile.py @@ -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]) diff --git a/yardstick/network_services/vnf_generic/vnf/tg_prox.py b/yardstick/network_services/vnf_generic/vnf/tg_prox.py index 151252ce8..282dd92c5 100644 --- a/yardstick/network_services/vnf_generic/vnf/tg_prox.py +++ b/yardstick/network_services/vnf_generic/vnf/tg_prox.py @@ -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() -- cgit 1.2.3-korg