diff options
author | Ross Brattain <ross.b.brattain@intel.com> | 2017-09-20 17:33:34 -0700 |
---|---|---|
committer | Ross Brattain <ross.b.brattain@intel.com> | 2017-09-25 08:30:20 -0700 |
commit | 717999408252e973d3e288fb6aefd1b02e1c3f44 (patch) | |
tree | 5f0de0005ca4b3b71c702e651f2d0c4d803e1753 | |
parent | 93c0560ee8b3aa69f771cb77161dac58278f92ac (diff) |
tg_rfc2544_ixia: use traffic id from JSON to update mac
we were using raw sort index of the interfaces to
set the MAC address, but we should be using the
traffic id from the static JSON instead.
Change-Id: I13284db04abb3eaf8c9826974a9e5aa1c37b3891
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
3 files changed, 55 insertions, 42 deletions
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py index 0e303dc3b..0c3520c44 100644 --- a/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py +++ b/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py @@ -252,7 +252,7 @@ class TestIXIATrafficGen(unittest.TestCase): mock_traffic_profile = mock.Mock(autospec=TrafficProfile) mock_traffic_profile.get_traffic_definition.return_value = "64" mock_traffic_profile.params = self.TRAFFIC_PROFILE - mock_traffic_profile.ports = [0, 1] + mock_traffic_profile.ports = ["xe0", "xe1"] mock_ssh_instance = mock.Mock(autospec=mock_ssh.SSH) mock_ssh_instance.execute.return_value = 0, "", "" @@ -348,6 +348,7 @@ class TestIXIATrafficGen(unittest.TestCase): with mock.patch('yardstick.benchmark.scenarios.networking.vnf_generic.open', create=True) as mock_open: - mock_open.return_value = mock.MagicMock() - result = sut._traffic_runner(mock_traffic_profile) - self.assertIsNone(result) + with mock.patch('yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia.open', + create=True) as mock_ixia_open: + result = sut._traffic_runner(mock_traffic_profile) + self.assertIsNone(result) diff --git a/yardstick/network_services/traffic_profile/ixia_rfc2544.py b/yardstick/network_services/traffic_profile/ixia_rfc2544.py index cb8a34796..ee58172d8 100644 --- a/yardstick/network_services/traffic_profile/ixia_rfc2544.py +++ b/yardstick/network_services/traffic_profile/ixia_rfc2544.py @@ -103,7 +103,9 @@ class IXIARFC2544Profile(TrexProfile): self.ports = [port for port in port_generator()] - def execute_traffic(self, traffic_generator, ixia_obj, mac={}, xfile=None): + def execute_traffic(self, traffic_generator, ixia_obj, mac=None, xfile=None): + if mac is None: + mac = {} if self.first_run: self.full_profile = {} self.pg_id = 0 @@ -121,15 +123,18 @@ class IXIARFC2544Profile(TrexProfile): return str(multiplier) def start_ixia_latency(self, traffic_generator, ixia_obj, - mac={}, xfile=None): + mac=None, xfile=None): + if mac is None: + mac = {} self.update_traffic_profile(traffic_generator) traffic = \ self._get_ixia_traffic_profile(self.full_profile, mac, xfile) - self._ixia_traffic_generate(traffic_generator, traffic, - ixia_obj, xfile) + self._ixia_traffic_generate(traffic_generator, traffic, ixia_obj) def get_drop_percentage(self, traffic_generator, samples, tol_min, - tolerance, ixia_obj, mac={}, xfile=None): + tolerance, ixia_obj, mac=None, xfile=None): + if mac is None: + mac = {} status = 'Running' drop_percent = 100 in_packets = sum([samples[iface]['in_packets'] for iface in samples]) diff --git a/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py b/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py index 449f22296..cd9553d12 100644 --- a/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py +++ b/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py @@ -13,6 +13,8 @@ # limitations under the License. from __future__ import absolute_import + +import json import time import os import logging @@ -79,31 +81,29 @@ class IxiaResourceHelper(ClientResourceHelper): latency = stats[0] samples = {} - for interface in self.vnfd_helper.interfaces: + for port_name in ports: try: - name = interface["name"] # this is not DPDK port num, but this is whatever number we gave # when we selected ports and programmed the profile - port = self.vnfd_helper.port_num(name) - if port in ports: - samples[name] = { - "rx_throughput_kps": float(last_result["Rx_Rate_Kbps"][port]), - "tx_throughput_kps": float(last_result["Tx_Rate_Kbps"][port]), - "rx_throughput_mbps": float(last_result["Rx_Rate_Mbps"][port]), - "tx_throughput_mbps": float(last_result["Tx_Rate_Mbps"][port]), - "in_packets": int(last_result["Valid_Frames_Rx"][port]), - "out_packets": int(last_result["Frames_Tx"][port]), - "RxThroughput": int(last_result["Valid_Frames_Rx"][port]) / 30, - "TxThroughput": int(last_result["Frames_Tx"][port]) / 30, - } - if key: - avg_latency = latency["Store-Forward_Avg_latency_ns"][port] - min_latency = latency["Store-Forward_Min_latency_ns"][port] - max_latency = latency["Store-Forward_Max_latency_ns"][port] - samples[name][key] = \ - {"Store-Forward_Avg_latency_ns": avg_latency, - "Store-Forward_Min_latency_ns": min_latency, - "Store-Forward_Max_latency_ns": max_latency} + port_num = self.vnfd_helper.port_num(port_name) + samples[port_name] = { + "rx_throughput_kps": float(last_result["Rx_Rate_Kbps"][port_num]), + "tx_throughput_kps": float(last_result["Tx_Rate_Kbps"][port_num]), + "rx_throughput_mbps": float(last_result["Rx_Rate_Mbps"][port_num]), + "tx_throughput_mbps": float(last_result["Tx_Rate_Mbps"][port_num]), + "in_packets": int(last_result["Valid_Frames_Rx"][port_num]), + "out_packets": int(last_result["Frames_Tx"][port_num]), + "RxThroughput": int(last_result["Valid_Frames_Rx"][port_num]) / 30, + "TxThroughput": int(last_result["Frames_Tx"][port_num]) / 30, + } + if key: + avg_latency = latency["Store-Forward_Avg_latency_ns"][port_num] + min_latency = latency["Store-Forward_Min_latency_ns"][port_num] + max_latency = latency["Store-Forward_Max_latency_ns"][port_num] + samples[port_name][key] = \ + {"Store-Forward_Avg_latency_ns": avg_latency, + "Store-Forward_Min_latency_ns": min_latency, + "Store-Forward_Max_latency_ns": max_latency} except IndexError: pass @@ -128,19 +128,27 @@ class IxiaResourceHelper(ClientResourceHelper): self.client.ix_assign_ports() + ixia_file = find_relative_file("ixia_traffic.cfg", + self.scenario_helper.scenario_cfg["task_path"]) + + static_traffic = {} + with open(ixia_file) as stream: + try: + static_traffic = json.load(stream) + except Exception: + LOG.exception("") mac = {} - # TODO: shouldn't this index map to port number we used to generate the profile - for index, interface in enumerate(self.vnfd_helper.interfaces, 1): - virt_intf = interface["virtual-interface"] - mac.update({ - "src_mac_{}".format(index): virt_intf.get("local_mac", default), - "dst_mac_{}".format(index): virt_intf.get("dst_mac", default), - }) + for vld_id, traffic in static_traffic.items(): + intfs = self.vnfd_helper.port_pairs.networks.get(vld_id, []) + interface = next(intfs, None) + if interface: + virt_intf = interface["virtual-interface"] + # we only know static traffic id by reading the json + # this is used by _get_ixia_traffic_profile + mac["src_mac_{}".format(traffic["id"])] = virt_intf.get("local_mac", default) + mac["dst_mac_{}".format(traffic["id"])] = virt_intf.get("dst_mac", default) samples = {} - - ixia_file = find_relative_file("ixia_traffic.cfg", - self.scenario_helper.scenario_cfg["task_path"]) # Generate ixia traffic config... try: while not self._terminated.value: @@ -162,7 +170,6 @@ class IxiaResourceHelper(ClientResourceHelper): self._queue.put(samples) except Exception: LOG.info("Run Traffic terminated") - pass if not self.rfc_helper.is_done(): self._terminated.value = 1 |