diff options
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 |