From 9055cd00932ef3e03e8c8406fe193629a22ad5a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20=C5=BBebrak?= Date: Thu, 17 Nov 2022 12:16:57 +0100 Subject: [PATCH 1/6] Rearrange actions in dump_snapshot method --- package/test_tools/__private/node.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package/test_tools/__private/node.py b/package/test_tools/__private/node.py index b8333ec0..3d74c17f 100644 --- a/package/test_tools/__private/node.py +++ b/package/test_tools/__private/node.py @@ -409,12 +409,12 @@ class Node(UserHandleImplementation, ScopedObject): self.__logger.info("Config dumped") def dump_snapshot(self, *, close=False): - self.close() - self.__logger.info("Snapshot dumping started...") + self.__ensure_that_plugin_required_for_snapshot_is_included() + + self.close() snapshot_path = Path(".") - self.__ensure_that_plugin_required_for_snapshot_is_included() self.__run_process( blocking=close, with_arguments=[ -- GitLab From bfeee944d0409792134ad5e73365d77184ea126a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20=C5=BBebrak?= Date: Thu, 17 Nov 2022 12:29:12 +0100 Subject: [PATCH 2/6] Remove workaround with manual wallet closing when dumping snapshot --- tests/functional_tests/node_tests/test_snapshot_dumping.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/functional_tests/node_tests/test_snapshot_dumping.py b/tests/functional_tests/node_tests/test_snapshot_dumping.py index 69170162..bb978e3b 100644 --- a/tests/functional_tests/node_tests/test_snapshot_dumping.py +++ b/tests/functional_tests/node_tests/test_snapshot_dumping.py @@ -29,9 +29,7 @@ def test_if_operation_could_be_created_right_after_dumping_snapshot(): # wait for the block with the transaction to become irreversible, and will be saved in block_log init_node.wait_number_of_blocks(21) - wallet.close() init_node.dump_snapshot() - wallet.run() wallet.create_account("bob") -- GitLab From cf7adfac7a1a842305108237aa7cdca22e33bd26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20=C5=BBebrak?= Date: Thu, 17 Nov 2022 12:18:48 +0100 Subject: [PATCH 3/6] Fix wallets restarting --- package/test_tools/__private/node.py | 23 +++++++++++++++++++++++ package/test_tools/__private/wallet.py | 7 ++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/package/test_tools/__private/node.py b/package/test_tools/__private/node.py index 3d74c17f..b8df804f 100644 --- a/package/test_tools/__private/node.py +++ b/package/test_tools/__private/node.py @@ -24,6 +24,7 @@ from test_tools.__private.snapshot import Snapshot from test_tools.__private.url import Url from test_tools.__private.user_handles.implementation import Implementation as UserHandleImplementation from test_tools.__private.wait_for import wait_for, wait_for_event +from test_tools.__private.wallet import Wallet from test_tools.node_api.node_apis import Apis from test_tools.node_configs.default import create_default_config @@ -299,6 +300,8 @@ class Node(UserHandleImplementation, ScopedObject): self.config = create_default_config() + self.__wallets: List[Wallet] = [] + def __str__(self): return self.__name @@ -412,6 +415,9 @@ class Node(UserHandleImplementation, ScopedObject): self.__logger.info("Snapshot dumping started...") self.__ensure_that_plugin_required_for_snapshot_is_included() + if not close: + self.__close_wallets() + self.close() snapshot_path = Path(".") @@ -425,6 +431,7 @@ class Node(UserHandleImplementation, ScopedObject): if not close: self.__notifications.snapshot_dumped_event.wait() + self.__run_wallets() # Each time the node is restarted, the first operation may not be possible to create because of expiration # time being checked. This is due to the loss of reversible blocks when the node is closed and the HEAD @@ -446,6 +453,14 @@ class Node(UserHandleImplementation, ScopedObject): if plugin_required_for_snapshots not in self.config.plugin: self.config.plugin.append(plugin_required_for_snapshots) + def __close_wallets(self): + for wallet in self.__wallets: + wallet.close() + + def __run_wallets(self): + for wallet in self.__wallets: + wallet.run(timeout=Wallet.DEFAULT_RUN_TIMEOUT) + def __run_process( self, *, @@ -735,3 +750,11 @@ class Node(UserHandleImplementation, ScopedObject): def get_number_of_forks(self): return self.__notifications.number_of_forks + + def register_wallet(self, wallet: Wallet) -> None: + if wallet not in self.__wallets: + self.__wallets.append(wallet) + + def unregister_wallet(self, wallet: Wallet) -> None: + if wallet in self.__wallets: + self.__wallets.remove(wallet) diff --git a/package/test_tools/__private/wallet.py b/package/test_tools/__private/wallet.py index b83efbb1..bf6325d6 100644 --- a/package/test_tools/__private/wallet.py +++ b/package/test_tools/__private/wallet.py @@ -16,7 +16,6 @@ from test_tools.__private.account import Account from test_tools.__private.asset import Asset from test_tools.__private.exceptions import CommunicationError, NodeIsNotRunning from test_tools.__private.logger.logger_internal_interface import logger -from test_tools.__private.node import Node from test_tools.__private.remote_node import RemoteNode from test_tools.__private.scope import context, ScopedObject from test_tools.__private.user_handles.implementation import Implementation as UserHandleImplementation @@ -998,9 +997,13 @@ class Wallet(UserHandleImplementation, ScopedObject): self.connected_node: Union[None, "Node", "RemoteNode"] = attach_to self.password = None + # Break imports cycle + from test_tools.__private.node import Node # pylint: disable=import-outside-toplevel, cyclic-import + if isinstance(self.connected_node, Node): self.name = context.names.register_numbered_name(f"{self.connected_node}.Wallet") self.directory = self.connected_node.directory.parent / self.name + self.connected_node.register_wallet(self) elif isinstance(self.connected_node, RemoteNode): self.name = context.names.register_numbered_name(f"{self.connected_node}.Wallet") self.directory = context.get_current_directory() / self.name @@ -1165,7 +1168,9 @@ class Wallet(UserHandleImplementation, ScopedObject): return not self.api.is_new() def connect_to(self, node): + self.connected_node.unregister_wallet(self) self.connected_node = node + self.connected_node.register_wallet(self) def at_exit_from_scope(self): self.close() -- GitLab From 6ac4644f89df9eb6af30e8fa5884b6bedb4c66a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20=C5=BBebrak?= Date: Thu, 17 Nov 2022 12:33:24 +0100 Subject: [PATCH 4/6] Restart wallets when restarting node --- package/test_tools/__private/node.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package/test_tools/__private/node.py b/package/test_tools/__private/node.py index b8df804f..6c32e90b 100644 --- a/package/test_tools/__private/node.py +++ b/package/test_tools/__private/node.py @@ -688,8 +688,10 @@ class Node(UserHandleImplementation, ScopedObject): self.__remove_files() def restart(self, wait_for_live=True, timeout=DEFAULT_WAIT_FOR_LIVE_TIMEOUT, time_offset: Optional[str] = None): + self.__close_wallets() self.close() self.run(wait_for_live=wait_for_live, timeout=timeout, time_offset=time_offset) + self.__run_wallets() def __remove_files(self): policy = cleanup_policy.get_default() if self.__cleanup_policy is None else self.__cleanup_policy -- GitLab From 3a90ece95235e8824f729c7fe7be2b973a1e74da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20=C5=BBebrak?= Date: Thu, 17 Nov 2022 12:46:18 +0100 Subject: [PATCH 5/6] fixups --- package/test_tools/__private/node.py | 4 ++-- package/test_tools/__private/wallet.py | 4 +--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/package/test_tools/__private/node.py b/package/test_tools/__private/node.py index 6c32e90b..6ef8514b 100644 --- a/package/test_tools/__private/node.py +++ b/package/test_tools/__private/node.py @@ -24,13 +24,13 @@ from test_tools.__private.snapshot import Snapshot from test_tools.__private.url import Url from test_tools.__private.user_handles.implementation import Implementation as UserHandleImplementation from test_tools.__private.wait_for import wait_for, wait_for_event -from test_tools.__private.wallet import Wallet from test_tools.node_api.node_apis import Apis from test_tools.node_configs.default import create_default_config if TYPE_CHECKING: from test_tools.__private.network import Network from test_tools.__private.user_handles.handles.node_handles.node_handle_base import NodeHandleBase as NodeHandle + from test_tools.__private.wallet import Wallet class Node(UserHandleImplementation, ScopedObject): @@ -459,7 +459,7 @@ class Node(UserHandleImplementation, ScopedObject): def __run_wallets(self): for wallet in self.__wallets: - wallet.run(timeout=Wallet.DEFAULT_RUN_TIMEOUT) + wallet.run(timeout=15) def __run_process( self, diff --git a/package/test_tools/__private/wallet.py b/package/test_tools/__private/wallet.py index bf6325d6..fb683ce4 100644 --- a/package/test_tools/__private/wallet.py +++ b/package/test_tools/__private/wallet.py @@ -16,6 +16,7 @@ from test_tools.__private.account import Account from test_tools.__private.asset import Asset from test_tools.__private.exceptions import CommunicationError, NodeIsNotRunning from test_tools.__private.logger.logger_internal_interface import logger +from test_tools.__private.node import Node from test_tools.__private.remote_node import RemoteNode from test_tools.__private.scope import context, ScopedObject from test_tools.__private.user_handles.implementation import Implementation as UserHandleImplementation @@ -997,9 +998,6 @@ class Wallet(UserHandleImplementation, ScopedObject): self.connected_node: Union[None, "Node", "RemoteNode"] = attach_to self.password = None - # Break imports cycle - from test_tools.__private.node import Node # pylint: disable=import-outside-toplevel, cyclic-import - if isinstance(self.connected_node, Node): self.name = context.names.register_numbered_name(f"{self.connected_node}.Wallet") self.directory = self.connected_node.directory.parent / self.name -- GitLab From 3d044ed6947f13d86c72d25d82f81eb29321026e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20=C5=BBebrak?= Date: Thu, 17 Nov 2022 12:50:59 +0100 Subject: [PATCH 6/6] Remove necessity of passing timeout to Wallet run method and use default value here --- package/test_tools/__private/node.py | 2 +- package/test_tools/__private/wallet.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package/test_tools/__private/node.py b/package/test_tools/__private/node.py index 6ef8514b..ae20067d 100644 --- a/package/test_tools/__private/node.py +++ b/package/test_tools/__private/node.py @@ -459,7 +459,7 @@ class Node(UserHandleImplementation, ScopedObject): def __run_wallets(self): for wallet in self.__wallets: - wallet.run(timeout=15) + wallet.run() def __run_process( self, diff --git a/package/test_tools/__private/wallet.py b/package/test_tools/__private/wallet.py index fb683ce4..d9d4348b 100644 --- a/package/test_tools/__private/wallet.py +++ b/package/test_tools/__private/wallet.py @@ -1017,7 +1017,7 @@ class Wallet(UserHandleImplementation, ScopedObject): self.__produced_files = False self.logger = logger.create_child_logger(self.name) - self.run(timeout=self.DEFAULT_RUN_TIMEOUT, preconfigure=preconfigure) + self.run(preconfigure=preconfigure) def __str__(self): return self.name @@ -1045,7 +1045,7 @@ class Wallet(UserHandleImplementation, ScopedObject): return False - def run(self, *, timeout, preconfigure=True, clean: Optional[bool] = None): + def run(self, timeout: float = DEFAULT_RUN_TIMEOUT, *, preconfigure: bool = True, clean: Optional[bool] = None): """ Starts wallet. Blocks until wallet will be ready for use. @@ -1175,7 +1175,7 @@ class Wallet(UserHandleImplementation, ScopedObject): def restart(self, *, preconfigure=True): self.close() - self.run(timeout=self.DEFAULT_RUN_TIMEOUT, preconfigure=preconfigure, clean=False) + self.run(preconfigure=preconfigure, clean=False) def close(self): self.__close_process() -- GitLab