forked from TrueCloudLab/frostfs-node
[#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>
This commit is contained in:
parent
99d9b7fd38
commit
2456873473
2 changed files with 49 additions and 0 deletions
|
@ -46,6 +46,16 @@ func (a Address) IPAddrString() (string, error) {
|
||||||
return ip.String(), nil
|
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.
|
// AddressFromString restores address from a multiaddr string representation.
|
||||||
func AddressFromString(s string) (*Address, error) {
|
func AddressFromString(s string) (*Address, error) {
|
||||||
ma, err := multiaddr.NewMultiaddr(s)
|
ma, err := multiaddr.NewMultiaddr(s)
|
||||||
|
|
|
@ -28,3 +28,42 @@ func TestAddress_NetAddr(t *testing.T) {
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, ip+":"+port, netAddr)
|
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
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue