mirror of
https://github.com/varun-r-mallya/py-libp2p.git
synced 2025-12-31 20:36:24 +00:00
104 lines
2.9 KiB
Python
104 lines
2.9 KiB
Python
import asyncio
|
|
|
|
import pytest
|
|
|
|
from libp2p.pubsub.pb import rpc_pb2
|
|
|
|
from tests.utils import (
|
|
connect,
|
|
)
|
|
|
|
|
|
TESTING_TOPIC = "TEST_SUBSCRIBE"
|
|
TESTIND_DATA = b"data"
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"num_hosts",
|
|
(1,),
|
|
)
|
|
@pytest.mark.asyncio
|
|
async def test_subscribe_and_unsubscribe(pubsubs_fsub):
|
|
await pubsubs_fsub[0].subscribe(TESTING_TOPIC)
|
|
assert TESTING_TOPIC in pubsubs_fsub[0].my_topics
|
|
|
|
await pubsubs_fsub[0].unsubscribe(TESTING_TOPIC)
|
|
assert TESTING_TOPIC not in pubsubs_fsub[0].my_topics
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"num_hosts",
|
|
(1,),
|
|
)
|
|
@pytest.mark.asyncio
|
|
async def test_re_subscribe(pubsubs_fsub):
|
|
await pubsubs_fsub[0].subscribe(TESTING_TOPIC)
|
|
assert TESTING_TOPIC in pubsubs_fsub[0].my_topics
|
|
|
|
await pubsubs_fsub[0].subscribe(TESTING_TOPIC)
|
|
assert TESTING_TOPIC in pubsubs_fsub[0].my_topics
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"num_hosts",
|
|
(1,),
|
|
)
|
|
@pytest.mark.asyncio
|
|
async def test_re_unsubscribe(pubsubs_fsub):
|
|
# Unsubscribe from topic we didn't even subscribe to
|
|
assert "NOT_MY_TOPIC" not in pubsubs_fsub[0].my_topics
|
|
await pubsubs_fsub[0].unsubscribe("NOT_MY_TOPIC")
|
|
assert "NOT_MY_TOPIC" not in pubsubs_fsub[0].my_topics
|
|
|
|
await pubsubs_fsub[0].subscribe(TESTING_TOPIC)
|
|
assert TESTING_TOPIC in pubsubs_fsub[0].my_topics
|
|
|
|
await pubsubs_fsub[0].unsubscribe(TESTING_TOPIC)
|
|
assert TESTING_TOPIC not in pubsubs_fsub[0].my_topics
|
|
|
|
await pubsubs_fsub[0].unsubscribe(TESTING_TOPIC)
|
|
assert TESTING_TOPIC not in pubsubs_fsub[0].my_topics
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_peers_subscribe(pubsubs_fsub):
|
|
await connect(pubsubs_fsub[0].host, pubsubs_fsub[1].host)
|
|
await pubsubs_fsub[0].subscribe(TESTING_TOPIC)
|
|
# Yield to let 0 notify 1
|
|
await asyncio.sleep(0.1)
|
|
assert str(pubsubs_fsub[0].my_id) in pubsubs_fsub[1].peer_topics[TESTING_TOPIC]
|
|
await pubsubs_fsub[0].unsubscribe(TESTING_TOPIC)
|
|
# Yield to let 0 notify 1
|
|
await asyncio.sleep(0.1)
|
|
assert str(pubsubs_fsub[0].my_id) not in pubsubs_fsub[1].peer_topics[TESTING_TOPIC]
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"num_hosts",
|
|
(1,),
|
|
)
|
|
@pytest.mark.asyncio
|
|
async def test_get_hello_packet(pubsubs_fsub):
|
|
def _get_hello_packet_topic_ids():
|
|
packet = rpc_pb2.RPC()
|
|
packet.ParseFromString(pubsubs_fsub[0].get_hello_packet())
|
|
return tuple(
|
|
sub.topicid
|
|
for sub in packet.subscriptions
|
|
)
|
|
|
|
# pylint: disable=len-as-condition
|
|
# Test: No subscription, so there should not be any topic ids in the hello packet.
|
|
assert len(_get_hello_packet_topic_ids()) == 0
|
|
|
|
# Test: After subscriptions, topic ids should be in the hello packet.
|
|
topic_ids = ["t", "o", "p", "i", "c"]
|
|
await asyncio.gather(*[
|
|
pubsubs_fsub[0].subscribe(topic)
|
|
for topic in topic_ids
|
|
])
|
|
topic_ids_in_hello = _get_hello_packet_topic_ids()
|
|
for topic in topic_ids:
|
|
assert topic in topic_ids_in_hello
|
|
|