From c44e6e33ed9e5b561ac82730c149dc60648735f5 Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Tue, 7 Jan 2020 15:27:32 +0000 Subject: [PATCH] fix: stop discoveries (#530) * fix: stop discoveries * test: add discovery stop test * chore: fix lint Co-authored-by: Jacob Heun --- src/index.js | 7 +++++++ test/peer-discovery/index.spec.js | 26 ++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/index.js b/src/index.js index 7e635aa76b..8c43dd749d 100644 --- a/src/index.js +++ b/src/index.js @@ -218,7 +218,14 @@ class Libp2p extends EventEmitter { log('libp2p is stopping') try { + for (const service of this._discovery.values()) { + service.removeListener('peer', this._onDiscoveryPeer) + } + + await Promise.all(Array.from(this._discovery.values(), s => s.stop())) + this.connectionManager.stop() + await Promise.all([ this.pubsub && this.pubsub.stop(), this._dht && this._dht.stop(), diff --git a/test/peer-discovery/index.spec.js b/test/peer-discovery/index.spec.js index 66e08d37bd..31fc38cdb1 100644 --- a/test/peer-discovery/index.spec.js +++ b/test/peer-discovery/index.spec.js @@ -65,6 +65,32 @@ describe('peer discovery', () => { expect(discoverySpy.called).to.eql(false) }) + + it('should stop discovery on libp2p start/stop', async () => { + const mockDiscovery = { + tag: 'mock', + start: () => {}, + stop: () => {}, + on: () => {}, + removeListener: () => {} + } + const startSpy = sinon.spy(mockDiscovery, 'start') + const stopSpy = sinon.spy(mockDiscovery, 'stop') + + libp2p = new Libp2p(mergeOptions(baseOptions, { + peerInfo, + modules: { + peerDiscovery: [mockDiscovery] + } + })) + + await libp2p.start() + expect(startSpy).to.have.property('callCount', 1) + expect(stopSpy).to.have.property('callCount', 0) + await libp2p.stop() + expect(startSpy).to.have.property('callCount', 1) + expect(stopSpy).to.have.property('callCount', 1) + }) }) describe('discovery modules from transports', () => {