bugfix: Fix evaluation order of parameters 51/57251/1
authorMartin Klozik <martin.klozik@tieto.com>
Fri, 4 May 2018 09:23:09 +0000 (02:23 -0700)
committerMartin Klozik <martin.klozik@tieto.com>
Thu, 10 May 2018 08:17:11 +0000 (01:17 -0700)
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 <martin.klozik@tieto.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: Richard Elias <richard.elias@tieto.com>
docs/testing/user/userguide/testusage.rst
testcases/testcase.py

index 7884324..c7cc148 100644 (file)
@@ -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
index 68b8aec..809e3b3 100644 (file)
@@ -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()