From 7224efa9539584690236218f5243b6b5c81daca9 Mon Sep 17 00:00:00 2001 From: Martin Klozik Date: Fri, 4 May 2018 02:23:09 -0700 Subject: bugfix: Fix evaluation order of parameters This patch ensures, that testcase definition keywords vSwitch, Trafficgen, VNF and Tunnel Type will have the highest priority to override any values specified via ``Parameters`` section, CLI arguments or configuration files. JIRA: VSPERF-574 Change-Id: Ied799187d489325a32cc4854145fdf9901e7e3e2 Signed-off-by: Martin Klozik Reviewed-by: Al Morton Reviewed-by: Christian Trautman Reviewed-by: Sridhar Rao Reviewed-by: Richard Elias --- docs/testing/user/userguide/testusage.rst | 11 ++++++----- testcases/testcase.py | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/docs/testing/user/userguide/testusage.rst b/docs/testing/user/userguide/testusage.rst index 7884324a..c7cc1484 100644 --- a/docs/testing/user/userguide/testusage.rst +++ b/docs/testing/user/userguide/testusage.rst @@ -107,11 +107,12 @@ line argument, etc. Thus it is important to understand the order of configuratio parameter evaluation. This "priority hierarchy" can be described like so (1 = max priority): -1. Testcase definition section ``Parameters`` -2. Command line arguments (e.g. ``--test-params``, ``--vswitch``, etc.) -3. Environment variables (see ``--load-env`` argument) -4. Custom configuration file specified via ``--conf-file`` argument -5. Standard configuration files, where higher prefix number means higher +1. Testcase definition keywords ``vSwitch``, ``Trafficgen``, ``VNF`` and ``Tunnel Type`` +2. Parameters inside testcase definition section ``Parameters`` +3. Command line arguments (e.g. ``--test-params``, ``--vswitch``, ``--trafficgen``, etc.) +4. Environment variables (see ``--load-env`` argument) +5. Custom configuration file specified via ``--conf-file`` argument +6. Standard configuration files, where higher prefix number means higher priority. For example, if the same configuration parameter is defined in custom configuration diff --git a/testcases/testcase.py b/testcases/testcase.py index 68b8aec4..809e3b34 100644 --- a/testcases/testcase.py +++ b/testcases/testcase.py @@ -38,8 +38,17 @@ from tools import veth from tools.teststepstools import TestStepsTools from tools.llc_management import rmd +# Validation methods required for integration TCs will have following prefix before the name +# of original method. CHECK_PREFIX = 'validate_' +# Several parameters can be defined by both TC definition keywords and configuration parameters. +# Following mapping table is used to correctly evaluate priority of testcase configuration, where +# TC definition keywords (i.e. mapping table keys) have higher priority than appropriate TC +# parameters (i.e. mapping table values). TC parameters can be defined within "Parameters" +# section, via CLI parameters or within configuration files. +MAPPING_TC_CFG2CONF = {'vSwitch':'VSWITCH', 'VNF':'VNF', 'Trafficgen':'TRAFFICGEN', 'Tunnel Type':'TUNNEL_TYPE'} + # pylint: disable=too-many-instance-attributes class TestCase(object): """TestCase base class @@ -89,6 +98,12 @@ class TestCase(object): test_params = copy.deepcopy(S.getValue('TEST_PARAMS')) tc_test_params = cfg.get('Parameters', S.getValue('TEST_PARAMS')) test_params = merge_spec(test_params, tc_test_params) + + # ensure that parameters from TC definition have the highest priority, see MAPPING_TC_CFG2CONF + for (cfg_param, param) in MAPPING_TC_CFG2CONF.items(): + if cfg_param in cfg and param in test_params: + del test_params[param] + S.setValue('TEST_PARAMS', test_params) S.check_test_params() -- cgit 1.2.3-korg