test: make worker cleanup checks deterministic
This commit is contained in:
1 file changed
+13
-5
@@ -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"
|
||||||
|
|||||||
Reference in new issue
Block a user