Files
brianmcgee 37bfe97da0 net: add ListenMultiaddrs to InterfaceResolver
Converts interface names + port into libp2p multiaddrs for listening.
When no interfaces are specified, returns wildcard addresses.
2026-02-18 15:09:34 +00:00

133 lines
2.8 KiB
Go

package net_test
import (
"net"
"testing"
dmnet "git.clan.lol/clan/data-mesher/pkg/net"
"git.clan.lol/clan/data-mesher/test"
"github.com/stretchr/testify/require"
)
func TestDefaultResolver_ListenMultiaddrs_Wildcard(t *testing.T) {
t.Parallel()
as := require.New(t)
resolver := dmnet.DefaultResolver{}
multiaddrs, err := resolver.ListenMultiaddrs(nil, 7946)
as.NoError(err)
as.Len(multiaddrs, 2)
// convert to strings for easier comparison
multiaddrStrings := make([]string, len(multiaddrs))
for i, a := range multiaddrs {
multiaddrStrings[i] = a.String()
}
expected := []string{
"/ip4/0.0.0.0/tcp/7946",
"/ip6/::/tcp/7946",
}
as.Equal(expected, multiaddrStrings)
}
func TestDefaultResolver_ListenMultiaddrs_Loopback(t *testing.T) {
t.Parallel()
as := require.New(t)
resolver := dmnet.DefaultResolver{}
multiaddrs, err := resolver.ListenMultiaddrs([]string{"lo"}, 9000)
as.NoError(err)
as.NotEmpty(multiaddrs)
// loopback should produce at least ::1 and/or 127.0.0.1
for _, addr := range multiaddrs {
addrStr := addr.String()
t.Logf("listen addr: %s", addrStr)
as.Contains(addrStr, "/tcp/9000")
}
}
func TestDefaultResolver_ListenMultiaddrs_InvalidInterface(t *testing.T) {
t.Parallel()
resolver := dmnet.DefaultResolver{}
_, err := resolver.ListenMultiaddrs([]string{"nonexistent-iface-xyz"}, 7946)
require.Error(t, err)
}
func TestDefaultResolver_ListenMultiaddrs_FiltersLinkLocal(t *testing.T) {
t.Parallel()
as := require.New(t)
resolver := dmnet.DefaultResolver{}
multiaddrs, err := resolver.ListenMultiaddrs([]string{"lo"}, 7946)
as.NoError(err)
for _, addr := range multiaddrs {
// fe80:: addresses should be filtered out
as.NotContains(addr.String(), "fe80")
}
}
func TestMockResolver_ListenMultiaddrs(t *testing.T) {
t.Parallel()
as := require.New(t)
resolver := test.MockResolver{
Interfaces: map[string][]*net.IPNet{
"eth0": {
test.MustParseIPNet("192.168.1.5/24"),
test.MustParseIPNet("fd00::1/64"),
},
},
}
multiaddrs, err := resolver.ListenMultiaddrs([]string{"eth0"}, 7946)
as.NoError(err)
as.Len(multiaddrs, 2)
multiaddrStrings := make([]string, len(multiaddrs))
for i, a := range multiaddrs {
multiaddrStrings[i] = a.String()
}
expected := []string{
"/ip4/192.168.1.5/tcp/7946",
"/ip6/fd00::1/tcp/7946",
}
as.Equal(expected, multiaddrStrings)
}
func TestMockResolver_ListenMultiaddrs_Wildcard(t *testing.T) {
t.Parallel()
as := require.New(t)
resolver := test.MockResolver{
Interfaces: map[string][]*net.IPNet{},
}
multiaddrs, err := resolver.ListenMultiaddrs(nil, 8000)
as.NoError(err)
as.Len(multiaddrs, 2)
multiaddrStrings := make([]string, len(multiaddrs))
for i, a := range multiaddrs {
multiaddrStrings[i] = a.String()
}
expected := []string{
"/ip4/0.0.0.0/tcp/8000",
"/ip6/::/tcp/8000",
}
as.Equal(expected, multiaddrStrings)
}