diff --git a/everest-testing/src/everest/testing/__init__.py b/everest-testing/src/everest/testing/__init__.py index 91aaa128..d6997024 100644 --- a/everest-testing/src/everest/testing/__init__.py +++ b/everest-testing/src/everest/testing/__init__.py @@ -1 +1 @@ -__version__="0.2.1" +__version__="0.2.2" diff --git a/everest-testing/src/everest/testing/core_utils/probe_module.py b/everest-testing/src/everest/testing/core_utils/probe_module.py index 01129964..046ea596 100644 --- a/everest-testing/src/everest/testing/core_utils/probe_module.py +++ b/everest-testing/src/everest/testing/core_utils/probe_module.py @@ -1,11 +1,12 @@ import asyncio import logging +import threading + from queue import Queue from typing import Any, Callable from everest.framework import Module, RuntimeSession - class ProbeModule: """ Probe module tool for integration testing, which is a thin abstraction over the C++ bindings from everestpy @@ -24,7 +25,7 @@ def __init__(self, session: RuntimeSession, module_id="probe"): m = Module(module_id, session) self._setup = m.say_hello() self._mod = m - self._ready_event = asyncio.Event() + self._ready_event = threading.Event() self._started = False def start(self): @@ -106,14 +107,23 @@ def _ready(self): Internal function: callback triggered by the EVerest framework when all modules have been initialized This is equivalent to the ready() method in C++ modules """ - logging.info("ProbeModule ready") self._ready_event.set() - async def wait_to_be_ready(self, timeout=3): + async def wait_for_event(self, timeout: float): + """ + Helper to make threading.Event behave similar to asyncio.Event, which is awaitable and raising TimeoutError. + - timeout: Time to for ready_event + """ + self._ready_event.wait(timeout) + if not self._ready_event.is_set(): + raise TimeoutError("Waiting for ready: timeout") + + + async def wait_to_be_ready(self, timeout=3.0): """ Convenience method which allows you to wait until the _ready() callback is triggered (i.e. until EVerest is up and running) """ if not self._started: raise RuntimeError("Called wait_to_be_ready(), but probe module has not been started yet! " "Please use start() to start the module first.") - await asyncio.wait_for(asyncio.to_thread(self._ready_event.wait), timeout) + await self.wait_for_event(timeout)