diff --git a/src/node/waku_node.py b/src/node/waku_node.py index 9a945ffee..478b0edcf 100644 --- a/src/node/waku_node.py +++ b/src/node/waku_node.py @@ -106,6 +106,11 @@ class WakuNode: else: remove_container = True + if kwargs.get("peer_persistence") == "true": + if self.is_gowaku(): + kwargs["persist_peers"] = kwargs["peer_persistence"] + del kwargs["peer_persistence"] + default_args.update(sanitize_docker_flags(kwargs)) rln_args, rln_creds_set, keystore_path = self.parse_rln_credentials(default_args, False) diff --git a/src/steps/peer_store.py b/src/steps/peer_store.py new file mode 100644 index 000000000..5e12e887a --- /dev/null +++ b/src/steps/peer_store.py @@ -0,0 +1,54 @@ +import os +import inspect +import pytest +import allure + +from src.node.waku_message import WakuMessage +from src.steps.common import StepsCommon +from src.test_data import PUBSUB_TOPICS_RLN, VALID_PUBSUB_TOPICS +from src.env_vars import DEFAULT_NWAKU, RLN_CREDENTIALS, NODEKEY, NODE_1, NODE_2, ADDITIONAL_NODES +from src.libs.common import gen_step_id, delay +from src.libs.custom_logger import get_custom_logger +from src.node.waku_node import WakuNode, rln_credential_store_ready + +logger = get_custom_logger(__name__) + + +class StepsPeerStore(StepsCommon): + test_pubsub_topic = VALID_PUBSUB_TOPICS[0] + test_content_topic = "/test/1/waku-relay/proto" + test_payload = "Relay works!!" + + main_nodes = [] + optional_nodes = [] + multiaddr_list = [] + + @allure.step + def setup_first_relay_node(self, **kwargs): + self.node1 = WakuNode(NODE_1, f"node1_{self.test_id}") + self.node1.start(relay="true", nodekey=NODEKEY, **kwargs) + self.enr_uri = self.node1.get_enr_uri() + self.multiaddr_with_id = self.node1.get_multiaddr_with_id() + self.main_nodes.extend([self.node1]) + + @allure.step + def setup_second_relay_node(self, **kwargs): + self.node2 = WakuNode(NODE_2, f"node2_{self.test_id}") + self.node2.start( + relay="true", + discv5_bootstrap_node=self.enr_uri, + **kwargs, + ) + self.add_node_peer(self.node2, [self.multiaddr_with_id]) + self.main_nodes.extend([self.node2]) + + @allure.step + def setup_third_relay_node(self, **kwargs): + self.node3 = WakuNode(NODE_1, f"node2_{self.test_id}") + self.node3.start( + relay="true", + discv5_bootstrap_node=self.enr_uri, + **kwargs, + ) + self.add_node_peer(self.node3, [self.multiaddr_with_id]) + self.main_nodes.extend([self.node3]) diff --git a/tests/peer_connection_management/test_peer_store.py b/tests/peer_connection_management/test_peer_store.py index b515355fa..d89babdee 100644 --- a/tests/peer_connection_management/test_peer_store.py +++ b/tests/peer_connection_management/test_peer_store.py @@ -1,14 +1,15 @@ import pytest -from src.libs.common import peer_info2id, peer_info2multiaddr, multiaddr2id +from src.libs.common import peer_info2id, peer_info2multiaddr, multiaddr2id, delay from src.libs.custom_logger import get_custom_logger +from src.steps.peer_store import StepsPeerStore from src.steps.relay import StepsRelay from src.steps.store import StepsStore logger = get_custom_logger(__name__) -class TestPeerStore(StepsRelay, StepsStore): +class TestPeerStore(StepsPeerStore, StepsRelay, StepsStore): @pytest.mark.usefixtures("setup_main_relay_nodes", "setup_optional_relay_nodes") def test_get_peers(self): nodes = [self.node1, self.node2] @@ -64,3 +65,8 @@ class TestPeerStore(StepsRelay, StepsStore): logger.debug(f"Node 2 connected peers {node2_peers}") assert len(node1_peers) == 2 and len(node2_peers) == 2, f"Some nodes and/or their services are missing" + + @pytest.mark.skip(reason="failed to store peers") + def test_use_persistent_storage_survive_restart(self): + self.setup_first_relay_node(peer_persistence="true") + self.setup_second_relay_node()