This commit is contained in:
Patrick Nagurny 2015-08-31 13:38:21 -04:00
parent 895e46dcac
commit 4ae6377548
8 changed files with 65 additions and 45 deletions

View File

@ -69,17 +69,17 @@ describe('Node Functionality', function() {
{ {
name: 'db', name: 'db',
module: DBService, module: DBService,
dependencies: DBService.dependencies config: {}
}, },
{ {
name: 'bitcoind', name: 'bitcoind',
module: BitcoinService, module: BitcoinService,
dependencies: BitcoinService.dependencies config: {}
}, },
{ {
name: 'address', name: 'address',
module: AddressService, module: AddressService,
dependencies: AddressService.dependencies config: {}
} }
] ]
}; };

View File

@ -235,16 +235,20 @@ describe('Daemon Binding Functionality', function() {
}); });
describe('get block index by height', function() { describe('get block index by height', function() {
it('should get block index by height', function() { var expectedWork = new BN(6);
var blockIndex = bitcoind.getBlockIndex(2); [2,3,4,5,6,7,8,9].forEach(function(i) {
should.exist(blockIndex); it('generate block ' + i, function() {
should.exist(blockIndex.chainWork); var blockIndex = bitcoind.getBlockIndex(i);
var work = new BN(blockIndex.chainWork, 'hex'); should.exist(blockIndex);
work.cmp(new BN(8)).should.equal(0); should.exist(blockIndex.chainWork);
should.exist(blockIndex.prevHash); var work = new BN(blockIndex.chainWork, 'hex');
blockIndex.hash.should.equal(blockHashes[1]); work.cmp(expectedWork).should.equal(0);
blockIndex.prevHash.should.equal(blockHashes[0]); expectedWork = expectedWork.add(new BN(2));
blockIndex.height.should.equal(2); should.exist(blockIndex.prevHash);
blockIndex.hash.should.equal(blockHashes[i - 1]);
blockIndex.prevHash.should.equal(blockHashes[i - 2]);
blockIndex.height.should.equal(i);
});
}); });
}); });

View File

@ -6,6 +6,7 @@ var async = require('async');
var bitcore = require('bitcore'); var bitcore = require('bitcore');
var Networks = bitcore.Networks; var Networks = bitcore.Networks;
var $ = bitcore.util.preconditions; var $ = bitcore.util.preconditions;
var _ = bitcore.deps._;
var index = require('./'); var index = require('./');
var log = index.log; var log = index.log;
var Bus = require('./bus'); var Bus = require('./bus');
@ -19,6 +20,8 @@ function Node(config) {
var self = this; var self = this;
this.errors = errors; // So services can use errors without having to have bitcore-node as a dependency
this.log = log;
this.network = null; this.network = null;
this.services = {}; this.services = {};
this._unloadedServices = []; this._unloadedServices = [];
@ -118,7 +121,7 @@ Node.prototype.getServiceOrder = function() {
$.checkState(service, 'Required dependency "' + name + '" not available.'); $.checkState(service, 'Required dependency "' + name + '" not available.');
// first add the dependencies // first add the dependencies
addToStack(service.dependencies); addToStack(service.module.dependencies);
// add to the stack if it hasn't been added // add to the stack if it hasn't been added
if(!stackNames[name]) { if(!stackNames[name]) {
@ -137,7 +140,10 @@ Node.prototype.getServiceOrder = function() {
Node.prototype._instantiateService = function(service) { Node.prototype._instantiateService = function(service) {
var self = this; var self = this;
var config = service.config || {}; $.checkState(_.isObject(service.config));
$.checkState(!service.config.node);
var config = service.config;
config.node = this; config.node = this;
var mod = new service.module(config); var mod = new service.module(config);

View File

@ -24,14 +24,8 @@ function start(options) {
if (config.services) { if (config.services) {
for (var i = 0; i < config.services.length; i++) { for (var i = 0; i < config.services.length; i++) {
var service = {}; var service = {};
if(typeof config.services[i] === 'object') { service.name = config.services[i];
$.checkState(config.services[i].name, 'Service name must be specified in config'); service.config = config.servicesConfig && config.servicesConfig[service.name] ? config.servicesConfig[service.name] : {};
service.name = config.services[i].name;
service.config = config.services[i].config || {};
} else {
service.name = config.services[i];
service.config = {};
}
try { try {
// first try in the built-in bitcore-node services directory // first try in the built-in bitcore-node services directory
@ -57,7 +51,6 @@ function start(options) {
); );
} }
service.dependencies = service.module.dependencies;
services.push(service); services.push(service);
} }
} }

View File

@ -4,6 +4,8 @@ var http = require('http');
var express = require('express'); var express = require('express');
var bodyParser = require('body-parser'); var bodyParser = require('body-parser');
var socketio = require('socket.io'); var socketio = require('socket.io');
var BaseService = require('../service');
var inherits = require('util').inherits;
var WebService = function(options) { var WebService = function(options) {
var self = this; var self = this;
@ -17,6 +19,10 @@ var WebService = function(options) {
}); });
}; };
inherits(WebService, BaseService);
WebService.dependencies = [];
WebService.prototype.start = function(callback) { WebService.prototype.start = function(callback) {
var self = this; var self = this;
this.app = express(); this.app = express();
@ -43,8 +49,8 @@ WebService.prototype.stop = function(callback) {
}; };
WebService.prototype.setupAllRoutes = function() { WebService.prototype.setupAllRoutes = function() {
for(var key in this.node.modules) { for(var key in this.node.services) {
this.node.modules[key].setupRoutes(this.app); this.node.services[key].setupRoutes(this.app);
} }
}; };

View File

@ -183,19 +183,27 @@ describe('Bitcore Node', function() {
node._unloadedServices = [ node._unloadedServices = [
{ {
name: 'chain', name: 'chain',
dependencies: ['db'] module: {
dependencies: ['db']
}
}, },
{ {
name: 'db', name: 'db',
module: {
dependencies: ['daemon', 'p2p'] dependencies: ['daemon', 'p2p']
}
}, },
{ {
name:'daemon', name:'daemon',
dependencies: [] module: {
dependencies: []
}
}, },
{ {
name: 'p2p', name: 'p2p',
dependencies: [] module: {
dependencies: []
}
} }
]; ];
var order = node.getServiceOrder(); var order = node.getServiceOrder();
@ -219,7 +227,8 @@ describe('Bitcore Node', function() {
}; };
var service = { var service = {
name: 'testservice', name: 'testservice',
module: TestService module: TestService,
config: {}
}; };
node._instantiateService(service); node._instantiateService(service);
should.exist(node.services.testservice); should.exist(node.services.testservice);
@ -254,11 +263,13 @@ describe('Bitcore Node', function() {
node.getServiceOrder = sinon.stub().returns([ node.getServiceOrder = sinon.stub().returns([
{ {
name: 'test1', name: 'test1',
module: TestService module: TestService,
config: {}
}, },
{ {
name: 'test2', name: 'test2',
module: TestService2 module: TestService2,
config: {}
} }
]); ]);
node.start(function() { node.start(function() {
@ -295,11 +306,13 @@ describe('Bitcore Node', function() {
node.getServiceOrder = sinon.stub().returns([ node.getServiceOrder = sinon.stub().returns([
{ {
name: 'test', name: 'test',
module: TestService module: TestService,
config: {}
}, },
{ {
name: 'conflict', name: 'conflict',
module: ConflictService module: ConflictService,
config: {}
} }
]); ]);

View File

@ -15,7 +15,6 @@ describe('#start', function() {
options.services[0].should.deep.equal({ options.services[0].should.deep.equal({
name: 'address', name: 'address',
module: AddressService, module: AddressService,
dependencies: ['bitcoind', 'db'],
config: {} config: {}
}); });
}; };
@ -47,7 +46,6 @@ describe('#start', function() {
options.services[0].should.deep.equal({ options.services[0].should.deep.equal({
name: 'address', name: 'address',
module: AddressService, module: AddressService,
dependencies: ['bitcoind', 'db'],
config: { config: {
param: 'test' param: 'test'
} }
@ -66,13 +64,13 @@ describe('#start', function() {
path: __dirname, path: __dirname,
config: { config: {
services: [ services: [
{ 'address'
name: 'address',
config: {
param: 'test'
}
}
], ],
servicesConfig: {
'address': {
param: 'test'
}
},
datadir: './data' datadir: './data'
} }
}); });

View File

@ -37,7 +37,7 @@ describe('WebService', function() {
it('should call setupRoutes on each module', function() { it('should call setupRoutes on each module', function() {
var node = { var node = {
on: sinon.spy(), on: sinon.spy(),
modules: { services: {
one: { one: {
setupRoutes: sinon.spy() setupRoutes: sinon.spy()
}, },
@ -50,8 +50,8 @@ describe('WebService', function() {
var web = new WebService({node: node}); var web = new WebService({node: node});
web.setupAllRoutes(); web.setupAllRoutes();
node.modules.one.setupRoutes.callCount.should.equal(1); node.services.one.setupRoutes.callCount.should.equal(1);
node.modules.two.setupRoutes.callCount.should.equal(1); node.services.two.setupRoutes.callCount.should.equal(1);
}); });
}); });