From 63ad4e543828ddbed5872c5ddbca684f709397cf Mon Sep 17 00:00:00 2001 From: William Wolf Date: Wed, 18 Feb 2015 12:02:00 -0800 Subject: [PATCH] Propogate 'relay' from Pool() to its Peer()s --- lib/pool.js | 27 +++++++++++---------------- test/pool.js | 28 ++++++++++++++++++++++------ 2 files changed, 33 insertions(+), 22 deletions(-) diff --git a/lib/pool.js b/lib/pool.js index 5dc521b..ad5873b 100644 --- a/lib/pool.js +++ b/lib/pool.js @@ -30,6 +30,7 @@ function now() { * ``` * * @param {Network|String} network - The network to connect + * @param {Object} options - Options object * @returns {Pool} * @constructor */ @@ -37,27 +38,21 @@ function Pool(network, options) { var self = this; + options = options || {}; this.network = Networks.get(network) || Networks.defaultNetwork; this.keepalive = false; this._connectedPeers = {}; this._addrs = []; - this.listenAddr = true; - this.dnsSeed = true; + this.listenAddr = options.listenAddr === false ? false : true; + this.dnsSeed = options.dnsSeed === false ? false : true; + this.relay = options.relay === false ? false : true; + this.size = options.size || Pool.MaxConnectedPeers; - // define configuration options - if (options) { - if (options.listenAddr === false) { - this.listenAddr = false; - } - if (options.dnsSeed === false) { - this.dnsSeed = false; - } - if (options.addrs) { - for(var i = 0; i < options.addrs.length; i++) { - this._addAddr(options.addrs[i]); - } + if (options.addrs) { + for(var i = 0; i < options.addrs.length; i++) { + this._addAddr(options.addrs[i]); } } @@ -152,7 +147,7 @@ Pool.prototype.numberConnected = function numberConnected() { Pool.prototype._fillConnections = function _fillConnections() { var length = this._addrs.length; for (var i = 0; i < length; i++) { - if (this.numberConnected() >= Pool.MaxConnectedPeers) { + if (this.numberConnected() >= this.size) { break; } var addr = this._addrs[i]; @@ -186,7 +181,7 @@ Pool.prototype._connectPeer = function _connectPeer(addr) { function addConnectedPeer(addr) { var port = addr.port || self.network.port; var ip = addr.ip.v4 || addr.ip.v6; - var peer = new Peer(ip, port, self.network); + var peer = new Peer(ip, port, self.network, self.relay); peer.on('disconnect', function peerDisconnect() { self.emit('peerdisconnect', peer, addr); }); diff --git a/test/pool.js b/test/pool.js index 097f74b..ff36399 100644 --- a/test/pool.js +++ b/test/pool.js @@ -194,12 +194,8 @@ describe('Pool', function() { this.emit('disconnect', this, {}); }); - var pool = new Pool(); - pool._addAddr({ - ip: { - v4: 'localhost' - } - }); + var pool = new Pool(null, { size: 1 }); + pool._addAddr({ ip: { v4: 'localhost' } }); // Not great, but needed so pool won't catch its on event and fail the test pool.removeAllListeners('peerdisconnect'); @@ -227,4 +223,24 @@ describe('Pool', function() { pool.connect(); }); + it('should propagate Pool.relay property to peers', function(done) { + var count = 0; + var peerConnectStub = sinon.stub(Peer.prototype, 'connect', function() { + this.emit('connect', this, {}); + }); + [true, false].forEach(function(relay) { + var pool = new Pool(null,{ relay: relay, size: 1, dnsSeed: false }); + pool._addAddr({ ip: { v4: 'localhost' } }); + pool.on('peerconnect', function(peer, addr) { + peer.relay.should.equal(relay); + pool.disconnect(); + if(++count == 2) { + done(); + } + }); + pool.connect(); + }); + peerConnectStub.restore(); + }); + });