diff --git a/peer/peerstore.go b/peer/peerstore.go index fdacf0d80..b1033c4c4 100644 --- a/peer/peerstore.go +++ b/peer/peerstore.go @@ -15,6 +15,14 @@ type Peerstore interface { KeyBook AddressBook Metrics + + // Peers returns a list of all peer.IDs in this Peerstore + Peers() []ID + + // PeerInfo returns a peer.PeerInfo struct for given peer.ID. + // This is a small slice of the information Peerstore has on + // that peer, useful to other services. + PeerInfo(ID) PeerInfo } // AddressBook tracks the addresses of Peers @@ -197,3 +205,10 @@ func (ps *peerstore) Peers() []ID { } return pps } + +func (ps *peerstore) PeerInfo(p ID) PeerInfo { + return PeerInfo{ + ID: p, + Addrs: ps.addressbook.Addresses(p), + } +} diff --git a/peer/peerstore_test.go b/peer/peerstore_test.go index dfa43f56e..ae08e5f14 100644 --- a/peer/peerstore_test.go +++ b/peer/peerstore_test.go @@ -44,10 +44,6 @@ func TestAddresses(t *testing.T) { ps.AddAddress(id3, ma32) ps.AddAddress(id3, ma33) - a1 := ps.Addresses(id1) - a2 := ps.Addresses(id2) - a3 := ps.Addresses(id3) - test := func(exp, act []ma.Multiaddr) { if len(exp) != len(act) { t.Fatal("lengths not the same") @@ -69,7 +65,13 @@ func TestAddresses(t *testing.T) { } } - test([]ma.Multiaddr{ma11}, a1) - test([]ma.Multiaddr{ma21, ma22}, a2) - test([]ma.Multiaddr{ma31, ma32, ma33}, a3) + // test the Addresses return value + test([]ma.Multiaddr{ma11}, ps.Addresses(id1)) + test([]ma.Multiaddr{ma21, ma22}, ps.Addresses(id2)) + test([]ma.Multiaddr{ma31, ma32, ma33}, ps.Addresses(id3)) + + // test also the PeerInfo return + test([]ma.Multiaddr{ma11}, ps.PeerInfo(id1).Addrs) + test([]ma.Multiaddr{ma21, ma22}, ps.PeerInfo(id2).Addrs) + test([]ma.Multiaddr{ma31, ma32, ma33}, ps.PeerInfo(id3).Addrs) }