test: make worker cleanup checks deterministic

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