orama/pkg/discovery/helpers_test.go
2026-02-13 16:18:22 +02:00

160 lines
3.8 KiB
Go

package discovery
import (
"testing"
"github.com/multiformats/go-multiaddr"
)
func mustMultiaddr(t *testing.T, s string) multiaddr.Multiaddr {
t.Helper()
ma, err := multiaddr.NewMultiaddr(s)
if err != nil {
t.Fatalf("failed to parse multiaddr %q: %v", s, err)
}
return ma
}
func TestFilterLibp2pAddrs(t *testing.T) {
tests := []struct {
name string
input []string
wantLen int
wantAll bool // if true, expect all input addrs returned
}{
{
name: "only port 4001 addresses are all returned",
input: []string{"/ip4/192.168.1.1/tcp/4001", "/ip4/10.0.0.1/tcp/4001"},
wantLen: 2,
wantAll: true,
},
{
name: "mixed ports return only 4001",
input: []string{"/ip4/192.168.1.1/tcp/4001", "/ip4/10.0.0.1/tcp/9096", "/ip4/172.16.0.1/tcp/4101"},
wantLen: 1,
wantAll: false,
},
{
name: "empty list returns empty result",
input: []string{},
wantLen: 0,
wantAll: true,
},
{
name: "no port 4001 returns empty result",
input: []string{"/ip4/192.168.1.1/tcp/9096", "/ip4/10.0.0.1/tcp/4101", "/ip4/172.16.0.1/tcp/8080"},
wantLen: 0,
wantAll: false,
},
{
name: "addresses without TCP protocol are skipped",
input: []string{"/ip4/192.168.1.1/udp/4001", "/ip4/10.0.0.1/tcp/4001"},
wantLen: 1,
wantAll: false,
},
{
name: "multiple port 4001 with different IPs",
input: []string{"/ip4/1.2.3.4/tcp/4001", "/ip6/::1/tcp/4001", "/ip4/5.6.7.8/tcp/4001"},
wantLen: 3,
wantAll: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
addrs := make([]multiaddr.Multiaddr, 0, len(tt.input))
for _, s := range tt.input {
addrs = append(addrs, mustMultiaddr(t, s))
}
got := filterLibp2pAddrs(addrs)
if len(got) != tt.wantLen {
t.Fatalf("filterLibp2pAddrs() returned %d addrs, want %d", len(got), tt.wantLen)
}
if tt.wantAll && len(got) != len(addrs) {
t.Fatalf("expected all %d addrs returned, got %d", len(addrs), len(got))
}
// Verify every returned address is actually port 4001
for _, addr := range got {
port, err := addr.ValueForProtocol(multiaddr.P_TCP)
if err != nil {
t.Fatalf("returned addr %s has no TCP protocol: %v", addr, err)
}
if port != "4001" {
t.Fatalf("returned addr %s has port %s, want 4001", addr, port)
}
}
})
}
}
func TestFilterLibp2pAddrs_NilSlice(t *testing.T) {
got := filterLibp2pAddrs(nil)
if len(got) != 0 {
t.Fatalf("filterLibp2pAddrs(nil) returned %d addrs, want 0", len(got))
}
}
func TestHasLibp2pAddr(t *testing.T) {
tests := []struct {
name string
input []string
want bool
}{
{
name: "has port 4001",
input: []string{"/ip4/192.168.1.1/tcp/4001"},
want: true,
},
{
name: "has port 4001 among others",
input: []string{"/ip4/10.0.0.1/tcp/9096", "/ip4/192.168.1.1/tcp/4001", "/ip4/172.16.0.1/tcp/4101"},
want: true,
},
{
name: "has other ports but not 4001",
input: []string{"/ip4/192.168.1.1/tcp/9096", "/ip4/10.0.0.1/tcp/4101", "/ip4/172.16.0.1/tcp/8080"},
want: false,
},
{
name: "empty list",
input: []string{},
want: false,
},
{
name: "UDP port 4001 does not count",
input: []string{"/ip4/192.168.1.1/udp/4001"},
want: false,
},
{
name: "IPv6 with port 4001",
input: []string{"/ip6/::1/tcp/4001"},
want: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
addrs := make([]multiaddr.Multiaddr, 0, len(tt.input))
for _, s := range tt.input {
addrs = append(addrs, mustMultiaddr(t, s))
}
got := hasLibp2pAddr(addrs)
if got != tt.want {
t.Fatalf("hasLibp2pAddr() = %v, want %v", got, tt.want)
}
})
}
}
func TestHasLibp2pAddr_NilSlice(t *testing.T) {
got := hasLibp2pAddr(nil)
if got != false {
t.Fatalf("hasLibp2pAddr(nil) = %v, want false", got)
}
}