From eef6d41e7e5c638ee3afac45c17ca3c2a1caeea6 Mon Sep 17 00:00:00 2001 From: Overtorment Date: Sun, 25 Aug 2019 14:36:26 +0100 Subject: [PATCH 1/2] TST --- tests/integration/App.test.js | 113 ----------------- .../{App2.test.js => Bip38.test.js} | 0 tests/integration/Storage.test.js | 119 ++++++++++++++++++ 3 files changed, 119 insertions(+), 113 deletions(-) rename tests/integration/{App2.test.js => Bip38.test.js} (100%) create mode 100644 tests/integration/Storage.test.js diff --git a/tests/integration/App.test.js b/tests/integration/App.test.js index 1dcf162b6..d702bc21c 100644 --- a/tests/integration/App.test.js +++ b/tests/integration/App.test.js @@ -105,119 +105,6 @@ it('Selftest work', () => { assert.ok(okFound, 'OK not found. Got: ' + allTests.join('; ')); }); -it('Appstorage - loadFromDisk works', async () => { - /** @type {AppStorage} */ - let Storage = new AppStorage(); - let w = new SegwitP2SHWallet(); - w.setLabel('testlabel'); - await w.generate(); - Storage.wallets.push(w); - await Storage.saveToDisk(); - - // saved, now trying to load - - let Storage2 = new AppStorage(); - await Storage2.loadFromDisk(); - assert.strictEqual(Storage2.wallets.length, 1); - assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); - let isEncrypted = await Storage2.storageIsEncrypted(); - assert.ok(!isEncrypted); - - // emulating encrypted storage (and testing flag) - - await AsyncStorage.setItem('data', false); - await AsyncStorage.setItem(AppStorage.FLAG_ENCRYPTED, '1'); - let Storage3 = new AppStorage(); - isEncrypted = await Storage3.storageIsEncrypted(); - assert.ok(isEncrypted); -}); - -it('Appstorage - encryptStorage & load encrypted storage works', async () => { - /** @type {AppStorage} */ - let Storage = new AppStorage(); - let w = new SegwitP2SHWallet(); - w.setLabel('testlabel'); - await w.generate(); - Storage.wallets.push(w); - await Storage.saveToDisk(); - let isEncrypted = await Storage.storageIsEncrypted(); - assert.ok(!isEncrypted); - await Storage.encryptStorage('password'); - isEncrypted = await Storage.storageIsEncrypted(); - assert.strictEqual(Storage.cachedPassword, 'password'); - assert.ok(isEncrypted); - - // saved, now trying to load, using good password - - let Storage2 = new AppStorage(); - isEncrypted = await Storage2.storageIsEncrypted(); - assert.ok(isEncrypted); - let loadResult = await Storage2.loadFromDisk('password'); - assert.ok(loadResult); - assert.strictEqual(Storage2.wallets.length, 1); - assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); - - // now trying to load, using bad password - - Storage2 = new AppStorage(); - isEncrypted = await Storage2.storageIsEncrypted(); - assert.ok(isEncrypted); - loadResult = await Storage2.loadFromDisk('passwordBAD'); - assert.ok(!loadResult); - assert.strictEqual(Storage2.wallets.length, 0); - - // now, trying case with adding data after decrypt. - // saveToDisk should be handled correctly - - Storage2 = new AppStorage(); - isEncrypted = await Storage2.storageIsEncrypted(); - assert.ok(isEncrypted); - loadResult = await Storage2.loadFromDisk('password'); - assert.ok(loadResult); - assert.strictEqual(Storage2.wallets.length, 1); - assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); - w = new SegwitP2SHWallet(); - w.setLabel('testlabel2'); - await w.generate(); - Storage2.wallets.push(w); - assert.strictEqual(Storage2.wallets.length, 2); - assert.strictEqual(Storage2.wallets[1].getLabel(), 'testlabel2'); - await Storage2.saveToDisk(); - // saved to encrypted storage after load. next load should be successfull - Storage2 = new AppStorage(); - isEncrypted = await Storage2.storageIsEncrypted(); - assert.ok(isEncrypted); - loadResult = await Storage2.loadFromDisk('password'); - assert.ok(loadResult); - assert.strictEqual(Storage2.wallets.length, 2); - assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); - assert.strictEqual(Storage2.wallets[1].getLabel(), 'testlabel2'); - - // next, adding new `fake` storage which should be unlocked with `fake` password - let createFakeStorageResult = await Storage2.createFakeStorage('fakePassword'); - assert.ok(createFakeStorageResult); - assert.strictEqual(Storage2.wallets.length, 0); - assert.strictEqual(Storage2.cachedPassword, 'fakePassword'); - w = new SegwitP2SHWallet(); - w.setLabel('fakewallet'); - await w.generate(); - Storage2.wallets.push(w); - await Storage2.saveToDisk(); - // now, will try to load & decrypt with real password and with fake password - // real: - let Storage3 = new AppStorage(); - loadResult = await Storage3.loadFromDisk('password'); - assert.ok(loadResult); - assert.strictEqual(Storage3.wallets.length, 2); - assert.strictEqual(Storage3.wallets[0].getLabel(), 'testlabel'); - // fake: - Storage3 = new AppStorage(); - loadResult = await Storage3.loadFromDisk('fakePassword'); - assert.ok(loadResult); - assert.strictEqual(Storage3.wallets.length, 1); - assert.strictEqual(Storage3.wallets[0].getLabel(), 'fakewallet'); -}); - it('Wallet can fetch UTXO', async () => { jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000; let w = new SegwitP2SHWallet(); diff --git a/tests/integration/App2.test.js b/tests/integration/Bip38.test.js similarity index 100% rename from tests/integration/App2.test.js rename to tests/integration/Bip38.test.js diff --git a/tests/integration/Storage.test.js b/tests/integration/Storage.test.js new file mode 100644 index 000000000..f5041b19d --- /dev/null +++ b/tests/integration/Storage.test.js @@ -0,0 +1,119 @@ +/* global it, jest */ +import { SegwitP2SHWallet, AppStorage } from '../../class'; +import AsyncStorage from '@react-native-community/async-storage'; +global.crypto = require('crypto'); // shall be used by tests under nodejs CLI, but not in RN environment +let assert = require('assert'); +jest.useFakeTimers(); + +it('Appstorage - loadFromDisk works', async () => { + /** @type {AppStorage} */ + let Storage = new AppStorage(); + let w = new SegwitP2SHWallet(); + w.setLabel('testlabel'); + await w.generate(); + Storage.wallets.push(w); + await Storage.saveToDisk(); + + // saved, now trying to load + + let Storage2 = new AppStorage(); + await Storage2.loadFromDisk(); + assert.strictEqual(Storage2.wallets.length, 1); + assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); + let isEncrypted = await Storage2.storageIsEncrypted(); + assert.ok(!isEncrypted); + + // emulating encrypted storage (and testing flag) + + await AsyncStorage.setItem('data', false); + await AsyncStorage.setItem(AppStorage.FLAG_ENCRYPTED, '1'); + let Storage3 = new AppStorage(); + isEncrypted = await Storage3.storageIsEncrypted(); + assert.ok(isEncrypted); +}); + +it('Appstorage - encryptStorage & load encrypted storage works', async () => { + /** @type {AppStorage} */ + let Storage = new AppStorage(); + let w = new SegwitP2SHWallet(); + w.setLabel('testlabel'); + await w.generate(); + Storage.wallets.push(w); + await Storage.saveToDisk(); + let isEncrypted = await Storage.storageIsEncrypted(); + assert.ok(!isEncrypted); + await Storage.encryptStorage('password'); + isEncrypted = await Storage.storageIsEncrypted(); + assert.strictEqual(Storage.cachedPassword, 'password'); + assert.ok(isEncrypted); + + // saved, now trying to load, using good password + + let Storage2 = new AppStorage(); + isEncrypted = await Storage2.storageIsEncrypted(); + assert.ok(isEncrypted); + let loadResult = await Storage2.loadFromDisk('password'); + assert.ok(loadResult); + assert.strictEqual(Storage2.wallets.length, 1); + assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); + + // now trying to load, using bad password + + Storage2 = new AppStorage(); + isEncrypted = await Storage2.storageIsEncrypted(); + assert.ok(isEncrypted); + loadResult = await Storage2.loadFromDisk('passwordBAD'); + assert.ok(!loadResult); + assert.strictEqual(Storage2.wallets.length, 0); + + // now, trying case with adding data after decrypt. + // saveToDisk should be handled correctly + + Storage2 = new AppStorage(); + isEncrypted = await Storage2.storageIsEncrypted(); + assert.ok(isEncrypted); + loadResult = await Storage2.loadFromDisk('password'); + assert.ok(loadResult); + assert.strictEqual(Storage2.wallets.length, 1); + assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); + w = new SegwitP2SHWallet(); + w.setLabel('testlabel2'); + await w.generate(); + Storage2.wallets.push(w); + assert.strictEqual(Storage2.wallets.length, 2); + assert.strictEqual(Storage2.wallets[1].getLabel(), 'testlabel2'); + await Storage2.saveToDisk(); + // saved to encrypted storage after load. next load should be successfull + Storage2 = new AppStorage(); + isEncrypted = await Storage2.storageIsEncrypted(); + assert.ok(isEncrypted); + loadResult = await Storage2.loadFromDisk('password'); + assert.ok(loadResult); + assert.strictEqual(Storage2.wallets.length, 2); + assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); + assert.strictEqual(Storage2.wallets[1].getLabel(), 'testlabel2'); + + // next, adding new `fake` storage which should be unlocked with `fake` password + let createFakeStorageResult = await Storage2.createFakeStorage('fakePassword'); + assert.ok(createFakeStorageResult); + assert.strictEqual(Storage2.wallets.length, 0); + assert.strictEqual(Storage2.cachedPassword, 'fakePassword'); + w = new SegwitP2SHWallet(); + w.setLabel('fakewallet'); + await w.generate(); + Storage2.wallets.push(w); + await Storage2.saveToDisk(); + // now, will try to load & decrypt with real password and with fake password + // real: + let Storage3 = new AppStorage(); + loadResult = await Storage3.loadFromDisk('password'); + assert.ok(loadResult); + assert.strictEqual(Storage3.wallets.length, 2); + assert.strictEqual(Storage3.wallets[0].getLabel(), 'testlabel'); + // fake: + Storage3 = new AppStorage(); + loadResult = await Storage3.loadFromDisk('fakePassword'); + assert.ok(loadResult); + assert.strictEqual(Storage3.wallets.length, 1); + assert.strictEqual(Storage3.wallets[0].getLabel(), 'fakewallet'); +}); From 974b00e4f2b4765d2b1279e076d6550131c5cb14 Mon Sep 17 00:00:00 2001 From: Overtorment Date: Sun, 25 Aug 2019 14:36:54 +0100 Subject: [PATCH 2/2] REL: ver bump v4.4.1 --- android/app/build.gradle | 2 +- ios/BlueWallet/Info.plist | 2 +- ios/BlueWalletWatch Extension/Info.plist | 2 +- ios/BlueWalletWatch/Info.plist | 2 +- package-lock.json | 2 +- package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 57f3c3383..54ba2a18e 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -118,7 +118,7 @@ android { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 - versionName "4.4.0" + versionName "4.4.1" multiDexEnabled true missingDimensionStrategy 'react-native-camera', 'general' } diff --git a/ios/BlueWallet/Info.plist b/ios/BlueWallet/Info.plist index 74d53302b..a7444705d 100644 --- a/ios/BlueWallet/Info.plist +++ b/ios/BlueWallet/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 4.4.0 + 4.4.1 CFBundleSignature ???? CFBundleURLTypes diff --git a/ios/BlueWalletWatch Extension/Info.plist b/ios/BlueWalletWatch Extension/Info.plist index a8dea69bd..b8f2520fe 100644 --- a/ios/BlueWalletWatch Extension/Info.plist +++ b/ios/BlueWalletWatch Extension/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType XPC! CFBundleShortVersionString - 4.4.0 + 4.4.1 CFBundleVersion 239 LSApplicationCategoryType diff --git a/ios/BlueWalletWatch/Info.plist b/ios/BlueWalletWatch/Info.plist index 9a1f0f751..2dc3e8528 100644 --- a/ios/BlueWalletWatch/Info.plist +++ b/ios/BlueWalletWatch/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 4.4.0 + 4.4.1 CFBundleVersion 239 UISupportedInterfaceOrientations diff --git a/package-lock.json b/package-lock.json index 072afc7ae..335c3b005 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "BlueWallet", - "version": "4.4.0", + "version": "4.4.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 2f7150918..e7e58416a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "BlueWallet", - "version": "4.4.0", + "version": "4.4.1", "devDependencies": { "@babel/core": "^7.5.0", "@babel/runtime": "^7.5.1",