e2e tests (#65)
This commit is contained in:
parent
80210a079c
commit
945364b0b2
|
@ -16,7 +16,7 @@ def get_env_var(var_name, default=None):
|
||||||
# Configuration constants. Need to be upercase to appear in reports
|
# Configuration constants. Need to be upercase to appear in reports
|
||||||
DEFAULT_NWAKU = "wakuorg/nwaku:latest"
|
DEFAULT_NWAKU = "wakuorg/nwaku:latest"
|
||||||
DEFAULT_GOWAKU = "wakuorg/go-waku:latest"
|
DEFAULT_GOWAKU = "wakuorg/go-waku:latest"
|
||||||
NODE_1 = get_env_var("NODE_1", DEFAULT_GOWAKU)
|
NODE_1 = get_env_var("NODE_1", DEFAULT_NWAKU)
|
||||||
NODE_2 = get_env_var("NODE_2", DEFAULT_NWAKU)
|
NODE_2 = get_env_var("NODE_2", DEFAULT_NWAKU)
|
||||||
ADDITIONAL_NODES = get_env_var("ADDITIONAL_NODES", f"{DEFAULT_NWAKU},{DEFAULT_GOWAKU},{DEFAULT_NWAKU}")
|
ADDITIONAL_NODES = get_env_var("ADDITIONAL_NODES", f"{DEFAULT_NWAKU},{DEFAULT_GOWAKU},{DEFAULT_NWAKU}")
|
||||||
# more nodes need to follow the NODE_X pattern
|
# more nodes need to follow the NODE_X pattern
|
||||||
|
@ -26,7 +26,6 @@ SUBNET = get_env_var("SUBNET", "172.18.0.0/16")
|
||||||
IP_RANGE = get_env_var("IP_RANGE", "172.18.0.0/24")
|
IP_RANGE = get_env_var("IP_RANGE", "172.18.0.0/24")
|
||||||
GATEWAY = get_env_var("GATEWAY", "172.18.0.1")
|
GATEWAY = get_env_var("GATEWAY", "172.18.0.1")
|
||||||
RUNNING_IN_CI = get_env_var("CI")
|
RUNNING_IN_CI = get_env_var("CI")
|
||||||
NODEKEY = get_env_var("NODEKEY", "30348dd51465150e04a5d9d932c72864c8967f806cce60b5d26afeca1e77eb68")
|
|
||||||
API_REQUEST_TIMEOUT = get_env_var("API_REQUEST_TIMEOUT", 20)
|
API_REQUEST_TIMEOUT = get_env_var("API_REQUEST_TIMEOUT", 20)
|
||||||
RLN_CREDENTIALS = get_env_var("RLN_CREDENTIALS")
|
RLN_CREDENTIALS = get_env_var("RLN_CREDENTIALS")
|
||||||
PG_USER = get_env_var("POSTGRES_USER", "postgres")
|
PG_USER = get_env_var("POSTGRES_USER", "postgres")
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
import errno
|
import errno
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
import random
|
||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import string
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import requests
|
import requests
|
||||||
from src.libs.common import delay
|
from src.libs.common import delay
|
||||||
|
@ -115,6 +115,7 @@ class WakuNode:
|
||||||
"cluster-id": DEFAULT_CLUSTER_ID,
|
"cluster-id": DEFAULT_CLUSTER_ID,
|
||||||
"rln-creds-id": None,
|
"rln-creds-id": None,
|
||||||
"rln-creds-source": None,
|
"rln-creds-source": None,
|
||||||
|
"nodekey": self.generate_random_nodekey(),
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.is_gowaku():
|
if self.is_gowaku():
|
||||||
|
@ -509,3 +510,10 @@ class WakuNode:
|
||||||
@property
|
@property
|
||||||
def container(self):
|
def container(self):
|
||||||
return self._container
|
return self._container
|
||||||
|
|
||||||
|
def generate_random_nodekey(self):
|
||||||
|
# Define the set of hexadecimal characters
|
||||||
|
hex_chars = string.hexdigits.lower()
|
||||||
|
# Generate a random 64-character string from the hex characters
|
||||||
|
random_key = "".join(random.choice(hex_chars) for _ in range(64))
|
||||||
|
return random_key
|
||||||
|
|
|
@ -5,7 +5,7 @@ from time import time
|
||||||
import allure
|
import allure
|
||||||
import pytest
|
import pytest
|
||||||
from tenacity import retry, stop_after_delay, wait_fixed
|
from tenacity import retry, stop_after_delay, wait_fixed
|
||||||
from src.libs.common import to_base64
|
from src.libs.common import delay, to_base64
|
||||||
from src.libs.custom_logger import get_custom_logger
|
from src.libs.custom_logger import get_custom_logger
|
||||||
|
|
||||||
logger = get_custom_logger(__name__)
|
logger = get_custom_logger(__name__)
|
||||||
|
@ -31,6 +31,15 @@ class StepsCommon:
|
||||||
peer_info = {"multiaddr": multiaddr, "protocols": ["/vac/waku/relay/2.0.0"], "shards": shards}
|
peer_info = {"multiaddr": multiaddr, "protocols": ["/vac/waku/relay/2.0.0"], "shards": shards}
|
||||||
node.add_peers(peer_info)
|
node.add_peers(peer_info)
|
||||||
|
|
||||||
|
@allure.step
|
||||||
|
@retry(stop=stop_after_delay(70), wait=wait_fixed(1), reraise=True)
|
||||||
|
def wait_for_autoconnection(self, node_list, hard_wait=None):
|
||||||
|
for node in node_list:
|
||||||
|
get_peers = node.get_peers()
|
||||||
|
assert len(get_peers) >= 1
|
||||||
|
if hard_wait:
|
||||||
|
delay(hard_wait)
|
||||||
|
|
||||||
@allure.step
|
@allure.step
|
||||||
def create_message(self, **kwargs):
|
def create_message(self, **kwargs):
|
||||||
message = {"payload": to_base64(self.test_payload), "contentTopic": self.test_content_topic, "timestamp": int(time() * 1e9)}
|
message = {"payload": to_base64(self.test_payload), "contentTopic": self.test_content_topic, "timestamp": int(time() * 1e9)}
|
||||||
|
|
|
@ -6,7 +6,7 @@ import pytest
|
||||||
import allure
|
import allure
|
||||||
from src.libs.common import to_base64, delay
|
from src.libs.common import to_base64, delay
|
||||||
from src.node.waku_message import WakuMessage
|
from src.node.waku_message import WakuMessage
|
||||||
from src.env_vars import NODE_1, NODE_2, ADDITIONAL_NODES, NODEKEY
|
from src.env_vars import NODE_1, NODE_2, ADDITIONAL_NODES
|
||||||
from src.node.waku_node import WakuNode
|
from src.node.waku_node import WakuNode
|
||||||
from tenacity import retry, stop_after_delay, wait_fixed
|
from tenacity import retry, stop_after_delay, wait_fixed
|
||||||
from src.steps.common import StepsCommon
|
from src.steps.common import StepsCommon
|
||||||
|
@ -60,12 +60,13 @@ class StepsFilter(StepsCommon):
|
||||||
|
|
||||||
def relay_node_start(self, node):
|
def relay_node_start(self, node):
|
||||||
self.node1 = WakuNode(node, f"node1_{self.test_id}")
|
self.node1 = WakuNode(node, f"node1_{self.test_id}")
|
||||||
start_args = {"relay": "true", "filter": "true", "nodekey": NODEKEY}
|
start_args = {"relay": "true", "filter": "true"}
|
||||||
if self.node1.is_gowaku():
|
if self.node1.is_gowaku():
|
||||||
start_args["min_relay_peers_to_publish"] = "0"
|
start_args["min_relay_peers_to_publish"] = "0"
|
||||||
self.node1.start(**start_args)
|
self.node1.start(**start_args)
|
||||||
self.enr_uri = self.node1.get_enr_uri()
|
self.enr_uri = self.node1.get_enr_uri()
|
||||||
self.multiaddr_with_id = self.node1.get_multiaddr_with_id()
|
self.multiaddr_with_id = self.node1.get_multiaddr_with_id()
|
||||||
|
return self.node1
|
||||||
|
|
||||||
def setup_optional_filter_nodes(self, node_list=ADDITIONAL_NODES):
|
def setup_optional_filter_nodes(self, node_list=ADDITIONAL_NODES):
|
||||||
if node_list:
|
if node_list:
|
||||||
|
|
|
@ -9,7 +9,6 @@ from src.env_vars import (
|
||||||
ADDITIONAL_NODES,
|
ADDITIONAL_NODES,
|
||||||
NODE_1,
|
NODE_1,
|
||||||
NODE_2,
|
NODE_2,
|
||||||
NODEKEY,
|
|
||||||
)
|
)
|
||||||
from src.node.waku_node import WakuNode
|
from src.node.waku_node import WakuNode
|
||||||
from src.steps.common import StepsCommon
|
from src.steps.common import StepsCommon
|
||||||
|
@ -51,7 +50,7 @@ class StepsLightPush(StepsCommon):
|
||||||
|
|
||||||
@allure.step
|
@allure.step
|
||||||
def setup_first_receiving_node(self, lightpush="true", relay="true", **kwargs):
|
def setup_first_receiving_node(self, lightpush="true", relay="true", **kwargs):
|
||||||
self.receiving_node1 = self.start_receiving_node(NODE_1, node_index=1, lightpush=lightpush, relay=relay, nodekey=NODEKEY, **kwargs)
|
self.receiving_node1 = self.start_receiving_node(NODE_1, node_index=1, lightpush=lightpush, relay=relay, **kwargs)
|
||||||
self.enr_uri = self.receiving_node1.get_enr_uri()
|
self.enr_uri = self.receiving_node1.get_enr_uri()
|
||||||
|
|
||||||
@allure.step
|
@allure.step
|
||||||
|
|
|
@ -9,7 +9,6 @@ from src.env_vars import (
|
||||||
NODE_1,
|
NODE_1,
|
||||||
NODE_2,
|
NODE_2,
|
||||||
ADDITIONAL_NODES,
|
ADDITIONAL_NODES,
|
||||||
NODEKEY,
|
|
||||||
)
|
)
|
||||||
from src.node.waku_node import WakuNode
|
from src.node.waku_node import WakuNode
|
||||||
from tenacity import retry, stop_after_delay, wait_fixed
|
from tenacity import retry, stop_after_delay, wait_fixed
|
||||||
|
@ -34,7 +33,7 @@ class StepsRelay(StepsCommon):
|
||||||
def setup_main_relay_nodes(self, request):
|
def setup_main_relay_nodes(self, request):
|
||||||
logger.debug(f"Running fixture setup: {inspect.currentframe().f_code.co_name}")
|
logger.debug(f"Running fixture setup: {inspect.currentframe().f_code.co_name}")
|
||||||
self.node1 = WakuNode(NODE_1, f"node1_{request.cls.test_id}")
|
self.node1 = WakuNode(NODE_1, f"node1_{request.cls.test_id}")
|
||||||
self.node1.start(relay="true", nodekey=NODEKEY)
|
self.node1.start(relay="true")
|
||||||
self.enr_uri = self.node1.get_enr_uri()
|
self.enr_uri = self.node1.get_enr_uri()
|
||||||
self.multiaddr_with_id = self.node1.get_multiaddr_with_id()
|
self.multiaddr_with_id = self.node1.get_multiaddr_with_id()
|
||||||
self.node2 = WakuNode(NODE_2, f"node2_{request.cls.test_id}")
|
self.node2 = WakuNode(NODE_2, f"node2_{request.cls.test_id}")
|
||||||
|
@ -77,7 +76,7 @@ class StepsRelay(StepsCommon):
|
||||||
@allure.step
|
@allure.step
|
||||||
def setup_first_relay_node(self, **kwargs):
|
def setup_first_relay_node(self, **kwargs):
|
||||||
self.node1 = WakuNode(NODE_1, f"node1_{self.test_id}")
|
self.node1 = WakuNode(NODE_1, f"node1_{self.test_id}")
|
||||||
self.node1.start(relay="true", nodekey=NODEKEY, **kwargs)
|
self.node1.start(relay="true", **kwargs)
|
||||||
self.enr_uri = self.node1.get_enr_uri()
|
self.enr_uri = self.node1.get_enr_uri()
|
||||||
self.multiaddr_with_id = self.node1.get_multiaddr_with_id()
|
self.multiaddr_with_id = self.node1.get_multiaddr_with_id()
|
||||||
self.main_nodes.extend([self.node1])
|
self.main_nodes.extend([self.node1])
|
||||||
|
@ -167,7 +166,7 @@ class StepsRelay(StepsCommon):
|
||||||
@allure.step
|
@allure.step
|
||||||
def setup_main_nodes(self, **kwargs):
|
def setup_main_nodes(self, **kwargs):
|
||||||
self.node1 = WakuNode(NODE_1, f"node1_{self.test_id}")
|
self.node1 = WakuNode(NODE_1, f"node1_{self.test_id}")
|
||||||
self.node1.start(relay="true", nodekey=NODEKEY, **kwargs)
|
self.node1.start(relay="true", **kwargs)
|
||||||
self.enr_uri = self.node1.get_enr_uri()
|
self.enr_uri = self.node1.get_enr_uri()
|
||||||
self.multiaddr_with_id = self.node1.get_multiaddr_with_id()
|
self.multiaddr_with_id = self.node1.get_multiaddr_with_id()
|
||||||
self.node2 = WakuNode(NODE_2, f"node2_{self.test_id}")
|
self.node2 = WakuNode(NODE_2, f"node2_{self.test_id}")
|
||||||
|
|
|
@ -8,7 +8,7 @@ import allure
|
||||||
|
|
||||||
from src.steps.common import StepsCommon
|
from src.steps.common import StepsCommon
|
||||||
from src.test_data import PUBSUB_TOPICS_RLN
|
from src.test_data import PUBSUB_TOPICS_RLN
|
||||||
from src.env_vars import DEFAULT_NWAKU, RLN_CREDENTIALS, NODEKEY, NODE_1, NODE_2, ADDITIONAL_NODES
|
from src.env_vars import DEFAULT_NWAKU, RLN_CREDENTIALS, NODE_1, NODE_2, ADDITIONAL_NODES
|
||||||
from src.libs.common import gen_step_id, delay
|
from src.libs.common import gen_step_id, delay
|
||||||
from src.libs.custom_logger import get_custom_logger
|
from src.libs.custom_logger import get_custom_logger
|
||||||
from src.node.waku_node import WakuNode, rln_credential_store_ready
|
from src.node.waku_node import WakuNode, rln_credential_store_ready
|
||||||
|
@ -56,7 +56,6 @@ class StepsRLN(StepsCommon):
|
||||||
self.node1 = WakuNode(NODE_1, f"node1_{self.test_id}")
|
self.node1 = WakuNode(NODE_1, f"node1_{self.test_id}")
|
||||||
self.node1.start(
|
self.node1.start(
|
||||||
relay="true",
|
relay="true",
|
||||||
nodekey=NODEKEY,
|
|
||||||
rln_creds_source=RLN_CREDENTIALS,
|
rln_creds_source=RLN_CREDENTIALS,
|
||||||
rln_creds_id="1",
|
rln_creds_id="1",
|
||||||
rln_relay_membership_index="1",
|
rln_relay_membership_index="1",
|
||||||
|
|
|
@ -8,10 +8,8 @@ from src.libs.common import to_base64, delay
|
||||||
from src.node.waku_message import WakuMessage
|
from src.node.waku_message import WakuMessage
|
||||||
from src.env_vars import (
|
from src.env_vars import (
|
||||||
DEFAULT_NWAKU,
|
DEFAULT_NWAKU,
|
||||||
NODE_1,
|
|
||||||
NODE_2,
|
NODE_2,
|
||||||
ADDITIONAL_NODES,
|
ADDITIONAL_NODES,
|
||||||
NODEKEY,
|
|
||||||
)
|
)
|
||||||
from src.node.waku_node import WakuNode
|
from src.node.waku_node import WakuNode
|
||||||
from src.steps.common import StepsCommon
|
from src.steps.common import StepsCommon
|
||||||
|
|
|
@ -9,7 +9,6 @@ from src.env_vars import (
|
||||||
ADDITIONAL_NODES,
|
ADDITIONAL_NODES,
|
||||||
NODE_1,
|
NODE_1,
|
||||||
NODE_2,
|
NODE_2,
|
||||||
NODEKEY,
|
|
||||||
)
|
)
|
||||||
from src.node.waku_node import WakuNode
|
from src.node.waku_node import WakuNode
|
||||||
from src.steps.common import StepsCommon
|
from src.steps.common import StepsCommon
|
||||||
|
@ -62,7 +61,7 @@ class StepsStore(StepsCommon):
|
||||||
|
|
||||||
@allure.step
|
@allure.step
|
||||||
def setup_first_publishing_node(self, store="true", relay="true", **kwargs):
|
def setup_first_publishing_node(self, store="true", relay="true", **kwargs):
|
||||||
self.publishing_node1 = self.start_publishing_node(NODE_1, node_index=1, store=store, relay=relay, nodekey=NODEKEY, **kwargs)
|
self.publishing_node1 = self.start_publishing_node(NODE_1, node_index=1, store=store, relay=relay, **kwargs)
|
||||||
self.enr_uri = self.publishing_node1.get_enr_uri()
|
self.enr_uri = self.publishing_node1.get_enr_uri()
|
||||||
|
|
||||||
@allure.step
|
@allure.step
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from src.env_vars import NODE_1, NODE_2, NODEKEY
|
from src.env_vars import NODE_1, NODE_2
|
||||||
from src.libs.custom_logger import get_custom_logger
|
from src.libs.custom_logger import get_custom_logger
|
||||||
from src.node.waku_node import WakuNode
|
from src.node.waku_node import WakuNode
|
||||||
from src.steps.filter import StepsFilter
|
from src.steps.filter import StepsFilter
|
||||||
|
@ -26,14 +26,14 @@ class TestDiscv5(StepsRelay, StepsFilter, StepsStore, StepsLightPush):
|
||||||
self.check_light_pushed_message_reaches_receiving_peer(peer_list=[self.receiving_node1, self.receiving_node2])
|
self.check_light_pushed_message_reaches_receiving_peer(peer_list=[self.receiving_node1, self.receiving_node2])
|
||||||
|
|
||||||
def test_relay(self):
|
def test_relay(self):
|
||||||
self.node1 = self.running_a_node(NODE_1, relay="true", nodekey=NODEKEY)
|
self.node1 = self.running_a_node(NODE_1, relay="true")
|
||||||
self.node2 = self.running_a_node(NODE_2, relay="true", discv5_bootstrap_node=self.node1.get_enr_uri())
|
self.node2 = self.running_a_node(NODE_2, relay="true", discv5_bootstrap_node=self.node1.get_enr_uri())
|
||||||
self.main_nodes = [self.node1, self.node2]
|
self.main_nodes = [self.node1, self.node2]
|
||||||
self.ensure_relay_subscriptions_on_nodes(self.main_nodes, [self.test_pubsub_topic])
|
self.ensure_relay_subscriptions_on_nodes(self.main_nodes, [self.test_pubsub_topic])
|
||||||
self.wait_for_published_message_to_reach_relay_peer()
|
self.wait_for_published_message_to_reach_relay_peer()
|
||||||
|
|
||||||
def test_filter(self):
|
def test_filter(self):
|
||||||
self.node1 = self.running_a_node(NODE_1, relay="true", filter="true", nodekey=NODEKEY)
|
self.node1 = self.running_a_node(NODE_1, relay="true", filter="true")
|
||||||
self.node2 = self.running_a_node(
|
self.node2 = self.running_a_node(
|
||||||
NODE_2, relay="false", discv5_bootstrap_node=self.node1.get_enr_uri(), filternode=self.node1.get_multiaddr_with_id()
|
NODE_2, relay="false", discv5_bootstrap_node=self.node1.get_enr_uri(), filternode=self.node1.get_multiaddr_with_id()
|
||||||
)
|
)
|
||||||
|
@ -42,7 +42,7 @@ class TestDiscv5(StepsRelay, StepsFilter, StepsStore, StepsLightPush):
|
||||||
self.check_published_message_reaches_filter_peer()
|
self.check_published_message_reaches_filter_peer()
|
||||||
|
|
||||||
def test_store(self):
|
def test_store(self):
|
||||||
self.publishing_node1 = self.running_a_node(NODE_1, relay="true", store="true", nodekey=NODEKEY)
|
self.publishing_node1 = self.running_a_node(NODE_1, relay="true", store="true")
|
||||||
self.store_node1 = self.running_a_node(
|
self.store_node1 = self.running_a_node(
|
||||||
NODE_2,
|
NODE_2,
|
||||||
relay="true",
|
relay="true",
|
||||||
|
@ -55,7 +55,7 @@ class TestDiscv5(StepsRelay, StepsFilter, StepsStore, StepsLightPush):
|
||||||
self.wait_for_published_message_to_be_stored()
|
self.wait_for_published_message_to_be_stored()
|
||||||
|
|
||||||
def test_lightpush(self):
|
def test_lightpush(self):
|
||||||
self.receiving_node1 = self.running_a_node(NODE_1, lightpush="true", relay="true", nodekey=NODEKEY)
|
self.receiving_node1 = self.running_a_node(NODE_1, lightpush="true", relay="true")
|
||||||
self.receiving_node2 = self.running_a_node(NODE_1, lightpush="false", relay="true", discv5_bootstrap_node=self.receiving_node1.get_enr_uri())
|
self.receiving_node2 = self.running_a_node(NODE_1, lightpush="false", relay="true", discv5_bootstrap_node=self.receiving_node1.get_enr_uri())
|
||||||
self.light_push_node1 = self.running_a_node(
|
self.light_push_node1 = self.running_a_node(
|
||||||
NODE_2,
|
NODE_2,
|
||||||
|
|
|
@ -0,0 +1,179 @@
|
||||||
|
import pytest
|
||||||
|
from src.env_vars import NODE_1, NODE_2
|
||||||
|
from src.libs.common import delay
|
||||||
|
from src.libs.custom_logger import get_custom_logger
|
||||||
|
from src.node.waku_node import WakuNode
|
||||||
|
from src.steps.filter import StepsFilter
|
||||||
|
from src.steps.light_push import StepsLightPush
|
||||||
|
from src.steps.relay import StepsRelay
|
||||||
|
from src.steps.store import StepsStore
|
||||||
|
|
||||||
|
logger = get_custom_logger(__name__)
|
||||||
|
|
||||||
|
"""
|
||||||
|
In those tests we aim to combine multiple protocols/node types and create a more end-to-end scenario
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class TestE2E(StepsFilter, StepsStore, StepsRelay, StepsLightPush):
|
||||||
|
@pytest.fixture(scope="function", autouse=True)
|
||||||
|
def nodes(self):
|
||||||
|
self.node1 = WakuNode(NODE_2, f"node1_{self.test_id}")
|
||||||
|
self.node2 = WakuNode(NODE_1, f"node2_{self.test_id}")
|
||||||
|
self.node3 = WakuNode(NODE_2, f"node3_{self.test_id}")
|
||||||
|
|
||||||
|
def test_relay_receiving_node_not_connected_directly_to_relaying_node(self):
|
||||||
|
self.node1.start(relay="true")
|
||||||
|
self.node2.start(relay="true", discv5_bootstrap_node=self.node1.get_enr_uri())
|
||||||
|
self.node3.start(relay="true", discv5_bootstrap_node=self.node2.get_enr_uri())
|
||||||
|
|
||||||
|
self.node1.set_relay_subscriptions([self.test_pubsub_topic])
|
||||||
|
self.node2.set_relay_subscriptions([self.test_pubsub_topic])
|
||||||
|
self.node3.set_relay_subscriptions([self.test_pubsub_topic])
|
||||||
|
|
||||||
|
# for e2e scenarios I think waiting for autoconnection is important instead of forcing connection via API calls
|
||||||
|
# that's why the bellow code is commented to showcase this difference. In case we uncomment it, the connection will be faster
|
||||||
|
# self.add_node_peer(self.node2, [self.node1.get_multiaddr_with_id()])
|
||||||
|
# self.add_node_peer(self.node3, [self.node2.get_multiaddr_with_id()])
|
||||||
|
self.wait_for_autoconnection([self.node1, self.node2, self.node3], hard_wait=30)
|
||||||
|
|
||||||
|
# self.node1 relays and we check that self.node3 receives the message
|
||||||
|
self.check_published_message_reaches_relay_peer(sender=self.node1, peer_list=[self.node3], message_propagation_delay=1)
|
||||||
|
|
||||||
|
def test_filter_node_not_connected_directly_to_relaying_node(self):
|
||||||
|
self.node1.start(filter="true", relay="true")
|
||||||
|
self.node2.start(filter="true", relay="true", discv5_bootstrap_node=self.node1.get_enr_uri())
|
||||||
|
self.node3.start(relay="false", filternode=self.node2.get_multiaddr_with_id(), discv5_bootstrap_node=self.node2.get_enr_uri())
|
||||||
|
|
||||||
|
self.node1.set_relay_subscriptions([self.test_pubsub_topic])
|
||||||
|
self.node2.set_relay_subscriptions([self.test_pubsub_topic])
|
||||||
|
self.node3.set_filter_subscriptions({"requestId": "1", "contentFilters": [self.test_content_topic], "pubsubTopic": self.test_pubsub_topic})
|
||||||
|
|
||||||
|
# for e2e scenarios I think waiting for autoconnection is important instead of forcing connection via API calls
|
||||||
|
# that's why the bellow code is commented to showcase this difference. In case we uncomment it, the connection will be faster
|
||||||
|
# self.add_node_peer(self.node2, [self.node1.get_multiaddr_with_id()])
|
||||||
|
# self.add_node_peer(self.node3, [self.node2.get_multiaddr_with_id()])
|
||||||
|
self.wait_for_autoconnection([self.node1, self.node2, self.node3], hard_wait=30)
|
||||||
|
|
||||||
|
# self.node1 relays and we check that self.node3 receives the message
|
||||||
|
self.check_published_message_reaches_filter_peer(sender=self.node1, peer_list=[self.node3], message_propagation_delay=1)
|
||||||
|
|
||||||
|
def test_store_node_not_connected_directly_to_relaying_node(self):
|
||||||
|
self.node1.start(relay="true")
|
||||||
|
self.node2.start(store="true", relay="true", discv5_bootstrap_node=self.node1.get_enr_uri())
|
||||||
|
self.node3.start(relay="false", storenode=self.node2.get_multiaddr_with_id(), discv5_bootstrap_node=self.node2.get_enr_uri())
|
||||||
|
|
||||||
|
self.node1.set_relay_subscriptions([self.test_pubsub_topic])
|
||||||
|
self.node2.set_relay_subscriptions([self.test_pubsub_topic])
|
||||||
|
# self.node1 relays and we check that self.node3 receives the message
|
||||||
|
|
||||||
|
# for e2e scenarios I think waiting for autoconnection is important instead of forcing connection via API calls
|
||||||
|
# that's why the bellow code is commented to showcase this difference. In case we uncomment it, the connection will be faster
|
||||||
|
# self.add_node_peer(self.node2, [self.node1.get_multiaddr_with_id()])
|
||||||
|
# self.add_node_peer(self.node3, [self.node2.get_multiaddr_with_id()])
|
||||||
|
self.wait_for_autoconnection([self.node1, self.node2], hard_wait=30)
|
||||||
|
|
||||||
|
self.publish_message(sender=self.node1)
|
||||||
|
self.check_published_message_is_stored(page_size=50, ascending="true", store_node=self.node3)
|
||||||
|
|
||||||
|
def test_relay_receiving_node_not_connected_directly_to_lightpushing_node(self):
|
||||||
|
self.node1.start(lightpush="true", relay="true")
|
||||||
|
self.node2.start(
|
||||||
|
lightpush="true", relay="true", discv5_bootstrap_node=self.node1.get_enr_uri(), lightpushnode=self.node1.get_multiaddr_with_id()
|
||||||
|
)
|
||||||
|
self.node3.start(relay="true", discv5_bootstrap_node=self.node2.get_enr_uri())
|
||||||
|
|
||||||
|
self.node1.set_relay_subscriptions([self.test_pubsub_topic])
|
||||||
|
self.node2.set_relay_subscriptions([self.test_pubsub_topic])
|
||||||
|
self.node3.set_relay_subscriptions([self.test_pubsub_topic])
|
||||||
|
|
||||||
|
# for e2e scenarios I think waiting for autoconnection is important instead of forcing connection via API calls
|
||||||
|
# that's why the bellow code is commented to showcase this difference. In case we uncomment it, the connection will be faster
|
||||||
|
# self.add_node_peer(self.node2, [self.node1.get_multiaddr_with_id()])
|
||||||
|
# self.add_node_peer(self.node3, [self.node2.get_multiaddr_with_id()])
|
||||||
|
self.wait_for_autoconnection([self.node1, self.node2, self.node3], hard_wait=30)
|
||||||
|
|
||||||
|
# self.node1 light pushed and we check that self.node3 receives the message
|
||||||
|
self.check_light_pushed_message_reaches_receiving_peer(sender=self.node1, peer_list=[self.node3])
|
||||||
|
|
||||||
|
def test_filter_node_not_connected_directly_to_lightpushing_node(self):
|
||||||
|
self.node1.start(lightpush="true")
|
||||||
|
self.node2.start(
|
||||||
|
lightpush="true",
|
||||||
|
filter="true",
|
||||||
|
relay="true",
|
||||||
|
discv5_bootstrap_node=self.node1.get_enr_uri(),
|
||||||
|
lightpushnode=self.node1.get_multiaddr_with_id(),
|
||||||
|
)
|
||||||
|
self.node3.start(relay="false", filternode=self.node2.get_multiaddr_with_id(), discv5_bootstrap_node=self.node2.get_enr_uri())
|
||||||
|
|
||||||
|
self.node1.set_relay_subscriptions([self.test_pubsub_topic])
|
||||||
|
self.node2.set_relay_subscriptions([self.test_pubsub_topic])
|
||||||
|
self.node3.set_filter_subscriptions({"requestId": "1", "contentFilters": [self.test_content_topic], "pubsubTopic": self.test_pubsub_topic})
|
||||||
|
|
||||||
|
# for e2e scenarios I think waiting for autoconnection is important instead of forcing connection via API calls
|
||||||
|
# that's why the bellow code is commented to showcase this difference. In case we uncomment it, the connection will be faster
|
||||||
|
# self.add_node_peer(self.node2, [self.node1.get_multiaddr_with_id()])
|
||||||
|
# self.add_node_peer(self.node3, [self.node2.get_multiaddr_with_id()])
|
||||||
|
self.wait_for_autoconnection([self.node1, self.node2, self.node3], hard_wait=30)
|
||||||
|
|
||||||
|
# self.node1 light pushed and we check that self.node3 receives the message
|
||||||
|
self.node1.send_light_push_message(self.create_payload())
|
||||||
|
delay(1)
|
||||||
|
get_messages_response = self.get_filter_messages(self.test_content_topic, pubsub_topic=self.test_pubsub_topic, node=self.node3)
|
||||||
|
assert len(get_messages_response) == 1, f"Expected 1 message but got {len(get_messages_response)}"
|
||||||
|
|
||||||
|
def test_store_node_not_connected_directly_to_lightpushing_node(self):
|
||||||
|
self.node1.start(lightpush="true")
|
||||||
|
self.node2.start(
|
||||||
|
lightpush="true",
|
||||||
|
store="true",
|
||||||
|
relay="true",
|
||||||
|
discv5_bootstrap_node=self.node1.get_enr_uri(),
|
||||||
|
lightpushnode=self.node1.get_multiaddr_with_id(),
|
||||||
|
)
|
||||||
|
self.node3.start(relay="false", storenode=self.node2.get_multiaddr_with_id(), discv5_bootstrap_node=self.node2.get_enr_uri())
|
||||||
|
|
||||||
|
self.node1.set_relay_subscriptions([self.test_pubsub_topic])
|
||||||
|
self.node2.set_relay_subscriptions([self.test_pubsub_topic])
|
||||||
|
|
||||||
|
# for e2e scenarios I think waiting for autoconnection is important instead of forcing connection via API calls
|
||||||
|
# that's why the bellow code is commented to showcase this difference. In case we uncomment it, the connection will be faster
|
||||||
|
# self.add_node_peer(self.node2, [self.node1.get_multiaddr_with_id()])
|
||||||
|
# self.add_node_peer(self.node3, [self.node2.get_multiaddr_with_id()])
|
||||||
|
self.wait_for_autoconnection([self.node1, self.node2], hard_wait=30)
|
||||||
|
|
||||||
|
# self.node1 light pushed and we check that self.node3 receives the message
|
||||||
|
message = self.create_message()
|
||||||
|
self.node1.send_light_push_message(self.create_payload(message=message))
|
||||||
|
delay(1)
|
||||||
|
self.check_published_message_is_stored(page_size=50, ascending="true", store_node=self.node3, message_to_check=message)
|
||||||
|
|
||||||
|
def test_chain_of_relay_nodes(self):
|
||||||
|
self.node4 = WakuNode(NODE_2, f"node4_{self.test_id}")
|
||||||
|
self.node5 = WakuNode(NODE_2, f"node5_{self.test_id}")
|
||||||
|
self.node6 = WakuNode(NODE_2, f"node6_{self.test_id}")
|
||||||
|
self.node7 = WakuNode(NODE_2, f"node7_{self.test_id}")
|
||||||
|
self.node8 = WakuNode(NODE_2, f"node8_{self.test_id}")
|
||||||
|
self.node9 = WakuNode(NODE_2, f"node9_{self.test_id}")
|
||||||
|
self.node10 = WakuNode(NODE_2, f"node10_{self.test_id}")
|
||||||
|
|
||||||
|
self.node1.start(relay="true")
|
||||||
|
self.node2.start(relay="true", discv5_bootstrap_node=self.node1.get_enr_uri())
|
||||||
|
self.node3.start(relay="true", discv5_bootstrap_node=self.node2.get_enr_uri())
|
||||||
|
self.node4.start(relay="true", discv5_bootstrap_node=self.node3.get_enr_uri())
|
||||||
|
self.node5.start(relay="true", discv5_bootstrap_node=self.node4.get_enr_uri())
|
||||||
|
self.node6.start(relay="true", discv5_bootstrap_node=self.node5.get_enr_uri())
|
||||||
|
self.node7.start(relay="true", discv5_bootstrap_node=self.node6.get_enr_uri())
|
||||||
|
self.node8.start(relay="true", discv5_bootstrap_node=self.node7.get_enr_uri())
|
||||||
|
self.node9.start(relay="true", discv5_bootstrap_node=self.node8.get_enr_uri())
|
||||||
|
self.node10.start(relay="true", discv5_bootstrap_node=self.node9.get_enr_uri())
|
||||||
|
|
||||||
|
node_list = [self.node1, self.node2, self.node3, self.node4, self.node5, self.node6, self.node7, self.node8, self.node9, self.node10]
|
||||||
|
for node in node_list:
|
||||||
|
node.set_relay_subscriptions([self.test_pubsub_topic])
|
||||||
|
|
||||||
|
self.wait_for_autoconnection(node_list, hard_wait=30)
|
||||||
|
|
||||||
|
# self.node1 relays and we check that self.node10 receives the message
|
||||||
|
self.check_published_message_reaches_relay_peer(sender=self.node1, peer_list=[self.node10], message_propagation_delay=1)
|
Loading…
Reference in New Issue