From a034ad6a5b98a7d1ac0e5ee8deb22efed8220aa8 Mon Sep 17 00:00:00 2001 From: Roman Date: Tue, 23 Apr 2024 13:57:47 +0800 Subject: [PATCH] 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 --- src/node/api_clients/rest.py | 9 +++++++++ src/node/waku_node.py | 10 +++++++++- src/steps/rln.py | 2 +- tests/relay/test_rln.py | 21 ++++++++++++++++++++- 4 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/node/api_clients/rest.py b/src/node/api_clients/rest.py index bfb6bea0..daaedd0c 100644 --- a/src/node/api_clients/rest.py +++ b/src/node/api_clients/rest.py @@ -15,10 +15,19 @@ class REST(BaseClient): headers = {"Content-Type": "application/json"} return self.make_request(method, url, headers=headers, data=payload) + def rest_call_text(self, method, endpoint, payload=None): + url = f"http://127.0.0.1:{self._rest_port}/{endpoint}" + headers = {"accept": "text/plain"} + return self.make_request(method, url, headers=headers, data=payload) + def info(self): info_response = self.rest_call("get", "debug/v1/info") return info_response.json() + def health(self): + health_response = self.rest_call_text("get", "health") + return health_response.text() + def get_peers(self): get_peers_response = self.rest_call("get", "admin/v1/peers") return get_peers_response.json() diff --git a/src/node/waku_node.py b/src/node/waku_node.py index afd864a4..3effa16e 100644 --- a/src/node/waku_node.py +++ b/src/node/waku_node.py @@ -186,11 +186,16 @@ class WakuNode: logger.debug(f"Unpause container with id {self._container.short_id}") self._container.unpause() - @retry(stop=stop_after_delay(10), wait=wait_fixed(0.1), reraise=True) + @retry(stop=stop_after_delay(600), wait=wait_fixed(1), reraise=True) def ensure_ready(self): self.info_response = self.info() logger.info("REST service is ready !!") + @retry(stop=stop_after_delay(600), wait=wait_fixed(1), reraise=True) + def ensure_healthy(self): + self.health_response = self.health() + logger.info("Node is healthy !!") + def get_enr_uri(self): try: return self.info_response["enrUri"] @@ -210,6 +215,9 @@ class WakuNode: def info(self): return self._api.info() + def health(self): + return self._api.health() + def get_peers(self): return self._api.get_peers() diff --git a/src/steps/rln.py b/src/steps/rln.py index d2017489..c48ba704 100644 --- a/src/steps/rln.py +++ b/src/steps/rln.py @@ -1,4 +1,4 @@ -from src.env_vars import DEFAULT_NWAKU, RLN_CREDENTIALS, NODEKEY, NODE_1, NODE_2 +from src.env_vars import DEFAULT_NWAKU, RLN_CREDENTIALS, NODEKEY from src.libs.common import gen_step_id, to_base64 from src.libs.custom_logger import get_custom_logger import os diff --git a/tests/relay/test_rln.py b/tests/relay/test_rln.py index 39a7a41d..40f3218d 100644 --- a/tests/relay/test_rln.py +++ b/tests/relay/test_rln.py @@ -105,7 +105,7 @@ class TestRelayRLN(StepsRLN, StepsRelay): failed_payloads.append(payload["description"]) assert not failed_payloads, f"Payloads failed: {failed_payloads}" - @pytest.mark.skip(reason="pending on https://github.com/waku-org/nwaku/issues/2606") + @pytest.mark.timeout(600) def test_publish_with_valid_payloads_dynamic_at_slow_rate(self): self.setup_first_rln_relay_node(rln_relay_dynamic="true") self.setup_second_rln_relay_node(rln_relay_dynamic="true") @@ -121,3 +121,22 @@ class TestRelayRLN(StepsRLN, StepsRelay): failed_payloads.append(payload["description"]) delay(1) assert not failed_payloads, f"Payloads failed: {failed_payloads}" + + @pytest.mark.timeout(600) + def test_publish_with_valid_payloads_dynamic_at_spam_rate(self): + self.setup_first_rln_relay_node(rln_relay_dynamic="true") + self.setup_second_rln_relay_node(rln_relay_dynamic="true") + self.subscribe_main_relay_nodes() + previous = math.trunc(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: + now = math.trunc(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)