diff options
author | Martin Klozik <martinx.klozik@intel.com> | 2016-10-11 12:41:57 +0100 |
---|---|---|
committer | Martin Klozik <martinx.klozik@intel.com> | 2016-10-27 13:20:19 +0000 |
commit | 9c13028cf9b29da86e5b12c5d3b8c4d6bd858545 (patch) | |
tree | bfff243bcfa31ec2db5b92a0d507bcecbc7fcd2c /core/traffic_controller_rfc2544.py | |
parent | adfdd0db071cf8247434cb456cc676144323719f (diff) |
teststeps: Generic support of step driven tests
In the past, step driven testcases were supported
only by integration testcases. This patch adds generic
support of TestSteps for both integration and performance
testcases. Step driven test were improved to support
modification of existing deployment. As part of
the patch a refactoring of traffic controllers
were performed. Traffic controllers were modified
to support trafficgen-off and trafficgen-pause
modes in all possible ways of trafficgen invocation.
JIRA: VSPERF-362
Change-Id: Ic8b7a9b0e7165f0a15a52279ed0f0952da9fedb8
Signed-off-by: Martin Klozik <martinx.klozik@intel.com>
Reviewed-by: Maryam Tahhan <maryam.tahhan@intel.com>
Reviewed-by: Al Morton <acmorton@att.com>
Reviewed-by: Christian Trautman <ctrautma@redhat.com>
Reviewed-by: Bill Michalowski <bmichalo@redhat.com>
Reviewed-by: Antonio Fischetti <antonio.fischetti@intel.com>
Reviewed-by: Sridhar K. N. Rao <sridhar.rao@spirent.com>
Diffstat (limited to 'core/traffic_controller_rfc2544.py')
-rw-r--r-- | core/traffic_controller_rfc2544.py | 108 |
1 files changed, 13 insertions, 95 deletions
diff --git a/core/traffic_controller_rfc2544.py b/core/traffic_controller_rfc2544.py index af09deff..874c3ae7 100644 --- a/core/traffic_controller_rfc2544.py +++ b/core/traffic_controller_rfc2544.py @@ -1,4 +1,4 @@ -# Copyright 2015 Intel Corporation. +# Copyright 2015-2016 Intel Corporation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,16 +13,12 @@ # limitations under the License. """RFC2544 Traffic Controller implementation. """ -import logging - -from core.traffic_controller import ITrafficController -from core.results.results_constants import ResultsConstants +from core.traffic_controller import TrafficController from core.results.results import IResults -from conf import settings from conf import get_test_param -class TrafficControllerRFC2544(ITrafficController, IResults): +class TrafficControllerRFC2544(TrafficController, IResults): """Traffic controller for RFC2544 traffic Used to setup and control a traffic generator for an RFC2544 deployment @@ -34,60 +30,15 @@ class TrafficControllerRFC2544(ITrafficController, IResults): :param traffic_gen_class: The traffic generator class to be used. """ - self._logger = logging.getLogger(__name__) - self._logger.debug("__init__") - self._traffic_gen_class = traffic_gen_class() - self._traffic_started = False - self._traffic_started_call_count = 0 + super(TrafficControllerRFC2544, self).__init__(traffic_gen_class) + self._type = 'rfc2544' self._tests = int(get_test_param('rfc2544_tests', 1)) - self._duration = int(get_test_param('duration', 30)) - self._lossrate = float(get_test_param('lossrate', 0.0)) - self._results = [] - - # If set, comma separated packet_sizes value from --test_params - # on cli takes precedence over value in settings file. - self._packet_sizes = None - packet_sizes_cli = get_test_param('pkt_sizes') - if packet_sizes_cli: - self._packet_sizes = [int(x.strip()) - for x in packet_sizes_cli.split(',')] - else: - self._packet_sizes = settings.getValue('TRAFFICGEN_PKT_SIZES') - - def __enter__(self): - """Call initialisation function. - """ - self._traffic_gen_class.connect() - - def __exit__(self, type_, value, traceback): - """Stop traffic, clean up. - """ - if self._traffic_started: - self.stop_traffic() - - @staticmethod - def _append_results(result_dict, packet_size): - """Adds common values to traffic generator results. - - :param result_dict: Dictionary containing results from trafficgen - :param packet_size: Packet size value. - - :returns: dictionary of results with additional entries. - """ - - ret_value = result_dict - - # TODO Old TOIT controller had knowledge about scenario beeing - # executed, should new controller also fill Configuration & ID, - # or this should be passed to TestCase? - ret_value[ResultsConstants.TYPE] = 'rfc2544' - ret_value[ResultsConstants.PACKET_SIZE] = str(packet_size) - - return ret_value def send_traffic(self, traffic): - """See ITrafficController for description + """See TrafficController for description """ + if not self.traffic_required(): + return self._logger.debug('send_traffic with ' + str(self._traffic_gen_class)) @@ -109,13 +60,14 @@ class TrafficControllerRFC2544(ITrafficController, IResults): result = self._traffic_gen_class.send_rfc2544_throughput( traffic, tests=self._tests, duration=self._duration, lossrate=self._lossrate) - result = TrafficControllerRFC2544._append_results(result, - packet_size) + result = self._append_results(result, packet_size) self._results.append(result) def send_traffic_async(self, traffic, function): - """See ITrafficController for description + """See TrafficController for description """ + if not self.traffic_required(): + return self._logger.debug('send_traffic_async with ' + str(self._traffic_gen_class)) @@ -131,40 +83,6 @@ class TrafficControllerRFC2544(ITrafficController, IResults): else: function['function']() result = self._traffic_gen_class.wait_rfc2544_throughput() - result = TrafficControllerRFC2544._append_results(result, - packet_size) + result = self._append_results(result, packet_size) self._results.append(result) - def stop_traffic(self): - """Kills traffic being sent from the traffic generator. - """ - self._logger.debug("stop_traffic()") - - def print_results(self): - """IResult interface implementation. - """ - counter = 0 - for item in self._results: - logging.info("Record: " + str(counter)) - counter += 1 - for(key, value) in list(item.items()): - logging.info(" Key: " + str(key) + - ", Value: " + str(value)) - - def get_results(self): - """IResult interface implementation. - """ - return self._results - - def validate_send_traffic(self, dummy_result, dummy_traffic): - """Verify that send traffic has succeeded - """ - if len(self._results): - if 'b2b_frames' in self._results[-1]: - return float(self._results[-1]['b2b_frames']) > 0 - elif 'throughput_rx_fps' in self._results[-1]: - return float(self._results[-1]['throughput_rx_fps']) > 0 - else: - return True - else: - return False |