From 5e233fe2ed1d449dbf4a97f489274335fb0abb6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Kudela?= <kudmich@syncad.com> Date: Tue, 26 Nov 2024 15:55:56 +0100 Subject: [PATCH] Handle `api mode` notification --- package/test_tools/__private/node.py | 19 ++++++++++++++++--- .../node_notification_handler.py | 3 +++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/package/test_tools/__private/node.py b/package/test_tools/__private/node.py index b07c43005..d72dbff11 100644 --- a/package/test_tools/__private/node.py +++ b/package/test_tools/__private/node.py @@ -375,11 +375,13 @@ class Node(BaseNode, ScopedObject): self.__produced_files = True if not exit_before_synchronization and exit_at_block is None: - self.__wait_for_synchronization(deadline, timeout, wait_for_live) + self.__wait_for_synchronization(deadline, timeout, wait_for_live, stop_at_block) self.__log_run_summary() - def __wait_for_synchronization(self, deadline: float, timeout: float, wait_for_live: bool) -> None: + def __wait_for_synchronization( + self, deadline: float, timeout: float, wait_for_live: bool, stop_at_block: int | None + ) -> None: wait_for_event( self.__notifications.handler.synchronization_started_event, deadline=deadline, @@ -398,7 +400,9 @@ class Node(BaseNode, ScopedObject): exception_message="WS server didn't start listening on time.", ) - if wait_for_live: + if stop_at_block is not None or "queen" in self.config.plugin: + self.wait_for_api_mode(timeout=timeout) + elif wait_for_live: self.wait_for_live_mode(timeout=timeout) wait_for_event( @@ -615,6 +619,15 @@ class Node(BaseNode, ScopedObject): exception_message=f"{self.get_name()}: Live mode not activated on time.", ) + def wait_for_api_mode(self, timeout: float = math.inf) -> None: + assert timeout >= 0 + deadline = time.time() + timeout + wait_for_event( + self.__notifications.handler.api_mode_entered_event, + deadline=deadline, + exception_message=f"{self.get_name()}: API mode not activated on time.", + ) + def get_number_of_forks(self) -> int: return self.__notifications.handler.number_of_forks diff --git a/package/test_tools/__private/notifications/node_notification_handler.py b/package/test_tools/__private/notifications/node_notification_handler.py index 7763b2388..e0bf25fa7 100644 --- a/package/test_tools/__private/notifications/node_notification_handler.py +++ b/package/test_tools/__private/notifications/node_notification_handler.py @@ -44,6 +44,7 @@ class NodeNotificationHandler(HivedNotificationHandler): self.replay_finished_event = Event() self.snapshot_dumped_event = Event() + self.api_mode_entered_event = Event() self.switch_fork_event = Event() self.number_of_forks = 0 @@ -60,6 +61,8 @@ class NodeNotificationHandler(HivedNotificationHandler): self.live_mode_entered_event.set() case "chain API ready": self.chain_api_ready_event.set() + case "entering API mode": + self.api_mode_entered_event.set() async def on_http_webserver_bind(self, notification: Notification[WebserverListening]) -> None: self.http_endpoint = HttpUrl(self.__combine_url_string_from_notification(notification), protocol="http") -- GitLab