test: make worker cleanup checks deterministic

This commit is contained in:
Jason Morcos
2026-08-02 10:13:56 -07:00
parent 23338995bf
commit 2c93cb3097
+13 -5
View File
@@ -23,21 +23,29 @@ class _Descriptor:
return None
class _ObservedEvent(threading.Event):
def __init__(self):
super().__init__()
self.waiting = threading.Event()
def wait(self, timeout=None):
self.waiting.set()
return super().wait(timeout)
def _assert_worker_stops(target, name: str):
stop = threading.Event()
entered = threading.Event()
stop = _ObservedEvent()
errors: list[str] = []
def run():
entered.set()
try:
target(stop)
except Exception as error: # noqa: BLE001 # pragma: no cover
errors.append(type(error).__name__)
worker = threading.Thread(target=run, name=name)
worker = threading.Thread(target=run, name=name, daemon=True)
worker.start()
assert entered.wait(0.5), f"{name} did not enter its worker"
assert stop.waiting.wait(0.5), f"{name} did not enter an interruptible wait"
stop.set()
worker.join(0.5)
assert not worker.is_alive(), f"{name} did not stop"