File: test_timeout_decorator.py

package info (click to toggle)
timeout-decorator 0.5.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 148 kB
  • sloc: python: 211; sh: 8; makefile: 3
file content (121 lines) | stat: -rw-r--r-- 2,797 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
"""Timeout decorator tests."""
import time

import pytest

from timeout_decorator import timeout, TimeoutError


@pytest.fixture(params=[False, True])
def use_signals(request):
    """Use signals for timing out or not."""
    return request.param


def test_timeout_decorator_arg(use_signals):
    @timeout(1, use_signals=use_signals)
    def f():
        time.sleep(2)
    with pytest.raises(TimeoutError):
        f()


def test_timeout_class_method(use_signals):
    class c():
        @timeout(1, use_signals=use_signals)
        def f(self):
            time.sleep(2)
    with pytest.raises(TimeoutError):
        c().f()


def test_timeout_kwargs(use_signals):
    @timeout(3, use_signals=use_signals)
    def f():
        time.sleep(2)
    with pytest.raises(TimeoutError):
        f(timeout=1)


def test_timeout_alternate_exception(use_signals):
    @timeout(3, use_signals=use_signals, timeout_exception=StopIteration)
    def f():
        time.sleep(2)
    with pytest.raises(StopIteration):
        f(timeout=1)


def test_timeout_kwargs_with_initial_timeout_none(use_signals):
    @timeout(use_signals=use_signals)
    def f():
        time.sleep(2)
    with pytest.raises(TimeoutError):
        f(timeout=1)


def test_timeout_no_seconds(use_signals):
    @timeout(use_signals=use_signals)
    def f():
        time.sleep(0.1)
    f()


def test_timeout_partial_seconds(use_signals):
    @timeout(0.2, use_signals=use_signals)
    def f():
        time.sleep(0.5)
    with pytest.raises(TimeoutError):
        f()


def test_timeout_ok(use_signals):
    @timeout(seconds=2, use_signals=use_signals)
    def f():
        time.sleep(1)
    f()


def test_function_name(use_signals):
    @timeout(seconds=2, use_signals=use_signals)
    def func_name():
        pass

    assert func_name.__name__ == 'func_name'


def test_timeout_pickle_error():
    """Test that when a pickle error occurs a timeout error is raised."""
    @timeout(seconds=1, use_signals=False)
    def f():
        time.sleep(0.1)

        class Test(object):
            pass
        return Test()
    with pytest.raises(TimeoutError):
        f()


def test_timeout_custom_exception_message():
    @timeout(seconds=1, exception_message="Custom fail message")
    def f():
        time.sleep(2)
    with pytest.raises(TimeoutError, match="Custom fail message"):
        f()


def test_timeout_custom_exception_with_message():
    @timeout(seconds=1, timeout_exception=RuntimeError, exception_message="Custom fail message")
    def f():
        time.sleep(2)
    with pytest.raises(RuntimeError, match="Custom fail message"):
        f()


def test_timeout_default_exception_message():
    @timeout(seconds=1)
    def f():
        time.sleep(2)
    with pytest.raises(TimeoutError, match="Timed Out"):
        f()