Beispiel #1
0
    def test_execution_limit_in_threads(self):
        """Test two threads with different timeouts same time."""

        # pydocstyle: ignore # conflict with black # noqa: E800
        def make_test_function(slow_function_time, timeout):
            assert timeout < slow_function_time

            with timeit_context() as timeit_result:
                with pytest.raises(TimeoutException):
                    with self.EXEC_TIMEOUT_CLASS(timeout) as exec_limit:
                        self.slow_function(slow_function_time)

            assert exec_limit.is_cancelled_by_timeout()
            assert (timeit_result.time_passed >= timeout
                    and timeit_result.time_passed < slow_function_time)

        t1_sleep, t1_timeout = 1, 0.6
        t2_sleep, t2_timeout = 0.45, 0.1

        t1 = Thread(target=partial(make_test_function, t1_sleep, t1_timeout))
        t2 = Thread(target=partial(make_test_function, t2_sleep, t2_timeout))

        with timeit_context() as time_t1:
            t1.start()
            with timeit_context() as time_t2:
                t2.start()
                t2.join()
            t1.join()

        assert t2_timeout <= time_t2.time_passed <= t2_sleep
        assert t1_timeout <= time_t1.time_passed < t1_sleep
Beispiel #2
0
    def _measure(
        self, process: multiprocessing.Process
    ) -> Tuple[float, List[ResourceStats], bool]:
        """
        Measure resources consumed by the process.

        :param process: process to measure resource consumption

        :return: time used, list of resource stats, was killed
        """
        started_time = time.time()
        is_killed = False
        proc_info = psutil.Process(process.pid)
        stats = []

        with timeit_context() as timeit:
            while process.is_alive():
                if time.time() - started_time > self.timeout:
                    is_killed = True
                    break
                stats.append(self._get_stats_record(proc_info))

                time.sleep(self.period)

        if is_killed:
            process.terminate()

        process.join()
        time_usage = timeit.time_passed

        return time_usage, stats, is_killed
Beispiel #3
0
        def make_test_function(slow_function_time, timeout):
            assert timeout < slow_function_time

            with timeit_context() as timeit_result:
                with pytest.raises(TimeoutException):
                    with self.EXEC_TIMEOUT_CLASS(timeout) as exec_limit:
                        self.slow_function(slow_function_time)

            assert exec_limit.is_cancelled_by_timeout()
            assert (timeit_result.time_passed >= timeout
                    and timeit_result.time_passed < slow_function_time)
Beispiel #4
0
    def test_limit_is_0_do_not_limit_execution(self):
        """Test function will not be interrupted cause timeout is 0 or None."""
        slow_function_time = 0.1
        timeout = 0
        assert timeout < slow_function_time

        with timeit_context() as timeit_result:
            with self.EXEC_TIMEOUT_CLASS(timeout) as exec_timeout:
                self.slow_function(slow_function_time)

            assert not exec_timeout.is_cancelled_by_timeout()

        assert timeit_result.time_passed >= slow_function_time
Beispiel #5
0
    def test_timeout_bigger_than_execution_time(self):
        """Test function interrupted by timeout."""
        slow_function_time = 0.1
        timeout = 1

        assert timeout > slow_function_time

        with timeit_context() as timeit_result:
            with self.EXEC_TIMEOUT_CLASS(timeout) as exec_timeout:
                self.slow_function(slow_function_time)

            assert not exec_timeout.is_cancelled_by_timeout()

        assert (timeit_result.time_passed <= timeout
                and timeit_result.time_passed >= slow_function_time)
Beispiel #6
0
    def test_cancel_by_timeout(self):
        """Test function interrupted by timeout."""
        slow_function_time = 0.4
        timeout = 0.1

        assert timeout < slow_function_time

        with timeit_context() as timeit_result:
            with pytest.raises(TimeoutException):
                with self.EXEC_TIMEOUT_CLASS(timeout) as exec_timeout:
                    self.slow_function(slow_function_time)

            assert exec_timeout.is_cancelled_by_timeout()

        assert (timeit_result.time_passed >= timeout
                and timeit_result.time_passed < slow_function_time)
Beispiel #7
0
    def test_no_timeout(self):
        """Test function NOT terminated by timeout cause timeout == 0."""
        num_sleeps = 1
        sleep_time = self.BASE_TIMEOUT
        function_sleep_time = num_sleeps * sleep_time
        execution_timeout = 0

        self.prepare(lambda: sleep_a_bit(sleep_time, num_sleeps))
        self.aea_tool.set_execution_timeout(execution_timeout)
        self.aea_tool.setup()

        with timeit_context() as timeit:
            self.aea_action()

        assert function_sleep_time <= timeit.time_passed
        assert self.function_finished
Beispiel #8
0
    def test_long_handler_cancelled_by_timeout(self):
        """Test long function terminated by timeout."""
        num_sleeps = 10
        sleep_time = self.BASE_TIMEOUT
        function_sleep_time = num_sleeps * sleep_time
        execution_timeout = self.BASE_TIMEOUT * 2
        assert execution_timeout < function_sleep_time

        self.prepare(lambda: sleep_a_bit(sleep_time, num_sleeps))
        self.aea_tool.set_execution_timeout(execution_timeout)

        with timeit_context() as timeit:
            self.aea_action()

        assert execution_timeout <= timeit.time_passed <= function_sleep_time
        assert not self.function_finished
Beispiel #9
0
    def test_short_handler_not_cancelled_by_timeout(self):
        """Test short function NOT terminated by timeout."""
        num_sleeps = 1
        sleep_time = self.BASE_TIMEOUT
        function_sleep_time = num_sleeps * sleep_time
        execution_timeout = self.BASE_TIMEOUT * 2

        assert function_sleep_time <= execution_timeout

        self.prepare(lambda: sleep_a_bit(sleep_time, num_sleeps))
        self.aea_tool.set_execution_timeout(execution_timeout)
        self.aea_tool.setup()

        with timeit_context() as timeit:
            self.aea_action()

        assert function_sleep_time <= timeit.time_passed <= execution_timeout
        assert self.function_finished