Beispiel #1
0
    def test_user_exists(self):
        execute_mock = mock.Mock()
        execute_mock.return_value = Result(status=Status.SUCCESS)

        executor = UserExecutor(host=Localhost(),
                                username=self.username,
                                password=self.password,
                                groups=self.groups,
                                ssh_keys=self.ssh_keys)
        executor.execute_executor = execute_mock
        result = executor.execute()

        execute_mock.assert_has_calls([
            mock.call(
                UserAddExecutor(username=self.username,
                                password=self.password,
                                create_home=self.create_home,
                                shell='/bin/bash',
                                groups=self.groups,
                                **executor.get_base_attributes()))
        ])

        self.assertEqual(
            result, Result(status=Status.SUCCESS, message='User is created!'))
        self.assertEqual(execute_mock.call_count, 1)
Beispiel #2
0
    def test_execute_wrong_password(self, client_mock):
        executor = self.mock_executor(client_mock, (BytesIO(b'output'),) * 3)

        fill_password = Mock()
        fill_password.return_value = Result(Status.FAIL, message='Incorrect linux password!')
        executor.fill_password = fill_password

        result = executor.run_command()
        self.assertEqual(result, Result(Status.FAIL, message='Incorrect linux password!'))
Beispiel #3
0
    def test_all_changed(self):
        executor = get_executor()
        executor.results = [
            Result(Status.CHANGED, message='test1'),
            Result(Status.CHANGED, message='test2')
        ]

        self.assertEqual(executor.result_from_executor('test'),
                         Result(Status.CHANGED, message='test'))
Beispiel #4
0
    def test_all_success(self):
        executor = get_executor()
        executor.results = [
            Result(Status.SUCCESS, message='test1'),
            Result(Status.SUCCESS, message='test2')
        ]

        self.assertEqual(executor.result_from_executor('test'),
                         Result(Status.SUCCESS, message='test'))
Beispiel #5
0
class ExecuteOnHostTest(unittest.TestCase):
    """
    Tests if the output paramiko returns is parsed correctly
    """

    host = Localhost()
    result = Result(Status.SUCCESS)

    def test_execute_success(self):
        executor = self.mock_executor()
        result = executor.execute()

        self.assertEqual(result, self.result)

    def test_throw_exception_on_fail(self):
        self.result = Result(status=Status.FAIL)
        executor = self.mock_executor()

        with self.assertRaises(SingleExecutorFailedException):
            executor.execute(True)

    def mock_executor(self, **kwargs):
        # Set executor
        executor = get_executor(**kwargs)

        # Mock run_command() on executor
        run_command_mock = Mock()
        run_command_mock.return_value = self.result
        executor.run_command = run_command_mock

        return executor

    def setUp(self):
        config.hosts = [self.host]
Beispiel #6
0
    def test_no_linux_password(self, channel):
        executor = get_executor(sudo=True)
        config.linux_password = ''

        host = Host('test.url', 'jessie')
        executor.host = host

        self.assertEqual(executor.fill_password(channel, channel), Result(Status.FAIL, message='Pass linux password with -p or pass passwordless_user on hosts!'))
Beispiel #7
0
    def test_get_register(self):
        result = Result(Status.CHANGED)

        executor = get_executor(register='test')
        executor.host = Localhost()
        executor.result = result
        executor.register_result()

        self.assertEqual(config.get_registered(Localhost(), 'test'), result)
Beispiel #8
0
    def test_host_not_in_config(self):
        config.hosts = []
        executor = get_executor()
        executor.host = self.host

        self.assertEqual(
            executor.not_in_config_hosts(),
            Result(
                Status.SKIPPING,
                message='Host is not in global config or passed as argument'))
Beispiel #9
0
    def test_not_in_config(self):
        config.hosts = []
        host = Host(url='test.com', ssh_user='******')
        executor = get_executor()
        executor.host = host

        self.assertEqual(
            executor.run(),
            Result(
                Status.SKIPPING,
                message='Host is not in global config or passed as argument'))
Beispiel #10
0
    def test_register_result(self):
        executor = get_executor(register='test')
        result = Result(Status.CHANGED, 'test', ['test'])
        host = Localhost()

        executor.host = host
        executor.result = result

        executor.register_result()

        self.assertEqual(config.registry[repr(host)]['test'], result)
Beispiel #11
0
    def test_wrong_password(self, channel):
        executor = get_executor(sudo=True)
        config.linux_password = '******'

        readline = Mock()
        readline.return_value = 'Sorry, try again.'
        channel.readline = readline
        channel.write = Mock()

        host = Host('test.url', 'jessie')
        executor.host = host

        self.assertEqual(executor.fill_password(channel, channel), Result(Status.FAIL, message='Incorrect linux password!'))
Beispiel #12
0
    def test_without_ssh(self):
        execute_mock = mock.Mock()
        execute_mock.return_value = Result(status=Status.CHANGED)

        executor = UserExecutor(host=Localhost(),
                                username=self.username,
                                password=self.password,
                                groups=self.groups)
        executor.execute_executor = execute_mock
        executor.execute()

        execute_mock.assert_has_calls(
            self.user_call(executor) + self.calls_before_ssh_keys(executor) +
            self.calls_after_ssh_keys(executor))
Beispiel #13
0
    def test_run(self):
        # Host and the empty mock
        host = Localhost()
        empty_mock = Mock()

        # Mock the result
        result = Result(Status.SUCCESS)
        result.print_line = empty_mock

        # Mock the execute function
        execute = Mock()
        execute.return_value = result

        # Mock the executor
        executor = CommandExecutor('ls')
        executor.execute = execute

        # Mock thread behaviour
        join = Mock()
        start = Mock()
        executor.start = start
        executor.join = join

        sequence = Sequence(
            hosts=[host],
            executors=[
                executor
            ]
        )

        sequence.print_title = empty_mock

        sequence.run()

        execute.called_with()
        join.called_with()
        start.called_with()
Beispiel #14
0
    def result_from_executor(self, message: str):
        """
        Gets the result for the executors

        Args:
            message (str): Success message that will be shown in the terminal

        Returns:
            Returns a result that is :obj:`Status.CHANGED` or :obj:`Status.SUCCESS`
        """

        is_changed = False

        for result in self.results:
            if result.status == Status.CHANGED and not is_changed:
                is_changed = True

        return Result(Status.CHANGED if is_changed else Status.SUCCESS,
                      message=message)
Beispiel #15
0
    def test_with_everything(self):
        execute_mock = mock.Mock()
        execute_mock.return_value = Result(status=Status.CHANGED)

        executor = UserExecutor(host=Localhost(),
                                username=self.username,
                                password=self.password,
                                groups=self.groups,
                                ssh_keys=self.ssh_keys)
        executor.execute_executor = execute_mock
        executor.execute()

        execute_mock.assert_has_calls(
            self.user_call(executor) + self.calls_before_ssh_keys(executor) + [
                mock.call(
                    CommandExecutor(
                        command=
                        f'printf \'{self.ssh_keys}\' | sudo tee /home/{self.username}/.ssh/authorized_keys > /dev/null',
                        **executor.get_base_attributes()))
            ] + self.calls_after_ssh_keys(executor))
Beispiel #16
0
    def run_executors(self):
        """
        Runs all the executors in an array on every host
        """
        running_threads = []

        for executor in self.executors:
            if not self.has_tags(executor):
                if config.verbose <= 3:
                    self.print_title(executor)

                    Result(Status.SKIPPING, message='Skipping based on tags').to_table()

                continue

            self.print_title(executor)

            hosts = executor.hosts or self.hosts
            for host in hosts:
                executor = deepcopy(executor)
                if isinstance(executor, BaseExecutor):
                    executor.host = host

                    thread = ThreadExecutor(executor)
                    thread.start()

                    running_threads.append(thread)
                else:
                    raise NotBaseExecutorTypeException()

            for running_executor in running_threads:
                result = running_executor.join()

                if result:
                    result.to_table(running_executor.executor.host)

            running_threads = []
Beispiel #17
0
    def test_run(self):
        config.tags = []
        host = Localhost()

        executor = get_executor()
        executor.host = host

        not_in_config_hosts = MagicMock(return_value=False)
        executor.not_in_config_hosts = not_in_config_hosts

        result = Result(status=Status.CHANGED)
        execute = MagicMock(return_value=result)
        executor.execute = execute

        register_result = Mock()
        executor.register_result = register_result

        executor.run()

        self.assertTrue(not_in_config_hosts.called)
        self.assertTrue(execute.called)

        register_result.assert_called_with()
        self.assertEqual(result, executor.result)
Beispiel #18
0
    def test_throw_exception_on_fail(self):
        self.result = Result(status=Status.FAIL)
        executor = self.mock_executor()

        with self.assertRaises(SingleExecutorFailedException):
            executor.execute(True)