diff options
author | Christian Trautman <ctrautma@redhat.com> | 2017-04-27 16:08:49 -0400 |
---|---|---|
committer | Christian Trautman <ctrautma@redhat.com> | 2017-05-15 10:23:32 -0400 |
commit | 7eaeffff1c2976e1022f7716c7eb0c746482824e (patch) | |
tree | d5e1dea51a1f2c859241803aea1d017625d0b291 /tools/pkt_gen/xena/xena.py | |
parent | 59aae8c0539ca9632d9ffdcb2788ab715fbff9ec (diff) |
xena_pairs: Add pairs topology for 2544 testing
Add xena pairs topology and port removal options for JSON
files with RFC2544 testing. Refactored JSON code for
better expansion later.
Resolved pathing issues related to previous patch allowing
for execution of VSPerf from any directory.
JIRA: VSPERF-502
Change-Id: Ida60c1223ae0f45f8879351770ab7fdce859b59b
Signed-off-by: Christian Trautman <ctrautma@redhat.com>
Diffstat (limited to 'tools/pkt_gen/xena/xena.py')
-rwxr-xr-x | tools/pkt_gen/xena/xena.py | 56 |
1 files changed, 32 insertions, 24 deletions
diff --git a/tools/pkt_gen/xena/xena.py b/tools/pkt_gen/xena/xena.py index 26d26542..31347c5f 100755 --- a/tools/pkt_gen/xena/xena.py +++ b/tools/pkt_gen/xena/xena.py @@ -28,27 +28,27 @@ import logging import os import subprocess import sys -from time import sleep import xml.etree.ElementTree as ET from collections import OrderedDict -# scapy imports +from time import sleep + import scapy.layers.inet as inet -# VSPerf imports -from conf import settings from conf import merge_spec +from conf import settings from core.results.results_constants import ResultsConstants from tools.pkt_gen.trafficgen.trafficgen import ITrafficGenerator - -# Xena module imports -from tools.pkt_gen.xena.xena_json import XenaJSON from tools.pkt_gen.xena.XenaDriver import ( aggregate_stats, line_percentage, XenaSocketDriver, XenaManager, ) +from tools.pkt_gen.xena.json.xena_json_mesh import XenaJSONMesh +from tools.pkt_gen.xena.json.xena_json_blocks import XenaJSONBlocks +from tools.pkt_gen.xena.json.xena_json_pairs import XenaJSONPairs +_CURR_DIR = os.path.dirname(os.path.realpath(__file__)) class Xena(ITrafficGenerator): """ @@ -263,16 +263,28 @@ class Xena(ITrafficGenerator): return result_dict - def _setup_json_config(self, tests, loss_rate, testtype=None): + def _setup_json_config(self, tests, loss_rate, testtype=None, + bonding_test=False): """ Create a 2bUsed json file that will be used for xena2544.exe execution. :param tests: Number of tests :param loss_rate: The acceptable loss rate as float :param testtype: Either '2544_b2b' or '2544_throughput' as string + :param bonding_test: Specify if the test is a bonding test which will + enable the pairs topology :return: None """ try: - j_file = XenaJSON('./tools/pkt_gen/xena/profiles/baseconfig.x2544') + # set duplex mode, this code is valid, pylint complaining with a + # warning that many have complained about online. + # pylint: disable=redefined-variable-type + if self._params['traffic']['bidir'] == "True": + j_file = XenaJSONMesh() + elif self._params['traffic']['bidir'] == "False": + j_file = XenaJSONBlocks() + elif bonding_test: + j_file = XenaJSONPairs() + j_file.set_chassis_info( settings.getValue('TRAFFICGEN_XENA_IP'), settings.getValue('TRAFFICGEN_XENA_PASSWORD') @@ -337,13 +349,9 @@ class Xena(ITrafficGenerator): j_file.add_header_segments( flows=self._params['traffic']['multistream'], multistream_layer=self._params['traffic']['stream_type']) - # set duplex mode - if self._params['traffic']['bidir'] == "True": - j_file.set_topology_mesh() - else: - j_file.set_topology_blocks() - j_file.write_config('./tools/pkt_gen/xena/profiles/2bUsed.x2544') + j_file.write_config(os.path.join( + _CURR_DIR, 'profiles/2bUsed.x2544')) except Exception as exc: self._logger.exception("Error during Xena JSON setup: %s", exc) raise @@ -488,9 +496,9 @@ class Xena(ITrafficGenerator): Start the xena2544 exe. :return: None """ - args = ["mono", "./tools/pkt_gen/xena/Xena2544.exe", "-c", - "./tools/pkt_gen/xena/profiles/2bUsed.x2544", "-e", "-r", - "./tools/pkt_gen/xena", "-u", + args = ["mono", os.path.join(_CURR_DIR, "Xena2544.exe"), "-c", + os.path.join(_CURR_DIR, "profiles/2bUsed.x2544"), "-e", "-r", + _CURR_DIR, "-u", settings.getValue('TRAFFICGEN_XENA_USER')] # Sometimes Xena2544.exe completes, but mono holds the process without # releasing it, this can cause a deadlock of the main thread. Use the @@ -624,7 +632,7 @@ class Xena(ITrafficGenerator): self._start_xena_2544() self._wait_xena_2544_complete() - root = ET.parse(r'./tools/pkt_gen/xena/xena2544-report.xml').getroot() + root = ET.parse(os.path.join(_CURR_DIR, "xena2544-report.xml")).getroot() if settings.getValue('TRAFFICGEN_XENA_RFC2544_VERIFY'): # record the previous settings so we can revert to them if needed to @@ -652,7 +660,7 @@ class Xena(ITrafficGenerator): 'TRAFFICGEN_XENA_RFC2544_VERIFY_DURATION'), lossrate) self.wait_rfc2544_throughput() root = ET.parse( - r'./tools/pkt_gen/xena/xena2544-report.xml').getroot() + os.path.join(_CURR_DIR, "xena2544-report.xml")).getroot() # If it passed, report the number of lost frames and exit the # loop @@ -695,7 +703,7 @@ class Xena(ITrafficGenerator): traffic, old_tests, self._duration, lossrate) self.wait_rfc2544_throughput() root = ET.parse( - r'./tools/pkt_gen/xena/xena2544-report.xml').getroot() + os.path.join(_CURR_DIR, "xena2544-report.xml")).getroot() else: self._logger.error( 'Maximum number of verify attempts reached. Reporting last result') @@ -723,7 +731,7 @@ class Xena(ITrafficGenerator): See ITrafficGenerator for description """ self._wait_xena_2544_complete() - root = ET.parse(r'./tools/pkt_gen/xena/xena2544-report.xml').getroot() + root = ET.parse(os.path.join(_CURR_DIR, "xena2544-report.xml")).getroot() return Xena._create_throughput_result(root) def send_rfc2544_back2back(self, traffic=None, tests=1, duration=20, @@ -742,7 +750,7 @@ class Xena(ITrafficGenerator): self._setup_json_config(tests, lossrate, '2544_b2b') self._start_xena_2544() self._wait_xena_2544_complete() - root = ET.parse(r'./tools/pkt_gen/xena/xena2544-report.xml').getroot() + root = ET.parse(os.path.join(_CURR_DIR, "xena2544-report.xml")).getroot() return Xena._create_throughput_result(root) def start_rfc2544_back2back(self, traffic=None, tests=1, duration=20, @@ -764,7 +772,7 @@ class Xena(ITrafficGenerator): """Wait and set results of RFC2544 test. """ self._wait_xena_2544_complete() - root = ET.parse(r'./tools/pkt_gen/xena/xena2544-report.xml').getroot() + root = ET.parse(os.path.join(_CURR_DIR, "xena2544-report.xml")).getroot() return Xena._create_throughput_result(root) |