示例#1
0
 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")))
示例#2
0
 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)
示例#3
0
    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"))
示例#4
0
    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())
示例#5
0
    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())
示例#6
0
 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)
示例#7
0
    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)
示例#8
0
    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)
示例#9
0
    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())
示例#10
0
 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())
示例#11
0
 def wrap_validator(config, admin_clients, clients):
     return (fn(config, admin_clients, clients, *args, **kwargs) or
             common_validation.ValidationResult(True))
示例#12
0
 def wrap_validator(config):
     return (Foo.validate(name, {}, config, {})
             or [common_validation.ValidationResult(True)])