[#522] network: Add host address stringer

network.Address is a wrapper around multiaddress. Multiaddress
can be resolved to ip netaddr with `IPAddrString` function:
  /dns4/localhost/tcp/8080 => 127.0.0.1:8080
With `HostAddrString` multi address will be transformed to
host address:
  /dns4/localhost/tcp8080 => localhost:8080

Signed-off-by: Alex Vanin <alexey@nspcc.ru>
support/v0.27
Alex Vanin 2021-05-17 14:59:57 +03:00 committed by Alex Vanin
parent 99d9b7fd38
commit 2456873473
2 changed files with 49 additions and 0 deletions

View File

@ -46,6 +46,16 @@ func (a Address) IPAddrString() (string, error) {
return ip.String(), nil
}
// HostAddrString returns host address in string format.
func (a Address) HostAddrString() (string, error) {
_, host, err := manet.DialArgs(a.ma)
if err != nil {
return "", errors.Wrap(err, "could not get host addr")
}
return host, nil
}
// AddressFromString restores address from a multiaddr string representation.
func AddressFromString(s string) (*Address, error) {
ma, err := multiaddr.NewMultiaddr(s)

View File

@ -28,3 +28,42 @@ func TestAddress_NetAddr(t *testing.T) {
require.NoError(t, err)
require.Equal(t, ip+":"+port, netAddr)
}
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 buildMultiaddr(s string, t *testing.T) multiaddr.Multiaddr {
ma, err := multiaddr.NewMultiaddr(s)
require.NoError(t, err)
return ma
}