Skip to content

Commit d4eaf55

Browse files
authored
[PR #10891/802152a backport][3.12] Fix flakey signal handling tests (#10896)
1 parent ad7ee7c commit d4eaf55

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
@@ -41,22 +41,40 @@ async def test_site_for_nonfrozen_app(make_runner: Any) -> None:
4141
platform.system() == "Windows", reason="the test is not valid for Windows"
4242
)
4343
async def test_runner_setup_handle_signals(make_runner: Any) -> None:
44-
runner = make_runner(handle_signals=True)
45-
await runner.setup()
46-
assert signal.getsignal(signal.SIGTERM) is not signal.SIG_DFL
47-
await runner.cleanup()
48-
assert signal.getsignal(signal.SIGTERM) is signal.SIG_DFL
44+
# Save the original signal handler
45+
original_handler = signal.getsignal(signal.SIGTERM)
46+
try:
47+
# Set a known state for the signal handler to avoid flaky tests
48+
signal.signal(signal.SIGTERM, signal.SIG_DFL)
49+
50+
runner = make_runner(handle_signals=True)
51+
await runner.setup()
52+
assert signal.getsignal(signal.SIGTERM) is not signal.SIG_DFL
53+
await runner.cleanup()
54+
assert signal.getsignal(signal.SIGTERM) is signal.SIG_DFL
55+
finally:
56+
# Restore original signal handler
57+
signal.signal(signal.SIGTERM, original_handler)
4958

5059

5160
@pytest.mark.skipif(
5261
platform.system() == "Windows", reason="the test is not valid for Windows"
5362
)
5463
async def test_runner_setup_without_signal_handling(make_runner: Any) -> None:
55-
runner = make_runner(handle_signals=False)
56-
await runner.setup()
57-
assert signal.getsignal(signal.SIGTERM) is signal.SIG_DFL
58-
await runner.cleanup()
59-
assert signal.getsignal(signal.SIGTERM) is signal.SIG_DFL
64+
# Save the original signal handler
65+
original_handler = signal.getsignal(signal.SIGTERM)
66+
try:
67+
# Set a known state for the signal handler to avoid flaky tests
68+
signal.signal(signal.SIGTERM, signal.SIG_DFL)
69+
70+
runner = make_runner(handle_signals=False)
71+
await runner.setup()
72+
assert signal.getsignal(signal.SIGTERM) is signal.SIG_DFL
73+
await runner.cleanup()
74+
assert signal.getsignal(signal.SIGTERM) is signal.SIG_DFL
75+
finally:
76+
# Restore original signal handler
77+
signal.signal(signal.SIGTERM, original_handler)
6078

6179

6280
async def test_site_double_added(make_runner: Any) -> None:

0 commit comments

Comments
 (0)