reliability updates

This commit is contained in:
Florin Barbu 2024-05-27 16:59:08 +03:00
parent aca231e3da
commit 1df8cfb8f2
No known key found for this signature in database
GPG Key ID: 593D6DBC6D9E5095
3 changed files with 48 additions and 16 deletions

View File

@ -31,7 +31,7 @@ class DockerManager:
logger.debug(f"Network {network_name} created")
return network
def start_container(self, image_name, ports, args, log_path, container_ip, volumes):
def start_container(self, image_name, ports, args, log_path, container_ip, volumes, remove_container=True):
cli_args = []
for key, value in args.items():
if isinstance(value, list): # Check if value is a list
@ -46,7 +46,7 @@ class DockerManager:
cli_args_str_for_log = " ".join(cli_args)
logger.debug(f"docker run -i -t {port_bindings_for_log} {image_name} {cli_args_str_for_log}")
container = self._client.containers.run(
image_name, command=cli_args, ports=port_bindings, detach=True, remove=True, auto_remove=True, volumes=volumes
image_name, command=cli_args, ports=port_bindings, detach=True, remove=remove_container, auto_remove=remove_container, volumes=volumes
)
network = self._client.networks.get(NETWORK_NAME)

View File

@ -100,6 +100,12 @@ class WakuNode:
else:
raise NotImplementedError("Not implemented for this node type")
if "remove_container" in kwargs:
remove_container = kwargs["remove_container"]
del kwargs["remove_container"]
else:
remove_container = True
default_args.update(sanitize_docker_flags(kwargs))
rln_args, rln_creds_set, keystore_path = self.parse_rln_credentials(default_args, False)
@ -116,7 +122,13 @@ class WakuNode:
logger.debug(f"Using volumes {self._volumes}")
self._container = self._docker_manager.start_container(
self._docker_manager.image, self._ports, default_args, self._log_path, self._ext_ip, self._volumes
self._docker_manager.image,
ports=self._ports,
args=default_args,
log_path=self._log_path,
container_ip=self._ext_ip,
volumes=self._volumes,
remove_container=remove_container,
)
logger.debug(f"Started container from image {self._image_name}. REST: {self._rest_port}")
@ -168,6 +180,10 @@ class WakuNode:
if self._container:
logger.debug(f"Stopping container with id {self._container.short_id}")
self._container.stop()
try:
self._container.remove()
except:
pass
self._container = None
logger.debug("Container stopped.")
@ -405,3 +421,7 @@ class WakuNode:
raise NotImplementedError("Not implemented for type other than Nim Waku ")
return rln_args, True, keystore_path
@property
def container(self):
return self._container

View File

@ -6,9 +6,8 @@ from src.steps.store import StepsStore
logger = get_custom_logger(__name__)
@pytest.mark.usefixtures("node_setup")
class TestReliability(StepsStore):
def test_publishing_node_is_stopped(self):
def test_publishing_node_is_stopped(self, node_setup):
self.publish_message()
self.check_published_message_is_stored(page_size=5)
self.publishing_node1.stop()
@ -21,7 +20,7 @@ class TestReliability(StepsStore):
else:
raise AssertionError(f"Nwaku failed with {ex}")
def test_publishing_node_restarts(self):
def test_publishing_node_restarts(self, node_setup):
self.publish_message()
self.check_published_message_is_stored(page_size=5)
self.publishing_node1.restart()
@ -34,7 +33,7 @@ class TestReliability(StepsStore):
store_response = self.get_messages_from_store(node, page_size=5)
assert len(store_response.messages) == 2
def test_store_node_restarts(self):
def test_store_node_restarts(self, node_setup):
self.publish_message()
self.check_published_message_is_stored(page_size=5)
self.store_node1.restart()
@ -46,7 +45,7 @@ class TestReliability(StepsStore):
store_response = self.get_messages_from_store(node, page_size=5)
assert len(store_response.messages) == 2
def test_publishing_node_paused_and_unpaused(self):
def test_publishing_node_paused_and_unpaused(self, node_setup):
self.publish_message()
self.check_published_message_is_stored(page_size=5)
self.publishing_node1.pause()
@ -59,7 +58,7 @@ class TestReliability(StepsStore):
store_response = self.get_messages_from_store(node, page_size=5)
assert len(store_response.messages) == 2
def test_store_node_paused_and_unpaused(self):
def test_store_node_paused_and_unpaused(self, node_setup):
self.publish_message()
self.check_published_message_is_stored(page_size=5)
self.store_node1.pause()
@ -72,7 +71,7 @@ class TestReliability(StepsStore):
store_response = self.get_messages_from_store(node, page_size=5)
assert len(store_response.messages) == 2
def test_message_relayed_while_store_node_is_paused(self):
def test_message_relayed_while_store_node_is_paused(self, node_setup):
self.publish_message()
self.check_published_message_is_stored(page_size=5)
self.store_node1.pause()
@ -84,13 +83,27 @@ class TestReliability(StepsStore):
store_response = self.get_messages_from_store(node, page_size=5)
assert len(store_response.messages) == 2
## I THINK WE HAVE A BUG FOR GOWAKU - NEEDS REPORTING!!!!
def test_message_relayed_while_store_node_is_stopped(self):
def test_message_relayed_while_store_node_is_stopped_without_removing(self):
self.setup_first_publishing_node(store="true", relay="true")
self.setup_first_store_node(store="false", relay="true", remove_container=False)
self.subscribe_to_pubsub_topics_via_relay()
self.publish_message()
self.check_published_message_is_stored(page_size=5)
self.store_node1.container.stop()
self.publish_message()
self.store_node1.container.start()
self.store_node1.ensure_ready()
for node in self.store_nodes:
store_response = self.get_messages_from_store(node, page_size=5)
assert len(store_response.messages) == 2
def test_message_relayed_while_store_node_is_stopped_and_removed(self, node_setup):
self.publish_message()
self.check_published_message_is_stored(page_size=5)
self.store_node1.stop()
self.store_nodes.remove(self.store_node1)
self.publish_message()
self.store_node1.start()
self.setup_first_store_node(store="false", relay="true")
self.store_node1.ensure_ready()
self.add_node_peer(self.store_node1, self.multiaddr_list)
self.subscribe_to_pubsub_topics_via_relay(node=self.store_node1)
@ -99,11 +112,10 @@ class TestReliability(StepsStore):
store_response = self.get_messages_from_store(node, page_size=5)
assert len(store_response.messages) == 2
## I THINK WE HAVE A BUG FOR NWAKU - NEEDS REPORTING!!!!
def test_message_relayed_before_store_node_is_started(self):
def test_message_relayed_before_store_node_is_started(self, node_setup):
self.publish_message()
self.check_published_message_is_stored(page_size=5)
self.setup_second_store_node(store="true", relay="true")
self.setup_second_store_node(store="false", relay="true")
self.subscribe_to_pubsub_topics_via_relay()
store_response = self.get_messages_from_store(self.store_node2, page_size=5)
assert len(store_response.messages) == 1