frostfs-node/pkg/network/address_test.go

150 lines
3.1 KiB
Go

package network
import (
"strings"
"testing"
"github.com/multiformats/go-multiaddr"
"github.com/stretchr/testify/require"
)
func TestAddress_NetAddr(t *testing.T) {
ip := "127.0.0.1"
port := "8080"
ma, err := multiaddr.NewMultiaddr(strings.Join([]string{
"/ip4",
ip,
"tcp",
port,
}, "/"))
require.NoError(t, err)
addr, err := AddressFromString(ma.String())
require.NoError(t, err)
netAddr, err := addr.IPAddrString()
require.NoError(t, err)
require.Equal(t, ip+":"+port, netAddr)
}
func TestAddressFromString(t *testing.T) {
t.Run("valid addresses", func(t *testing.T) {
testcases := []struct {
inp string
exp multiaddr.Multiaddr
}{
{":8080", buildMultiaddr("/ip4/0.0.0.0/tcp/8080", t)},
{"example.com:7070", buildMultiaddr("/dns4/example.com/tcp/7070", t)},
{"213.44.87.1:32512", buildMultiaddr("/ip4/213.44.87.1/tcp/32512", t)},
{"[2004:eb1::1]:8080", buildMultiaddr("/ip6/2004:eb1::1/tcp/8080", t)},
}
for _, testcase := range testcases {
addr, err := AddressFromString(testcase.inp)
require.NoError(t, err)
require.Equal(t, testcase.exp, addr.ma, testcase.inp)
}
})
}
func TestAddress_HostAddrString(t *testing.T) {
t.Run("valid addresses", func(t *testing.T) {
testcases := []struct {
ma multiaddr.Multiaddr
exp string
}{
{buildMultiaddr("/dns4/neofs.bigcorp.com/tcp/8080", t), "neofs.bigcorp.com:8080"},
{buildMultiaddr("/ip4/172.16.14.1/tcp/8080", t), "172.16.14.1:8080"},
}
for _, testcase := range testcases {
addr := Address{testcase.ma}
got, err := addr.HostAddrString()
require.NoError(t, err)
require.Equal(t, testcase.exp, got)
}
})
t.Run("invalid addresses", func(t *testing.T) {
testcases := []multiaddr.Multiaddr{
buildMultiaddr("/tcp/8080", t),
}
for _, testcase := range testcases {
addr := Address{testcase}
_, err := addr.HostAddrString()
require.Error(t, err)
}
})
}
func TestAddress_Encapsulate(t *testing.T) {
ma1, ma2 := "/dns4/neofs.bigcorp.com/tcp/8080", "/tls"
testcases := []struct {
ma1 multiaddr.Multiaddr
ma2 multiaddr.Multiaddr
want string
}{
{
buildMultiaddr(ma1, t),
buildMultiaddr(ma2, t),
ma1 + ma2,
},
{
buildMultiaddr(ma2, t),
buildMultiaddr(ma1, t),
ma2 + ma1,
},
}
for _, testcase := range testcases {
addr1 := &Address{testcase.ma1}
addr2 := &Address{testcase.ma2}
addr1.Encapsulate(addr2)
require.Equal(t, addr1.String(), testcase.want)
}
}
func TestAddress_Decapsulate(t *testing.T) {
ma1, ma2 := "/dns4/neofs.bigcorp.com/tcp/8080", "/tls"
testcases := []struct {
ma1 multiaddr.Multiaddr
ma2 multiaddr.Multiaddr
want string
}{
{
buildMultiaddr(ma1+ma2, t),
buildMultiaddr(ma2, t),
ma1,
},
{
buildMultiaddr(ma2+ma1, t),
buildMultiaddr(ma1, t),
ma2,
},
}
for _, testcase := range testcases {
addr1 := &Address{testcase.ma1}
addr2 := &Address{testcase.ma2}
addr1.Decapsulate(addr2)
require.Equal(t, addr1.String(), testcase.want)
}
}
func buildMultiaddr(s string, t *testing.T) multiaddr.Multiaddr {
ma, err := multiaddr.NewMultiaddr(s)
require.NoError(t, err)
return ma
}