From b3114b2152edac2aec2ad0a632969a64a5849963 Mon Sep 17 00:00:00 2001 From: Manuel Araoz Date: Mon, 2 Mar 2015 15:51:59 -0300 Subject: [PATCH] test BitcoreNode --- index.js | 43 +----------------------------------- lib/node.js | 50 ++++++++++++++++++++++++++++++++++++++++++ test/networkmonitor.js | 7 ++++++ test/node.js | 49 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 107 insertions(+), 42 deletions(-) create mode 100644 lib/node.js create mode 100644 test/node.js diff --git a/index.js b/index.js index 4b36501e..3ad4398a 100755 --- a/index.js +++ b/index.js @@ -1,49 +1,8 @@ 'use strict'; - var config = require('config'); -var util = require('util'); -var EventEmitter = require('eventemitter2').EventEmitter2; - -var bitcore = require('bitcore'); -var Unit = bitcore.Unit; - -var NetworkMonitor = require('./lib/networkmonitor'); -var EventBus = require('./lib/eventbus'); - -var BitcoreNode = function(bus, nm) { - var self = this; - this.bus = bus; - this.nm = nm; - - this.bus.register(bitcore.Transaction, function(tx) { - var tout = Unit.fromSatoshis(tx.outputAmount).toBTC(); - console.log('Transaction:', tx.id, 'total_out:', tout, 'BTC'); - }); - - this.bus.register(bitcore.Block, function(block) { - console.log('Block:', block.id); - }); - - this.bus.onAny(function(value) { - self.emit(this.event, value); - }); - this.nm.on('error', function(err) { - self.emit('error', err); - }); -}; -util.inherits(BitcoreNode, EventEmitter); - -BitcoreNode.create = function(opts) { - var bus = new EventBus(); - var nm = NetworkMonitor.create(bus, opts.NetworkMonitor); - return new BitcoreNode(bus, nm); -}; - -BitcoreNode.prototype.start = function() { - this.nm.start(); -}; +var BitcoreNode = require('./lib/node.js'); if (require.main === module) { var node = BitcoreNode.create(config.get('BitcoreNode')); diff --git a/lib/node.js b/lib/node.js new file mode 100644 index 00000000..198fbb76 --- /dev/null +++ b/lib/node.js @@ -0,0 +1,50 @@ +'use strict'; + +var util = require('util'); +var EventEmitter = require('eventemitter2').EventEmitter2; + +var bitcore = require('bitcore'); +var Unit = bitcore.Unit; +var $ = bitcore.util.preconditions; + +var NetworkMonitor = require('./networkmonitor'); +var EventBus = require('./eventbus'); + +var BitcoreNode = function(bus, nm) { + $.checkArgument(bus); + $.checkArgument(nm); + var self = this; + this.bus = bus; + this.nm = nm; + + this.bus.register(bitcore.Transaction, function(tx) { + var tout = Unit.fromSatoshis(tx.outputAmount).toBTC(); + console.log('Transaction:', tx.id); + console.log('\ttotal_out:', tout, 'BTC'); + }); + + this.bus.register(bitcore.Block, function(block) { + console.log('Block:', block.id); + }); + + this.bus.onAny(function(value) { + self.emit(this.event, value); + }); + this.nm.on('error', function(err) { + self.emit('error', err); + }); +}; +util.inherits(BitcoreNode, EventEmitter); + +BitcoreNode.create = function(opts) { + opts = opts || {}; + var bus = new EventBus(); + var nm = NetworkMonitor.create(bus, opts.NetworkMonitor); + return new BitcoreNode(bus, nm); +}; + +BitcoreNode.prototype.start = function() { + this.nm.start(); +}; + +module.exports = BitcoreNode; diff --git a/test/networkmonitor.js b/test/networkmonitor.js index ab84dfaa..28660ca1 100644 --- a/test/networkmonitor.js +++ b/test/networkmonitor.js @@ -65,6 +65,13 @@ describe('NetworkMonitor', function() { nm.start.bind(nm).should.not.throw(); }); + it('broadcasts errors in underlying peer', function(cb) { + var nm = new NetworkMonitor(busMock, peerMock); + nm.on('error', cb); + nm.start(); + peerMock.emit('error'); + }); + it('broadcasts ready after start', function(cb) { var nm = new NetworkMonitor(busMock, peerMock); nm.on('ready', cb); diff --git a/test/node.js b/test/node.js new file mode 100644 index 00000000..fe9ca6e8 --- /dev/null +++ b/test/node.js @@ -0,0 +1,49 @@ +'use strict'; + +var chai = require('chai'); +var should = chai.should(); +var sinon = require('sinon'); + +var Promise = require('bluebird'); +var EventEmitter = require('eventemitter2').EventEmitter2; +var BitcoreNode = require('../lib/node'); +var EventBus = require('../lib/eventbus'); +Promise.longStackTraces(); + +describe('BitcoreNode', function() { + + // mocks + var busMock, nmMock; + beforeEach(function() { + busMock = new EventBus(); + nmMock = new EventEmitter(); + nmMock.start = function() {}; + }); + describe('instantiates', function() { + it('from constructor', function() { + var node = new BitcoreNode(busMock, nmMock); + should.exist(node); + }); + + it('from create', function() { + var node = BitcoreNode.create(); + should.exist(node); + }); + }); + + it('starts', function() { + var node = new BitcoreNode(busMock, nmMock); + node.start.bind(node).should.not.throw(); + }); + + it('broadcasts errors from network monitor', function(cb) { + var node = new BitcoreNode(busMock, nmMock); + node.on('error', cb); + nmMock.emit('error'); + }); + it('exposes all events from the event bus', function(cb) { + var node = new BitcoreNode(busMock, nmMock); + node.on('foo', cb); + busMock.emit('foo'); + }); +});