diff --git a/lib/pool.js b/lib/pool.js index 56fdcd7..b75131c 100644 --- a/lib/pool.js +++ b/lib/pool.js @@ -169,6 +169,9 @@ Pool.prototype._connectPeer = function _connectPeer(addr) { peer.on('disconnect', function peerDisconnect() { self.emit('peerdisconnect', peer, addr); }); + peer.on('connect', function peerConnect() { + self.emit('peerconnect', peer, addr); + }); peer.on('ready', function peerReady() { self.emit('peerready', peer, addr); }); diff --git a/test/pool.js b/test/pool.js index fb5e13b..fb6a03e 100644 --- a/test/pool.js +++ b/test/pool.js @@ -100,4 +100,46 @@ describe('Pool', function() { }); + it('should propagate connect, ready, and disconnect peer events', function(done) { + var peerConnectStub = sinon.stub(Peer.prototype, 'connect', function() { + this.emit('connect', this, {}); + this.emit('ready'); + }); + var peerDisconnectStub = sinon.stub(Peer.prototype, 'disconnect', function() { + this.emit('disconnect', this, {}); + }); + + var pool = new Pool(); + pool._addAddr({ + ip: { + v4: 'localhost' + } + }); + + // Not great, but needed so pool won't catch its on event and fail the test + pool.removeAllListeners('peerdisconnect'); + + var poolDisconnectStub; + pool.on('peerconnect', function(peer, addr) { + pool.on('peerready', function(peer, addr) { + // disconnect when the peer is ready + poolDisconnectStub = sinon.stub(Pool.prototype, 'disconnect', function() { + peer.disconnect(); + }); + pool.disconnect(); + }); + }); + pool.on('peerdisconnect', function(peer, addr) { + // Restore stubs + peerConnectStub.restore(); + peerDisconnectStub.restore(); + poolDisconnectStub.restore(); + + // done + done(); + }); + + pool.connect(); + }); + });