mirror of
https://github.com/logos-messaging/logos-messaging-interop-tests.git
synced 2026-01-04 23:13:09 +00:00
191 lines
7.5 KiB
Python
191 lines
7.5 KiB
Python
import inspect
|
|
from src.libs.custom_logger import get_custom_logger
|
|
from time import time
|
|
import pytest
|
|
import allure
|
|
from src.libs.common import delay
|
|
from src.node.waku_message import WakuMessage
|
|
from src.env_vars import (
|
|
ADDITIONAL_NODES,
|
|
NODE_1,
|
|
NODE_2,
|
|
)
|
|
from src.node.waku_node import WakuNode
|
|
from src.steps.common import StepsCommon
|
|
|
|
logger = get_custom_logger(__name__)
|
|
|
|
|
|
class StepsStore(StepsCommon):
|
|
test_content_topic = "/myapp/1/latest/proto"
|
|
test_pubsub_topic = "/waku/2/rs/0/0"
|
|
test_payload = "Store works!!"
|
|
|
|
@pytest.fixture(scope="function", autouse=True)
|
|
def store_setup(self):
|
|
logger.debug(f"Running fixture setup: {inspect.currentframe().f_code.co_name}")
|
|
self.main_publishing_nodes = []
|
|
self.store_nodes = []
|
|
self.optional_nodes = []
|
|
self.multiaddr_list = []
|
|
|
|
@allure.step
|
|
def start_publishing_node(self, image, node_index, **kwargs):
|
|
node = WakuNode(image, f"publishing_node{node_index}_{self.test_id}")
|
|
node.start(**kwargs)
|
|
if kwargs["relay"] == "true":
|
|
self.main_publishing_nodes.extend([node])
|
|
if kwargs["store"] == "true":
|
|
self.store_nodes.extend([node])
|
|
self.add_node_peer(node, self.multiaddr_list)
|
|
self.multiaddr_list.extend([node.get_multiaddr_with_id()])
|
|
return node
|
|
|
|
@allure.step
|
|
def setup_store_node(self, image, node_index, **kwargs):
|
|
node = WakuNode(image, f"store_node{node_index}_{self.test_id}")
|
|
node.start(discv5_bootstrap_node=self.enr_uri, storenode=self.multiaddr_list[0], **kwargs)
|
|
if kwargs["relay"] == "true":
|
|
self.main_publishing_nodes.extend([node])
|
|
self.store_nodes.extend([node])
|
|
self.add_node_peer(node, self.multiaddr_list)
|
|
return node
|
|
|
|
@allure.step
|
|
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, **kwargs)
|
|
self.enr_uri = self.publishing_node1.get_enr_uri()
|
|
|
|
@allure.step
|
|
def setup_second_publishing_node(self, store, relay, **kwargs):
|
|
self.publishing_node2 = self.start_publishing_node(NODE_1, node_index=2, store=store, relay=relay, **kwargs)
|
|
|
|
@allure.step
|
|
def setup_additional_publishing_nodes(self, node_list=ADDITIONAL_NODES, **kwargs):
|
|
if node_list:
|
|
nodes = [node.strip() for node in node_list.split(",") if node]
|
|
else:
|
|
pytest.skip("ADDITIONAL_NODES/node_list is empty, cannot run test")
|
|
for index, node in enumerate(nodes):
|
|
self.start_publishing_node(node, node_index=index + 2, store="true", relay="true", **kwargs)
|
|
|
|
@allure.step
|
|
def setup_first_store_node(self, store="true", relay="true", **kwargs):
|
|
self.store_node1 = self.setup_store_node(NODE_2, node_index=1, store=store, relay=relay, **kwargs)
|
|
|
|
@allure.step
|
|
def setup_second_store_node(self, store="true", relay="false", **kwargs):
|
|
self.store_node2 = self.setup_store_node(NODE_2, node_index=2, store=store, relay=relay, **kwargs)
|
|
|
|
@allure.step
|
|
def setup_additional_store_nodes(self, node_list=ADDITIONAL_NODES, **kwargs):
|
|
if node_list:
|
|
nodes = [node.strip() for node in node_list.split(",") if node]
|
|
else:
|
|
pytest.skip("ADDITIONAL_NODES/node_list is empty, cannot run test")
|
|
self.additional_store_nodes = []
|
|
for index, node in enumerate(nodes):
|
|
node = self.setup_store_node(node, node_index=index + 2, store="true", relay="false", **kwargs)
|
|
self.additional_store_nodes.append(node)
|
|
|
|
@allure.step
|
|
def subscribe_to_pubsub_topics_via_relay(self, node=None, pubsub_topics=None):
|
|
if pubsub_topics is None:
|
|
pubsub_topics = [self.test_pubsub_topic]
|
|
if not node:
|
|
node = self.main_publishing_nodes
|
|
if isinstance(node, list):
|
|
for node in node:
|
|
node.set_relay_subscriptions(pubsub_topics)
|
|
else:
|
|
node.set_relay_subscriptions(pubsub_topics)
|
|
|
|
@allure.step
|
|
def subscribe_to_pubsub_topics_via_filter(self, node, pubsub_topic=None, content_topic=None):
|
|
if pubsub_topic is None:
|
|
pubsub_topic = self.test_pubsub_topic
|
|
if content_topic is None:
|
|
content_topic = [self.test_content_topic]
|
|
subscription = {"requestId": "1", "contentFilters": content_topic, "pubsubTopic": pubsub_topic}
|
|
node.set_filter_subscriptions(subscription)
|
|
|
|
@allure.step
|
|
def publish_message_via(self, type, pubsub_topic=None, message=None, message_propagation_delay=0.1, sender=None):
|
|
self.message = self.create_message() if message is None else message
|
|
if pubsub_topic is None:
|
|
pubsub_topic = self.test_pubsub_topic
|
|
if not sender:
|
|
sender = self.publishing_node1
|
|
if type == "relay":
|
|
logger.debug("Relaying message")
|
|
sender.send_relay_message(self.message, pubsub_topic)
|
|
elif type == "lightpush":
|
|
payload = self.create_payload(pubsub_topic, self.message)
|
|
sender.send_light_push_message(payload)
|
|
delay(message_propagation_delay)
|
|
|
|
@allure.step
|
|
def check_published_message_is_stored(
|
|
self,
|
|
store_node=None,
|
|
peerAddr=None,
|
|
includeData=None,
|
|
pubsubTopic=None,
|
|
contentTopics=None,
|
|
startTime=None,
|
|
endTime=None,
|
|
hashes=None,
|
|
cursor=None,
|
|
pageSize=None,
|
|
ascending=None,
|
|
store_v="v1",
|
|
**kwargs,
|
|
):
|
|
if store_node is None:
|
|
store_node = self.store_nodes
|
|
elif not isinstance(store_node, list):
|
|
store_node = [store_node]
|
|
else:
|
|
store_node = store_node
|
|
for node in store_node:
|
|
logger.debug(f"Checking that peer {node.image} can find the stored message")
|
|
self.store_response = node.get_store_messages(
|
|
peerAddr=peerAddr,
|
|
includeData=includeData,
|
|
pubsubTopic=pubsubTopic,
|
|
contentTopics=contentTopics,
|
|
startTime=startTime,
|
|
endTime=endTime,
|
|
hashes=hashes,
|
|
cursor=cursor,
|
|
pageSize=pageSize,
|
|
ascending=ascending,
|
|
store_v=store_v,
|
|
**kwargs,
|
|
)
|
|
|
|
assert "messages" in self.store_response, f"Peer {node.image} has no messages key in the reponse"
|
|
assert self.store_response["messages"], f"Peer {node.image} couldn't find any messages"
|
|
assert len(self.store_response["messages"]) >= 1, "Expected at least 1 message but got none"
|
|
waku_message = WakuMessage(self.store_response["messages"][-1:])
|
|
waku_message.assert_received_message(self.message)
|
|
|
|
@allure.step
|
|
def check_store_returns_empty_response(self, pubsub_topic=None):
|
|
if not pubsub_topic:
|
|
pubsub_topic = self.test_pubsub_topic
|
|
try:
|
|
self.check_published_message_is_stored(pubsubTopic=pubsub_topic, pageSize=5, ascending="true")
|
|
except Exception as ex:
|
|
assert "couldn't find any messages" in str(ex)
|
|
|
|
@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
|