Skip to content

Commit 802152a

Browse files
authored
Fix flakey signal handling tests (#10891)
1 parent ab76c5a commit 802152a

File tree

1 file changed

+28
-10
lines changed

1 file changed

+28
-10
lines changed

tests/test_web_runner.py

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,22 +49,40 @@ async def test_site_for_nonfrozen_app(make_runner: _RunnerMaker) -> None:
4949
platform.system() == "Windows", reason="the test is not valid for Windows"
5050
)
5151
async def test_runner_setup_handle_signals(make_runner: _RunnerMaker) -> None:
52-
runner = make_runner(handle_signals=True)
53-
await runner.setup()
54-
assert signal.getsignal(signal.SIGTERM) is not signal.SIG_DFL
55-
await runner.cleanup()
56-
assert signal.getsignal(signal.SIGTERM) is signal.SIG_DFL
52+
# Save the original signal handler
53+
original_handler = signal.getsignal(signal.SIGTERM)
54+
try:
55+
# Set a known state for the signal handler to avoid flaky tests
56+
signal.signal(signal.SIGTERM, signal.SIG_DFL)
57+
58+
runner = make_runner(handle_signals=True)
59+
await runner.setup()
60+
assert signal.getsignal(signal.SIGTERM) is not signal.SIG_DFL
61+
await runner.cleanup()
62+
assert signal.getsignal(signal.SIGTERM) is signal.SIG_DFL
63+
finally:
64+
# Restore original signal handler
65+
signal.signal(signal.SIGTERM, original_handler)
5766

5867

5968
@pytest.mark.skipif(
6069
platform.system() == "Windows", reason="the test is not valid for Windows"
6170
)
6271
async def test_runner_setup_without_signal_handling(make_runner: _RunnerMaker) -> None:
63-
runner = make_runner(handle_signals=False)
64-
await runner.setup()
65-
assert signal.getsignal(signal.SIGTERM) is signal.SIG_DFL
66-
await runner.cleanup()
67-
assert signal.getsignal(signal.SIGTERM) is signal.SIG_DFL
72+
# Save the original signal handler
73+
original_handler = signal.getsignal(signal.SIGTERM)
74+
try:
75+
# Set a known state for the signal handler to avoid flaky tests
76+
signal.signal(signal.SIGTERM, signal.SIG_DFL)
77+
78+
runner = make_runner(handle_signals=False)
79+
await runner.setup()
80+
assert signal.getsignal(signal.SIGTERM) is signal.SIG_DFL
81+
await runner.cleanup()
82+
assert signal.getsignal(signal.SIGTERM) is signal.SIG_DFL
83+
finally:
84+
# Restore original signal handler
85+
signal.signal(signal.SIGTERM, original_handler)
6886

6987

7088
async def test_site_double_added(make_runner: _RunnerMaker) -> None:

0 commit comments

Comments
 (0)