From faf2bb1868ae7a6594b826e650c80d8ae7a2b890 Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Thu, 12 Mar 2015 12:17:57 -0400 Subject: [PATCH] updated bitcoind integration test --- integration/bitcoind.js | 58 ++++++++++++++++++-------------- lib/messages/commands/getaddr.js | 3 ++ lib/peer.js | 2 +- 3 files changed, 37 insertions(+), 26 deletions(-) diff --git a/integration/bitcoind.js b/integration/bitcoind.js index 920e9e7..97e6b39 100644 --- a/integration/bitcoind.js +++ b/integration/bitcoind.js @@ -16,6 +16,8 @@ var Peer = p2p.Peer; var Pool = p2p.Pool; var Networks = bitcore.Networks; var Messages = p2p.Messages; +var Inventory = p2p.Inventory; +var messages = new Messages(); var Block = bitcore.Block; var Transaction = bitcore.Transaction; @@ -45,7 +47,7 @@ describe('Integration with ' + network.name + ' bitcoind', function() { m.services.toString().should.equal('1'); Math.abs(new Date() - m.timestamp).should.be.below(10000); // less than 10 seconds of time difference m.nonce.length.should.equal(8); - m.start_height.should.be.above(300000); + m.startHeight.should.be.above(300000); cb(); }); peer.once('verack', function(m) { @@ -92,7 +94,7 @@ describe('Integration with ' + network.name + ' bitcoind', function() { }); cb(); }); - var message = new Messages.GetAddresses(); + var message = messages.build('getaddr'); peer.sendMessage(message); }); }); @@ -107,24 +109,23 @@ describe('Integration with ' + network.name + ' bitcoind', function() { cb(); }); peer.once('inv', function(m) { - var message = new Messages.GetData(m.inventory); + var message = messages.build('getdata', {inventory: m.inventory}); peer.sendMessage(message); }); }); }); it('sends tx inv and receives getdata for that tx', function(cb) { connect(function(peer) { - var type = Messages.Inventory.TYPE.TX; + var type = Inventory.TYPE.TX; var inv = [{ type: type, - typeName: Messages.Inventory.TYPE_NAME[type], - hash: Random.getRandomBuffer(32) // needs to be random for repeatability + hash: new Buffer(Random.getRandomBuffer(32)) // needs to be random for repeatability }]; peer.once('getdata', function(message) { message.inventory.should.deep.equal(inv); cb(); }); - var message = new Messages.Inventory(inv); + var message = messages.build('inv', {inventory: inv}); message.inventory[0].hash.length.should.equal(32); peer.sendMessage(message); }); @@ -135,20 +136,23 @@ describe('Integration with ' + network.name + ' bitcoind', function() { (message.block instanceof Block).should.equal(true); cb(); }); - var message = Messages.GetData.forBlock(blockHash[network.name]); + var inventory = Inventory.forBlock(blockHash[network.name]); + var message = messages.build('getdata', {inventory: [inventory]}); peer.sendMessage(message); }); }); var fakeHash = 'e2dfb8afe1575bfacae1a0b4afc49af7ddda69285857267bae0e22be15f74a3a'; it('handles request tx data not found', function(cb) { connect(function(peer) { - var expected = Messages.NotFound.forTransaction(fakeHash); + var inventory = Inventory.forTransaction(fakeHash); + var expected = messages.build('notfound', {inventory: [inventory]}); peer.once('notfound', function(message) { - (message instanceof Messages.NotFound).should.equal(true); - message.should.deep.equal(expected); + message.command.should.equal('notfound'); + message.inventory[0].type.should.equal(Inventory.TYPE.TX); + message.inventory[0].hash.toString('hex').should.equal(inventory.hash.toString('hex')); cb(); }); - var message = Messages.GetData.forTransaction(fakeHash); + var message = messages.build('getdata', {inventory: [inventory]}); peer.sendMessage(message); }); }); @@ -157,47 +161,51 @@ describe('Integration with ' + network.name + ' bitcoind', function() { it('gets headers', function(cb) { connect(function(peer) { peer.once('headers', function(message) { - (message instanceof Messages.Headers).should.equal(true); + message.command.should.equal('headers'); message.headers.length.should.equal(3); cb(); }); - var message = new Messages.GetHeaders(from, stop); + var message = messages.build('getheaders', {starts: from, stop: stop}); peer.sendMessage(message); }); }); it('gets blocks', function(cb) { connect(function(peer) { peer.once('inv', function(message) { - (message instanceof Messages.Inventory).should.equal(true); + message.command.should.equal('inv'); if (message.inventory.length === 2) { - message.inventory[0].type.should.equal(Messages.Inventory.TYPE.BLOCK); + message.inventory[0].type.should.equal(Inventory.TYPE.BLOCK); cb(); } }); - var message = new Messages.GetBlocks(from, stop); + var message = messages.build('getblocks', {starts: from, stop: stop}); peer.sendMessage(message); }); }); var testInvGetData = function(expected, message, cb) { connect(function(peer) { peer.once('getdata', function(message) { - (message instanceof Messages.GetData).should.equal(true); - message.should.deep.equal(expected); + message.command.should.equal('getdata'); + message.inventory[0].type.should.equal(expected.inventory[0].type); + var expectedHash = expected.inventory[0].hash.toString('hex'); + message.inventory[0].hash.toString('hex').should.equal(expectedHash); cb(); }); peer.sendMessage(message); }); }; it('sends block inv and receives getdata', function(cb) { - var randomHash = Random.getRandomBuffer(32); // needs to be random for repeatability - var expected = Messages.GetData.forBlock(randomHash); - var message = Messages.Inventory.forBlock(randomHash); + var randomHash = new Buffer(Random.getRandomBuffer(32)); // slow buffer + var inventory = Inventory.forBlock(randomHash); + var expected = messages.build('getdata', {inventory: [inventory]}); + var message = messages.build('inv', {inventory: [inventory]}); testInvGetData(expected, message, cb); }); it('sends tx inv and receives getdata', function(cb) { - var randomHash = Random.getRandomBuffer(32); // needs to be random for repeatability - var expected = Messages.GetData.forTransaction(randomHash); - var message = Messages.Inventory.forTransaction(randomHash); + var randomHash = new Buffer(Random.getRandomBuffer(32)); // slow buffer + var inventory = Inventory.forTransaction(randomHash); + var expected = messages.build('getdata', {inventory: [inventory]}); + var message = messages.build('inv', {inventory: [inventory]}); testInvGetData(expected, message, cb); }); }); diff --git a/lib/messages/commands/getaddr.js b/lib/messages/commands/getaddr.js index 104590f..fa97d9d 100644 --- a/lib/messages/commands/getaddr.js +++ b/lib/messages/commands/getaddr.js @@ -8,6 +8,9 @@ var BufferUtil = bitcore.util.buffer; var magicNumber = bitcore.Networks.defaultNetwork.networkMagic.readUInt32LE(0); function GetaddrMessage(options) { + if (!options) { + options = {}; + } Message.call(this, options); this.magicNumber = magicNumber; this.command = 'getaddr'; diff --git a/lib/peer.js b/lib/peer.js index b55c6f5..ac05bb2 100644 --- a/lib/peer.js +++ b/lib/peer.js @@ -71,7 +71,7 @@ function Peer(options) { this.on('version', function(message) { self.version = message.version; self.subversion = message.subversion; - self.bestHeight = message.start_height; + self.bestHeight = message.startHeight; }); this.on('ping', function(message) {