def test_validation_result(self): self.assertEqual("validation success", str(validation.ValidationResult(True))) self.assertEqual("my msg", str(validation.ValidationResult(False, "my msg"))) self.assertEqual("---------- Exception in validator ----------\ntb\n", str(validation.ValidationResult(False, "my msg", etype=Exception, etraceback="tb\n")))
def _file_access_ok(filename, mode, param_name, required=True): if not filename: return validation.ValidationResult( not required, "Parameter %s required" % param_name) if not os.access(os.path.expanduser(filename), mode): return validation.ValidationResult( False, "Could not open %(filename)s with mode %(mode)s " "for parameter %(param_name)s" % { "filename": filename, "mode": mode, "param_name": param_name }) return validation.ValidationResult(True)
def test_old_validator_users_error(self): @plugin.from_func() def scenario(): pass scenario._meta_init() validator_func = mock.Mock() validator_func.return_value = common_validation.ValidationResult(False) validator = validation.validator(validator_func) self.assertEqual(scenario, validator("a", "b", "c", d=1)(scenario)) self.assertEqual(1, len(scenario._meta_get("validators"))) vname, args, kwargs = scenario._meta_get("validators")[0] validator_cls = common_validation.Validator.get(vname) validator_inst = validator_cls(*args, **kwargs) fake_admin = fakes.fake_credential() fake_users1 = fakes.fake_credential() fake_users2 = fakes.fake_credential() users = [{"credential": fake_users1}, {"credential": fake_users2}] credentials = {"openstack": {"admin": fake_admin, "users": users}} result = validator_inst.validate(credentials, {}, None, None) self.assertIsInstance(result, common_validation.ValidationResult) self.assertFalse(result.is_valid) fake_users1.clients.assert_called_once_with() fake_users2.clients.assert_called_once_with() validator_func.assert_called_once_with( {}, fake_users1.clients.return_value, mock.ANY, "a", "b", "c", d=1) deployment = validator_func.call_args[0][2] self.assertEqual({"admin": fake_admin, "users": users}, deployment.get_credentials_for("openstack"))
def test__validate_config_syntax__wrong_trigger( self, mock_task_config, mock_hook_validate, mock_trigger_validate, mock_scenario_get, mock_dumps): mock_dumps.return_value = "<JSON>" result = validation.ValidationResult(False, "trigger_error") mock_trigger_validate.return_value = [result] mock_hook_validate.return_value = [] scenario_cls = mock_scenario_get.return_value scenario_cls.get_default_context.return_value = {} mock_task_instance = mock.MagicMock() mock_subtask = mock.MagicMock() hook_conf = {"name": "c", "args": "c_args", "trigger": {"name": "d", "args": "d_args"}} mock_subtask.workloads = [ engine.Workload({"name": "sca"}, 0), engine.Workload({"name": "sca", "hooks": [hook_conf]}, 1), ] mock_task_instance.subtasks = [mock_subtask] eng = engine.TaskEngine(mock.MagicMock(), mock.MagicMock(), mock.Mock()) e = self.assertRaises(exceptions.InvalidTaskConfig, eng._validate_config_syntax, mock_task_instance) self.assertEqual("Input task is invalid!\n\n" "Subtask sca[1] has wrong configuration\n" "Subtask configuration:\n<JSON>\n\n" "Reason(s):\n trigger_error", e.format_message())
def test__validate_config_syntax__wrong_hook( self, mock_task_config, mock_trigger_validate, mock_hook_validate, mock_scenario_get, mock_dumps): mock_dumps.return_value = "<JSON>" mock_trigger_validate.return_value = [] result = validation.ValidationResult(False, "hook_error") mock_hook_validate.return_value = [result] scenario_cls = mock_scenario_get.return_value scenario_cls.get_default_context.return_value = {} mock_task_instance = mock.MagicMock() hook_conf = {"name": "c", "args": "c_args", "trigger": {"name": "d", "args": "d_args"}} mock_task_instance.subtasks = [{"workloads": [ self._make_workload(name="sca"), self._make_workload(name="sca", position=1, hooks=[{"config": hook_conf}]) ]}] eng = engine.TaskEngine(mock.MagicMock(), mock.MagicMock(), mock.Mock()) e = self.assertRaises(exceptions.InvalidTaskConfig, eng._validate_config_syntax, mock_task_instance) self.assertEqual("Input task is invalid!\n\n" "Subtask sca[1] has wrong configuration\n" "Subtask configuration:\n<JSON>\n\n" "Reason(s):\n hook_error", e.format_message())
def _check_component(self, clients): for client_component in self.components: try: getattr(clients, client_component)() except ImportError: msg = ("Client for {0} is not installed. To install it run " "`pip install python-{0}client`").format( client_component) return validation.ValidationResult(False, msg)
def test_valid_command_unreadable_script_file(self, mock__file_access_ok): mock__file_access_ok.return_value = validation.ValidationResult(False) validator = vmtasks.ValidCommandValidator(param_name="p", required=True) command = {"script_file": "foobar", "interpreter": "foo"} result = validator.validate({"args": { "p": command }}, self.credentials, None, None) self.assertFalse(result.is_valid, result.msg)
def test_valid_command_local_path(self, mock__file_access_ok): mock__file_access_ok.return_value = validation.ValidationResult(False) validator = vmtasks.ValidCommandValidator(param_name="p", required=True) command = {"remote_path": "bar", "local_path": "foobar"} result = validator.validate({"args": { "p": command }}, self.credentials, None, None) self.assertFalse(result.is_valid, result.msg) mock__file_access_ok.assert_called_once_with(filename="foobar", mode=os.R_OK, param_name="p", required=True)
def test___validate_workload__wrong_runner( self, mock_scenario_runner_validate, mock_task_config, mock_scenario_get, mock_dumps): mock_dumps.return_value = "<JSON>" result = validation.ValidationResult(False, "There is no such runner") mock_scenario_runner_validate.return_value = [result] scenario_cls = mock_scenario_get.return_value scenario_cls.get_default_context.return_value = {} workload = engine.Workload({"name": "sca", "runner": {"type": "b"}}, 0) eng = engine.TaskEngine(mock.MagicMock(), mock.MagicMock(), mock.Mock()) e = self.assertRaises(exceptions.InvalidTaskConfig, eng._validate_workload, workload) self.assertEqual("Input task is invalid!\n\nSubtask sca[0] has wrong " "configuration\nSubtask configuration:\n" "<JSON>\n\nReason(s):\n" " There is no such runner", e.format_message())
def test__validate_config_syntax__wrong_sla( self, mock_task_config, mock_sla_validate, mock_scenario_get, mock_dumps): mock_dumps.return_value = "<JSON>" result = validation.ValidationResult(False, "sla_error") mock_sla_validate.return_value = [result] scenario_cls = mock_scenario_get.return_value scenario_cls.get_default_context.return_value = {} mock_task_instance = mock.MagicMock() mock_task_instance.subtasks = [{"workloads": [ self._make_workload(name="sca"), self._make_workload(name="sca", position=1, sla={"foo_sla": "sla_conf"}) ]}] eng = engine.TaskEngine(mock.MagicMock(), mock.MagicMock(), mock.Mock()) e = self.assertRaises(exceptions.InvalidTaskConfig, eng._validate_config_syntax, mock_task_instance) self.assertEqual("Input task is invalid!\n\n" "Subtask sca[1] has wrong configuration\n" "Subtask configuration:\n<JSON>\n\n" "Reason(s):\n sla_error", e.format_message())
def wrap_validator(config, admin_clients, clients): return (fn(config, admin_clients, clients, *args, **kwargs) or common_validation.ValidationResult(True))
def wrap_validator(config): return (Foo.validate(name, {}, config, {}) or [common_validation.ValidationResult(True)])