diff --git a/lib/messages/builder.js b/lib/messages/builder.js index 3ef6e4b..7a0ad4f 100644 --- a/lib/messages/builder.js +++ b/lib/messages/builder.js @@ -257,6 +257,9 @@ function builder(options) { /* ping */ commands.ping = function(options) { + if (!options) { + options = {}; + } Message.call(this, options); this.command = 'ping'; this.magicNumber = magicNumber; diff --git a/test/peer.js b/test/peer.js index 98d0de4..02a8c0a 100644 --- a/test/peer.js +++ b/test/peer.js @@ -14,6 +14,9 @@ var bitcore = require('bitcore'); var _ = bitcore.deps._; var P2P = require('../'); var Peer = P2P.Peer; +var EventEmitter = require('events').EventEmitter; +var Messages = P2P.Messages; +var messages = new Messages(); var Networks = bitcore.Networks; describe('Peer', function() { @@ -121,6 +124,49 @@ describe('Peer', function() { peer.should.equal(peer2); }); + it('send pong on ping', function(done) { + var peer = new Peer({host: 'localhost'}); + var pingMessage = messages.build('ping'); + peer.sendMessage = function(message) { + message.command.should.equal('pong'); + message.nonce.should.equal(pingMessage.nonce); + done(); + }; + peer.emit('ping', pingMessage); + }); + + it('relay error from socket', function(done) { + var peer = new Peer({host: 'localhost'}); + var socket = new EventEmitter(); + socket.connect = sinon.spy(); + peer._getSocket = function() { + return socket; + }; + var error = new Error('error'); + peer.on('error', function(err) { + err.should.equal(error); + done(); + }); + peer.connect(); + peer.socket.emit('error', error); + }); + + it('disconnect with max buffer length', function(done) { + var peer = new Peer({host: 'localhost'}); + var socket = new EventEmitter(); + socket.connect = sinon.spy(); + peer._getSocket = function() { + return socket; + }; + peer.disconnect = function() { + done(); + }; + peer.connect(); + var buffer = new Buffer(Array(Peer.MAX_RECEIVE_BUFFER + 1)); + peer.socket.emit('data', buffer); + + }); + it('relay set properly', function() { var peer = new Peer({host: 'localhost'}); peer.relay.should.equal(true);