updated bitcoind integration test
This commit is contained in:
parent
091893b1e4
commit
faf2bb1868
@ -16,6 +16,8 @@ var Peer = p2p.Peer;
|
|||||||
var Pool = p2p.Pool;
|
var Pool = p2p.Pool;
|
||||||
var Networks = bitcore.Networks;
|
var Networks = bitcore.Networks;
|
||||||
var Messages = p2p.Messages;
|
var Messages = p2p.Messages;
|
||||||
|
var Inventory = p2p.Inventory;
|
||||||
|
var messages = new Messages();
|
||||||
var Block = bitcore.Block;
|
var Block = bitcore.Block;
|
||||||
var Transaction = bitcore.Transaction;
|
var Transaction = bitcore.Transaction;
|
||||||
|
|
||||||
@ -45,7 +47,7 @@ describe('Integration with ' + network.name + ' bitcoind', function() {
|
|||||||
m.services.toString().should.equal('1');
|
m.services.toString().should.equal('1');
|
||||||
Math.abs(new Date() - m.timestamp).should.be.below(10000); // less than 10 seconds of time difference
|
Math.abs(new Date() - m.timestamp).should.be.below(10000); // less than 10 seconds of time difference
|
||||||
m.nonce.length.should.equal(8);
|
m.nonce.length.should.equal(8);
|
||||||
m.start_height.should.be.above(300000);
|
m.startHeight.should.be.above(300000);
|
||||||
cb();
|
cb();
|
||||||
});
|
});
|
||||||
peer.once('verack', function(m) {
|
peer.once('verack', function(m) {
|
||||||
@ -92,7 +94,7 @@ describe('Integration with ' + network.name + ' bitcoind', function() {
|
|||||||
});
|
});
|
||||||
cb();
|
cb();
|
||||||
});
|
});
|
||||||
var message = new Messages.GetAddresses();
|
var message = messages.build('getaddr');
|
||||||
peer.sendMessage(message);
|
peer.sendMessage(message);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -107,24 +109,23 @@ describe('Integration with ' + network.name + ' bitcoind', function() {
|
|||||||
cb();
|
cb();
|
||||||
});
|
});
|
||||||
peer.once('inv', function(m) {
|
peer.once('inv', function(m) {
|
||||||
var message = new Messages.GetData(m.inventory);
|
var message = messages.build('getdata', {inventory: m.inventory});
|
||||||
peer.sendMessage(message);
|
peer.sendMessage(message);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
it('sends tx inv and receives getdata for that tx', function(cb) {
|
it('sends tx inv and receives getdata for that tx', function(cb) {
|
||||||
connect(function(peer) {
|
connect(function(peer) {
|
||||||
var type = Messages.Inventory.TYPE.TX;
|
var type = Inventory.TYPE.TX;
|
||||||
var inv = [{
|
var inv = [{
|
||||||
type: type,
|
type: type,
|
||||||
typeName: Messages.Inventory.TYPE_NAME[type],
|
hash: new Buffer(Random.getRandomBuffer(32)) // needs to be random for repeatability
|
||||||
hash: Random.getRandomBuffer(32) // needs to be random for repeatability
|
|
||||||
}];
|
}];
|
||||||
peer.once('getdata', function(message) {
|
peer.once('getdata', function(message) {
|
||||||
message.inventory.should.deep.equal(inv);
|
message.inventory.should.deep.equal(inv);
|
||||||
cb();
|
cb();
|
||||||
});
|
});
|
||||||
var message = new Messages.Inventory(inv);
|
var message = messages.build('inv', {inventory: inv});
|
||||||
message.inventory[0].hash.length.should.equal(32);
|
message.inventory[0].hash.length.should.equal(32);
|
||||||
peer.sendMessage(message);
|
peer.sendMessage(message);
|
||||||
});
|
});
|
||||||
@ -135,20 +136,23 @@ describe('Integration with ' + network.name + ' bitcoind', function() {
|
|||||||
(message.block instanceof Block).should.equal(true);
|
(message.block instanceof Block).should.equal(true);
|
||||||
cb();
|
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);
|
peer.sendMessage(message);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
var fakeHash = 'e2dfb8afe1575bfacae1a0b4afc49af7ddda69285857267bae0e22be15f74a3a';
|
var fakeHash = 'e2dfb8afe1575bfacae1a0b4afc49af7ddda69285857267bae0e22be15f74a3a';
|
||||||
it('handles request tx data not found', function(cb) {
|
it('handles request tx data not found', function(cb) {
|
||||||
connect(function(peer) {
|
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) {
|
peer.once('notfound', function(message) {
|
||||||
(message instanceof Messages.NotFound).should.equal(true);
|
message.command.should.equal('notfound');
|
||||||
message.should.deep.equal(expected);
|
message.inventory[0].type.should.equal(Inventory.TYPE.TX);
|
||||||
|
message.inventory[0].hash.toString('hex').should.equal(inventory.hash.toString('hex'));
|
||||||
cb();
|
cb();
|
||||||
});
|
});
|
||||||
var message = Messages.GetData.forTransaction(fakeHash);
|
var message = messages.build('getdata', {inventory: [inventory]});
|
||||||
peer.sendMessage(message);
|
peer.sendMessage(message);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -157,47 +161,51 @@ describe('Integration with ' + network.name + ' bitcoind', function() {
|
|||||||
it('gets headers', function(cb) {
|
it('gets headers', function(cb) {
|
||||||
connect(function(peer) {
|
connect(function(peer) {
|
||||||
peer.once('headers', function(message) {
|
peer.once('headers', function(message) {
|
||||||
(message instanceof Messages.Headers).should.equal(true);
|
message.command.should.equal('headers');
|
||||||
message.headers.length.should.equal(3);
|
message.headers.length.should.equal(3);
|
||||||
cb();
|
cb();
|
||||||
});
|
});
|
||||||
var message = new Messages.GetHeaders(from, stop);
|
var message = messages.build('getheaders', {starts: from, stop: stop});
|
||||||
peer.sendMessage(message);
|
peer.sendMessage(message);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
it('gets blocks', function(cb) {
|
it('gets blocks', function(cb) {
|
||||||
connect(function(peer) {
|
connect(function(peer) {
|
||||||
peer.once('inv', function(message) {
|
peer.once('inv', function(message) {
|
||||||
(message instanceof Messages.Inventory).should.equal(true);
|
message.command.should.equal('inv');
|
||||||
if (message.inventory.length === 2) {
|
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();
|
cb();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
var message = new Messages.GetBlocks(from, stop);
|
var message = messages.build('getblocks', {starts: from, stop: stop});
|
||||||
peer.sendMessage(message);
|
peer.sendMessage(message);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
var testInvGetData = function(expected, message, cb) {
|
var testInvGetData = function(expected, message, cb) {
|
||||||
connect(function(peer) {
|
connect(function(peer) {
|
||||||
peer.once('getdata', function(message) {
|
peer.once('getdata', function(message) {
|
||||||
(message instanceof Messages.GetData).should.equal(true);
|
message.command.should.equal('getdata');
|
||||||
message.should.deep.equal(expected);
|
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();
|
cb();
|
||||||
});
|
});
|
||||||
peer.sendMessage(message);
|
peer.sendMessage(message);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
it('sends block inv and receives getdata', function(cb) {
|
it('sends block inv and receives getdata', function(cb) {
|
||||||
var randomHash = Random.getRandomBuffer(32); // needs to be random for repeatability
|
var randomHash = new Buffer(Random.getRandomBuffer(32)); // slow buffer
|
||||||
var expected = Messages.GetData.forBlock(randomHash);
|
var inventory = Inventory.forBlock(randomHash);
|
||||||
var message = Messages.Inventory.forBlock(randomHash);
|
var expected = messages.build('getdata', {inventory: [inventory]});
|
||||||
|
var message = messages.build('inv', {inventory: [inventory]});
|
||||||
testInvGetData(expected, message, cb);
|
testInvGetData(expected, message, cb);
|
||||||
});
|
});
|
||||||
it('sends tx inv and receives getdata', function(cb) {
|
it('sends tx inv and receives getdata', function(cb) {
|
||||||
var randomHash = Random.getRandomBuffer(32); // needs to be random for repeatability
|
var randomHash = new Buffer(Random.getRandomBuffer(32)); // slow buffer
|
||||||
var expected = Messages.GetData.forTransaction(randomHash);
|
var inventory = Inventory.forTransaction(randomHash);
|
||||||
var message = Messages.Inventory.forTransaction(randomHash);
|
var expected = messages.build('getdata', {inventory: [inventory]});
|
||||||
|
var message = messages.build('inv', {inventory: [inventory]});
|
||||||
testInvGetData(expected, message, cb);
|
testInvGetData(expected, message, cb);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -8,6 +8,9 @@ var BufferUtil = bitcore.util.buffer;
|
|||||||
var magicNumber = bitcore.Networks.defaultNetwork.networkMagic.readUInt32LE(0);
|
var magicNumber = bitcore.Networks.defaultNetwork.networkMagic.readUInt32LE(0);
|
||||||
|
|
||||||
function GetaddrMessage(options) {
|
function GetaddrMessage(options) {
|
||||||
|
if (!options) {
|
||||||
|
options = {};
|
||||||
|
}
|
||||||
Message.call(this, options);
|
Message.call(this, options);
|
||||||
this.magicNumber = magicNumber;
|
this.magicNumber = magicNumber;
|
||||||
this.command = 'getaddr';
|
this.command = 'getaddr';
|
||||||
|
|||||||
@ -71,7 +71,7 @@ function Peer(options) {
|
|||||||
this.on('version', function(message) {
|
this.on('version', function(message) {
|
||||||
self.version = message.version;
|
self.version = message.version;
|
||||||
self.subversion = message.subversion;
|
self.subversion = message.subversion;
|
||||||
self.bestHeight = message.start_height;
|
self.bestHeight = message.startHeight;
|
||||||
});
|
});
|
||||||
|
|
||||||
this.on('ping', function(message) {
|
this.on('ping', function(message) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user