import std/[net, options, sequtils] import pkg/libp2p/[multiaddress, routing_record] import ../asynctest import ./helpers import ../../storage/discovery import ../../storage/rng suite "Discovery - SPR record logic": var key: PrivateKey var disc: Discovery let directAddr = MultiAddress.init("/ip4/1.2.3.4/tcp/4001").expect("valid") relayAddr = MultiAddress .init( "/ip4/5.6.7.8/tcp/4002/p2p/16Uiu2HAmQu456Ae52JqPuqog6wCex47LLvNY8oHMBC4GRRtaStHs/p2p-circuit" ) .expect("valid") udpPort = Port(8090) setup: key = PrivateKey.random(Rng.instance[]).get() disc = Discovery.new(key, announceAddrs = @[]) test "updateRecordsAndSpr sets the SPR with both TCP and UDP addresses": disc.updateRecordsAndSpr(@[directAddr], udpPort) let spr = disc.getSpr() check spr.isSome let addrs = spr.get.data.addresses.mapIt($it.address) check addrs.anyIt(it.contains("/tcp/")) check addrs.anyIt(it.contains("/udp/")) test "updateAnnounceRecord does not update the SPR": disc.updateRecordsAndSpr(@[directAddr], udpPort) let sprBefore = disc.getSpr() disc.updateAnnounceRecord(@[relayAddr]) check disc.getSpr() == sprBefore