mirror of
https://github.com/logos-messaging/logos-messaging-interop-tests.git
synced 2026-01-04 23:13:09 +00:00
* fix: add get_multiaddr_with_id step - temporarily use local docker images * fix: discard containers used for RLN registration * fix: switch to use cluster ID 1 for RLN * test: publish at slow and spam rate * fix: shorten test data set * fix: move RLN related code into separate class * fix: use send only publish function - add spam and alternate rate tests * fix: use math.trunc instead of rounding * fix: first message without delay * fix: add one more second to messages with delay * fix: add methods to setup non default RLN nodes * fix: rewrite tests using steps rather than fixtures - prepare for non default settings for RLN * test: random epoch with valid_payloads_at_slow_rate * test: random user message limit with valid payloads * fix: skip test "random user message limit with valid payloads" * fix: mark flaky "at variable_rate with valid payloads" * fix: rename tests for easier debugging * fix: mark valid_payloads_dynamic_at_slow_rate to skip * fix: forgot to add actual file * test: valid payloads dynamic(on chain) at spam rate - extend timeout for ensure_ready() to 600s - add ensure_healthy() for future use - add text content based rest call - remove NODE1, NODE2 imports * fix: revert env_vars to source images from Harbor * fix: reuse setup first and second rln relay node for setup_main_rln_relay_nodes * fix: reuse register_rln_single_node for register_main_rln_relay_nodes * fix: start using src.steps.common - removed RLN test class inheritance from StepsRelay * fix: test using whole data set at test payloads_at_slow_rate * fix: switch to send msg and check for slow rate tests * fix: add comment for skip check at first message * fix: refactor payloads_at_variable_rate to use only one payload pattern * fix: remove the plural from payloads_at_variable_rate * fix: multiple class inheritance for TestRelayRLN * test: node1 with rln node2 without rln at spam rate * test: mixed epoch at slow rate * test: add lightpush methods * test: send valid payloads lightpush at spam rate * fix: node1 to act as light push receiving node - add setup lightpush node to spin off node2 with lightpush support * fix: use NODE1 NODE2 instead of DEFAULT_NWAKU * fix: no lightpush param required for plain RLN relay * fix: comment for lightpush * fix: comment for lightpush - wait for implementation * fix: comment on chain tests * fix: add lightpush case to publish_message * fix: remove check_light_pushed_message_reaches_receiving_peer from StepsRLN * fix: change comment for mixed_epoch_at_slow_rate * test: happy and common case with 5 nodes * fix: add all required fixtures explicitly * fix: add timeout param to ensure_ready * fix: skip RLN tests for go-waku * fix: reformated with pre-commit * fix: uncomment skip for debugging * fix: put the skip back * fix: change comment for on chain tests * fix: run RLN tests in serial - add grouping of tests to runner - use smaller dataset for spam rate tests * test: Nim to Nim workflow * test: check also additional nodes for go-waku * test: all nodes are nwaku * fix: string quotes * fix: remove additional nodes * fix: re-arrange skip conditions * test: RLN only * fix: change default additional nodes to nwaku only * fix: change additional nodes rather at top level workflow * fix: enable all tests * test: problems with current workdir * test: rln only * test: correct typo * test: re-enable all tests - remove current dir debug * fix: nwaku additional nodes for nim to nim worklfow * fix: re-able discord notification - delete test workflow * fix: add get_multiaddr_with_id step - temporarily use local docker images * fix: discard containers used for RLN registration * fix: switch to use cluster ID 1 for RLN * test: publish at slow and spam rate * fix: shorten test data set * fix: rebase onto master * fix: use send only publish function - add spam and alternate rate tests * fix: use math.trunc instead of rounding * fix: first message without delay * fix: add one more second to messages with delay * fix: add methods to setup non default RLN nodes * fix: rewrite tests using steps rather than fixtures - prepare for non default settings for RLN * test: random epoch with valid_payloads_at_slow_rate * test: random user message limit with valid payloads * fix: skip test "random user message limit with valid payloads" * fix: mark flaky "at variable_rate with valid payloads" * fix: rename tests for easier debugging * fix: mark valid_payloads_dynamic_at_slow_rate to skip * fix: forgot to add actual file * test: valid payloads dynamic(on chain) at spam rate - extend timeout for ensure_ready() to 600s - add ensure_healthy() for future use - add text content based rest call - remove NODE1, NODE2 imports * fix: revert env_vars to source images from Harbor * fix: reuse setup first and second rln relay node for setup_main_rln_relay_nodes * fix: reuse register_rln_single_node for register_main_rln_relay_nodes * fix: start using src.steps.common - removed RLN test class inheritance from StepsRelay * fix: test using whole data set at test payloads_at_slow_rate * fix: switch to send msg and check for slow rate tests * fix: add comment for skip check at first message * fix: refactor payloads_at_variable_rate to use only one payload pattern * fix: remove the plural from payloads_at_variable_rate * fix: multiple class inheritance for TestRelayRLN * test: node1 with rln node2 without rln at spam rate * test: mixed epoch at slow rate * test: add lightpush methods * test: send valid payloads lightpush at spam rate * fix: node1 to act as light push receiving node - add setup lightpush node to spin off node2 with lightpush support * fix: use NODE1 NODE2 instead of DEFAULT_NWAKU * fix: no lightpush param required for plain RLN relay * fix: comment for lightpush * fix: comment for lightpush - wait for implementation * fix: comment on chain tests * fix: add lightpush case to publish_message * fix: remove check_light_pushed_message_reaches_receiving_peer from StepsRLN * fix: change comment for mixed_epoch_at_slow_rate * test: happy and common case with 5 nodes * fix: add all required fixtures explicitly * fix: add timeout param to ensure_ready * fix: skip RLN tests for go-waku * fix: uncomment skip for debugging * fix: put the skip back * fix: change comment for on chain tests * fix: run RLN tests in serial - add grouping of tests to runner - use smaller dataset for spam rate tests * test: Nim to Nim workflow * test: check also additional nodes for go-waku * test: all nodes are nwaku * fix: string quotes * fix: remove additional nodes * fix: re-arrange skip conditions * test: RLN only * fix: change default additional nodes to nwaku only * fix: change additional nodes rather at top level workflow * fix: enable all tests * test: problems with current workdir * test: rln only * test: correct typo * test: re-enable all tests - remove current dir debug * fix: nwaku additional nodes for nim to nim worklfow * fix: re-able discord notification - delete test workflow * test: re-test again after rebase * fix: wait longer for credential store * test: try again with Discord report off * fix: enable Discord - delete test workflow
179 lines
7.0 KiB
Python
179 lines
7.0 KiB
Python
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
|
|
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 StepsRLN(StepsCommon):
|
|
test_pubsub_topic = PUBSUB_TOPICS_RLN[0]
|
|
test_content_topic = "/test/1/waku-rln-relay/proto"
|
|
test_payload = "RLN relay works!!"
|
|
|
|
main_nodes = []
|
|
optional_nodes = []
|
|
multiaddr_list = []
|
|
lightpush_nodes = []
|
|
|
|
@pytest.fixture(scope="function")
|
|
def register_main_rln_relay_nodes(self, request):
|
|
logger.debug(f"Running fixture setup: {inspect.currentframe().f_code.co_name}")
|
|
self.register_rln_single_node(rln_creds_source=RLN_CREDENTIALS, rln_creds_id="1")
|
|
self.register_rln_single_node(rln_creds_source=RLN_CREDENTIALS, rln_creds_id="2")
|
|
|
|
@pytest.fixture(scope="function")
|
|
def register_optional_rln_relay_nodes(self, request):
|
|
logger.debug(f"Running fixture setup: {inspect.currentframe().f_code.co_name}")
|
|
self.register_rln_single_node(rln_creds_source=RLN_CREDENTIALS, rln_creds_id="3")
|
|
self.register_rln_single_node(rln_creds_source=RLN_CREDENTIALS, rln_creds_id="4")
|
|
self.register_rln_single_node(rln_creds_source=RLN_CREDENTIALS, rln_creds_id="5")
|
|
|
|
@allure.step
|
|
def setup_main_rln_relay_nodes(self, **kwargs):
|
|
self.setup_first_rln_relay_node(**kwargs)
|
|
self.setup_second_rln_relay_node(**kwargs)
|
|
|
|
@allure.step
|
|
def setup_first_rln_relay_node(self, **kwargs):
|
|
self.node1 = WakuNode(NODE_1, f"node1_{self.test_id}")
|
|
self.node1.start(
|
|
relay="true",
|
|
nodekey=NODEKEY,
|
|
rln_creds_source=RLN_CREDENTIALS,
|
|
rln_creds_id="1",
|
|
rln_relay_membership_index="1",
|
|
**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])
|
|
|
|
self.multiaddr_list.extend([self.node1.get_multiaddr_with_id()])
|
|
|
|
@allure.step
|
|
def setup_second_rln_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,
|
|
rln_creds_source=RLN_CREDENTIALS,
|
|
rln_creds_id="2",
|
|
rln_relay_membership_index="1",
|
|
**kwargs,
|
|
)
|
|
self.add_node_peer(self.node2, [self.multiaddr_with_id])
|
|
self.main_nodes.extend([self.node2])
|
|
|
|
@allure.step
|
|
def setup_optional_rln_relay_nodes(self, **kwargs):
|
|
if ADDITIONAL_NODES:
|
|
nodes = [node.strip() for node in ADDITIONAL_NODES.split(",")]
|
|
else:
|
|
pytest.skip("ADDITIONAL_NODES is empty, cannot run test")
|
|
if len(nodes) > 3:
|
|
logger.debug("More than 3 nodes are not supported for RLN tests, using first 3")
|
|
nodes = nodes[:3]
|
|
for index, node in enumerate(nodes):
|
|
node = WakuNode(node, f"node{index + 3}_{self.test_id}")
|
|
node.start(
|
|
relay="true",
|
|
discv5_bootstrap_node=self.enr_uri,
|
|
rln_creds_source=RLN_CREDENTIALS,
|
|
rln_creds_id=f"{index + 3}",
|
|
rln_relay_membership_index="1",
|
|
**kwargs,
|
|
)
|
|
self.add_node_peer(node, [self.multiaddr_with_id])
|
|
self.optional_nodes.append(node)
|
|
|
|
@allure.step
|
|
def setup_second_lightpush_node(self, relay="false", **kwargs):
|
|
self.light_push_node2 = WakuNode(NODE_2, f"lightpush_node2_{self.test_id}")
|
|
self.light_push_node2.start(relay=relay, discv5_bootstrap_node=self.enr_uri, lightpush="true", lightpushnode=self.multiaddr_list[0], **kwargs)
|
|
if relay == "true":
|
|
self.main_nodes.extend([self.light_push_node2])
|
|
self.lightpush_nodes.extend([self.light_push_node2])
|
|
self.add_node_peer(self.light_push_node2, self.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 register_rln_single_node(self, **kwargs):
|
|
logger.debug("Registering RLN credentials for single node")
|
|
self.node1 = WakuNode(DEFAULT_NWAKU, f"node1_{gen_step_id()}")
|
|
self.node1.register_rln(rln_creds_source=kwargs["rln_creds_source"], rln_creds_id=kwargs["rln_creds_id"])
|
|
|
|
@allure.step
|
|
def check_rln_registration(self, key_id):
|
|
current_working_directory = os.getcwd()
|
|
creds_file_path = f"{current_working_directory}/keystore_{key_id}/keystore.json"
|
|
try:
|
|
rln_credential_store_ready(creds_file_path)
|
|
except Exception as ex:
|
|
logger.error(f"Credentials at {creds_file_path} not available: {ex}")
|
|
raise
|
|
|
|
@allure.step
|
|
def publish_message(self, message=None, pubsub_topic=None, sender=None, use_lightpush=False):
|
|
if message is None:
|
|
message = self.create_message()
|
|
if pubsub_topic is None:
|
|
pubsub_topic = self.test_pubsub_topic
|
|
if not sender:
|
|
sender = self.node1
|
|
|
|
if use_lightpush:
|
|
payload = self.create_payload(pubsub_topic, message)
|
|
sender.send_light_push_message(payload)
|
|
else:
|
|
sender.send_relay_message(message, pubsub_topic)
|
|
|
|
@allure.step
|
|
def ensure_relay_subscriptions_on_nodes(self, node_list, pubsub_topic_list):
|
|
for node in node_list:
|
|
node.set_relay_subscriptions(pubsub_topic_list)
|
|
|
|
@allure.step
|
|
def subscribe_main_relay_nodes(self):
|
|
self.ensure_relay_subscriptions_on_nodes(self.main_nodes, [self.test_pubsub_topic])
|
|
|
|
@allure.step
|
|
def subscribe_optional_relay_nodes(self):
|
|
self.ensure_relay_subscriptions_on_nodes(self.optional_nodes, [self.test_pubsub_topic])
|
|
|
|
@allure.step
|
|
def create_payload(self, pubsub_topic=None, message=None, **kwargs):
|
|
if message is None:
|
|
message = self.create_message()
|
|
if pubsub_topic is None:
|
|
pubsub_topic = self.test_pubsub_topic
|
|
payload = {"pubsubTopic": pubsub_topic, "message": message}
|
|
payload.update(kwargs)
|
|
return payload
|