logos-storage-nim/tests/storage/testaddrutils.nim

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

78 lines
3.1 KiB
Nim
Raw Normal View History

2026-05-12 09:59:59 +04:00
import std/[net, options]
import pkg/libp2p/multiaddress
import ../asynctest
import ../../storage/utils/addrutils
suite "addrutils - getTcpPort":
test "extracts port from ipv4 tcp address":
let ma = MultiAddress.init("/ip4/1.2.3.4/tcp/5000").expect("valid")
check getTcpPort(ma) == some(Port(5000))
test "extracts port from ipv6 tcp address":
let ma = MultiAddress.init("/ip6/::1/tcp/8080").expect("valid")
check getTcpPort(ma) == some(Port(8080))
test "returns none for udp address":
let ma = MultiAddress.init("/ip4/1.2.3.4/udp/5000").expect("valid")
check getTcpPort(ma) == Port.none
test "extracts port 0":
let ma = MultiAddress.init("/ip4/0.0.0.0/tcp/0").expect("valid")
check getTcpPort(ma) == some(Port(0))
2026-05-12 09:59:59 +04:00
suite "addrutils - remapAddr":
test "replaces protocol tcp with udp":
let ma = MultiAddress.init("/ip4/1.2.3.4/tcp/5000").expect("valid")
let remapped = ma.remapAddr(protocol = some("udp"), port = some(Port(9000)))
check remapped == MultiAddress.init("/ip4/1.2.3.4/udp/9000").expect("valid")
test "replaces only port, keeping protocol":
let ma = MultiAddress.init("/ip4/1.2.3.4/tcp/5000").expect("valid")
let remapped = ma.remapAddr(port = some(Port(9000)))
check remapped == MultiAddress.init("/ip4/1.2.3.4/tcp/9000").expect("valid")
test "replaces only ip, keeping protocol and port":
let ma = MultiAddress.init("/ip4/1.2.3.4/tcp/5000").expect("valid")
let remapped = ma.remapAddr(ip = some(parseIpAddress("8.8.8.8")))
check remapped == MultiAddress.init("/ip4/8.8.8.8/tcp/5000").expect("valid")
2026-06-10 10:54:02 +04:00
suite "addrutils - hasPublicRelayTransport":
const relayId = "16Uiu2HAkyRvHo1AyyQY1xiHC8QbYjXCHkZbneVC8dBtJjp1SZcGD"
proc circuitAddr(relayIp: string): MultiAddress =
MultiAddress.init("/ip4/" & relayIp & "/tcp/8070/p2p/" & relayId & "/p2p-circuit").expect(
"valid"
)
test "true when the relay has a public ip":
check circuitAddr("204.168.234.45").hasPublicRelayTransport()
test "false when the relay is loopback":
check not circuitAddr("127.0.0.1").hasPublicRelayTransport()
test "false when the relay is a private ip":
check not circuitAddr("172.17.0.1").hasPublicRelayTransport()
suite "addrutils - dialableAddressPolicy":
const relayId = "16Uiu2HAkyRvHo1AyyQY1xiHC8QbYjXCHkZbneVC8dBtJjp1SZcGD"
proc circuitAddr(relayIp: string): MultiAddress =
MultiAddress.init("/ip4/" & relayIp & "/tcp/8070/p2p/" & relayId & "/p2p-circuit").expect(
"valid"
)
test "keeps a public direct address":
check MultiAddress.init("/ip4/204.168.234.45/tcp/8070").expect("valid").dialableAddressPolicy()
test "drops a loopback direct address":
check not MultiAddress.init("/ip4/127.0.0.1/tcp/8070").expect("valid").dialableAddressPolicy()
test "drops a private direct address":
check not MultiAddress.init("/ip4/192.168.100.103/tcp/8070").expect("valid").dialableAddressPolicy()
test "keeps a circuit address through a public relay":
check circuitAddr("204.168.234.45").dialableAddressPolicy()
test "drops a circuit address through a private relay":
check not circuitAddr("172.17.0.1").dialableAddressPolicy()