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
|
||||
}
|
||||
|
||||
// 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)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue