Merge pull request #66 from maraoz/polish/transactions

/v1/node tests added to integration
This commit is contained in:
Manuel Aráoz 2015-04-30 00:07:07 -03:00
commit fe43fcb7be
6 changed files with 41 additions and 34 deletions

View File

@ -2,19 +2,22 @@
var BitcoreHTTP = require('../lib/http'); var BitcoreHTTP = require('../lib/http');
var bitcore = require('bitcore'); var bitcore = require('bitcore');
var request = require('supertest');
var _app = null; var _agent = null;
module.exports = function(nodeMock) { module.exports = function(nodeMock) {
if (process.env.INTEGRATION === 'true') { if (process.env.INTEGRATION === 'true') {
if (_app) { if (_agent) {
return _app; return _agent;
} }
var config = require('config'); var config = require('config');
var network = config.get('BitcoreHTTP.BitcoreNode').network; var network = config.get('BitcoreHTTP.BitcoreNode').network;
console.log('Starting test suite', network, 'network'); console.log('Starting test suite', network, 'network');
bitcore.Networks.defaultNetwork = bitcore.Networks.get(network); bitcore.Networks.defaultNetwork = bitcore.Networks.get(network);
_app = BitcoreHTTP.create(config.get('BitcoreHTTP')).app; var node = BitcoreHTTP.create(config.get('BitcoreHTTP'));
return _app; node.start();
_agent = request(node.app);
return _agent;
} }
return new BitcoreHTTP(nodeMock).app; return request(new BitcoreHTTP(nodeMock).app);
}; };

View File

@ -2,7 +2,6 @@
var chai = require('chai'); var chai = require('chai');
var should = chai.should(); var should = chai.should();
var request = require('supertest');
var EventEmitter = require('eventemitter2').EventEmitter2; var EventEmitter = require('eventemitter2').EventEmitter2;
var Promise = require('bluebird'); var Promise = require('bluebird');
@ -10,7 +9,6 @@ Promise.longStackTraces();
var bitcore = require('bitcore'); var bitcore = require('bitcore');
var _ = bitcore.deps._; var _ = bitcore.deps._;
var BitcoreHTTP = require('../../lib/http');
var BitcoreNode = require('../../../'); var BitcoreNode = require('../../../');
var mockBlocks = require('../data/blocks'); var mockBlocks = require('../data/blocks');
@ -26,7 +24,7 @@ describe('BitcoreHTTP v1 blocks routes', function() {
}; };
var last3 = _.keys(mockBlocks).splice(-3).map(blockForHash); var last3 = _.keys(mockBlocks).splice(-3).map(blockForHash);
var some2 = _.keys(mockBlocks).splice(2, 2).map(blockForHash); var some2 = _.keys(mockBlocks).splice(2, 2).map(blockForHash);
var nodeMock, app, agent; var nodeMock, agent;
var blockList = _.values(mockBlocks); var blockList = _.values(mockBlocks);
beforeEach(function() { beforeEach(function() {
nodeMock = new EventEmitter(); nodeMock = new EventEmitter();
@ -56,8 +54,7 @@ describe('BitcoreHTTP v1 blocks routes', function() {
var ret = section.slice(offset, offset + limit); var ret = section.slice(offset, offset + limit);
return Promise.resolve(ret); return Promise.resolve(ret);
}; };
app = require('../app')(nodeMock); agent = require('../app')(nodeMock);
agent = request(app);
}); });
var toObject = function(b) { var toObject = function(b) {

View File

@ -2,39 +2,44 @@
var chai = require('chai'); var chai = require('chai');
var should = chai.should(); var should = chai.should();
var request = require('supertest');
var EventEmitter = require('eventemitter2').EventEmitter2; var EventEmitter = require('eventemitter2').EventEmitter2;
var Promise = require('bluebird'); var Promise = require('bluebird');
Promise.longStackTraces(); Promise.longStackTraces();
var BitcoreHTTP = require('../../lib/http');
describe('BitcoreHTTP v1 node routes', function() { describe('BitcoreHTTP v1 node routes', function() {
// mocks // mocks
var nodeMock, app, agent; var nodeMock, agent;
beforeEach(function() { beforeEach(function() {
nodeMock = new EventEmitter(); nodeMock = new EventEmitter();
nodeMock.status = { nodeMock.status = {
sync: 0.75, sync: 0.75,
peerCount: 8, peerCount: 8,
version: 'test', version: 'test',
network: 'test', network: 'regtest',
height: 1234, height: 1234,
}; };
nodeMock.getStatus = function() { nodeMock.getStatus = function() {
return Promise.resolve(nodeMock.status); return Promise.resolve(nodeMock.status);
}; };
app = new BitcoreHTTP(nodeMock).app; agent = require('../app')(nodeMock);
agent = request(app);
}); });
describe('/node', function() { describe('/v1/node', function() {
it('works', function(cb) { it('works', function(cb) {
agent.get('/v1/node/') agent.get('/v1/node/')
.expect(200) .expect(200, function(err, res) {
.expect(nodeMock.status, cb); should.not.exist(err);
should.exist(res.body);
var r = res.body;
should.exist(r.sync);
should.exist(r.peerCount);
should.exist(r.version);
should.exist(r.network);
should.exist(r.height);
cb();
});
}); });
}); });

View File

@ -2,7 +2,6 @@
var chai = require('chai'); var chai = require('chai');
var should = chai.should(); var should = chai.should();
var request = require('supertest');
var bitcore = require('bitcore'); var bitcore = require('bitcore');
var _ = bitcore.deps._; var _ = bitcore.deps._;
@ -11,7 +10,6 @@ var EventEmitter = require('eventemitter2').EventEmitter2;
var Promise = require('bluebird'); var Promise = require('bluebird');
Promise.longStackTraces(); Promise.longStackTraces();
var BitcoreHTTP = require('../../lib/http');
var BitcoreNode = require('../../../'); var BitcoreNode = require('../../../');
var mockTransactions = require('../data/transactions'); var mockTransactions = require('../data/transactions');
@ -20,7 +18,7 @@ describe('BitcoreHTTP v1 transactions routes', function() {
// mocks // mocks
var mockValidTx = new Transaction(); var mockValidTx = new Transaction();
var t1 = mockTransactions[_.keys(mockTransactions)[0]]; var t1 = mockTransactions[_.keys(mockTransactions)[0]];
var nodeMock, app, agent; var nodeMock, agent;
beforeEach(function() { beforeEach(function() {
nodeMock = new EventEmitter(); nodeMock = new EventEmitter();
nodeMock.transactionService = {}; nodeMock.transactionService = {};
@ -37,8 +35,7 @@ describe('BitcoreHTTP v1 transactions routes', function() {
} }
return Promise.resolve(); return Promise.resolve();
}; };
app = require('../app')(nodeMock); agent = require('../app')(nodeMock);
agent = request(app);
}); });
var failsWithInvalidHash = function(agent, url, cb) { var failsWithInvalidHash = function(agent, url, cb) {
@ -98,14 +95,6 @@ describe('BitcoreHTTP v1 transactions routes', function() {
.expect(200) .expect(200)
.expect('Transaction broadcasted successfully', cb); .expect('Transaction broadcasted successfully', cb);
}); });
it('fails with invalid tx', function(cb) {
agent.post('/v1/transactions/send')
.send({
raw: t1.uncheckedSerialize()
})
.expect(422)
.expect('Unable to broadcast transaction 8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87', cb);
});
}); });
var testIO = function(name) { var testIO = function(name) {
describe('/transactions/:txHash/' + name + '/', function() { describe('/transactions/:txHash/' + name + '/', function() {

View File

@ -2,6 +2,7 @@
var util = require('util'); var util = require('util');
var EventEmitter = require('eventemitter2').EventEmitter2; var EventEmitter = require('eventemitter2').EventEmitter2;
var Promise = require('bluebird').Promise;
var bitcore = require('bitcore'); var bitcore = require('bitcore');
var Networks = bitcore.Networks; var Networks = bitcore.Networks;
@ -79,6 +80,12 @@ NetworkMonitor.prototype.requestBlocks = function(locator) {
})); }));
}; };
NetworkMonitor.prototype.broadcast = function(tx) {
$.checkArgument(tx instanceof bitcore.Transaction, 'tx must be a Transaction object');
this.peer.sendMessage(this.messages.Transaction(tx));
return Promise.resolve();
};
NetworkMonitor.prototype.start = function() { NetworkMonitor.prototype.start = function() {
console.log('starting network monitor'); console.log('starting network monitor');
this.peer.connect(); this.peer.connect();

View File

@ -202,6 +202,12 @@ BitcoreNode.prototype._requestFromTip = function() {
this.networkMonitor.requestBlocks(locator); this.networkMonitor.requestBlocks(locator);
}; };
BitcoreNode.prototype.broadcast = function(tx) {
$.checkArgument(tx instanceof bitcore.Transaction, 'tx must be a Transaction object');
return this.networkMonitor.broadcast(tx);
};
BitcoreNode.prototype.sync = function() { BitcoreNode.prototype.sync = function() {
var self = this; var self = this;
this.networkMonitor.on('ready', function(reportedMaxHeight) { this.networkMonitor.on('ready', function(reportedMaxHeight) {