Exemplo n.º 1
0
    def test_watchdog_1(self, kill_process_with_children_mock):
        """
    Tests whether watchdog works
    """
        subproc_mock = self.Subprocess_mockup()
        executor = PythonExecutor("/tmp", AmbariConfig().getConfig())
        _, tmpoutfile = tempfile.mkstemp()
        _, tmperrfile = tempfile.mkstemp()
        _, tmpstrucout = tempfile.mkstemp()
        PYTHON_TIMEOUT_SECONDS = 0.1
        kill_process_with_children_mock.side_effect = lambda pid: subproc_mock.terminate(
        )

        def launch_python_subprocess_method(command, tmpout, tmperr):
            subproc_mock.tmpout = tmpout
            subproc_mock.tmperr = tmperr
            return subproc_mock

        executor.launch_python_subprocess = launch_python_subprocess_method
        runShellKillPgrp_method = MagicMock()
        runShellKillPgrp_method.side_effect = lambda python: python.terminate()
        executor.runShellKillPgrp = runShellKillPgrp_method
        subproc_mock.returncode = None
        callback_method = MagicMock()
        thread = Thread(target=executor.run_file,
                        args=("fake_puppetFile", ["arg1", "arg2"], tmpoutfile,
                              tmperrfile, PYTHON_TIMEOUT_SECONDS, tmpstrucout,
                              callback_method, '1'))
        thread.start()
        time.sleep(0.1)
        subproc_mock.finished_event.wait()
        self.assertEquals(subproc_mock.was_terminated, True,
                          "Subprocess should be terminated due to timeout")
        self.assertTrue(callback_method.called)
Exemplo n.º 2
0
    def test_watchdog_2(self):
        """
    Tries to catch false positive watchdog invocations
    """
        subproc_mock = self.Subprocess_mockup()
        executor = PythonExecutor("/tmp", AmbariConfig().getConfig())
        _, tmpoutfile = tempfile.mkstemp()
        _, tmperrfile = tempfile.mkstemp()
        _, tmpstrucout = tempfile.mkstemp()
        PYTHON_TIMEOUT_SECONDS = 5

        def launch_python_subprocess_method(command, tmpout, tmperr):
            subproc_mock.tmpout = tmpout
            subproc_mock.tmperr = tmperr
            return subproc_mock

        executor.launch_python_subprocess = launch_python_subprocess_method
        runShellKillPgrp_method = MagicMock()
        runShellKillPgrp_method.side_effect = lambda python: python.terminate()
        executor.runShellKillPgrp = runShellKillPgrp_method
        subproc_mock.returncode = 0
        callback_method = MagicMock()
        thread = Thread(target=executor.run_file,
                        args=("fake_puppetFile", ["arg1", "arg2"], tmpoutfile,
                              tmperrfile, PYTHON_TIMEOUT_SECONDS, tmpstrucout,
                              callback_method, "1-1"))
        thread.start()
        time.sleep(0.1)
        subproc_mock.should_finish_event.set()
        subproc_mock.finished_event.wait()
        self.assertEquals(
            subproc_mock.was_terminated, False,
            "Subprocess should not be terminated before timeout")
        self.assertEquals(
            subproc_mock.returncode, 0,
            "Subprocess should not be terminated before timeout")
        self.assertTrue(callback_method.called)
Exemplo n.º 3
0
    def test_execution_results(self):
        subproc_mock = self.Subprocess_mockup()
        executor = PythonExecutor("/tmp", AmbariConfig().getConfig())
        _, tmpoutfile = tempfile.mkstemp()
        _, tmperrfile = tempfile.mkstemp()

        tmp_file = tempfile.NamedTemporaryFile(
        )  # the structured out file should be preserved across calls to the hooks and script.
        tmpstructuredoutfile = tmp_file.name
        tmp_file.close()

        PYTHON_TIMEOUT_SECONDS = 5

        def launch_python_subprocess_method(command, tmpout, tmperr):
            subproc_mock.tmpout = tmpout
            subproc_mock.tmperr = tmperr
            return subproc_mock

        executor.launch_python_subprocess = launch_python_subprocess_method
        runShellKillPgrp_method = MagicMock()
        runShellKillPgrp_method.side_effect = lambda python: python.terminate()
        executor.runShellKillPgrp = runShellKillPgrp_method
        subproc_mock.returncode = 0
        subproc_mock.should_finish_event.set()
        callback_method = MagicMock()
        result = executor.run_file("file", ["arg1", "arg2"], tmpoutfile,
                                   tmperrfile, PYTHON_TIMEOUT_SECONDS,
                                   tmpstructuredoutfile, callback_method,
                                   "1-1")
        self.assertEquals(result, {
            'exitcode': 0,
            'stderr': '',
            'stdout': '',
            'structuredOut': {}
        })
        self.assertTrue(callback_method.called)