From a643d62fb0c5b4f344249194eb9b7b901d124a26 Mon Sep 17 00:00:00 2001 From: Ivan Socolsky Date: Tue, 14 Apr 2015 15:19:12 -0300 Subject: [PATCH 1/3] test scan status --- lib/model/wallet.js | 2 ++ test/integration/server.js | 34 +++++++++++++++++++++------------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/lib/model/wallet.js b/lib/model/wallet.js index 73e8853..f10c660 100644 --- a/lib/model/wallet.js +++ b/lib/model/wallet.js @@ -32,6 +32,7 @@ Wallet.create = function(opts) { x.pubKey = opts.pubKey; x.network = opts.network; x.addressManager = AddressManager.create(); + x.scanStatus = null; return x; }; @@ -53,6 +54,7 @@ Wallet.fromObj = function(obj) { x.pubKey = obj.pubKey; x.network = obj.network; x.addressManager = AddressManager.fromObj(obj.addressManager); + x.scanStatus = obj.scanStatus; return x; }; diff --git a/test/integration/server.js b/test/integration/server.js index a0db03b..fdb588b 100644 --- a/test/integration/server.js +++ b/test/integration/server.js @@ -2657,7 +2657,7 @@ describe('Wallet service', function() { NotificationBroadcaster.removeAllListeners(); }); - it('should start an asynchronous scan', function(done) { + it.only('should start an asynchronous scan', function(done) { helpers.stubAddressActivity(['3K2VWMXheGZ4qG35DyGjA2dLeKfaSr534A']); var expectedPaths = [ 'm/2147483647/0/0', @@ -2669,22 +2669,30 @@ describe('Wallet service', function() { ]; WalletService.onNotification(function(n) { if (n.type == 'ScanFinished') { - should.not.exist(n.creatorId); - server.storage.fetchAddresses(wallet.id, function(err, addresses) { - should.exist(addresses); - addresses.length.should.equal(expectedPaths.length); - var paths = _.pluck(addresses, 'path'); - _.difference(paths, expectedPaths).length.should.equal(0); - server.createAddress({}, function(err, address) { - should.not.exist(err); - address.path.should.equal('m/2147483647/0/4'); - done(); - }); - }) + server.getWallet({}, function(err, wallet) { + should.exist(wallet.scanStatus); + wallet.scanStatus.should.equal('success'); + should.not.exist(n.creatorId); + server.storage.fetchAddresses(wallet.id, function(err, addresses) { + should.exist(addresses); + addresses.length.should.equal(expectedPaths.length); + var paths = _.pluck(addresses, 'path'); + _.difference(paths, expectedPaths).length.should.equal(0); + server.createAddress({}, function(err, address) { + should.not.exist(err); + address.path.should.equal('m/2147483647/0/4'); + done(); + }); + }) + }); } }); server.startScan({}, function(err) { should.not.exist(err); + server.getWallet({}, function(err, wallet) { + should.exist(wallet.scanStatus); + wallet.scanStatus.should.equal('running'); + }); }); }); it('should start multiple asynchronous scans for different wallets', function(done) { From 3678b27bf53fa079ad3779c8e91ec58931d1cebb Mon Sep 17 00:00:00 2001 From: Ivan Socolsky Date: Tue, 14 Apr 2015 15:41:27 -0300 Subject: [PATCH 2/3] set scan status --- lib/server.js | 36 ++++++++++++++++++++++-------------- test/integration/server.js | 2 +- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/lib/server.js b/lib/server.js index 5a8d636..2b0ea1a 100644 --- a/lib/server.js +++ b/lib/server.js @@ -1224,27 +1224,35 @@ WalletService.prototype.scan = function(opts, cb) { WalletService.prototype.startScan = function(opts, cb) { var self = this; - function scanFinished(err) { - var data = {}; - if (err) { - data.result = 'error'; - data.error = err; - } else { - data.result = 'success'; - } - self._notify('ScanFinished', data, true); + function scanFinished(wallet, err) { + var result = err ? 'error' : 'success'; + var data = { + result: result, + }; + if (err) data.error = err; + + self.getWallet({}, function(err, wallet) { + wallet.scanStatus = result; + self.storage.storeWallet(wallet, function() { + self._notify('ScanFinished', data, true); + }); + }); }; self.getWallet({}, function(err, wallet) { if (err) return cb(err); if (!wallet.isComplete()) return cb(new ClientError('Wallet is not complete')); + wallet.scanStatus = 'running'; + self.storage.storeWallet(wallet, function(err) { + if (err) return cb(err); - setTimeout(function() { - self.scan(opts, scanFinished); - }, 100); + setTimeout(function() { + self.scan(opts, _.bind(scanFinished, self, wallet)); + }, 100); - return cb(null, { - started: true + return cb(null, { + started: true + }); }); }); }; diff --git a/test/integration/server.js b/test/integration/server.js index fdb588b..8acd6e4 100644 --- a/test/integration/server.js +++ b/test/integration/server.js @@ -2657,7 +2657,7 @@ describe('Wallet service', function() { NotificationBroadcaster.removeAllListeners(); }); - it.only('should start an asynchronous scan', function(done) { + it('should start an asynchronous scan', function(done) { helpers.stubAddressActivity(['3K2VWMXheGZ4qG35DyGjA2dLeKfaSr534A']); var expectedPaths = [ 'm/2147483647/0/0', From 8a736723987a4240f5b584c58257a81504026eb9 Mon Sep 17 00:00:00 2001 From: Ivan Socolsky Date: Tue, 14 Apr 2015 15:45:52 -0300 Subject: [PATCH 3/3] check for scan error --- lib/server.js | 4 ++-- test/integration/server.js | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/server.js b/lib/server.js index 2b0ea1a..2b5bb8f 100644 --- a/lib/server.js +++ b/lib/server.js @@ -1224,7 +1224,7 @@ WalletService.prototype.scan = function(opts, cb) { WalletService.prototype.startScan = function(opts, cb) { var self = this; - function scanFinished(wallet, err) { + function scanFinished(err) { var result = err ? 'error' : 'success'; var data = { result: result, @@ -1247,7 +1247,7 @@ WalletService.prototype.startScan = function(opts, cb) { if (err) return cb(err); setTimeout(function() { - self.scan(opts, _.bind(scanFinished, self, wallet)); + self.scan(opts, scanFinished); }, 100); return cb(null, { diff --git a/test/integration/server.js b/test/integration/server.js index 8acd6e4..bfffa87 100644 --- a/test/integration/server.js +++ b/test/integration/server.js @@ -2695,6 +2695,22 @@ describe('Wallet service', function() { }); }); }); + it('should set scan status error when unable to reach blockchain', function(done) { + blockchainExplorer.getAddressActivity = sinon.stub().yields('dummy error'); + WalletService.onNotification(function(n) { + if (n.type == 'ScanFinished') { + should.exist(n.data.error); + server.getWallet({}, function(err, wallet) { + should.exist(wallet.scanStatus); + wallet.scanStatus.should.equal('error'); + done(); + }); + } + }); + server.startScan({}, function(err) { + should.not.exist(err); + }); + }); it('should start multiple asynchronous scans for different wallets', function(done) { helpers.stubAddressActivity(['3K2VWMXheGZ4qG35DyGjA2dLeKfaSr534A']); WalletService.scanConfig.SCAN_WINDOW = 1;