mirror of
https://github.com/DeBrosOfficial/orama.git
synced 2026-03-17 05:43:01 +00:00
160 lines
3.8 KiB
Go
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)
|
|
}
|
|
}
|