logos-storage-nim/tests/storage/testdiscovery.nim
Arnaud a5d6569876
feat: nat traversal relay (#1417)
Signed-off-by: Arnaud <arno.deville@gmail.com>
Signed-off-by: Giuliano Mega <giuliano.mega@gmail.com>
Co-authored-by: Giuliano Mega <giuliano.mega@gmail.com>
2026-07-23 13:10:36 +00:00

66 lines
2.4 KiB
Nim

import std/[net, 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().libp2pRng).get()
disc = Discovery.new(key, providerAddrs = @[])
test "SPR contains provider (TCP) and discovery addresses (UDP) after announceDirectAddrs":
disc.announceDirectAddrs(@[directAddr], udpPort)
let addrs = disc.getSpr().data.addresses.mapIt($it.address)
check addrs.anyIt(it.contains("/tcp/"))
check addrs.anyIt(it.contains("/udp/"))
test "announceDirectAddrs updates the provider record with TCP addresses only":
disc.announceDirectAddrs(@[directAddr], udpPort)
let providerAddrs = disc.providerRecord.get.data.addresses.mapIt($it.address)
check providerAddrs.anyIt(it.contains("/tcp/"))
check not providerAddrs.anyIt(it.contains("/udp/"))
test "announceDirectAddrs updates the local record with UDP addresses only":
disc.announceDirectAddrs(@[directAddr], udpPort)
let discoveryAddrs = disc.protocol.getRecord().data.addresses.mapIt($it.address)
check discoveryAddrs.anyIt(it.contains("/udp/"))
check not discoveryAddrs.anyIt(it.contains("/tcp/"))
test "SPR contains provider (TCP) after announceRelayAddrs":
disc.announceRelayAddrs(@[relayAddr])
let addrs = disc.getSpr().data.addresses.mapIt($it.address)
check addrs.anyIt(it.contains("/tcp/"))
check not addrs.anyIt(it.contains("/udp/"))
test "announceRelayAddrs updates the provider record with TCP addresses only":
disc.announceRelayAddrs(@[relayAddr])
let providerAddrs = disc.providerRecord.get.data.addresses.mapIt($it.address)
check providerAddrs.anyIt(it.contains("/tcp/"))
check not providerAddrs.anyIt(it.contains("/udp/"))
test "announceRelayAddrs does not update the local record":
disc.announceRelayAddrs(@[relayAddr])
let discoveryAddrs = disc.protocol.getRecord().data.addresses.mapIt($it.address)
check discoveryAddrs.len == 0