2 changed files with 462 additions and 47 deletions
@ -0,0 +1,380 @@ |
|||||
|
'use strict'; |
||||
|
|
||||
|
var should = require('chai').should(); |
||||
|
var proxyquire = require('proxyquire'); |
||||
|
var bitcore = require('bitcore'); |
||||
|
var sinon = require('sinon'); |
||||
|
var Service = require('../bitcorenode'); |
||||
|
|
||||
|
describe('Bitcore Node Service', function() { |
||||
|
describe('#constructor', function() { |
||||
|
it('https settings from node', function() { |
||||
|
var node = { |
||||
|
https: true, |
||||
|
httpsOptions: { |
||||
|
key: 'key', |
||||
|
cert: 'cert' |
||||
|
} |
||||
|
}; |
||||
|
var options = { |
||||
|
node: node |
||||
|
}; |
||||
|
var service = new Service(options); |
||||
|
service.node.should.equal(node); |
||||
|
service.https.should.equal(true); |
||||
|
service.httpsOptions.should.deep.equal({ |
||||
|
key: 'key', |
||||
|
cert: 'cert' |
||||
|
}); |
||||
|
service.bwsPort.should.equal(Service.BWS_PORT); |
||||
|
service.messageBrokerPort.should.equal(Service.MESSAGE_BROKER_PORT); |
||||
|
service.lockerPort.should.equal(Service.LOCKER_PORT); |
||||
|
}); |
||||
|
it('direct https options', function() { |
||||
|
var node = {}; |
||||
|
var options = { |
||||
|
node: node, |
||||
|
https: true, |
||||
|
httpsOptions: { |
||||
|
key: 'key', |
||||
|
cert: 'cert' |
||||
|
} |
||||
|
}; |
||||
|
var service = new Service(options); |
||||
|
service.https.should.equal(true); |
||||
|
service.httpsOptions.should.deep.equal({ |
||||
|
key: 'key', |
||||
|
cert: 'cert' |
||||
|
}); |
||||
|
service.bwsPort.should.equal(Service.BWS_PORT); |
||||
|
service.messageBrokerPort.should.equal(Service.MESSAGE_BROKER_PORT); |
||||
|
service.lockerPort.should.equal(Service.LOCKER_PORT); |
||||
|
}); |
||||
|
it('can set custom ports', function() { |
||||
|
var node = {}; |
||||
|
var options = { |
||||
|
node: node, |
||||
|
bwsPort: 1000, |
||||
|
messageBrokerPort: 1001, |
||||
|
lockerPort: 1002 |
||||
|
}; |
||||
|
var service = new Service(options); |
||||
|
service.bwsPort.should.equal(1000); |
||||
|
service.messageBrokerPort.should.equal(1001); |
||||
|
service.lockerPort.should.equal(1002); |
||||
|
}); |
||||
|
}); |
||||
|
describe('#readHttpsOptions', function() { |
||||
|
var TestService = proxyquire('../bitcorenode', { |
||||
|
fs: { |
||||
|
readFileSync: function(arg) { |
||||
|
return arg; |
||||
|
} |
||||
|
} |
||||
|
}); |
||||
|
it('will create server options from httpsOptions', function() { |
||||
|
var options = { |
||||
|
node: { |
||||
|
https: true, |
||||
|
httpsOptions: { |
||||
|
key: 'key', |
||||
|
cert: 'cert', |
||||
|
CAinter1: 'CAinter1', |
||||
|
CAinter2: 'CAinter2', |
||||
|
CAroot: 'CAroot' |
||||
|
} |
||||
|
} |
||||
|
}; |
||||
|
var service = new TestService(options); |
||||
|
var serverOptions = service._readHttpsOptions(); |
||||
|
serverOptions.key.should.equal('key'); |
||||
|
serverOptions.cert.should.equal('cert'); |
||||
|
serverOptions.ca[0].should.equal('CAinter1'); |
||||
|
serverOptions.ca[1].should.equal('CAinter2'); |
||||
|
serverOptions.ca[2].should.equal('CAroot'); |
||||
|
}); |
||||
|
}); |
||||
|
describe('#_getConfiguration', function() { |
||||
|
it('will throw with an unknown network', function() { |
||||
|
var options = { |
||||
|
node: { |
||||
|
network: 'unknown' |
||||
|
} |
||||
|
}; |
||||
|
var service = new Service(options); |
||||
|
(function() { |
||||
|
service._getConfiguration(); |
||||
|
}).should.throw('Unknown network'); |
||||
|
}); |
||||
|
it('livenet local insight', function() { |
||||
|
var options = { |
||||
|
node: { |
||||
|
network: bitcore.Networks.livenet, |
||||
|
port: 3001 |
||||
|
} |
||||
|
}; |
||||
|
var service = new Service(options); |
||||
|
var config = service._getConfiguration(); |
||||
|
config.blockchainExplorerOpts.livenet.should.deep.equal({ |
||||
|
'apiPrefix': '/insight-api', |
||||
|
'provider': 'insight', |
||||
|
'url': 'http://localhost:3001' |
||||
|
}); |
||||
|
}); |
||||
|
it('testnet local insight', function() { |
||||
|
var options = { |
||||
|
node: { |
||||
|
network: bitcore.Networks.testnet, |
||||
|
port: 3001 |
||||
|
} |
||||
|
}; |
||||
|
var service = new Service(options); |
||||
|
var config = service._getConfiguration(); |
||||
|
config.blockchainExplorerOpts.testnet.should.deep.equal({ |
||||
|
'apiPrefix': '/insight-api', |
||||
|
'provider': 'insight', |
||||
|
'url': 'http://localhost:3001' |
||||
|
}); |
||||
|
}); |
||||
|
}); |
||||
|
describe('#_startWalletService', function() { |
||||
|
it('will start express and web socket servers', function(done) { |
||||
|
function TestExpressApp() {} |
||||
|
TestExpressApp.prototype.start = sinon.stub().callsArg(1); |
||||
|
function TestWSApp() {} |
||||
|
TestWSApp.prototype.start = sinon.stub().callsArg(2); |
||||
|
var listen = sinon.stub().callsArg(1); |
||||
|
var TestService = proxyquire('../bitcorenode', { |
||||
|
'../lib/expressapp': TestExpressApp, |
||||
|
'../lib/wsapp': TestWSApp, |
||||
|
'http': { |
||||
|
Server: sinon.stub().returns({ |
||||
|
listen: listen |
||||
|
}) |
||||
|
} |
||||
|
}); |
||||
|
var options = { |
||||
|
node: { |
||||
|
bwsPort: 3232 |
||||
|
} |
||||
|
}; |
||||
|
var service = new TestService(options); |
||||
|
var config = {}; |
||||
|
service._startWalletService(config, function(err) { |
||||
|
if (err) { |
||||
|
throw err; |
||||
|
} |
||||
|
TestExpressApp.prototype.start.callCount.should.equal(1); |
||||
|
TestExpressApp.prototype.start.args[0][0].should.equal(config); |
||||
|
TestExpressApp.prototype.start.args[0][1].should.be.a('function'); |
||||
|
TestWSApp.prototype.start.callCount.should.equal(1); |
||||
|
TestWSApp.prototype.start.args[0][0].should.equal(service.server); |
||||
|
TestWSApp.prototype.start.args[0][1].should.equal(config); |
||||
|
TestWSApp.prototype.start.args[0][2].should.be.a('function'); |
||||
|
listen.callCount.should.equal(1); |
||||
|
listen.args[0][0].should.equal(3232); |
||||
|
listen.args[0][1].should.be.a('function'); |
||||
|
done(); |
||||
|
}); |
||||
|
}); |
||||
|
it('error from express', function(done) { |
||||
|
function TestExpressApp() {} |
||||
|
TestExpressApp.prototype.start = sinon.stub().callsArgWith(1, new Error('test')); |
||||
|
function TestWSApp() {} |
||||
|
TestWSApp.prototype.start = sinon.stub().callsArg(2); |
||||
|
var listen = sinon.stub().callsArg(1); |
||||
|
var TestService = proxyquire('../bitcorenode', { |
||||
|
'../lib/expressapp': TestExpressApp, |
||||
|
'../lib/wsapp': TestWSApp, |
||||
|
'http': { |
||||
|
Server: sinon.stub().returns({ |
||||
|
listen: listen |
||||
|
}) |
||||
|
} |
||||
|
}); |
||||
|
var options = { |
||||
|
node: { |
||||
|
bwsPort: 3232 |
||||
|
} |
||||
|
}; |
||||
|
var service = new TestService(options); |
||||
|
var config = {}; |
||||
|
service._startWalletService(config, function(err) { |
||||
|
err.message.should.equal('test'); |
||||
|
done(); |
||||
|
}); |
||||
|
}); |
||||
|
it('error from web socket', function(done) { |
||||
|
function TestExpressApp() {} |
||||
|
TestExpressApp.prototype.start = sinon.stub().callsArg(1); |
||||
|
function TestWSApp() {} |
||||
|
TestWSApp.prototype.start = sinon.stub().callsArgWith(2, new Error('test')); |
||||
|
var listen = sinon.stub().callsArg(1); |
||||
|
var TestService = proxyquire('../bitcorenode', { |
||||
|
'../lib/expressapp': TestExpressApp, |
||||
|
'../lib/wsapp': TestWSApp, |
||||
|
'http': { |
||||
|
Server: sinon.stub().returns({ |
||||
|
listen: listen |
||||
|
}) |
||||
|
} |
||||
|
}); |
||||
|
var options = { |
||||
|
node: { |
||||
|
bwsPort: 3232 |
||||
|
} |
||||
|
}; |
||||
|
var service = new TestService(options); |
||||
|
var config = {}; |
||||
|
service._startWalletService(config, function(err) { |
||||
|
err.message.should.equal('test'); |
||||
|
done(); |
||||
|
}); |
||||
|
}); |
||||
|
it('error from server.listen', function(done) { |
||||
|
var app = {}; |
||||
|
function TestExpressApp() { |
||||
|
this.app = app; |
||||
|
} |
||||
|
TestExpressApp.prototype.start = sinon.stub().callsArg(1); |
||||
|
function TestWSApp() {} |
||||
|
TestWSApp.prototype.start = sinon.stub().callsArg(2); |
||||
|
var listen = sinon.stub().callsArgWith(1, new Error('test')); |
||||
|
var TestService = proxyquire('../bitcorenode', { |
||||
|
'../lib/expressapp': TestExpressApp, |
||||
|
'../lib/wsapp': TestWSApp, |
||||
|
'http': { |
||||
|
Server: function() { |
||||
|
arguments[0].should.equal(app); |
||||
|
return { |
||||
|
listen: listen |
||||
|
}; |
||||
|
} |
||||
|
} |
||||
|
}); |
||||
|
var options = { |
||||
|
node: { |
||||
|
bwsPort: 3232 |
||||
|
} |
||||
|
}; |
||||
|
var service = new TestService(options); |
||||
|
var config = {}; |
||||
|
service._startWalletService(config, function(err) { |
||||
|
err.message.should.equal('test'); |
||||
|
done(); |
||||
|
}); |
||||
|
}); |
||||
|
it('will enable https', function(done) { |
||||
|
var app = {}; |
||||
|
function TestExpressApp() { |
||||
|
this.app = app; |
||||
|
} |
||||
|
TestExpressApp.prototype.start = sinon.stub().callsArg(1); |
||||
|
function TestWSApp() {} |
||||
|
TestWSApp.prototype.start = sinon.stub().callsArg(2); |
||||
|
var listen = sinon.stub().callsArg(1); |
||||
|
var httpsOptions = {}; |
||||
|
var createServer = function() { |
||||
|
arguments[0].should.equal(httpsOptions); |
||||
|
arguments[1].should.equal(app); |
||||
|
return { |
||||
|
listen: listen |
||||
|
}; |
||||
|
}; |
||||
|
var TestService = proxyquire('../bitcorenode', { |
||||
|
'../lib/expressapp': TestExpressApp, |
||||
|
'../lib/wsapp': TestWSApp, |
||||
|
'https': { |
||||
|
createServer: createServer |
||||
|
} |
||||
|
}); |
||||
|
var options = { |
||||
|
node: { |
||||
|
https: true, |
||||
|
bwsPort: 3232 |
||||
|
} |
||||
|
}; |
||||
|
var service = new TestService(options); |
||||
|
service._readHttpsOptions = sinon.stub().returns(httpsOptions); |
||||
|
var config = {}; |
||||
|
service._startWalletService(config, function(err) { |
||||
|
service._readHttpsOptions.callCount.should.equal(1); |
||||
|
listen.callCount.should.equal(1); |
||||
|
done(); |
||||
|
}); |
||||
|
}); |
||||
|
}); |
||||
|
describe('#start', function(done) { |
||||
|
it('error from configuration', function(done) { |
||||
|
var options = { |
||||
|
node: {} |
||||
|
}; |
||||
|
var service = new Service(options); |
||||
|
service._getConfiguration = function() { |
||||
|
throw new Error('test'); |
||||
|
}; |
||||
|
service.start(function(err) { |
||||
|
err.message.should.equal('test'); |
||||
|
done(); |
||||
|
}); |
||||
|
}); |
||||
|
it('error from blockchain monitor', function(done) { |
||||
|
var app = {}; |
||||
|
function TestBlockchainMonitor() {} |
||||
|
TestBlockchainMonitor.prototype.start = sinon.stub().callsArgWith(1, new Error('test')); |
||||
|
function TestLocker() {} |
||||
|
TestLocker.prototype.listen = sinon.stub(); |
||||
|
function TestEmailService() {} |
||||
|
TestEmailService.prototype.start = sinon.stub(); |
||||
|
var TestService = proxyquire('../bitcorenode', { |
||||
|
'../lib/blockchainmonitor': TestBlockchainMonitor, |
||||
|
'../lib/emailservice': TestEmailService, |
||||
|
'socket.io': sinon.stub().returns({ |
||||
|
on: sinon.stub() |
||||
|
}), |
||||
|
'locker-server': TestLocker, |
||||
|
}); |
||||
|
var options = { |
||||
|
node: {} |
||||
|
}; |
||||
|
var service = new TestService(options); |
||||
|
var config = {}; |
||||
|
service._getConfiguration = sinon.stub().returns(config); |
||||
|
service._startWalletService = sinon.stub().callsArg(1); |
||||
|
service.start(function(err) { |
||||
|
err.message.should.equal('test'); |
||||
|
done(); |
||||
|
}); |
||||
|
}); |
||||
|
it('error from email service', function(done) { |
||||
|
var app = {}; |
||||
|
function TestBlockchainMonitor() {} |
||||
|
TestBlockchainMonitor.prototype.start = sinon.stub().callsArg(1); |
||||
|
function TestLocker() {} |
||||
|
TestLocker.prototype.listen = sinon.stub(); |
||||
|
function TestEmailService() {} |
||||
|
TestEmailService.prototype.start = sinon.stub().callsArgWith(1, new Error('test')); |
||||
|
var TestService = proxyquire('../bitcorenode', { |
||||
|
'../lib/blockchainmonitor': TestBlockchainMonitor, |
||||
|
'../lib/emailservice': TestEmailService, |
||||
|
'socket.io': sinon.stub().returns({ |
||||
|
on: sinon.stub() |
||||
|
}), |
||||
|
'locker-server': TestLocker, |
||||
|
}); |
||||
|
var options = { |
||||
|
node: {} |
||||
|
}; |
||||
|
var service = new TestService(options); |
||||
|
service._getConfiguration = sinon.stub().returns({ |
||||
|
emailOpts: {} |
||||
|
}); |
||||
|
var config = {}; |
||||
|
service._startWalletService = sinon.stub().callsArg(1); |
||||
|
service.start(function(err) { |
||||
|
err.message.should.equal('test'); |
||||
|
done(); |
||||
|
}); |
||||
|
}); |
||||
|
}); |
||||
|
}); |
Loading…
Reference in new issue