diff --git a/client/tests/polling/test_coordinator.py b/client/tests/polling/test_coordinator.py index 1ea876d..aaa59b2 100644 --- a/client/tests/polling/test_coordinator.py +++ b/client/tests/polling/test_coordinator.py @@ -106,12 +106,15 @@ class FakeGateway: def __init__(self, outcomes: list[object] | None = None, gate: threading.Event | None = None) -> None: self.outcomes = list(outcomes or [None]) self.gate = gate + self.entered = threading.Event() self.calls = 0 def claim_next(self, profile_id: str): self.calls += 1 + self.entered.set() if self.gate is not None: - self.gate.wait(2) + if not self.gate.wait(5): + raise RuntimeError("test_gateway_release_timeout") outcome = self.outcomes.pop(0) if self.outcomes else None if isinstance(outcome, Exception): raise outcome @@ -251,7 +254,9 @@ class PollingCoordinatorTests(unittest.TestCase): visible: list[object] = [] coordinator.claim_visible.connect(visible.append) coordinator.start() - wait_until(lambda: coordinator.state == PollingState.CLAIMING) + # CLAIMING 状态先于 queued worker 实际进入 claim_next;必须等待 + # worker 入口,避免与 FakeGateway 的超时边界竞争而产生套件级偶发失败。 + wait_until(lambda: coordinator.state == PollingState.CLAIMING and gateway.entered.is_set()) coordinator._begin_claim(coordinator._epoch) self.assertEqual(gateway.calls, 1) coordinator.stop()