mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
add a test for #getNonceLock
This commit is contained in:
parent
0d8c02db35
commit
fa8c74fe9b
@ -1,4 +1,4 @@
|
|||||||
const EthQuery = require('ethjs-query')
|
const EthQuery = require('eth-query')
|
||||||
|
|
||||||
class NonceTracker {
|
class NonceTracker {
|
||||||
|
|
||||||
@ -20,10 +20,10 @@ class NonceTracker {
|
|||||||
const currentBlock = await this._getCurrentBlock()
|
const currentBlock = await this._getCurrentBlock()
|
||||||
const blockNumber = currentBlock.number
|
const blockNumber = currentBlock.number
|
||||||
const pendingTransactions = this.getPendingTransactions(address)
|
const pendingTransactions = this.getPendingTransactions(address)
|
||||||
const baseCount = await this.ethQuery.getTransactionCount(address, blockNumber)
|
const baseCount = await this._getTxCount(address, blockNumber)
|
||||||
const nextNonce = baseCount + pendingTransactions
|
const nextNonce = parseInt(baseCount) + pendingTransactions.length + 1
|
||||||
// return next nonce and release cb
|
// return next nonce and release cb
|
||||||
return { nextNonce, releaseLock }
|
return { nextNonce: nextNonce.toString(16), releaseLock }
|
||||||
}
|
}
|
||||||
|
|
||||||
async _getCurrentBlock() {
|
async _getCurrentBlock() {
|
||||||
@ -37,13 +37,23 @@ class NonceTracker {
|
|||||||
_takeLock(lockId) {
|
_takeLock(lockId) {
|
||||||
let releaseLock = null
|
let releaseLock = null
|
||||||
// create and store lock
|
// create and store lock
|
||||||
const lock = new Promise((reject, resolve) => { releaseLock = resolve })
|
const lock = new Promise((resolve, reject) => { releaseLock = resolve })
|
||||||
this.lockMap[lockId] = lock
|
this.lockMap[lockId] = lock
|
||||||
// setup lock teardown
|
// setup lock teardown
|
||||||
lock.then(() => delete this.lockMap[lockId])
|
lock.then(() => {
|
||||||
|
delete this.lockMap[lockId]
|
||||||
|
})
|
||||||
return releaseLock
|
return releaseLock
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_getTxCount (address, blockNumber) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
this.ethQuery.getTransactionCount(address, blockNumber, (err, result) => {
|
||||||
|
err ? reject(err) : resolve(result)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = NonceTracker
|
module.exports = NonceTracker
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
"dist": "npm install && gulp dist --disableLiveReload",
|
"dist": "npm install && gulp dist --disableLiveReload",
|
||||||
"test": "npm run lint && npm run test-unit && npm run test-integration",
|
"test": "npm run lint && npm run test-unit && npm run test-integration",
|
||||||
"test-unit": "METAMASK_ENV=test mocha --require test/helper.js --recursive \"test/unit/**/*.js\"",
|
"test-unit": "METAMASK_ENV=test mocha --require test/helper.js --recursive \"test/unit/**/*.js\"",
|
||||||
|
"single-test": "METAMASK_ENV=test mocha --require test/helper.js",
|
||||||
"test-integration": "npm run buildMock && npm run buildCiUnits && testem ci -P 2",
|
"test-integration": "npm run buildMock && npm run buildCiUnits && testem ci -P 2",
|
||||||
"lint": "gulp lint",
|
"lint": "gulp lint",
|
||||||
"buildCiUnits": "node test/integration/index.js",
|
"buildCiUnits": "node test/integration/index.js",
|
||||||
|
46
test/unit/nonce-tracker-test.js
Normal file
46
test/unit/nonce-tracker-test.js
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
const assert = require('assert')
|
||||||
|
const NonceTracker = require('../../app/scripts/lib/nonce-tracker')
|
||||||
|
|
||||||
|
describe('Nonce Tracker', function () {
|
||||||
|
let nonceTracker, provider, getPendingTransactions, pendingTxs
|
||||||
|
const noop = () => {}
|
||||||
|
|
||||||
|
|
||||||
|
beforeEach(function () {
|
||||||
|
pendingTxs =[{
|
||||||
|
'status': 'submitted',
|
||||||
|
'txParams': {
|
||||||
|
'from': '0x7d3517b0d011698406d6e0aed8453f0be2697926',
|
||||||
|
'gas': '0x30d40',
|
||||||
|
'value': '0x0',
|
||||||
|
'nonce': '0x1',
|
||||||
|
},
|
||||||
|
}]
|
||||||
|
|
||||||
|
|
||||||
|
getPendingTransactions = () => pendingTxs
|
||||||
|
provider = { sendAsync: (_, cb) => { cb(undefined , {result: '0x0'}) }, }
|
||||||
|
nonceTracker = new NonceTracker({
|
||||||
|
blockTracker: {
|
||||||
|
getCurrentBlock: () => '0x11b568',
|
||||||
|
once: (...args) => {
|
||||||
|
setTimeout(() => {
|
||||||
|
args.pop()()
|
||||||
|
}, 5000)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
provider,
|
||||||
|
getPendingTransactions,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('#getNonceLock', function () {
|
||||||
|
it('should work', async function (done) {
|
||||||
|
this.timeout(15000)
|
||||||
|
const nonceLock = await nonceTracker.getNonceLock('0x7d3517b0d011698406d6e0aed8453f0be2697926')
|
||||||
|
assert.equal(nonceLock.nextNonce, '2', 'nonce should be 2')
|
||||||
|
nonceLock.releaseLock()
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
Loading…
Reference in New Issue
Block a user