mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Merge branch 'master' of github.com:MetaMask/metamask-extension into i18n-translator-redux
This commit is contained in:
commit
5290570c8f
@ -6,6 +6,9 @@ workflows:
|
|||||||
jobs:
|
jobs:
|
||||||
- prep-deps-npm
|
- prep-deps-npm
|
||||||
- prep-deps-firefox
|
- prep-deps-firefox
|
||||||
|
- prep-build:
|
||||||
|
requires:
|
||||||
|
- prep-deps-npm
|
||||||
- prep-scss:
|
- prep-scss:
|
||||||
requires:
|
requires:
|
||||||
- prep-deps-npm
|
- prep-deps-npm
|
||||||
@ -14,6 +17,7 @@ workflows:
|
|||||||
- prep-deps-npm
|
- prep-deps-npm
|
||||||
- test-e2e:
|
- test-e2e:
|
||||||
requires:
|
requires:
|
||||||
|
- prep-build
|
||||||
- prep-deps-npm
|
- prep-deps-npm
|
||||||
- test-unit:
|
- test-unit:
|
||||||
requires:
|
requires:
|
||||||
@ -36,6 +40,15 @@ workflows:
|
|||||||
- prep-deps-npm
|
- prep-deps-npm
|
||||||
- prep-deps-firefox
|
- prep-deps-firefox
|
||||||
- prep-scss
|
- prep-scss
|
||||||
|
- all-tests-pass:
|
||||||
|
requires:
|
||||||
|
- test-lint
|
||||||
|
- test-unit
|
||||||
|
- test-e2e
|
||||||
|
- test-integration-mascara-chrome
|
||||||
|
- test-integration-mascara-firefox
|
||||||
|
- test-integration-flat-chrome
|
||||||
|
- test-integration-flat-firefox
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
prep-deps-npm:
|
prep-deps-npm:
|
||||||
@ -68,6 +81,23 @@ jobs:
|
|||||||
paths:
|
paths:
|
||||||
- firefox
|
- firefox
|
||||||
|
|
||||||
|
prep-build:
|
||||||
|
docker:
|
||||||
|
- image: circleci/node:8-browsers
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- restore_cache:
|
||||||
|
key: dependency-cache-{{ checksum "package-lock.json" }}
|
||||||
|
- run:
|
||||||
|
name: build:dist
|
||||||
|
command: npm run dist
|
||||||
|
- run:
|
||||||
|
name: build:debug
|
||||||
|
command: find dist/ -type f -exec md5sum {} \; | sort -k 2
|
||||||
|
- save_cache:
|
||||||
|
key: build-cache-{{ .Revision }}
|
||||||
|
paths:
|
||||||
|
- dist
|
||||||
|
|
||||||
prep-scss:
|
prep-scss:
|
||||||
docker:
|
docker:
|
||||||
@ -106,9 +136,8 @@ jobs:
|
|||||||
- checkout
|
- checkout
|
||||||
- restore_cache:
|
- restore_cache:
|
||||||
key: dependency-cache-{{ checksum "package-lock.json" }}
|
key: dependency-cache-{{ checksum "package-lock.json" }}
|
||||||
- run:
|
- restore_cache:
|
||||||
name: Build
|
key: build-cache-{{ .Revision }}
|
||||||
command: npm run dist
|
|
||||||
- run:
|
- run:
|
||||||
name: Test
|
name: Test
|
||||||
command: npm run test:e2e
|
command: npm run test:e2e
|
||||||
@ -217,3 +246,11 @@ jobs:
|
|||||||
- run:
|
- run:
|
||||||
name: test:integration:mascara
|
name: test:integration:mascara
|
||||||
command: npm run test:mascara
|
command: npm run test:mascara
|
||||||
|
|
||||||
|
all-tests-pass:
|
||||||
|
docker:
|
||||||
|
- image: circleci/node:8-browsers
|
||||||
|
steps:
|
||||||
|
- run:
|
||||||
|
name: All Tests Passed
|
||||||
|
command: echo 'weew - everything passed!'
|
||||||
|
@ -38,11 +38,6 @@ module.exports = class TransactionStateManager extends EventEmitter {
|
|||||||
}, opts)
|
}, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the number of txs for the current network.
|
|
||||||
getTxCount () {
|
|
||||||
return this.getTxList().length
|
|
||||||
}
|
|
||||||
|
|
||||||
getTxList () {
|
getTxList () {
|
||||||
const network = this.getNetwork()
|
const network = this.getNetwork()
|
||||||
const fullTxList = this.getFullTxList()
|
const fullTxList = this.getFullTxList()
|
||||||
@ -88,7 +83,7 @@ module.exports = class TransactionStateManager extends EventEmitter {
|
|||||||
txMeta.history.push(snapshot)
|
txMeta.history.push(snapshot)
|
||||||
|
|
||||||
const transactions = this.getFullTxList()
|
const transactions = this.getFullTxList()
|
||||||
const txCount = this.getTxCount()
|
const txCount = transactions.length
|
||||||
const txHistoryLimit = this.txHistoryLimit
|
const txHistoryLimit = this.txHistoryLimit
|
||||||
|
|
||||||
// checks if the length of the tx history is
|
// checks if the length of the tx history is
|
||||||
|
50
app/scripts/migrations/023.js
Normal file
50
app/scripts/migrations/023.js
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
|
||||||
|
const version = 23
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
This migration removes transactions that are no longer usefull down to 40 total
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
const clone = require('clone')
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
version,
|
||||||
|
|
||||||
|
migrate: function (originalVersionedData) {
|
||||||
|
const versionedData = clone(originalVersionedData)
|
||||||
|
versionedData.meta.version = version
|
||||||
|
try {
|
||||||
|
const state = versionedData.data
|
||||||
|
const newState = transformState(state)
|
||||||
|
versionedData.data = newState
|
||||||
|
} catch (err) {
|
||||||
|
console.warn(`MetaMask Migration #${version}` + err.stack)
|
||||||
|
}
|
||||||
|
return Promise.resolve(versionedData)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
function transformState (state) {
|
||||||
|
const newState = state
|
||||||
|
const transactions = newState.TransactionController.transactions
|
||||||
|
|
||||||
|
if (transactions.length <= 40) return newState
|
||||||
|
|
||||||
|
let reverseTxList = transactions.reverse()
|
||||||
|
let stripping = true
|
||||||
|
while (reverseTxList.length > 40 && stripping) {
|
||||||
|
let txIndex = reverseTxList.findIndex((txMeta) => {
|
||||||
|
return (txMeta.status === 'failed' ||
|
||||||
|
txMeta.status === 'rejected' ||
|
||||||
|
txMeta.status === 'confirmed' ||
|
||||||
|
txMeta.status === 'dropped')
|
||||||
|
})
|
||||||
|
if (txIndex < 0) stripping = false
|
||||||
|
else reverseTxList.splice(txIndex, 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
newState.TransactionController.transactions = reverseTxList.reverse()
|
||||||
|
return newState
|
||||||
|
}
|
@ -33,4 +33,5 @@ module.exports = [
|
|||||||
require('./020'),
|
require('./020'),
|
||||||
require('./021'),
|
require('./021'),
|
||||||
require('./022'),
|
require('./022'),
|
||||||
|
require('./023'),
|
||||||
]
|
]
|
||||||
|
99
test/unit/migrations/023-test.js
Normal file
99
test/unit/migrations/023-test.js
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
const assert = require('assert')
|
||||||
|
const migration23 = require('../../../app/scripts/migrations/023')
|
||||||
|
const properTime = (new Date()).getTime()
|
||||||
|
const storage = {
|
||||||
|
"meta": {},
|
||||||
|
"data": {
|
||||||
|
"TransactionController": {
|
||||||
|
"transactions": [
|
||||||
|
]
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const transactions = []
|
||||||
|
const transactions40 = []
|
||||||
|
const transactions20 = []
|
||||||
|
|
||||||
|
const txStates = [
|
||||||
|
'unapproved',
|
||||||
|
'approved',
|
||||||
|
'signed',
|
||||||
|
'submitted',
|
||||||
|
'confirmed',
|
||||||
|
'rejected',
|
||||||
|
'failed',
|
||||||
|
'dropped',
|
||||||
|
]
|
||||||
|
|
||||||
|
const deletableTxStates = [
|
||||||
|
'confirmed',
|
||||||
|
'rejected',
|
||||||
|
'failed',
|
||||||
|
'dropped',
|
||||||
|
]
|
||||||
|
|
||||||
|
let nonDeletableCount = 0
|
||||||
|
|
||||||
|
let status
|
||||||
|
while (transactions.length <= 100) {
|
||||||
|
status = txStates[Math.floor(Math.random() * Math.floor(txStates.length - 1))]
|
||||||
|
if (!deletableTxStates.find((s) => s === status)) nonDeletableCount++
|
||||||
|
transactions.push({status})
|
||||||
|
}
|
||||||
|
|
||||||
|
while (transactions40.length < 40) {
|
||||||
|
status = txStates[Math.floor(Math.random() * Math.floor(txStates.length - 1))]
|
||||||
|
transactions40.push({status})
|
||||||
|
}
|
||||||
|
|
||||||
|
while (transactions20.length < 20) {
|
||||||
|
status = txStates[Math.floor(Math.random() * Math.floor(txStates.length - 1))]
|
||||||
|
transactions20.push({status})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
storage.data.TransactionController.transactions = transactions
|
||||||
|
|
||||||
|
describe('storage is migrated successfully and the proper transactions are remove from state', () => {
|
||||||
|
it('should remove transactions that are unneeded', (done) => {
|
||||||
|
migration23.migrate(storage)
|
||||||
|
.then((migratedData) => {
|
||||||
|
let leftoverNonDeletableTxCount = 0
|
||||||
|
const migratedTransactions = migratedData.data.TransactionController.transactions
|
||||||
|
migratedTransactions.forEach((tx) => {
|
||||||
|
if (!deletableTxStates.find((s) => s === tx.status)) {
|
||||||
|
leftoverNonDeletableTxCount++
|
||||||
|
}
|
||||||
|
})
|
||||||
|
assert.equal(leftoverNonDeletableTxCount, nonDeletableCount, 'migration shouldnt delete transactions we want to keep')
|
||||||
|
assert((migratedTransactions.length >= 40), `should be equal or greater to 40 if they are non deletable states got ${migratedTransactions.length} transactions`)
|
||||||
|
done()
|
||||||
|
}).catch(done)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not remove any transactions because 40 is the expectable limit', (done) => {
|
||||||
|
storage.meta.version = 22
|
||||||
|
storage.data.TransactionController.transactions = transactions40
|
||||||
|
migration23.migrate(storage)
|
||||||
|
.then((migratedData) => {
|
||||||
|
const migratedTransactions = migratedData.data.TransactionController.transactions
|
||||||
|
|
||||||
|
assert.equal(migratedTransactions.length, 40, 'migration shouldnt delete when at limit')
|
||||||
|
done()
|
||||||
|
}).catch(done)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not remove any transactions because 20 txs is under the expectable limit', (done) => {
|
||||||
|
storage.meta.version = 22
|
||||||
|
storage.data.TransactionController.transactions = transactions20
|
||||||
|
migration23.migrate(storage)
|
||||||
|
.then((migratedData) => {
|
||||||
|
const migratedTransactions = migratedData.data.TransactionController.transactions
|
||||||
|
assert.equal(migratedTransactions.length, 20, 'migration shouldnt delete when under limit')
|
||||||
|
done()
|
||||||
|
}).catch(done)
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
Loading…
Reference in New Issue
Block a user