From 895e658b6c52270b4baf256273b7fb684f0ca80e Mon Sep 17 00:00:00 2001 From: Manuel Araoz Date: Wed, 29 Apr 2015 23:10:19 -0300 Subject: [PATCH] /v1/node tests added to integration --- api/test/app.js | 15 +++++++++------ api/test/v1/blocks.js | 7 ++----- api/test/v1/node.js | 25 +++++++++++++++---------- api/test/v1/transactions.js | 15 ++------------- lib/networkmonitor.js | 7 +++++++ lib/node.js | 6 ++++++ 6 files changed, 41 insertions(+), 34 deletions(-) diff --git a/api/test/app.js b/api/test/app.js index 2551e032..bdb40355 100644 --- a/api/test/app.js +++ b/api/test/app.js @@ -2,19 +2,22 @@ var BitcoreHTTP = require('../lib/http'); var bitcore = require('bitcore'); +var request = require('supertest'); -var _app = null; +var _agent = null; module.exports = function(nodeMock) { if (process.env.INTEGRATION === 'true') { - if (_app) { - return _app; + if (_agent) { + return _agent; } var config = require('config'); var network = config.get('BitcoreHTTP.BitcoreNode').network; console.log('Starting test suite', network, 'network'); bitcore.Networks.defaultNetwork = bitcore.Networks.get(network); - _app = BitcoreHTTP.create(config.get('BitcoreHTTP')).app; - return _app; + var node = BitcoreHTTP.create(config.get('BitcoreHTTP')); + node.start(); + _agent = request(node.app); + return _agent; } - return new BitcoreHTTP(nodeMock).app; + return request(new BitcoreHTTP(nodeMock).app); }; diff --git a/api/test/v1/blocks.js b/api/test/v1/blocks.js index 863de1e9..574d077b 100644 --- a/api/test/v1/blocks.js +++ b/api/test/v1/blocks.js @@ -2,7 +2,6 @@ var chai = require('chai'); var should = chai.should(); -var request = require('supertest'); var EventEmitter = require('eventemitter2').EventEmitter2; var Promise = require('bluebird'); @@ -10,7 +9,6 @@ Promise.longStackTraces(); var bitcore = require('bitcore'); var _ = bitcore.deps._; -var BitcoreHTTP = require('../../lib/http'); var BitcoreNode = require('../../../'); var mockBlocks = require('../data/blocks'); @@ -26,7 +24,7 @@ describe('BitcoreHTTP v1 blocks routes', function() { }; var last3 = _.keys(mockBlocks).splice(-3).map(blockForHash); var some2 = _.keys(mockBlocks).splice(2, 2).map(blockForHash); - var nodeMock, app, agent; + var nodeMock, agent; var blockList = _.values(mockBlocks); beforeEach(function() { nodeMock = new EventEmitter(); @@ -56,8 +54,7 @@ describe('BitcoreHTTP v1 blocks routes', function() { var ret = section.slice(offset, offset + limit); return Promise.resolve(ret); }; - app = require('../app')(nodeMock); - agent = request(app); + agent = require('../app')(nodeMock); }); var toObject = function(b) { diff --git a/api/test/v1/node.js b/api/test/v1/node.js index 1a6ee28c..cf0e59f8 100644 --- a/api/test/v1/node.js +++ b/api/test/v1/node.js @@ -2,39 +2,44 @@ var chai = require('chai'); var should = chai.should(); -var request = require('supertest'); var EventEmitter = require('eventemitter2').EventEmitter2; var Promise = require('bluebird'); Promise.longStackTraces(); -var BitcoreHTTP = require('../../lib/http'); - describe('BitcoreHTTP v1 node routes', function() { // mocks - var nodeMock, app, agent; + var nodeMock, agent; beforeEach(function() { nodeMock = new EventEmitter(); nodeMock.status = { sync: 0.75, peerCount: 8, version: 'test', - network: 'test', + network: 'regtest', height: 1234, }; nodeMock.getStatus = function() { return Promise.resolve(nodeMock.status); }; - app = new BitcoreHTTP(nodeMock).app; - agent = request(app); + agent = require('../app')(nodeMock); }); - describe('/node', function() { + describe('/v1/node', function() { it('works', function(cb) { agent.get('/v1/node/') - .expect(200) - .expect(nodeMock.status, cb); + .expect(200, function(err, res) { + 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(); + }); }); }); diff --git a/api/test/v1/transactions.js b/api/test/v1/transactions.js index 81cd47b5..93d8b5f0 100644 --- a/api/test/v1/transactions.js +++ b/api/test/v1/transactions.js @@ -2,7 +2,6 @@ var chai = require('chai'); var should = chai.should(); -var request = require('supertest'); var bitcore = require('bitcore'); var _ = bitcore.deps._; @@ -11,7 +10,6 @@ var EventEmitter = require('eventemitter2').EventEmitter2; var Promise = require('bluebird'); Promise.longStackTraces(); -var BitcoreHTTP = require('../../lib/http'); var BitcoreNode = require('../../../'); var mockTransactions = require('../data/transactions'); @@ -20,7 +18,7 @@ describe('BitcoreHTTP v1 transactions routes', function() { // mocks var mockValidTx = new Transaction(); var t1 = mockTransactions[_.keys(mockTransactions)[0]]; - var nodeMock, app, agent; + var nodeMock, agent; beforeEach(function() { nodeMock = new EventEmitter(); nodeMock.transactionService = {}; @@ -37,8 +35,7 @@ describe('BitcoreHTTP v1 transactions routes', function() { } return Promise.resolve(); }; - app = require('../app')(nodeMock); - agent = request(app); + agent = require('../app')(nodeMock); }); var failsWithInvalidHash = function(agent, url, cb) { @@ -98,14 +95,6 @@ describe('BitcoreHTTP v1 transactions routes', function() { .expect(200) .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) { describe('/transactions/:txHash/' + name + '/', function() { diff --git a/lib/networkmonitor.js b/lib/networkmonitor.js index 46f471fd..ddb4e291 100644 --- a/lib/networkmonitor.js +++ b/lib/networkmonitor.js @@ -2,6 +2,7 @@ var util = require('util'); var EventEmitter = require('eventemitter2').EventEmitter2; +var Promise = require('bluebird').Promise; var bitcore = require('bitcore'); 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() { console.log('starting network monitor'); this.peer.connect(); diff --git a/lib/node.js b/lib/node.js index bd0724ba..4ebcb503 100644 --- a/lib/node.js +++ b/lib/node.js @@ -202,6 +202,12 @@ BitcoreNode.prototype._requestFromTip = function() { 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() { var self = this; this.networkMonitor.on('ready', function(reportedMaxHeight) {