diff options
author | Martin Klozik <martinx.klozik@intel.com> | 2017-05-18 10:18:38 +0100 |
---|---|---|
committer | Martin Klozik <martinx.klozik@intel.com> | 2017-06-02 13:39:21 +0100 |
commit | de6fc4b670fc42fc96f27f375fbcf7a099629434 (patch) | |
tree | 4b2b87baef82fffee6645d428794ee83a09da893 /conf/__init__.py | |
parent | 862ef28b808aca4dd75cc44a83023362dcce1969 (diff) |
tests: Improvement of step driven testcases
A set of improvements was introduced to enhance step driven
testcases capabilities.
Details:
* delay among test steps is configurable by TEST_STEP_DELAY
parameter
* step driven tool function exec was renamed to exec_shell
* new step driven tool function exec_python was introduced to execute
a python code
* new step driven object sleep was introduced to pause test execution
for defined number of seconds.
* fixed bug in settings.validate_getValue() to correctly validate
access of parameters modified by TEST_PARAMS
* new #PARAM() macro was introduced to allow references among
configuration parameters
* multistream support has been added into ixnetrfc2544v2.tcl,
which is used for tunneling protocols test (op2p deployment)
* fixed bug in op2p deployment to list interfaces and flows
from both bridges involved in the test
* test report updated to state exact rfcxxxx type of traffic
type, e.g. rfc2544_continuous
* test report of step driven testcases was updated to contain
measured values from traffic generator in CSV report
* method for ovs flow comparison was modified to normalize
IPv4 CIDR network addr (e.g. 10.0.0.5/8 => 10.0.0.0/8)
JIRA: VSPERF-512
Change-Id: Ib4f38dcdfbf3820dd766b25520da0ad0c81f3293
Signed-off-by: Martin Klozik <martinx.klozik@intel.com>
Reviewed-by: Al Morton <acmorton@att.com>
Reviewed-by: Christian Trautman <ctrautma@redhat.com>
Reviewed-by: Sridhar Rao <sridhar.rao@spirent.com>
Reviewed-by: Trevor Cooper <trevor.cooper@intel.com>
Reviewed-by: Ciara Loftus <ciara.loftus@intel.com>
Diffstat (limited to 'conf/__init__.py')
-rw-r--r-- | conf/__init__.py | 48 |
1 files changed, 42 insertions, 6 deletions
diff --git a/conf/__init__.py b/conf/__init__.py index 2a2586ff..e24111dc 100644 --- a/conf/__init__.py +++ b/conf/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2015-2016 Intel Corporation. +# Copyright 2015-2017 Intel Corporation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -49,6 +49,40 @@ class Settings(object): def __init__(self): pass + def _eval_param(self, param): + # pylint: disable=invalid-name + """ Helper function for expansion of references to vsperf parameters + """ + if isinstance(param, str): + # evaluate every #PARAM reference inside parameter itself + macros = re.findall(r'#PARAM\((([\w\-]+)(\[[\w\[\]\-\'\"]+\])*)\)', param) + if macros: + for macro in macros: + # pylint: disable=eval-used + try: + tmp_val = str(eval("self.getValue('{}'){}".format(macro[1], macro[2]))) + param = param.replace('#PARAM({})'.format(macro[0]), tmp_val) + # silently ignore that option required by PARAM macro can't be evaluated; + # It is possible, that referred parameter will be constructed during runtime + # and re-read later. + except IndexError: + pass + except AttributeError: + pass + return param + elif isinstance(param, list) or isinstance(param, tuple): + tmp_list = [] + for item in param: + tmp_list.append(self._eval_param(item)) + return tmp_list + elif isinstance(param, dict): + tmp_dict = {} + for (key, value) in param.items(): + tmp_dict[key] = self._eval_param(value) + return tmp_dict + else: + return param + def getValue(self, attr): """Return a settings item value """ @@ -65,11 +99,11 @@ class Settings(object): if attr == 'TRAFFIC': tmp_value = copy.deepcopy(master_value) tmp_value = merge_spec(tmp_value, cli_value) - return tmp_value + return self._eval_param(tmp_value) else: - return cli_value + return self._eval_param(cli_value) else: - return master_value + return self._eval_param(master_value) else: raise AttributeError("%r object has no attribute %r" % (self.__class__, attr)) @@ -189,7 +223,7 @@ class Settings(object): for key in self.__dict__: if key.startswith('GUEST_'): value = self.getValue(key) - if isinstance(value, str) and value.find('#') >= 0: + if isinstance(value, str) and str(value).find('#') >= 0: self._expand_vm_settings(key, 1) if isinstance(value, list): @@ -266,7 +300,9 @@ class Settings(object): def validate_getValue(self, result, attr): """Verifies, that correct value was returned """ - assert result == self.__dict__[attr] + # getValue must be called to expand macros and apply + # values from TEST_PARAM option + assert result == self.getValue(attr) return True def validate_setValue(self, dummy_result, name, value): |