scrapy/tests/test_utils_ossignal.py

55 lines
1.4 KiB
Python

from __future__ import annotations
import signal
from typing import TYPE_CHECKING, Any
import pytest
from scrapy.utils.ossignal import install_shutdown_handlers
if TYPE_CHECKING:
from collections.abc import Generator
from types import FrameType
SHUTDOWN_SIGNALS = [
getattr(signal, name)
for name in ("SIGTERM", "SIGINT", "SIGBREAK")
if hasattr(signal, name)
]
@pytest.fixture(autouse=True)
def restore_handlers() -> Generator[None]:
handlers = {sig: signal.getsignal(sig) for sig in SHUTDOWN_SIGNALS}
try:
yield
finally:
for sig, handler in handlers.items():
signal.signal(sig, handler)
def shutdown(signum: int, frame: FrameType | None) -> Any:
pass
def test_install() -> None:
install_shutdown_handlers(shutdown)
for sig in SHUTDOWN_SIGNALS:
assert signal.getsignal(sig) is shutdown
def test_keeps_custom_sigint_handler() -> None:
def custom(signum: int, frame: FrameType | None) -> Any:
pass
signal.signal(signal.SIGINT, custom)
install_shutdown_handlers(shutdown, override_sigint=False)
assert signal.getsignal(signal.SIGINT) is custom
assert signal.getsignal(signal.SIGTERM) is shutdown
def test_overrides_default_sigint_handler() -> None:
signal.signal(signal.SIGINT, signal.default_int_handler)
install_shutdown_handlers(shutdown, override_sigint=False)
assert signal.getsignal(signal.SIGINT) is shutdown