aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorFrankie <frankie.diamond@gmail.com>2019-05-16 13:36:53 +0800
committerGitHub <noreply@github.com>2019-05-16 13:36:53 +0800
commita34103987a5a3b75588eb23ab4e1a73d6669cbc2 (patch)
tree4875115e87d1dc4f7d0673107e5583a5e85ec12b /test
parentcb584a6ce526fed5ee1466dc048164cea7807d7b (diff)
downloadtangerine-wallet-browser-a34103987a5a3b75588eb23ab4e1a73d6669cbc2.tar.gz
tangerine-wallet-browser-a34103987a5a3b75588eb23ab4e1a73d6669cbc2.tar.zst
tangerine-wallet-browser-a34103987a5a3b75588eb23ab4e1a73d6669cbc2.zip
drop transactions who's nonce is lower then the known network nonce but were not included in a block (#6388)
* transactions/pending - check nonce against the network and mark as dropped if not included in a block * transactions/pending - unifiy "dropped" txs * transactions/pending - test - fix for new expected behavior * fix comment * transactions/pending - clean up dropped event * fix spelling Co-Authored-By: frankiebee <frankie.diamond@gmail.com> * nit fix * test/tx-pending - clarify test description
Diffstat (limited to 'test')
-rw-r--r--test/unit/app/controllers/transactions/pending-tx-test.js72
1 files changed, 67 insertions, 5 deletions
diff --git a/test/unit/app/controllers/transactions/pending-tx-test.js b/test/unit/app/controllers/transactions/pending-tx-test.js
index 1c5f59f5a..b37ac2766 100644
--- a/test/unit/app/controllers/transactions/pending-tx-test.js
+++ b/test/unit/app/controllers/transactions/pending-tx-test.js
@@ -58,7 +58,7 @@ describe('PendingTransactionTracker', function () {
}
})
- it('should become failed if another tx with the same nonce succeeds', async function () {
+ it('should emit dropped if another tx with the same nonce succeeds', async function () {
// SETUP
const txGen = new MockTxGen()
@@ -84,17 +84,16 @@ describe('PendingTransactionTracker', function () {
// THE EXPECTATION
const spy = sinon.spy()
- pendingTxTracker.on('tx:failed', (txId, err) => {
+ pendingTxTracker.on('tx:dropped', (txId) => {
assert.equal(txId, pending.id, 'should fail the pending tx')
- assert.equal(err.name, 'NonceTakenErr', 'should emit a nonce taken error.')
- spy(txId, err)
+ spy(txId)
})
// THE METHOD
await pendingTxTracker._checkPendingTx(pending)
// THE ASSERTION
- assert.ok(spy.calledWith(pending.id), 'tx failed should be emitted')
+ assert.ok(spy.calledWith(pending.id), 'tx dropped should be emitted')
})
})
@@ -107,6 +106,38 @@ describe('PendingTransactionTracker', function () {
pendingTxTracker._checkPendingTx(txMetaNoHash)
})
+ it('should emit tx:dropped with the txMetas id only after the second call', function (done) {
+ txMeta = {
+ id: 1,
+ hash: '0x0593ee121b92e10d63150ad08b4b8f9c7857d1bd160195ee648fb9a0f8d00eeb',
+ status: 'submitted',
+ txParams: {
+ from: '0x1678a085c290ebd122dc42cba69373b5953b831d',
+ nonce: '0x1',
+ value: '0xfffff',
+ },
+ history: [{}],
+ rawTx: '0xf86c808504a817c800827b0d940c62bb85faa3311a998d3aba8098c1235c564966880de0b6b3a7640000802aa08ff665feb887a25d4099e40e11f0fef93ee9608f404bd3f853dd9e84ed3317a6a02ec9d3d1d6e176d4d2593dd760e74ccac753e6a0ea0d00cc9789d0d7ff1f471d',
+ }
+
+ providerResultStub['eth_getTransactionCount'] = '0x02'
+ providerResultStub['eth_getTransactionByHash'] = {}
+ pendingTxTracker.once('tx:dropped', (id) => {
+ if (id === txMeta.id) {
+ delete providerResultStub['eth_getTransactionCount']
+ delete providerResultStub['eth_getTransactionByHash']
+ return done()
+ } else {
+ done(new Error('wrong tx Id'))
+ }
+ })
+
+ pendingTxTracker._checkPendingTx(txMeta).then(() => {
+ pendingTxTracker._checkPendingTx(txMeta).catch(done)
+ }).catch(done)
+ })
+
+
it('should should return if query does not return txParams', function () {
providerResultStub.eth_getTransactionByHash = null
pendingTxTracker._checkPendingTx(txMeta)
@@ -283,6 +314,37 @@ describe('PendingTransactionTracker', function () {
})
})
+ describe('#_checkIftxWasDropped', () => {
+ const txMeta = {
+ id: 1,
+ hash: '0x0593ee121b92e10d63150ad08b4b8f9c7857d1bd160195ee648fb9a0f8d00eeb',
+ status: 'submitted',
+ txParams: {
+ from: '0x1678a085c290ebd122dc42cba69373b5953b831d',
+ nonce: '0x1',
+ value: '0xfffff',
+ },
+ rawTx: '0xf86c808504a817c800827b0d940c62bb85faa3311a998d3aba8098c1235c564966880de0b6b3a7640000802aa08ff665feb887a25d4099e40e11f0fef93ee9608f404bd3f853dd9e84ed3317a6a02ec9d3d1d6e176d4d2593dd760e74ccac753e6a0ea0d00cc9789d0d7ff1f471d',
+ }
+ it('should return false when the nonce is the suggested network nonce', (done) => {
+ providerResultStub['eth_getTransactionCount'] = '0x01'
+ providerResultStub['eth_getTransactionByHash'] = {}
+ pendingTxTracker._checkIftxWasDropped(txMeta).then((dropped) => {
+ assert(!dropped, 'should be false')
+ done()
+ }).catch(done)
+ })
+
+ it('should return true when the network nonce is higher then the txMeta nonce', function (done) {
+ providerResultStub['eth_getTransactionCount'] = '0x02'
+ providerResultStub['eth_getTransactionByHash'] = {}
+ pendingTxTracker._checkIftxWasDropped(txMeta).then((dropped) => {
+ assert(dropped, 'should be true')
+ done()
+ }).catch(done)
+ })
+ })
+
describe('#_checkIfNonceIsTaken', function () {
beforeEach(function () {
const confirmedTxList = [{