Add tests for improved coverage (#3448)
Co-authored-by: Francisco Giordano <frangio.1@gmail.com>pull/3452/head
parent
04204b8fb9
commit
35090c1bf1
@ -0,0 +1,40 @@ |
||||
const { network } = require('hardhat'); |
||||
const { promisify } = require('util'); |
||||
|
||||
const queue = promisify(setImmediate); |
||||
|
||||
async function countPendingTransactions () { |
||||
return parseInt( |
||||
await network.provider.send('eth_getBlockTransactionCountByNumber', ['pending']), |
||||
); |
||||
} |
||||
|
||||
async function batchInBlock (txs) { |
||||
try { |
||||
// disable auto-mining
|
||||
await network.provider.send('evm_setAutomine', [false]); |
||||
// send all transactions
|
||||
const promises = txs.map(fn => fn()); |
||||
// wait for node to have all pending transactions
|
||||
while (txs.length > await countPendingTransactions()) { |
||||
await queue(); |
||||
} |
||||
// mine one block
|
||||
await network.provider.send('evm_mine'); |
||||
// fetch receipts
|
||||
const receipts = await Promise.all(promises); |
||||
// Sanity check, all tx should be in the same block
|
||||
const minedBlocks = new Set(receipts.map(({ receipt }) => receipt.blockNumber)); |
||||
expect(minedBlocks.size).to.equal(1); |
||||
|
||||
return receipts; |
||||
} finally { |
||||
// enable auto-mining
|
||||
await network.provider.send('evm_setAutomine', [true]); |
||||
} |
||||
} |
||||
|
||||
module.exports = { |
||||
countPendingTransactions, |
||||
batchInBlock, |
||||
}; |
Loading…
Reference in new issue