From 9c13028cf9b29da86e5b12c5d3b8c4d6bd858545 Mon Sep 17 00:00:00 2001 From: Martin Klozik Date: Tue, 11 Oct 2016 12:41:57 +0100 Subject: 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 Reviewed-by: Maryam Tahhan Reviewed-by: Al Morton Reviewed-by: Christian Trautman Reviewed-by: Bill Michalowski Reviewed-by: Antonio Fischetti Reviewed-by: Sridhar K. N. Rao --- core/traffic_controller_rfc2889.py | 107 +++++++++---------------------------- 1 file changed, 25 insertions(+), 82 deletions(-) (limited to 'core/traffic_controller_rfc2889.py') diff --git a/core/traffic_controller_rfc2889.py b/core/traffic_controller_rfc2889.py index a97a47d3..a2e12e6d 100644 --- a/core/traffic_controller_rfc2889.py +++ b/core/traffic_controller_rfc2889.py @@ -1,15 +1,24 @@ +# Copyright 2016 Spirent Communications, Intel Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. """RFC2889 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 TrafficControllerRFC2889(ITrafficController, IResults): +class TrafficControllerRFC2889(TrafficController, IResults): """Traffic controller for RFC2889 traffic Used to setup and control a traffic generator for an RFC2889 deployment @@ -21,56 +30,15 @@ class TrafficControllerRFC2889(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(TrafficControllerRFC2889, self).__init__(traffic_gen_class) + self._type = 'rfc2889' self._trials = int(get_test_param('rfc2889_trials', 1)) - self._duration = int(get_test_param('duration', 30)) - 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 - - ret_value[ResultsConstants.TYPE] = 'rfc2889' - 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)) @@ -92,13 +60,14 @@ class TrafficControllerRFC2889(ITrafficController, IResults): result = self._traffic_gen_class.send_rfc2889_forwarding( traffic, tests=self._trials, duration=self._duration) - result = TrafficControllerRFC2889._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)) @@ -115,32 +84,6 @@ class TrafficControllerRFC2889(ITrafficController, IResults): function['function']() result = self._traffic_gen_class.wait_rfc2889_forwarding( traffic, trials=self._trials, duration=self._duration) - result = TrafficControllerRFC2889._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, result, traffic): - """Verify that send traffic has succeeded - """ - return True -- cgit 1.2.3-korg