From 31531e29f43299260f95ab0c8a8e8268aecbbe12 Mon Sep 17 00:00:00 2001 From: goodboy Date: Mon, 15 Jun 2026 20:04:25 -0400 Subject: [PATCH] Wall-cap `subint` audit tests via `pytest-timeout` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a hard process-level wall-clock bound on the two known-hanging subint-backend tests so an unattended suite run can't wedge indefinitely in either of the hang classes doc'd in `ai/conc-anal/`. Deats, - New `testing` dep: `pytest-timeout>=2.3`. - `test_stale_entry_is_deleted`: `@pytest.mark.timeout(3, method='thread')`. The `method='thread'` choice is deliberate — `method='signal'` routes via `SIGALRM` which is starved by the same GIL-hostage path that drops `SIGINT` (see `subint_sigint_starvation_issue.md`), so it'd never actually fire in the starvation case. - `test_subint_non_checkpointing_child`: same decorator, same reasoning (defense-in-depth over the inner `trio.fail_after(15)`). At timeout, `pytest-timeout` hard-kills the pytest process itself — that's the intended behavior here; the alternative is the suite never returning. (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code (cherry picked from commit 189f4e3ffc1aad8203b91a59522f923ab3ec3fe4) (MTF-only portion: kept tests/test_subint_cancellation.py) --- tests/test_subint_cancellation.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/test_subint_cancellation.py b/tests/test_subint_cancellation.py index 04b6cc9e..18cbf78b 100644 --- a/tests/test_subint_cancellation.py +++ b/tests/test_subint_cancellation.py @@ -161,6 +161,20 @@ def test_subint_happy_teardown( trio.run(partial(_happy_path, reg_addr, deadline)) +# Wall-clock bound via `pytest-timeout` (`method='thread'`) +# as defense-in-depth over the inner `trio.fail_after(15)`. +# Under the orphaned-channel hang class described in +# `ai/conc-anal/subint_cancel_delivery_hang_issue.md`, SIGINT +# is still deliverable and this test *should* be unwedgeable +# by the inner trio timeout — but sibling subint-backend +# tests in this repo have also exhibited the +# `subint_sigint_starvation_issue.md` GIL-starvation flavor, +# so `method='thread'` keeps us safe in case ordering or +# load shifts the failure mode. +@pytest.mark.timeout( + 3, # NOTE never passes pre-3.14+ subints support. + method='thread', +) def test_subint_non_checkpointing_child( reg_addr: tuple[str, int|str], ) -> None: