aboutsummaryrefslogtreecommitdiffstats
path: root/conf/__init__.py
diff options
context:
space:
mode:
authorMartin Klozik <martinx.klozik@intel.com>2017-05-18 10:18:38 +0100
committerMartin Klozik <martinx.klozik@intel.com>2017-06-02 13:39:21 +0100
commitde6fc4b670fc42fc96f27f375fbcf7a099629434 (patch)
tree4b2b87baef82fffee6645d428794ee83a09da893 /conf/__init__.py
parent862ef28b808aca4dd75cc44a83023362dcce1969 (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__.py48
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):