From 4e53f42b48ee83358a5257e2e82c5ddbe738fe8d Mon Sep 17 00:00:00 2001 From: Richard Lundeen Date: Sun, 25 Oct 2026 01:14:39 -0700 Subject: [PATCH 1/3] TEST: Skip POSIX cancellation rollback tests on Windows Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- doc/contributing/4_running_tests.md | 3 +++ tests/unit/infra/test_code_deployment.py | 2 ++ 2 files changed, 5 insertions(+) diff --git a/doc/contributing/4_running_tests.md b/doc/contributing/4_running_tests.md index fdfefc7133..1369fb1d9a 100644 --- a/doc/contributing/4_running_tests.md +++ b/doc/contributing/4_running_tests.md @@ -78,6 +78,9 @@ execution limits remain unchanged. The Bash deployment helper in `test_code_deployment.py` uses the same shared watchdog for subprocess completion. Readiness and rollback tests retain their simulated operation deadlines, polling assertions, and signal exit-code checks. +The two cancellation rollback tests run on Linux and macOS but skip Windows. +They require POSIX signal handling, which is not reliable in Git Bash on Windows. +The other deployment tests still run on Windows. The seeded-converter worker-thread test also uses the shared watchdog for its two-worker barrier. It still requires distinct random generators and identical diff --git a/tests/unit/infra/test_code_deployment.py b/tests/unit/infra/test_code_deployment.py index ba1276ccf4..f97ba18f7d 100644 --- a/tests/unit/infra/test_code_deployment.py +++ b/tests/unit/infra/test_code_deployment.py @@ -1018,6 +1018,7 @@ def _run_cancellation_rollback( sleeps = [int(line.removeprefix("sleep:")) for line in result.stderr.splitlines() if line.startswith("sleep:")] return result, calls, sleeps + @unittest.skipIf(os.name == "nt", "POSIX signal handling is not reliable in Git Bash on Windows") def test_cancellation_keeps_public_access_disabled_until_connection_removal(self) -> None: for signal, exit_code in (("TERM", 143), ("INT", 130)): with self.subTest(signal=signal): @@ -1032,6 +1033,7 @@ def test_cancellation_keeps_public_access_disabled_until_connection_removal(self assert result.stdout.count("Waiting for ACA private endpoint connection removal") == 1 assert sleeps == [15] + @unittest.skipIf(os.name == "nt", "POSIX signal handling is not reliable in Git Bash on Windows") def test_cancellation_rolls_back_only_infrastructure_after_connection_removal(self) -> None: for signal, exit_code in (("TERM", 143), ("INT", 130)): with self.subTest(signal=signal): From a101babfd5205cfa3bdf15178910d0eddfdf4122 Mon Sep 17 00:00:00 2001 From: Richard Lundeen Date: Sun, 25 Oct 2026 01:24:46 -0700 Subject: [PATCH 2/3] DOC: Remove test-specific platform notes Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- doc/contributing/4_running_tests.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/doc/contributing/4_running_tests.md b/doc/contributing/4_running_tests.md index 1369fb1d9a..fdfefc7133 100644 --- a/doc/contributing/4_running_tests.md +++ b/doc/contributing/4_running_tests.md @@ -78,9 +78,6 @@ execution limits remain unchanged. The Bash deployment helper in `test_code_deployment.py` uses the same shared watchdog for subprocess completion. Readiness and rollback tests retain their simulated operation deadlines, polling assertions, and signal exit-code checks. -The two cancellation rollback tests run on Linux and macOS but skip Windows. -They require POSIX signal handling, which is not reliable in Git Bash on Windows. -The other deployment tests still run on Windows. The seeded-converter worker-thread test also uses the shared watchdog for its two-worker barrier. It still requires distinct random generators and identical From 1641c2e556990fec0be6991d4e291df40425a24f Mon Sep 17 00:00:00 2001 From: Richard Lundeen Date: Sun, 25 Oct 2026 01:37:17 -0700 Subject: [PATCH 3/3] TEST: Skip Docker CI signal tests on Windows Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- tests/unit/infra/test_docker_ci.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/unit/infra/test_docker_ci.py b/tests/unit/infra/test_docker_ci.py index 55cf582281..4879643803 100644 --- a/tests/unit/infra/test_docker_ci.py +++ b/tests/unit/infra/test_docker_ci.py @@ -491,7 +491,12 @@ def test_readiness_is_bounded_and_requires_http_200(*, bash_path: str, tmp_path: "frontend-http-failure", "missing-frontend", "diagnostics-failure", - "signal", + pytest.param( + "signal", + marks=pytest.mark.skipif( + os.name == "nt", reason="POSIX signal handling is not reliable in Git Bash on Windows" + ), + ), ], ) def test_smoke_failures_dump_diagnostics_and_remove_container(*, bash_path: str, tmp_path: Path, case: str) -> None: @@ -513,6 +518,7 @@ def test_smoke_failures_dump_diagnostics_and_remove_container(*, bash_path: str, assert result.returncode == 143 +@pytest.mark.skipif(os.name == "nt", reason="POSIX signal handling is not reliable in Git Bash on Windows") @pytest.mark.parametrize("cleanup_stage", ["logs", "rm"]) @pytest.mark.parametrize("cleanup_signal", ["INT", "TERM"]) @pytest.mark.parametrize(