From 9e35fbc316a0d8e40bf979a64aa9ea06a19839f7 Mon Sep 17 00:00:00 2001 From: Jacob Heun Date: Tue, 31 Mar 2020 13:43:27 +0200 Subject: [PATCH] fix: pass libp2p to discovery services (#597) * fix: include libp2p in the options passed to discovery creation * fix: handle multiple peer addresses in get multiaddrs for peers * test(peer-store): add test to verify returned relay multiaddrs --- src/index.js | 2 +- src/peer-store/index.js | 3 ++- test/peer-store/peer-store.spec.js | 9 ++++++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/index.js b/src/index.js index adda384c..86dad112 100644 --- a/src/index.js +++ b/src/index.js @@ -478,7 +478,7 @@ class Libp2p extends EventEmitter { let discoveryService if (typeof DiscoveryService === 'function') { - discoveryService = new DiscoveryService(Object.assign({}, config, { peerInfo: this.peerInfo })) + discoveryService = new DiscoveryService(Object.assign({}, config, { peerInfo: this.peerInfo, libp2p: this })) } else { discoveryService = DiscoveryService } diff --git a/src/peer-store/index.js b/src/peer-store/index.js index 3fe4954e..494d613d 100644 --- a/src/peer-store/index.js +++ b/src/peer-store/index.js @@ -243,7 +243,8 @@ class PeerStore extends EventEmitter { */ multiaddrsForPeer (peer) { return this.put(peer, true).multiaddrs.toArray().map(addr => { - if (addr.getPeerId()) return addr + const idString = addr.getPeerId() + if (idString && idString === peer.id.toB58String()) return addr return addr.encapsulate(`/p2p/${peer.id.toB58String()}`) }) } diff --git a/test/peer-store/peer-store.spec.js b/test/peer-store/peer-store.spec.js index 46692a94..91628432 100644 --- a/test/peer-store/peer-store.spec.js +++ b/test/peer-store/peer-store.spec.js @@ -161,19 +161,22 @@ describe('peer-store', () => { expect(peerStore.peers.size).to.equal(0) }) - it('should be able to remove a peer from store through its b58str id', async () => { - const [peerInfo] = await peerUtils.createPeerInfo() + it('should be able to get the multiaddrs for a peer', async () => { + const [peerInfo, relayInfo] = await peerUtils.createPeerInfo({ number: 2 }) const id = peerInfo.id const ma1 = multiaddr('/ip4/127.0.0.1/tcp/4001') const ma2 = multiaddr('/ip4/127.0.0.1/tcp/4002/ws') + const ma3 = multiaddr(`/ip4/127.0.0.1/tcp/4003/ws/p2p/${relayInfo.id.toB58String()}/p2p-circuit`) peerInfo.multiaddrs.add(ma1) peerInfo.multiaddrs.add(ma2) + peerInfo.multiaddrs.add(ma3) const multiaddrs = peerStore.multiaddrsForPeer(peerInfo) const expectedAddrs = [ ma1.encapsulate(`/p2p/${id.toB58String()}`), - ma2.encapsulate(`/p2p/${id.toB58String()}`) + ma2.encapsulate(`/p2p/${id.toB58String()}`), + ma3.encapsulate(`/p2p/${id.toB58String()}`) ] expect(multiaddrs).to.eql(expectedAddrs)