From 202971ec0cdd5a6b1ba545251bb89219250aadd7 Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Mon, 23 May 2016 15:44:33 -0400 Subject: [PATCH] test: increase test coverage for bitcoind adds tests for subscribing with addresses --- test/services/bitcoind.unit.js | 111 +++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/test/services/bitcoind.unit.js b/test/services/bitcoind.unit.js index 0ca30418..6f29edb5 100644 --- a/test/services/bitcoind.unit.js +++ b/test/services/bitcoind.unit.js @@ -1,5 +1,7 @@ 'use strict'; +/* jshint sub: true */ + var path = require('path'); var EventEmitter = require('events').EventEmitter; var should = require('chai').should(); @@ -190,6 +192,115 @@ describe('Bitcoin Service', function() { }); }); + describe('#subscribeAddress', function() { + it('will not an invalid address', function() { + var bitcoind = new BitcoinService(baseConfig); + var emitter = new EventEmitter(); + bitcoind.subscribeAddress(emitter, ['invalidaddress']); + should.not.exist(bitcoind.subscriptions.address['invalidaddress']); + }); + it('will add a valid address', function() { + var bitcoind = new BitcoinService(baseConfig); + var emitter = new EventEmitter(); + bitcoind.subscribeAddress(emitter, ['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br']); + should.exist(bitcoind.subscriptions.address['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br']); + }); + it('will handle multiple address subscribers', function() { + var bitcoind = new BitcoinService(baseConfig); + var emitter1 = new EventEmitter(); + var emitter2 = new EventEmitter(); + bitcoind.subscribeAddress(emitter1, ['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br']); + bitcoind.subscribeAddress(emitter2, ['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br']); + should.exist(bitcoind.subscriptions.address['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br']); + bitcoind.subscriptions.address['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br'].length.should.equal(2); + }); + it('will not add the same emitter twice', function() { + var bitcoind = new BitcoinService(baseConfig); + var emitter1 = new EventEmitter(); + bitcoind.subscribeAddress(emitter1, ['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br']); + bitcoind.subscribeAddress(emitter1, ['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br']); + should.exist(bitcoind.subscriptions.address['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br']); + bitcoind.subscriptions.address['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br'].length.should.equal(1); + }); + }); + + describe('#unsubscribeAddress', function() { + it('it will remove a subscription', function() { + var bitcoind = new BitcoinService(baseConfig); + var emitter1 = new EventEmitter(); + var emitter2 = new EventEmitter(); + bitcoind.subscribeAddress(emitter1, ['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br']); + bitcoind.subscribeAddress(emitter2, ['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br']); + should.exist(bitcoind.subscriptions.address['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br']); + bitcoind.subscriptions.address['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br'].length.should.equal(2); + bitcoind.unsubscribeAddress(emitter1, ['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br']); + bitcoind.subscriptions.address['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br'].length.should.equal(1); + }); + it('will unsubscribe subscriptions for an emitter', function() { + var bitcoind = new BitcoinService(baseConfig); + var emitter1 = new EventEmitter(); + var emitter2 = new EventEmitter(); + bitcoind.subscriptions.address['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br'] = [emitter1, emitter2]; + bitcoind.unsubscribeAddress(emitter1); + bitcoind.subscriptions.address['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br'].length.should.equal(1); + }); + it('will NOT unsubscribe subscription with missing address', function() { + var bitcoind = new BitcoinService(baseConfig); + var emitter1 = new EventEmitter(); + var emitter2 = new EventEmitter(); + bitcoind.subscriptions.address['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br'] = [emitter1, emitter2]; + bitcoind.unsubscribeAddress(emitter1, ['1Cj4UZWnGWAJH1CweTMgPLQMn26WRMfXmo']); + bitcoind.subscriptions.address['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br'].length.should.equal(2); + }); + it('will NOT unsubscribe subscription with missing emitter', function() { + var bitcoind = new BitcoinService(baseConfig); + var emitter1 = new EventEmitter(); + var emitter2 = new EventEmitter(); + bitcoind.subscriptions.address['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br'] = [emitter2]; + bitcoind.unsubscribeAddress(emitter1, ['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br']); + bitcoind.subscriptions.address['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br'].length.should.equal(1); + bitcoind.subscriptions.address['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br'][0].should.equal(emitter2); + }); + it('will remove empty addresses', function() { + var bitcoind = new BitcoinService(baseConfig); + var emitter1 = new EventEmitter(); + var emitter2 = new EventEmitter(); + bitcoind.subscriptions.address['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br'] = [emitter1, emitter2]; + bitcoind.unsubscribeAddress(emitter1, ['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br']); + bitcoind.unsubscribeAddress(emitter2, ['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br']); + should.not.exist(bitcoind.subscriptions.address['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br']); + }); + it('will unsubscribe emitter for all addresses', function() { + var bitcoind = new BitcoinService(baseConfig); + var emitter1 = new EventEmitter(); + var emitter2 = new EventEmitter(); + bitcoind.subscriptions.address['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br'] = [emitter1, emitter2]; + bitcoind.subscriptions.address['1Cj4UZWnGWAJH1CweTMgPLQMn26WRMfXmo'] = [emitter1, emitter2]; + sinon.spy(bitcoind, 'unsubscribeAddressAll'); + bitcoind.unsubscribeAddress(emitter1); + bitcoind.unsubscribeAddressAll.callCount.should.equal(1); + bitcoind.subscriptions.address['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br'].length.should.equal(1); + bitcoind.subscriptions.address['1Cj4UZWnGWAJH1CweTMgPLQMn26WRMfXmo'].length.should.equal(1); + }); + }); + + describe('#unsubscribeAddressAll', function() { + it('will unsubscribe emitter for all addresses', function() { + var bitcoind = new BitcoinService(baseConfig); + var emitter1 = new EventEmitter(); + var emitter2 = new EventEmitter(); + bitcoind.subscriptions.address['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br'] = [emitter1, emitter2]; + bitcoind.subscriptions.address['1Cj4UZWnGWAJH1CweTMgPLQMn26WRMfXmo'] = [emitter1, emitter2]; + bitcoind.subscriptions.address['mgY65WSfEmsyYaYPQaXhmXMeBhwp4EcsQW'] = [emitter2]; + bitcoind.subscriptions.address['3CMNFxN1oHBc4R1EpboAL5yzHGgE611Xou'] = [emitter1]; + bitcoind.unsubscribeAddress(emitter1); + bitcoind.subscriptions.address['2N2JD6wb56AfK4tfmM6PwdVmoYk2dCKf4Br'].length.should.equal(1); + bitcoind.subscriptions.address['1Cj4UZWnGWAJH1CweTMgPLQMn26WRMfXmo'].length.should.equal(1); + bitcoind.subscriptions.address['mgY65WSfEmsyYaYPQaXhmXMeBhwp4EcsQW'].length.should.equal(1); + should.not.exist(bitcoind.subscriptions.address['3CMNFxN1oHBc4R1EpboAL5yzHGgE611Xou']); + }); + }); + describe('#_getDefaultConfig', function() { it('will generate config file from defaults', function() { var bitcoind = new BitcoinService(baseConfig);