diff --git a/tests/all_tests_v2.nim b/tests/all_tests_v2.nim index 9141368fd..7cfdc36b1 100644 --- a/tests/all_tests_v2.nim +++ b/tests/all_tests_v2.nim @@ -8,6 +8,7 @@ import ./v2/test_waku_filter, ./v2/test_waku_payload, ./v2/test_waku_swap, + ./v2/test_utils_peers, ./v2/test_utils_pagination, ./v2/test_message_cache, ./v2/test_message_store_queue, diff --git a/tests/v2/test_utils_peers.nim b/tests/v2/test_utils_peers.nim new file mode 100644 index 000000000..78c08ea37 --- /dev/null +++ b/tests/v2/test_utils_peers.nim @@ -0,0 +1,126 @@ +{.used.} + +import + stew/results, + testutils/unittests, + libp2p/multiaddress, + libp2p/peerid, + libp2p/errors +import + ../../waku/v2/utils/peers + +suite "Utils - Peers": + + test "Peer info parses correctly": + ## Given + let address = "/ip4/127.0.0.1/tcp/60002/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc" + + ## When + let remotePeerInfo = parseRemotePeerInfo(address) + + ## Then + check: + $(remotePeerInfo.peerId) == "16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc" + $(remotePeerInfo.addrs[0][0].tryGet()) == "/ip4/127.0.0.1" + $(remotePeerInfo.addrs[0][1].tryGet()) == "/tcp/60002" + + test "DNS multiaddrs parsing - dns peer": + ## Given + let address = "/dns/localhost/tcp/60002/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc" + + ## When + let dnsPeer = parseRemotePeerInfo(address) + + ## Then + check: + $(dnsPeer.peerId) == "16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc" + $(dnsPeer.addrs[0][0].tryGet()) == "/dns/localhost" + $(dnsPeer.addrs[0][1].tryGet()) == "/tcp/60002" + + test "DNS multiaddrs parsing - dnsaddr peer": + ## Given + let address = "/dnsaddr/localhost/tcp/60002/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc" + + ## When + let dnsAddrPeer = parseRemotePeerInfo(address) + + ## Then + check: + $(dnsAddrPeer.peerId) == "16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc" + $(dnsAddrPeer.addrs[0][0].tryGet()) == "/dnsaddr/localhost" + $(dnsAddrPeer.addrs[0][1].tryGet()) == "/tcp/60002" + + test "DNS multiaddrs parsing - dns4 peer": + ## Given + let address = "/dns4/localhost/tcp/60002/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc" + + ## When + let dns4Peer = parseRemotePeerInfo(address) + + # Then + check: + $(dns4Peer.peerId) == "16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc" + $(dns4Peer.addrs[0][0].tryGet()) == "/dns4/localhost" + $(dns4Peer.addrs[0][1].tryGet()) == "/tcp/60002" + + test "DNS multiaddrs parsing - dns6 peer": + ## Given + let address = "/dns6/localhost/tcp/60002/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc" + + ## When + let dns6Peer = parseRemotePeerInfo(address) + + ## Then + check: + $(dns6Peer.peerId) == "16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc" + $(dns6Peer.addrs[0][0].tryGet()) == "/dns6/localhost" + $(dns6Peer.addrs[0][1].tryGet()) == "/tcp/60002" + + test "Multiaddr parsing should fail with invalid address": + ## Given + let address = "/p2p/$UCH GIBBER!SH" + + ## Then + expect LPError: + discard parseRemotePeerInfo(address) + + test "Multiaddr parsing should fail with leading whitespace": + ## Given + let address = " /ip4/127.0.0.1/tcp/60002/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc" + + ## Then + expect LPError: + discard parseRemotePeerInfo(address) + + test "Multiaddr parsing should fail with trailing whitespace": + ## Given + let address = "/ip4/127.0.0.1/tcp/60002/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc " + + ## Then + expect LPError: + discard parseRemotePeerInfo(address) + + test "Multiaddress parsing should fail with invalid IP address": + ## Given + let address = "/ip4/127.0.0.0.1/tcp/60002/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc" + + ## Then + expect LPError: + discard parseRemotePeerInfo(address) + + test "Multiaddress parsing should fail with no peer ID": + ## Given + let address = "/ip4/127.0.0.1/tcp/60002" + + # Then + expect LPError: + discard parseRemotePeerInfo(address) + + test "Multiaddress parsing should fail with unsupported transport": + ## Given + let address = "/ip4/127.0.0.1/udp/60002/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc" + + ## Then + expect ValueError: + discard parseRemotePeerInfo(address) + diff --git a/tests/v2/test_wakunode.nim b/tests/v2/test_wakunode.nim index 65c430e3a..7303fb4d4 100644 --- a/tests/v2/test_wakunode.nim +++ b/tests/v2/test_wakunode.nim @@ -5,7 +5,6 @@ import chronicles, chronos, stew/shims/net as stewNet, stew/byteutils, std/os, libp2p/crypto/crypto, libp2p/crypto/secp, - libp2p/peerid, libp2p/multiaddress, libp2p/switch, libp2p/protocols/pubsub/rpc/messages, @@ -519,70 +518,6 @@ procSuite "WakuNode": await node1.stop() await node2.stop() - asyncTest "Peer info parses correctly": - ## This is such an important utility function for wakunode2 - ## that it deserves its own test :) - - # First test the `happy path` expected case - let - addrStr = "/ip4/127.0.0.1/tcp/60002/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc" - remotePeerInfo = parseRemotePeerInfo(addrStr) - - check: - $(remotePeerInfo.peerId) == "16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc" - $(remotePeerInfo.addrs[0][0].tryGet()) == "/ip4/127.0.0.1" - $(remotePeerInfo.addrs[0][1].tryGet()) == "/tcp/60002" - - # DNS multiaddrs parsing expected cases: - let - dnsPeer = parseRemotePeerInfo("/dns/localhost/tcp/60002/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc") - dnsAddrPeer = parseRemotePeerInfo("/dnsaddr/localhost/tcp/60002/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc") - dns4Peer = parseRemotePeerInfo("/dns4/localhost/tcp/60002/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc") - dns6Peer = parseRemotePeerInfo("/dns6/localhost/tcp/60002/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc") - - check: - # /dns - $(dnsPeer.peerId) == "16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc" - $(dnsPeer.addrs[0][0].tryGet()) == "/dns/localhost" - $(dnsPeer.addrs[0][1].tryGet()) == "/tcp/60002" - # /dnsaddr - $(dnsAddrPeer.peerId) == "16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc" - $(dnsAddrPeer.addrs[0][0].tryGet()) == "/dnsaddr/localhost" - $(dnsAddrPeer.addrs[0][1].tryGet()) == "/tcp/60002" - # /dns4 - $(dns4Peer.peerId) == "16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc" - $(dns4Peer.addrs[0][0].tryGet()) == "/dns4/localhost" - $(dns4Peer.addrs[0][1].tryGet()) == "/tcp/60002" - # /dns6 - $(dns6Peer.peerId) == "16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc" - $(dns6Peer.addrs[0][0].tryGet()) == "/dns6/localhost" - $(dns6Peer.addrs[0][1].tryGet()) == "/tcp/60002" - - # Now test some common corner cases - expect LPError: - # gibberish - discard parseRemotePeerInfo("/p2p/$UCH GIBBER!SH") - - expect LPError: - # leading whitespace - discard parseRemotePeerInfo(" /ip4/127.0.0.1/tcp/60002/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc") - - expect LPError: - # trailing whitespace - discard parseRemotePeerInfo("/ip4/127.0.0.1/tcp/60002/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc ") - - expect LPError: - # invalid IP address - discard parseRemotePeerInfo("/ip4/127.0.0.0.1/tcp/60002/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc") - - expect LPError: - # no PeerID - discard parseRemotePeerInfo("/ip4/127.0.0.1/tcp/60002") - - expect ValueError: - # unsupported transport - discard parseRemotePeerInfo("/ip4/127.0.0.1/udp/60002/p2p/16Uuu2HBmAcHvhLqQKwSSbX6BG5JLWUDRcaLVrehUVqpw7fz1hbYc") - asyncTest "resolve and connect to dns multiaddrs": let resolver = MockResolver.new()