fix: dialer leaking resources after stopping (#947)

* fix: dialer leaking resources after stopping

* chore: add error code to test
This commit is contained in:
Vasco Santos
2021-06-14 09:19:23 +02:00
committed by GitHub
parent 755eb909f2
commit b291bc06ec
4 changed files with 127 additions and 21 deletions

View File

@ -290,6 +290,34 @@ describe('Dialing (direct, WebSockets)', () => {
}
})
it('should cancel pending dial targets before proceeding', async () => {
const dialer = new Dialer({
transportManager: localTM,
peerStore: {
addressBook: {
set: () => { }
}
}
})
sinon.stub(dialer, '_createDialTarget').callsFake(() => {
const deferredDial = pDefer()
return deferredDial.promise
})
// Perform dial
const dialPromise = dialer.connectToPeer(peerId)
// Let the call stack run
await delay(0)
dialer.destroy()
await expect(dialPromise)
.to.eventually.be.rejected()
.and.to.have.property('code', 'ABORT_ERR')
})
describe('libp2p.dialer', () => {
const transportKey = Transport.prototype[Symbol.toStringTag]
let libp2p
@ -462,6 +490,42 @@ describe('Dialing (direct, WebSockets)', () => {
await libp2p.hangUp(remoteAddr)
})
it('should cancel pending dial targets and stop', async () => {
const [, remotePeerId] = await createPeerId({ number: 2 })
libp2p = new Libp2p({
peerId,
modules: {
transport: [Transport],
streamMuxer: [Muxer],
connEncryption: [Crypto]
},
config: {
transport: {
[transportKey]: {
filter: filters.all
}
}
}
})
sinon.stub(libp2p.dialer, '_createDialTarget').callsFake(() => {
const deferredDial = pDefer()
return deferredDial.promise
})
// Perform dial
const dialPromise = libp2p.dial(remotePeerId)
// Let the call stack run
await delay(0)
await libp2p.stop()
await expect(dialPromise)
.to.eventually.be.rejected()
.and.to.have.property('code', 'ABORT_ERR')
})
it('should abort pending dials on stop', async () => {
libp2p = new Libp2p({
peerId,