Skip to content

Commit 57453d4

Browse files
jacobheunvasco-santos
authored andcommitted
fix: catch newStream errors (#34)
1 parent 1b866ca commit 57453d4

File tree

2 files changed

+40
-4
lines changed

2 files changed

+40
-4
lines changed

src/index.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -171,10 +171,13 @@ class PubsubBaseProtocol extends EventEmitter {
171171
this.log('connected', idB58Str)
172172

173173
const peer = this._addPeer(new Peer(peerInfo))
174-
const { stream } = await conn.newStream(this.multicodecs)
175-
176-
peer.attachConnection(stream)
177-
this._processMessages(idB58Str, stream, peer)
174+
try {
175+
const { stream } = await conn.newStream(this.multicodecs)
176+
peer.attachConnection(stream)
177+
this._processMessages(idB58Str, stream, peer)
178+
} catch (err) {
179+
this.log.err(err)
180+
}
178181
}
179182

180183
/**
@@ -220,6 +223,7 @@ class PubsubBaseProtocol extends EventEmitter {
220223
* @returns {PeerInfo}
221224
*/
222225
_removePeer (peer) {
226+
if (!peer) return
223227
const id = peer.info.id.toB58String()
224228

225229
this.log('remove', id, peer._references)

test/pubsub.spec.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,27 @@ describe('pubsub base protocol', () => {
189189
expect(pubsubB.peers.size).to.be.eql(1)
190190
})
191191

192+
it('should handle newStream errors in onConnect', async () => {
193+
const onConnectA = registrarRecordA[protocol].onConnect
194+
const handlerB = registrarRecordB[protocol].handler
195+
196+
// Notice peers of connection
197+
const [c0, c1] = ConnectionPair()
198+
const error = new Error('new stream error')
199+
sinon.stub(c0, 'newStream').throws(error)
200+
201+
await onConnectA(peerInfoB, c0)
202+
await handlerB({
203+
protocol,
204+
stream: c1.stream,
205+
connection: {
206+
remotePeer: peerInfoA.id
207+
}
208+
})
209+
210+
expect(c0.newStream).to.have.property('callCount', 1)
211+
})
212+
192213
it('should handle onDisconnect as expected', async () => {
193214
const onConnectA = registrarRecordA[protocol].onConnect
194215
const onDisconnectA = registrarRecordA[protocol].onDisconnect
@@ -214,6 +235,17 @@ describe('pubsub base protocol', () => {
214235
expect(pubsubA.peers.size).to.be.eql(0)
215236
expect(pubsubB.peers.size).to.be.eql(0)
216237
})
238+
239+
it('should handle onDisconnect for unknown peers', () => {
240+
const onDisconnectA = registrarRecordA[protocol].onDisconnect
241+
242+
expect(pubsubA.peers.size).to.be.eql(0)
243+
244+
// Notice peers of disconnect
245+
onDisconnectA(peerInfoB)
246+
247+
expect(pubsubA.peers.size).to.be.eql(0)
248+
})
217249
})
218250

219251
describe('getSubscribers', () => {

0 commit comments

Comments
 (0)