summaryrefslogtreecommitdiff
path: root/tests/util/test_signal.py
blob: 6b2640fb4c0009b0e3da31c13ee926cc914a3910 (plain)
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
import logging
import os
import sys
from threading import Thread
from time import sleep

import pytest

from tox.execute.local_sub_process import SIG_INTERRUPT
from tox.pytest import LogCaptureFixture
from tox.util.signal import DelayedSignal


@pytest.mark.skipif(sys.platform == "win32", reason="You need a conhost shell for keyboard interrupt")
def test_signal_delayed(caplog: LogCaptureFixture) -> None:
    caplog.set_level(level=logging.DEBUG)
    with pytest.raises(KeyboardInterrupt):
        with DelayedSignal() as handler:
            try:
                os.kill(os.getpid(), SIG_INTERRUPT)
                while True:
                    sleep(0.05)
                    if handler._signal is not None:  # pragma: no branch
                        break
            except KeyboardInterrupt:  # pragma: no cover
                assert False  # pragma: no cover
    assert caplog.messages == [
        "Received 2, delaying it",
        "Handling delayed 2",
    ]


def test_signal_no_op_background(caplog: LogCaptureFixture) -> None:
    caplog.set_level(level=logging.DEBUG)

    def _run() -> None:
        with DelayedSignal():
            pass

    thread = Thread(target=_run)
    thread.start()
    thread.join()
    assert caplog.messages == []