def _validate_config_semantic_helper(self, admin, user, workload, pos, deployment): try: scenario.Scenario.validate( workload.name, workload.to_dict(), admin=admin, users=[user], deployment=deployment) except exceptions.InvalidScenarioArgument as e: kw = workload.make_exception_args(pos, six.text_type(e)) raise exceptions.InvalidTaskConfig(**kw)
def _validate_config_syntax(self, config): for subtask in config.subtasks: for pos, workload in enumerate(subtask.workloads): try: runner.ScenarioRunner.validate(workload.runner) context.ContextManager.validate(workload.context, non_hidden=True) sla.SLA.validate(workload.sla) except (exceptions.RallyException, jsonschema.ValidationError) as e: kw = workload.make_exception_args(pos, six.text_type(e)) raise exceptions.InvalidTaskConfig(**kw)
def _validate_config_semantic_helper(self, admin, user_context, workloads, deployment): with user_context as ctx: ctx.setup() for workload in workloads: try: scenario_cls = scenario.Scenario.get(workload.name) scenario_cls.validate(workload.name, workload.to_dict(), admin=admin, users=ctx.context["users"], deployment=deployment) except exceptions.InvalidScenarioArgument as e: kw = workload.make_exception_args(six.text_type(e)) raise exceptions.InvalidTaskConfig(**kw)
def _validate_config_semantic_helper(self, admin, user, name, pos, deployment, kwargs): try: scenario.Scenario.validate(name, kwargs, admin=admin, users=[user], deployment=deployment) except exceptions.InvalidScenarioArgument as e: kw = { "name": name, "pos": pos, "config": kwargs, "reason": six.text_type(e) } raise exceptions.InvalidTaskConfig(**kw)
def test_validate__wrong_syntax(self): task = mock.MagicMock() eng = engine.TaskEngine(mock.MagicMock(), task, mock.Mock()) e = exceptions.InvalidTaskConfig(name="foo", pos=0, config="", reason="foo") eng._validate_config_syntax = mock.MagicMock(side_effect=e) eng._validate_config_platforms = mock.Mock() actual_e = self.assertRaises(exceptions.InvalidTaskException, eng.validate) self.assertEqual(e, actual_e) self.assertTrue(task.set_failed.called) # the next validation step should not be processed self.assertFalse(eng._validate_config_platforms.called)
def _validate_config_syntax(self, config): for subtask in config.subtasks: for pos, scenario_obj in enumerate(subtask.scenarios): try: runner.ScenarioRunner.validate( scenario_obj.get("runner", {})) context.ContextManager.validate(scenario_obj.get( "context", {}), non_hidden=True) sla.SLA.validate(scenario_obj.get("sla", {})) except (exceptions.RallyException, jsonschema.ValidationError) as e: raise exceptions.InvalidTaskConfig( name=scenario_obj["name"], pos=pos, config=scenario_obj, reason=six.text_type(e))
def _validate_config_syntax(self, config): for subtask in config.subtasks: for workload in subtask.workloads: scenario_cls = scenario.Scenario.get(workload.name) scenario_context = copy.deepcopy( scenario_cls.get_default_context()) try: runner.ScenarioRunner.validate(workload.runner) context.ContextManager.validate(workload.context) context.ContextManager.validate(scenario_context, allow_hidden=True) sla.SLA.validate(workload.sla) for hook_conf in workload.hooks: hook.Hook.validate(hook_conf) except (exceptions.RallyException, jsonschema.ValidationError) as e: kw = workload.make_exception_args(six.text_type(e)) raise exceptions.InvalidTaskConfig(**kw)
def test_validate__wrong_semantic(self): task = mock.MagicMock() eng = engine.TaskEngine(mock.MagicMock(), task, mock.Mock()) e = exceptions.InvalidTaskConfig(name="foo", pos=0, config="", reason="foo") eng._validate_config_syntax = mock.MagicMock() eng._validate_config_platforms = mock.MagicMock() eng._validate_config_semantic = mock.MagicMock(side_effect=e) actual_e = self.assertRaises(exceptions.InvalidTaskException, eng.validate) self.assertEqual(e, actual_e) self.assertTrue(task.set_failed.called) # all steps of validation are called, which means that the last one is # failed self.assertTrue(eng._validate_config_syntax) self.assertTrue(eng._validate_config_platforms) self.assertTrue(eng._validate_config_semantic)
def _validate_workload(self, workload, vcontext=None, vtype=None): """Validate a workload. :param workload: a workload configuration :param vcontext: a validation context :param vtype: a type of validation (platform, syntax or semantic) """ scenario_cls = scenario.Scenario.get(workload["name"]) scenario_context = copy.deepcopy(scenario_cls.get_default_context()) results = [] results.extend(scenario.Scenario.validate( name=workload["name"], context=vcontext, config=workload, plugin_cfg=None, vtype=vtype)) if workload["runner_type"]: results.extend(runner.ScenarioRunner.validate( name=workload["runner_type"], context=vcontext, config=None, plugin_cfg=workload["runner"], vtype=vtype)) for context_name, context_conf in workload["contexts"].items(): results.extend(context.Context.validate( name=context_name, context=vcontext, config=None, plugin_cfg=context_conf, vtype=vtype)) for context_name, context_conf in scenario_context.items(): results.extend(context.Context.validate( name=context_name, context=vcontext, config=None, plugin_cfg=context_conf, allow_hidden=True, vtype=vtype)) for sla_name, sla_conf in workload["sla"].items(): results.extend(sla.SLA.validate( name=sla_name, context=vcontext, config=None, plugin_cfg=sla_conf, vtype=vtype)) for hook_conf in workload["hooks"]: action_name, action_cfg = hook_conf["action"] results.extend(hook.HookAction.validate( name=action_name, context=vcontext, config=None, plugin_cfg=action_cfg, vtype=vtype)) trigger_name, trigger_cfg = hook_conf["trigger"] results.extend(hook.HookTrigger.validate( name=trigger_name, context=vcontext, config=None, plugin_cfg=trigger_cfg, vtype=vtype)) if results: msg = "\n ".join(results) kw = {"name": workload["name"], "pos": workload["position"], "config": json.dumps( objects.Workload.to_task(workload)), "reason": msg} raise exceptions.InvalidTaskConfig(**kw)
def _validate_workload(self, workload, credentials=None, vtype=None): scenario_cls = scenario.Scenario.get(workload["name"]) namespace = scenario_cls.get_platform() scenario_context = copy.deepcopy(scenario_cls.get_default_context()) results = [] results.extend( scenario.Scenario.validate(name=workload["name"], credentials=credentials, config=workload, plugin_cfg=None, vtype=vtype)) if workload["runner"]: results.extend( runner.ScenarioRunner.validate(name=workload["runner"]["type"], credentials=credentials, config=None, plugin_cfg=workload["runner"], namespace=namespace, vtype=vtype)) for context_name, context_conf in workload["context"].items(): results.extend( context.Context.validate(name=context_name, credentials=credentials, config=None, plugin_cfg=context_conf, namespace=namespace, vtype=vtype)) for context_name, context_conf in scenario_context.items(): results.extend( context.Context.validate(name=context_name, credentials=credentials, config=None, plugin_cfg=context_conf, namespace=namespace, allow_hidden=True, vtype=vtype)) for sla_name, sla_conf in workload["sla"].items(): results.extend( sla.SLA.validate(name=sla_name, credentials=credentials, config=None, plugin_cfg=sla_conf, vtype=vtype)) for hook_conf in workload["hooks"]: results.extend( hook.Hook.validate(name=hook_conf["config"]["name"], credentials=credentials, config=None, plugin_cfg=hook_conf["config"]["args"], vtype=vtype)) trigger_conf = hook_conf["config"]["trigger"] results.extend( trigger.Trigger.validate(name=trigger_conf["name"], credentials=credentials, config=None, plugin_cfg=trigger_conf["args"], vtype=vtype)) if results: msg = "\n ".join([str(r) for r in results]) kw = { "name": workload["name"], "pos": workload["position"], "config": json.dumps(objects.Workload.to_task(workload)), "reason": msg } raise exceptions.InvalidTaskConfig(**kw)
def _validate_workload(self, workload, credentials=None, vtype=None): scenario_cls = scenario.Scenario.get(workload.name) namespace = scenario_cls.get_namespace() scenario_context = copy.deepcopy(scenario_cls.get_default_context()) results = [] results.extend( scenario.Scenario.validate(name=workload.name, credentials=credentials, config=workload.to_dict(), plugin_cfg=None, vtype=vtype)) if workload.runner: results.extend( runner.ScenarioRunner.validate(name=workload.runner["type"], credentials=credentials, config=None, plugin_cfg=workload.runner, namespace=namespace, vtype=vtype)) for context_name, context_conf in workload.context.items(): results.extend( context.Context.validate(name=context_name, credentials=credentials, config=None, plugin_cfg=context_conf, namespace=namespace, vtype=vtype)) for context_name, context_conf in scenario_context.items(): results.extend( context.Context.validate(name=context_name, credentials=credentials, config=None, plugin_cfg=context_conf, namespace=namespace, allow_hidden=True, vtype=vtype)) for sla_name, sla_conf in workload.sla.items(): results.extend( sla.SLA.validate(name=sla_name, credentials=credentials, config=None, plugin_cfg=sla_conf, vtype=vtype)) for hook_conf in workload.hooks: results.extend( hook.Hook.validate(name=hook_conf["name"], credentials=credentials, config=None, plugin_cfg=hook_conf["args"], vtype=vtype)) trigger_conf = hook_conf["trigger"] results.extend( trigger.Trigger.validate(name=trigger_conf["name"], credentials=credentials, config=None, plugin_cfg=trigger_conf["args"], vtype=vtype)) if results: msg = "\n ".join([str(r) for r in results]) kw = workload.make_exception_args(msg) raise exceptions.InvalidTaskConfig(**kw)