@Test public void traceTransactionShouldReturnEmptyResultWhenBlockIsNotAvailable() { when(blockchain.getBlockHeader(blockHash)).thenReturn(Optional.of(blockHeader)); when(blockchain.getBlockBody(blockHash)).thenReturn(Optional.empty()); final Optional<TransactionTrace> transactionTrace = transactionTracer.traceTransaction(blockHash, transactionHash, tracer); assertEquals(Optional.empty(), transactionTrace); } }
@Override protected List<Block> generateDataToBeRequested() { final List<Block> requestedBlocks = new ArrayList<>(); for (long i = 0; i < 3; i++) { final BlockHeader header = blockchain.getBlockHeader(10 + i).get(); final BlockBody body = blockchain.getBlockBody(header.getHash()).get(); requestedBlocks.add(new Block(header, body)); } return requestedBlocks; }
@Test public void traceTransactionShouldReturnEmptyResultWhenTransactionNotInCurrentBlock() { when(blockchain.getBlockHeader(blockHash)).thenReturn(Optional.of(blockHeader)); when(blockchain.getBlockHeader(previousBlockHash)).thenReturn(Optional.of(previousBlockHeader)); when(blockBody.getTransactions()).thenReturn(Collections.singletonList(otherTransaction)); when(blockchain.getBlockBody(blockHash)).thenReturn(Optional.of(blockBody)); final Optional<TransactionTrace> transactionTrace = transactionTracer.traceTransaction(blockHash, transactionHash, tracer); assertEquals(Optional.empty(), transactionTrace); }
@Test public void traceTransactionShouldReturnTraceFramesFromExecutionTracer() { when(blockchain.getBlockHeader(blockHash)).thenReturn(Optional.of(blockHeader)); when(blockchain.getBlockHeader(previousBlockHash)).thenReturn(Optional.of(previousBlockHeader)); when(blockBody.getTransactions()).thenReturn(Collections.singletonList(transaction)); when(blockchain.getBlockBody(blockHash)).thenReturn(Optional.of(blockBody)); final List<TraceFrame> traceFrames = Collections.singletonList(mock(TraceFrame.class)); when(tracer.getTraceFrames()).thenReturn(traceFrames); final Optional<TransactionTrace> transactionTrace = transactionTracer.traceTransaction(blockHash, transactionHash, tracer); assertEquals(traceFrames, transactionTrace.get().getTraceFrames()); }
@Override protected List<Block> generateDataToBeRequested() { // Setup data to be requested and expected response final List<Block> blocks = new ArrayList<>(); for (long i = 0; i < 3; i++) { final BlockHeader header = blockchain.getBlockHeader(10 + i).get(); final BlockBody body = blockchain.getBlockBody(header.getHash()).get(); blocks.add(new Block(header, body)); } return blocks; }
@Test public void traceTransactionShouldReturnTraceFramesFromExecutionTracerAfterExecutingOtherTransactions() { when(blockchain.getBlockHeader(blockHash)).thenReturn(Optional.of(blockHeader)); when(blockchain.getBlockHeader(previousBlockHash)).thenReturn(Optional.of(previousBlockHeader)); when(blockBody.getTransactions()).thenReturn(Arrays.asList(otherTransaction, transaction)); when(blockchain.getBlockBody(blockHash)).thenReturn(Optional.of(blockBody)); final List<TraceFrame> traceFrames = Collections.singletonList(mock(TraceFrame.class)); when(tracer.getTraceFrames()).thenReturn(traceFrames); final Optional<TransactionTrace> transactionTrace = transactionTracer.traceTransaction(blockHash, transactionHash, tracer); assertEquals(traceFrames, transactionTrace.get().getTraceFrames()); }
@Override protected Block generateDataToBeRequested() { final BlockHeader header = blockchain.getBlockHeader(5).get(); final BlockBody body = blockchain.getBlockBody(header.getHash()).get(); return new Block(header, body); }
private Block getBlockAtNumber(final long number) { final BlockHeader header = blockchain.getBlockHeader(number).get(); final BlockBody body = blockchain.getBlockBody(header.getHash()).get(); return new Block(header, body); }
@Override protected List<Block> generateDataToBeRequested() { final long chainHead = blockchain.getChainHeadBlockNumber(); final long importSize = 5; final long startNumber = chainHead - importSize + 1; final List<Block> blocksToImport = new ArrayList<>(); for (long i = 0; i < importSize; i++) { final BlockHeader header = blockchain.getBlockHeader(startNumber + i).get(); final BlockBody body = blockchain.getBlockBody(header.getHash()).get(); blocksToImport.add(new Block(header, body)); } return blocksToImport; }
@Test public void traceTransactionShouldReturnResultFromProcessTransaction() { final Result result = mock(Result.class); when(blockchain.getBlockHeader(blockHash)).thenReturn(Optional.of(blockHeader)); when(blockchain.getBlockHeader(previousBlockHash)).thenReturn(Optional.of(previousBlockHeader)); when(blockBody.getTransactions()).thenReturn(Collections.singletonList(transaction)); when(blockchain.getBlockBody(blockHash)).thenReturn(Optional.of(blockBody)); final WorldUpdater updater = mutableWorldState.updater(); final Address coinbase = blockHeader.getCoinbase(); when(transactionProcessor.processTransaction( eq(blockchain), eq(updater), eq(blockHeader), eq(transaction), eq(coinbase), eq(tracer), any())) .thenReturn(result); final Optional<TransactionTrace> transactionTrace = transactionTracer.traceTransaction(blockHash, transactionHash, tracer); assertEquals(result, transactionTrace.get().getResult()); }
new Block( blockchain.getBlockHeader(chainHeadHash).get(), blockchain.getBlockBody(chainHeadHash).get());
private MutableBlockchain createShortChain(final long lastBlockToInclude) { final BlockHeader genesisHeader = blockchain.getBlockHeader(BlockHeader.GENESIS_BLOCK_NUMBER).get(); final BlockBody genesisBody = blockchain.getBlockBody(genesisHeader.getHash()).get(); final Block genesisBlock = new Block(genesisHeader, genesisBody); final MutableBlockchain shortChain = createInMemoryBlockchain(genesisBlock); long nextBlock = genesisHeader.getNumber() + 1; while (nextBlock <= lastBlockToInclude) { final BlockHeader header = blockchain.getBlockHeader(nextBlock).get(); final BlockBody body = blockchain.getBlockBody(header.getHash()).get(); final List<TransactionReceipt> receipts = blockchain.getTxReceipts(header.getHash()).get(); final Block block = new Block(header, body); shortChain.appendBlock(block, receipts); nextBlock++; } return shortChain; }
private MutableBlockchain createShortChain( final Blockchain blockchain, final long truncateAtBlockNumber) { final BlockHeader genesisHeader = blockchain.getBlockHeader(BlockHeader.GENESIS_BLOCK_NUMBER).get(); final BlockBody genesisBody = blockchain.getBlockBody(genesisHeader.getHash()).get(); final Block genesisBlock = new Block(genesisHeader, genesisBody); final MutableBlockchain shortChain = createInMemoryBlockchain(genesisBlock); long nextBlock = genesisHeader.getNumber() + 1; while (nextBlock <= truncateAtBlockNumber) { final BlockHeader header = blockchain.getBlockHeader(nextBlock).get(); final BlockBody body = blockchain.getBlockBody(header.getHash()).get(); final List<TransactionReceipt> receipts = blockchain.getTxReceipts(header.getHash()).get(); final Block block = new Block(header, body); shortChain.appendBlock(block, receipts); nextBlock++; } return shortChain; } }
private MutableBlockchain createShortChain(final long truncateAtBlockNumber) { final BlockHeader genesisHeader = blockchain.getBlockHeader(BlockHeader.GENESIS_BLOCK_NUMBER).get(); final BlockBody genesisBody = blockchain.getBlockBody(genesisHeader.getHash()).get(); final Block genesisBlock = new Block(genesisHeader, genesisBody); final MutableBlockchain shortChain = createInMemoryBlockchain(genesisBlock); long nextBlock = genesisHeader.getNumber() + 1; while (nextBlock <= truncateAtBlockNumber) { final BlockHeader header = blockchain.getBlockHeader(nextBlock).get(); final BlockBody body = blockchain.getBlockBody(header.getHash()).get(); final List<TransactionReceipt> receipts = blockchain.getTxReceipts(header.getHash()).get(); final Block block = new Block(header, body); shortChain.appendBlock(block, receipts); nextBlock++; } return shortChain; } }
for (int i = 0; i < blockCount; i++) { final BlockHeader header = blockchain.getBlockHeader(startBlock + i).get(); final BlockBody body = blockchain.getBlockBody(header.getHash()).get(); expectedBlocks[i] = new Block(header, body);
for (int i = 0; i < blockCount; i++) { final BlockHeader header = blockchain.getBlockHeader(startBlock + i).get(); final BlockBody body = blockchain.getBlockBody(header.getHash()).get(); expectedBlocks[i] = new Block(header, body);
final BlockBody body = blockchain.getBlockBody(header.getHash()).get(); final Block expectedBlock = new Block(header, body);
private void assertBlockDataIsStored( final Blockchain blockchain, final Block block, final List<TransactionReceipt> receipts) { final Hash hash = block.getHash(); assertEquals(hash, blockchain.getBlockHashByNumber(block.getHeader().getNumber()).get()); assertEquals(block.getHeader(), blockchain.getBlockHeader(block.getHeader().getNumber()).get()); assertEquals(block.getHeader(), blockchain.getBlockHeader(hash).get()); assertEquals(block.getBody(), blockchain.getBlockBody(hash).get()); assertThat(blockchain.blockIsOnCanonicalChain(block.getHash())).isTrue(); final List<Transaction> txs = block.getBody().getTransactions(); for (int i = 0; i < txs.size(); i++) { final Transaction expected = txs.get(i); final Transaction actual = blockchain.getTransactionByHash(expected.hash()).get(); assertEquals(expected, actual); } final List<TransactionReceipt> actualReceipts = blockchain.getTxReceipts(hash).get(); assertEquals(receipts, actualReceipts); }