diff --git a/lib/networkmonitor.js b/lib/networkmonitor.js index 434ce000..25a735f1 100644 --- a/lib/networkmonitor.js +++ b/lib/networkmonitor.js @@ -12,7 +12,6 @@ var util = require('util'); var EventBus = require('./eventbus'); var Peer = p2p.Peer; var Messages = p2p.Messages; -var logger = require('./logger'); function NetworkMonitor(eventBus, peer) { $.checkArgument(eventBus); @@ -24,6 +23,7 @@ function NetworkMonitor(eventBus, peer) { util.inherits(NetworkMonitor, EventEmitter); NetworkMonitor.create = function(eventBus, opts) { + opts = opts || {}; opts.network = opts.network || Networks.defaultNetwork; opts.host = opts.host || 'localhost'; opts.port = opts.port || Networks.defaultNetwork.port; @@ -36,7 +36,7 @@ NetworkMonitor.prototype.setupPeer = function(peer) { var self = this; peer.on('ready', function() { - logger.info('NetworkMonitor: connected to the bitcoin network.'); + self.emit('ready'); }); peer.on('inv', function(m) { // TODO only ask for data if tx or block is unknown diff --git a/test/networkmonitor.js b/test/networkmonitor.js index 535a9412..cba95deb 100644 --- a/test/networkmonitor.js +++ b/test/networkmonitor.js @@ -3,7 +3,10 @@ var chai = require('chai'); var should = chai.should(); var bitcore = require('bitcore'); +var sinon = require('sinon'); +var util = require('util'); var Transaction = bitcore.Transaction; +var Block = bitcore.Block; var EventEmitter = require('events').EventEmitter; var NetworkMonitor = require('../lib/networkmonitor'); @@ -12,24 +15,58 @@ var EventBus = require('../lib/eventbus'); describe('NetworkMonitor', function() { // mocks - var mockTx, busMock, peerMock; + var mockTx, mockBlock, busMock, peerMock; beforeEach(function() { mockTx = new Transaction(); + var genesishex = '0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000'; + var genesisbuf = new Buffer(genesishex, 'hex'); + mockBlock = new Block(genesisbuf); + mockBlock.id = 'asd'; busMock = new EventBus(); peerMock = new EventEmitter(); + peerMock.sendMessage = sinon.spy(); peerMock.connect = function() { + this.emit('ready'); + this.emit('inv', { + inventory: [] + }); this.emit('tx', { transaction: mockTx }); + this.emit('block', { + block: mockBlock + }); }; }); - it('instantiate', function() { + it('instantiates correctly from constructor', function() { var nm = new NetworkMonitor(busMock, peerMock); should.exist(nm); }); - it('start', function(cb) { + it('instantiates correctly from create', function() { + var nm = NetworkMonitor.create(busMock); + should.exist(nm); + }); + + it('start', function() { + var nm = new NetworkMonitor(busMock, peerMock); + nm.start.bind(nm).should.not.throw(); + }); + + it('broadcasts ready after start', function(cb) { + var nm = new NetworkMonitor(busMock, peerMock); + nm.on('ready', cb) + nm.start(); + }); + + it('sends getdatas when receiving invs', function() { + var nm = new NetworkMonitor(busMock, peerMock); + nm.start(); + peerMock.sendMessage.calledOnce.should.equal(true); + }); + + it('sends transactions to bus', function(cb) { var nm = new NetworkMonitor(busMock, peerMock); busMock.register(bitcore.Transaction, function(tx) { tx.id.should.equal(mockTx.id); @@ -38,4 +75,13 @@ describe('NetworkMonitor', function() { nm.start(); }); + it('sends blocks to bus', function(cb) { + var nm = new NetworkMonitor(busMock, peerMock); + busMock.register(bitcore.Block, function(block) { + block.id.should.equal(mockBlock.id); + cb(); + }); + nm.start(); + }); + });