1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

adding tests for recipient blacklist checker

This commit is contained in:
Csaba Solya 2018-05-30 17:38:27 +02:00
parent 6affd8f949
commit cf73581c0e
3 changed files with 83 additions and 5 deletions

View File

@ -10,7 +10,7 @@ const NonceTracker = require('./nonce-tracker')
const txUtils = require('./lib/util')
const cleanErrorStack = require('../../lib/cleanErrorStack')
const log = require('loglevel')
const recipientBlackListChecker = require('./lib/recipient-blacklist-checker')
const recipientBlacklistChecker = require('./lib/recipient-blacklist-checker')
/**
Transaction Controller is an aggregate of sub-controllers and trackers
@ -161,7 +161,7 @@ class TransactionController extends EventEmitter {
try {
// check whether recipient account is public
await recipientBlackListChecker.checkAccount(txMeta.metamaskNetworkId, normalizedTxParams.to)
await recipientBlacklistChecker.checkAccount(txMeta.metamaskNetworkId, normalizedTxParams.to)
// add default tx params
txMeta = await this.addTxGasDefaults(txMeta)
} catch (error) {

View File

@ -12,8 +12,8 @@ module.exports = {
*/
async function checkAccount (networkId, account) {
// mainnet's network id === 1
if (networkId !== 1) {
const mainnetId = 1
if (networkId !== mainnetId) {
return
}
@ -33,4 +33,4 @@ async function checkAccount (networkId, account) {
throw new Error('Recipient is a public account')
}
}
}
}

View File

@ -0,0 +1,78 @@
const assert = require('assert')
const recipientBlackListChecker = require('../../../../../app/scripts/controllers/transactions/lib/recipient-blacklist-checker')
const {
ROPSTEN_CODE,
RINKEYBY_CODE,
KOVAN_CODE,
} = require('../../../../../app/scripts/controllers/network/enums')
const KeyringController = require('eth-keyring-controller')
describe('Recipient Blacklist Checker', function () {
let publicAccounts
before(async function () {
const damnedMnemonic = 'candy maple cake sugar pudding cream honey rich smooth crumble sweet treat'
const keyringController = new KeyringController({})
const Keyring = keyringController.getKeyringClassForType('HD Key Tree')
const opts = {
mnemonic: damnedMnemonic,
numberOfAccounts: 10,
}
const keyring = new Keyring(opts)
publicAccounts = await keyring.getAccounts()
})
describe('#checkAccount', function () {
it('does not fail on test networks', async function () {
let callCount = 0
const networks = [ROPSTEN_CODE, RINKEYBY_CODE, KOVAN_CODE]
for (let networkId in networks) {
await Promise.all(publicAccounts.map(async (account) => {
await recipientBlackListChecker.checkAccount(networkId, account)
callCount++
})
)
}
assert.equal(callCount, 30)
})
it('fails on mainnet', async function () {
const mainnetId = 1
let callCount = 0
await Promise.all(publicAccounts.map(async (account) => {
try {
await recipientBlackListChecker.checkAccount(mainnetId, account)
assert.fail('function should have thrown an error')
} catch (err) {
assert.equal(err.message, 'Recipient is a public account')
}
callCount++
}))
assert.equal(callCount, 10)
})
it('fails for public account - uppercase', async function () {
const mainnetId = 1
const publicAccount = '0X0D1D4E623D10F9FBA5DB95830F7D3839406C6AF2'
try {
await recipientBlackListChecker.checkAccount(mainnetId, publicAccount)
assert.fail('function should have thrown an error')
} catch (err) {
assert.equal(err.message, 'Recipient is a public account')
}
})
it('fails for public account - lowercase', async function () {
const mainnetId = 1
const publicAccount = '0x0d1d4e623d10f9fba5db95830f7d3839406c6af2'
try {
await recipientBlackListChecker.checkAccount(mainnetId, publicAccount)
assert.fail('function should have thrown an error')
} catch (err) {
assert.equal(err.message, 'Recipient is a public account')
}
})
})
})