Converts interface names + port into libp2p multiaddrs for listening. When no interfaces are specified, returns wildcard addresses.
133 lines
2.8 KiB
Go
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)
|
|
}
|