summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkubi <jean.gaoliang@huawei.com>2016-02-05 08:48:00 +0000
committerJörgen Karlsson <jorgen.w.karlsson@ericsson.com>2016-02-08 11:29:41 +0000
commitcde3f7882cc21af95a844f9c7b19795af84741d4 (patch)
tree00e838aaa7fea414e9fed6347aa83f2cca2c41d8
parent4be7c4c3960e941ce6fad82acd4572a5b96fb5c4 (diff)
add precondition check
as we discussed yersterday, for daily jenkins task, i have a new idea, i add a precondition check and a key parameter in test case, if environment info(eg. "DEPLOY_SCENARIO") meet the preconditon which was defined in test case , this test case will run, if not meet, this test case will skip. and default is allow all test case to run, so this patch will not influence existing test case. any comments are welcomed Change-Id: I4300ac58994d51c0ddb4dd6d58b7191f796ddcee Signed-off-by: kubi <jean.gaoliang@huawei.com> (cherry picked from commit ff5cb9501b155e07fe75f03062217270b9745131)
-rw-r--r--tests/opnfv/test_cases/opnfv_yardstick_tc027.yaml3
-rw-r--r--tests/unit/cmd/commands/test_task.py14
-rw-r--r--yardstick/cmd/commands/task.py33
3 files changed, 46 insertions, 4 deletions
diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc027.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc027.yaml
index e360b4bd0..cf3afc866 100644
--- a/tests/opnfv/test_cases/opnfv_yardstick_tc027.yaml
+++ b/tests/opnfv/test_cases/opnfv_yardstick_tc027.yaml
@@ -24,6 +24,9 @@ scenarios:
max_rtt: 30
action: monitor
+precondition:
+ installer_type: compass
+ deploy_scenarios: os-nosdn
context:
type: Node
diff --git a/tests/unit/cmd/commands/test_task.py b/tests/unit/cmd/commands/test_task.py
index e785e99a9..5b404c48d 100644
--- a/tests/unit/cmd/commands/test_task.py
+++ b/tests/unit/cmd/commands/test_task.py
@@ -56,3 +56,17 @@ class TaskCommandsTestCase(unittest.TestCase):
mock_base_runner.Runner.get.return_value = runner
t._run([scenario], False, "yardstick.out")
self.assertTrue(runner.run.called)
+
+ @mock.patch('yardstick.cmd.commands.task.os')
+ def test_check_precondition(self, mock_os):
+ cfg = \
+ {'precondition':
+ {'installer_type': 'compass',
+ 'deploy_scenarios': 'os-nosdn'
+ }
+ }
+
+ t = task.TaskParser('/opt')
+ mock_os.environ.get.side_effect = ['compass', 'os-nosdn']
+ result = t._check_precondition(cfg)
+ self.assertTrue(result)
diff --git a/yardstick/cmd/commands/task.py b/yardstick/cmd/commands/task.py
index 17e8f4c42..55898e1cb 100644
--- a/yardstick/cmd/commands/task.py
+++ b/yardstick/cmd/commands/task.py
@@ -84,9 +84,13 @@ class TaskCommands(object):
one_task_start_time = time.time()
parser.path = task_files[i]
task_name = os.path.splitext(os.path.basename(task_files[i]))[0]
- scenarios, run_in_parallel = parser.parse_task(task_name,
- task_args[i],
- task_args_fnames[i])
+ scenarios, run_in_parallel, meet_precondition = parser.parse_task(
+ task_name, task_args[i], task_args_fnames[i])
+
+ if not meet_precondition:
+ LOG.info("meet_precondition is %s, please check envrionment",
+ meet_precondition)
+ continue
self._run(scenarios, run_in_parallel, args.output_file)
@@ -232,6 +236,7 @@ class TaskParser(object):
sys.exit(ioerror)
self._check_schema(cfg["schema"], "task")
+ meet_precondition = self._check_precondition(cfg)
# TODO: support one or many contexts? Many would simpler and precise
# TODO: support hybrid context type
@@ -261,7 +266,7 @@ class TaskParser(object):
scenario["task_id"] = task_id
# TODO we need something better here, a class that represent the file
- return cfg["scenarios"], run_in_parallel
+ return cfg["scenarios"], run_in_parallel, meet_precondition
def _check_schema(self, cfg_schema, schema_type):
'''Check if config file is using the correct schema type'''
@@ -270,6 +275,26 @@ class TaskParser(object):
sys.exit("error: file %s has unknown schema %s" % (self.path,
cfg_schema))
+ def _check_precondition(self, cfg):
+ '''Check if the envrionment meet the preconditon'''
+
+ if "precondition" in cfg:
+ precondition = cfg["precondition"]
+ installer_type = precondition.get("installer_type", None)
+ deploy_scenarios = precondition.get("deploy_scenarios", None)
+ installer_type_env = os.environ.get('INSTALL_TYPE', None)
+ deploy_scenario_env = os.environ.get('DEPLOY_SCENARIO', None)
+ if installer_type and installer_type_env:
+ if installer_type_env not in installer_type:
+ return False
+ if deploy_scenarios and deploy_scenario_env:
+ deploy_scenarios_list = deploy_scenarios.split(',')
+ for deploy_scenario in deploy_scenarios_list:
+ if deploy_scenario_env.startswith(deploy_scenario):
+ return True
+ return False
+ return True
+
def atexit_handler():
'''handler for process termination'''