Skip to content

Commit

Permalink
feat: conditionally emit errors
Browse files Browse the repository at this point in the history
test: add tests for emit override
  • Loading branch information
jacobheun committed Nov 12, 2018
1 parent e92053d commit f71fdfd
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
18 changes: 18 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,10 @@ class Node extends EventEmitter {
this._transport = [] // Transport instances/references
this._discovery = [] // Discovery service instances/references

// create the switch, and listen for errors
this._switch = new Switch(this.peerInfo, this.peerBook, _options.switch)
this._switch.on('error', (...args) => this.emit('error', ...args))

this.stats = this._switch.stats
this.connectionManager = new ConnectionManager(this, _options.connectionManager)

Expand Down Expand Up @@ -162,6 +165,21 @@ class Node extends EventEmitter {
})
}

/**
* Overrides EventEmitter.emit to conditionally emit errors
* if there is a handler. If not, errors will be logged.
* @param {string} eventName
* @param {...any} args
* @returns {void}
*/
emit (eventName, ...args) {
if (eventName === 'error' && !this._events.error) {
log.error(...args)
} else {
super.emit(eventName, ...args)
}
}

/**
* Starts the libp2p node and all sub services
*
Expand Down
21 changes: 21 additions & 0 deletions test/create.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,4 +80,25 @@ describe('libp2p creation', () => {
done()
})
})

it('should not throw errors from switch if node has no error listeners', (done) => {
createNode([], {}, (err, node) => {
expect(err).to.not.exist()

node._switch.emit('error', new Error('bad things'))
done()
})
})

it('should emit errors from switch if node has error listeners', (done) => {
const error = new Error('bad things')
createNode([], {}, (err, node) => {
expect(err).to.not.exist()
node.once('error', (err) => {
expect(err).to.eql(error)
done()
})
node._switch.emit('error', error)
})
})
})

0 comments on commit f71fdfd

Please sign in to comment.