diff --git a/src/steps/rln.py b/src/steps/rln.py index 9b971d1e..27e2b594 100644 --- a/src/steps/rln.py +++ b/src/steps/rln.py @@ -1,12 +1,12 @@ from src.env_vars import DEFAULT_NWAKU, RLN_CREDENTIALS, NODEKEY -from src.libs.common import gen_step_id +from src.libs.common import gen_step_id, to_base64 from src.libs.custom_logger import get_custom_logger import os import inspect import pytest import allure +from time import time from src.node.waku_node import WakuNode, rln_credential_store_ready -from tenacity import retry, stop_after_delay, wait_fixed from src.test_data import PUBSUB_TOPICS_RLN logger = get_custom_logger(__name__) @@ -16,7 +16,7 @@ class StepsRLN: test_pubsub_topic = PUBSUB_TOPICS_RLN[0] test_content_topic = "/test/1/waku-rln-relay/proto" test_payload = "RLN relay works!!" - + epoch_time = 1 # seconds main_nodes = [] optional_nodes = [] @@ -58,3 +58,19 @@ class StepsRLN: except Exception as ex: logger.error(f"Credentials at {creds_file_path} not available: {ex}") raise + + @allure.step + def create_message(self, **kwargs): + message = {"payload": to_base64(self.test_payload), "contentTopic": self.test_content_topic, "timestamp": int(time() * 1e9)} + message.update(kwargs) + return message + + def publish_message(self, message=None, pubsub_topic=None, sender=None): + 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 + + sender.send_relay_message(message, pubsub_topic) diff --git a/tests/relay/test_rln.py b/tests/relay/test_rln.py index d183f960..9d02cd6a 100644 --- a/tests/relay/test_rln.py +++ b/tests/relay/test_rln.py @@ -1,3 +1,6 @@ +import math +from time import time + import pytest from src.libs.common import delay, to_base64 @@ -17,7 +20,7 @@ class TestRelayRLN(StepsRLN, StepsRelay): logger.debug(f'Running test with payload {payload["description"]}') message = self.create_message(payload=to_base64(payload["value"])) try: - self.check_published_message_reaches_relay_peer(message) + self.publish_message(message) except Exception as e: logger.error(f'Payload {payload["description"]} failed: {str(e)}') failed_payloads.append(payload["description"]) @@ -25,12 +28,34 @@ class TestRelayRLN(StepsRLN, StepsRelay): assert not failed_payloads, f"Payloads failed: {failed_payloads}" def test_publish_with_valid_payloads_at_spam_rate(self): - for i, payload in enumerate(SAMPLE_INPUTS[:2]): + previous = int(time()) + for i, payload in enumerate(SAMPLE_INPUTS[:4]): logger.debug(f'Running test with payload {payload["description"]}') message = self.create_message(payload=to_base64(payload["value"])) try: - self.check_published_message_reaches_relay_peer(message) - if i > 0: + now = int(time()) + self.publish_message(message) + if i > 0 and (now - previous) == 0: raise AssertionError("Publish with RLN enabled at spam rate worked!!!") + else: + previous = now + except Exception as e: + assert "RLN validation failed" in str(e) + + def test_publish_with_valid_payloads_at_alternate_rate(self): + previous = math.trunc(time()) + for i, payload in enumerate(SAMPLE_INPUTS): + logger.debug(f'Running test with payload {payload["description"]}') + message = self.create_message(payload=to_base64(payload["value"])) + try: + if (i + 1) % 2 == 1: # every odd sample should be sent slowly + delay(1) + now = math.trunc(time()) + logger.debug(f"Message sent at timestamp {now}") + self.publish_message(message) + if i > 0 and (now - previous) == 0: + raise AssertionError("Publish with RLN enabled at spam rate worked!!!") + else: + previous = now except Exception as e: assert "RLN validation failed" in str(e)