From 18e5173f061c2e21b5acb3e1b329343b5cffc558 Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Sat, 29 Oct 2016 02:29:25 -0700 Subject: Now migrating old vaults to new DEN format --- test/unit/idStore-migration-test.js | 71 ++++++++++++++++++++++++++++++++----- 1 file changed, 62 insertions(+), 9 deletions(-) (limited to 'test/unit/idStore-migration-test.js') diff --git a/test/unit/idStore-migration-test.js b/test/unit/idStore-migration-test.js index df26c7f31..2455c9b03 100644 --- a/test/unit/idStore-migration-test.js +++ b/test/unit/idStore-migration-test.js @@ -2,11 +2,13 @@ const async = require('async') const assert = require('assert') const ethUtil = require('ethereumjs-util') const BN = ethUtil.BN -const configManagerGen = require('../lib/mock-config-manager') +const ConfigManager = require('../../app/scripts/lib/config-manager') const delegateCallCode = require('../lib/example-code.json').delegateCallCode // The old way: const IdentityStore = require('../../app/scripts/lib/idStore') +const STORAGE_KEY = 'metamask-config' +const extend = require('xtend') // The new ways: var KeyringController = require('../../app/scripts/keyring-controller') @@ -22,7 +24,7 @@ const mockVault = { describe('IdentityStore to KeyringController migration', function() { // The stars of the show: - let idStore, keyringController, seedWords + let idStore, keyringController, seedWords, configManager let password = 'password123' let entropy = 'entripppppyy duuude' @@ -36,19 +38,21 @@ describe('IdentityStore to KeyringController migration', function() { beforeEach(function(done) { this.sinon = sinon.sandbox.create() window.localStorage = {} // Hacking localStorage support into JSDom - var configManager = configManagerGen() + configManager = new ConfigManager({ + loadData, + setData: (d) => { global.localStorage = d } + }) - window.localStorage = {} // Hacking localStorage support into JSDom idStore = new IdentityStore({ - configManager: configManagerGen(), + configManager: configManager, ethStore: { addAccount(acct) { accounts.push(ethUtil.addHexPrefix(acct)) }, del(acct) { delete accounts[acct] }, }, }) - idStore._createVault(password, mockVault.seed, null, function (err, seeds) { + idStore._createVault(password, mockVault.seed, null, function (err) { assert.ifError(err, 'createNewVault threw error') originalKeystore = idStore._idmgmt.keyStore @@ -58,6 +62,7 @@ describe('IdentityStore to KeyringController migration', function() { configManager, ethStore: { addAccount(acct) { newAccounts.push(ethUtil.addHexPrefix(acct)) }, + del(acct) { delete newAccounts[acct] }, }, }) @@ -71,14 +76,13 @@ describe('IdentityStore to KeyringController migration', function() { describe('creating new vault type', function() { it('should use the password to migrate the old vault', function(done) { + this.timeout(5000) keyringController.createNewVault(password, null, function (err, state) { assert.ifError(err, 'createNewVault threw error') let newAccounts = keyringController.getAccounts() let newAccount = ethUtil.addHexPrefix(newAccounts[0]) - assert.equal(newAccount, accounts[0], 'restored the account') - assert.equal(newAccount, mockVault.account, 'restored the correct account') - + assert.equal(ethUtil.addHexPrefix(newAccount), mockVault.account, 'restored the correct account') const newSeed = keyringController.keyrings[0].mnemonic assert.equal(newSeed, mockVault.seed, 'seed phrase transferred.') @@ -89,3 +93,52 @@ describe('IdentityStore to KeyringController migration', function() { }) }) +function loadData () { + var oldData = getOldStyleData() + var newData + try { + newData = JSON.parse(window.localStorage[STORAGE_KEY]) + } catch (e) {} + + var data = extend({ + meta: { + version: 0, + }, + data: { + config: { + provider: { + type: 'testnet', + }, + }, + }, + }, oldData || null, newData || null) + return data +} + +function setData (data) { + window.localStorage[STORAGE_KEY] = JSON.stringify(data) +} + +function getOldStyleData () { + var config, wallet, seedWords + + var result = { + meta: { version: 0 }, + data: {}, + } + + try { + config = JSON.parse(window.localStorage['config']) + result.data.config = config + } catch (e) {} + try { + wallet = JSON.parse(window.localStorage['lightwallet']) + result.data.wallet = wallet + } catch (e) {} + try { + seedWords = window.localStorage['seedWords'] + result.data.seedWords = seedWords + } catch (e) {} + + return result +} -- cgit