mirror of https://github.com/libp2p/go-libp2p.git
Browse Source
* SplitAddr is a simpler way to split an address into a multiaddr and an ID. * AddrInfosFromP2pAddrs converts a set of multiaddrs into a set of AddrInfos.pull/1683/head
Steven Allen
6 years ago
2 changed files with 175 additions and 6 deletions
@ -0,0 +1,135 @@ |
|||||
|
package peer_test |
||||
|
|
||||
|
import ( |
||||
|
"testing" |
||||
|
|
||||
|
ma "github.com/multiformats/go-multiaddr" |
||||
|
|
||||
|
. "github.com/libp2p/go-libp2p-core/peer" |
||||
|
) |
||||
|
|
||||
|
var ( |
||||
|
testID ID |
||||
|
maddrFull, maddrTpt, maddrPeer ma.Multiaddr |
||||
|
) |
||||
|
|
||||
|
func init() { |
||||
|
var err error |
||||
|
testID, err = IDB58Decode("QmS3zcG7LhYZYSJMhyRZvTddvbNUqtt8BJpaSs6mi1K5Va") |
||||
|
if err != nil { |
||||
|
panic(err) |
||||
|
} |
||||
|
maddrPeer = ma.StringCast("/p2p/" + IDB58Encode(testID)) |
||||
|
maddrTpt = ma.StringCast("/ip4/127.0.0.1/tcp/1234") |
||||
|
maddrFull = maddrTpt.Encapsulate(maddrPeer) |
||||
|
} |
||||
|
|
||||
|
func TestSplitAddr(t *testing.T) { |
||||
|
tpt, id := SplitAddr(maddrFull) |
||||
|
if !tpt.Equal(maddrTpt) { |
||||
|
t.Fatal("expected transport") |
||||
|
} |
||||
|
if id != testID { |
||||
|
t.Fatalf("%s != %s", id, testID) |
||||
|
} |
||||
|
|
||||
|
tpt, id = SplitAddr(maddrPeer) |
||||
|
if tpt != nil { |
||||
|
t.Fatal("expected no transport") |
||||
|
} |
||||
|
if id != testID { |
||||
|
t.Fatalf("%s != %s", id, testID) |
||||
|
} |
||||
|
|
||||
|
tpt, id = SplitAddr(maddrTpt) |
||||
|
if !tpt.Equal(maddrTpt) { |
||||
|
t.Fatal("expected a transport") |
||||
|
} |
||||
|
if id != "" { |
||||
|
t.Fatal("expected no peer ID") |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
func TestAddrInfoFromP2pAddr(t *testing.T) { |
||||
|
ai, err := AddrInfoFromP2pAddr(maddrFull) |
||||
|
if err != nil { |
||||
|
t.Fatal(err) |
||||
|
} |
||||
|
if len(ai.Addrs) != 1 || !ai.Addrs[0].Equal(maddrTpt) { |
||||
|
t.Fatal("expected transport") |
||||
|
} |
||||
|
if ai.ID != testID { |
||||
|
t.Fatalf("%s != %s", ai.ID, testID) |
||||
|
} |
||||
|
|
||||
|
ai, err = AddrInfoFromP2pAddr(maddrPeer) |
||||
|
if err != nil { |
||||
|
t.Fatal(err) |
||||
|
} |
||||
|
if len(ai.Addrs) != 0 { |
||||
|
t.Fatal("expected transport") |
||||
|
} |
||||
|
if ai.ID != testID { |
||||
|
t.Fatalf("%s != %s", ai.ID, testID) |
||||
|
} |
||||
|
|
||||
|
_, err = AddrInfoFromP2pAddr(maddrTpt) |
||||
|
if err != ErrInvalidAddr { |
||||
|
t.Fatalf("wrong error: %s", err) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
func TestAddrInfosFromP2pAddrs(t *testing.T) { |
||||
|
infos, err := AddrInfosFromP2pAddrs() |
||||
|
if err != nil { |
||||
|
t.Fatal(err) |
||||
|
} |
||||
|
if len(infos) != 0 { |
||||
|
t.Fatal("expected no addrs") |
||||
|
} |
||||
|
infos, err = AddrInfosFromP2pAddrs(nil) |
||||
|
if err == nil { |
||||
|
t.Fatal("expected nil multiaddr to fail") |
||||
|
} |
||||
|
|
||||
|
addrs := []ma.Multiaddr{ |
||||
|
ma.StringCast("/ip4/128.199.219.111/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64"), |
||||
|
ma.StringCast("/ip4/104.236.76.40/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64"), |
||||
|
|
||||
|
ma.StringCast("/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd"), |
||||
|
ma.StringCast("/ip4/178.62.158.247/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd"), |
||||
|
|
||||
|
ma.StringCast("/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM"), |
||||
|
} |
||||
|
expected := map[string][]ma.Multiaddr{ |
||||
|
"QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64": { |
||||
|
ma.StringCast("/ip4/128.199.219.111/tcp/4001"), |
||||
|
ma.StringCast("/ip4/104.236.76.40/tcp/4001"), |
||||
|
}, |
||||
|
"QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd": { |
||||
|
ma.StringCast("/ip4/178.62.158.247/tcp/4001"), |
||||
|
}, |
||||
|
"QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM": nil, |
||||
|
} |
||||
|
infos, err = AddrInfosFromP2pAddrs(addrs...) |
||||
|
if err != nil { |
||||
|
t.Fatal(err) |
||||
|
} |
||||
|
for _, info := range infos { |
||||
|
exaddrs, ok := expected[info.ID.Pretty()] |
||||
|
if !ok { |
||||
|
t.Fatalf("didn't expect peer %s", info.ID) |
||||
|
} |
||||
|
if len(info.Addrs) != len(exaddrs) { |
||||
|
t.Fatalf("got %d addrs, expected %d", len(info.Addrs), len(exaddrs)) |
||||
|
} |
||||
|
// AddrInfosFromP2pAddrs preserves order. I'd like to keep this
|
||||
|
// guarantee for now.
|
||||
|
for i, addr := range info.Addrs { |
||||
|
if !exaddrs[i].Equal(addr) { |
||||
|
t.Fatalf("expected %s, got %s", exaddrs[i], addr) |
||||
|
} |
||||
|
} |
||||
|
delete(expected, info.ID.Pretty()) |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue