public void receiveLocalTransaction(final Transaction transaction) { transactionPool.addLocalTransaction(transaction); }
private void verifyErrorForInvalidTransaction( final TransactionInvalidReason transactionInvalidReason, final JsonRpcError expectedError) { when(parameter.required(any(Object[].class), anyInt(), any())).thenReturn(VALID_TRANSACTION); when(transactionPool.addLocalTransaction(any(Transaction.class))) .thenReturn(ValidationResult.invalid(transactionInvalidReason)); final JsonRpcRequest request = new JsonRpcRequest("2.0", "eth_sendRawTransaction", new String[] {VALID_TRANSACTION}); final JsonRpcResponse expectedResponse = new JsonRpcErrorResponse(request.getId(), expectedError); final JsonRpcResponse actualResponse = method.response(request); assertThat(actualResponse).isEqualToComparingFieldByField(expectedResponse); verify(transactionPool).addLocalTransaction(any(Transaction.class)); }
@Test public void validTransactionIsSentToTransactionPool() { when(parameter.required(any(Object[].class), anyInt(), any())).thenReturn(VALID_TRANSACTION); when(transactionPool.addLocalTransaction(any(Transaction.class))) .thenReturn(ValidationResult.valid()); final JsonRpcRequest request = new JsonRpcRequest("2.0", "eth_sendRawTransaction", new String[] {VALID_TRANSACTION}); final JsonRpcResponse expectedResponse = new JsonRpcSuccessResponse( request.getId(), "0xbaabcc1bd699e7378451e4ce5969edb9bdcae76cb79bdacae793525c31e423c7"); final JsonRpcResponse actualResponse = method.response(request); assertThat(actualResponse).isEqualToComparingFieldByField(expectedResponse); verify(transactionPool).addLocalTransaction(any(Transaction.class)); }
@Test public void shouldAllowTransactionWhenAccountWhitelistControllerIsNotPresent() { givenTransactionIsValid(transaction1); assertThat(transactionPool.addLocalTransaction(transaction1)).isEqualTo(valid()); assertTransactionPending(transaction1); }
private void verifyErrorForInvalidTransaction( final TransactionInvalidReason transactionInvalidReason, final JsonRpcError expectedError) throws IOException { when(parameter.required(any(Object[].class), anyInt(), any())) .thenReturn(VALID_PRIVATE_TRANSACTION_RLP); when(privateTxHandler.handle(any(PrivateTransaction.class))).thenReturn(PUBLIC_TRANSACTION); when(transactionPool.addLocalTransaction(any(Transaction.class))) .thenReturn(ValidationResult.invalid(transactionInvalidReason)); final JsonRpcRequest request = new JsonRpcRequest( "2.0", "eea_sendRawTransaction", new String[] {VALID_PRIVATE_TRANSACTION_RLP}); final JsonRpcResponse expectedResponse = new JsonRpcErrorResponse(request.getId(), expectedError); final JsonRpcResponse actualResponse = method.response(request); assertThat(actualResponse).isEqualToComparingFieldByField(expectedResponse); verify(privateTxHandler).handle(any(PrivateTransaction.class)); verify(transactionPool).addLocalTransaction(any(Transaction.class)); }
@Test public void validTransactionIsSentToTransactionPool() throws IOException { when(parameter.required(any(Object[].class), anyInt(), any())) .thenReturn(VALID_PRIVATE_TRANSACTION_RLP); when(privateTxHandler.handle(any(PrivateTransaction.class))).thenReturn(PUBLIC_TRANSACTION); when(transactionPool.addLocalTransaction(any(Transaction.class))) .thenReturn(ValidationResult.valid()); final JsonRpcRequest request = new JsonRpcRequest( "2.0", "eea_sendRawTransaction", new String[] {VALID_PRIVATE_TRANSACTION_RLP}); final JsonRpcResponse expectedResponse = new JsonRpcSuccessResponse( request.getId(), "0xa86e8a2324e3abccd52afd6913c4c8a5d91f5d1855c0aa075568416c0a3ff7b2"); final JsonRpcResponse actualResponse = method.response(request); assertThat(actualResponse).isEqualToComparingFieldByField(expectedResponse); verify(privateTxHandler).handle(any(PrivateTransaction.class)); verify(transactionPool).addLocalTransaction(any(Transaction.class)); }
@Test public void shouldRejectNonWhitelistedTransactionWhenWhitelistEnabled() { transactionPool.setAccountWhitelist(accountWhitelistController); givenTransactionIsValid(transaction1); when(accountWhitelistController.isAccountWhiteListSet()).thenReturn(true); when(accountWhitelistController.contains(transaction1.getSender().toString())) .thenReturn(false); assertThat(transactionPool.addLocalTransaction(transaction1)) .isEqualTo(ValidationResult.invalid(TX_SENDER_NOT_AUTHORIZED)); assertTransactionNotPending(transaction1); verifyZeroInteractions(batchAddedListener); }
@Test public void shouldAllowWhitelistedTransactionWhenWhitelistEnabled() { transactionPool.setAccountWhitelist(accountWhitelistController); givenTransactionIsValid(transaction1); when(accountWhitelistController.isAccountWhiteListSet()).thenReturn(true); when(accountWhitelistController.contains(transaction1.getSender().toString())).thenReturn(true); assertThat(transactionPool.addLocalTransaction(transaction1)).isEqualTo(valid()); assertTransactionPending(transaction1); }
@Test public void shouldRejectLocalTransactionsWhereGasLimitExceedBlockGasLimit() { final TransactionTestFixture builder = new TransactionTestFixture(); final Transaction transaction1 = builder.gasLimit(genesisBlockGasLimit + 1).createTransaction(KEY_PAIR1); givenTransactionIsValid(transaction1); assertThat(transactionPool.addLocalTransaction(transaction1)) .isEqualTo(ValidationResult.invalid(EXCEEDS_BLOCK_GAS_LIMIT)); assertTransactionNotPending(transaction1); verifyZeroInteractions(batchAddedListener); }
@Test public void shouldAllowSequenceOfTransactionsWithIncreasingNonceFromSameSender() { final TransactionTestFixture builder = new TransactionTestFixture(); final Transaction transaction1 = builder.nonce(1).createTransaction(KEY_PAIR1); final Transaction transaction2 = builder.nonce(2).createTransaction(KEY_PAIR1); final Transaction transaction3 = builder.nonce(3).createTransaction(KEY_PAIR1); when(transactionValidator.validate(any(Transaction.class))).thenReturn(valid()); when(transactionValidator.validateForSender( eq(transaction1), nullable(Account.class), eq(OptionalLong.empty()))) .thenReturn(valid()); when(transactionValidator.validateForSender( eq(transaction2), nullable(Account.class), eq(OptionalLong.of(2)))) .thenReturn(valid()); when(transactionValidator.validateForSender( eq(transaction3), nullable(Account.class), eq(OptionalLong.of(3)))) .thenReturn(valid()); assertThat(transactionPool.addLocalTransaction(transaction1)).isEqualTo(valid()); assertThat(transactionPool.addLocalTransaction(transaction2)).isEqualTo(valid()); assertThat(transactionPool.addLocalTransaction(transaction3)).isEqualTo(valid()); assertTransactionPending(transaction1); assertTransactionPending(transaction2); assertTransactionPending(transaction3); }
@Test public void shouldNotNotifyBatchListenerWhenLocalTransactionDoesNotReplaceExisting() { final TransactionTestFixture builder = new TransactionTestFixture(); final Transaction transaction1 = builder.nonce(1).gasPrice(Wei.of(10)).createTransaction(KEY_PAIR1); final Transaction transaction2 = builder.nonce(1).gasPrice(Wei.of(5)).createTransaction(KEY_PAIR1); when(transactionValidator.validate(any(Transaction.class))).thenReturn(valid()); when(transactionValidator.validateForSender( eq(transaction1), nullable(Account.class), eq(OptionalLong.empty()))) .thenReturn(valid()); when(transactionValidator.validateForSender( eq(transaction2), nullable(Account.class), eq(OptionalLong.of(2)))) .thenReturn(valid()); transactionPool.addLocalTransaction(transaction1); transactionPool.addLocalTransaction(transaction2); assertTransactionPending(transaction1); verify(batchAddedListener).onTransactionsAdded(singletonList(transaction1)); verify(batchAddedListener, never()).onTransactionsAdded(singletonList(transaction2)); }
final TransactionPool transactionPoolMock = mock(TransactionPool.class); final EthHashMiningCoordinator miningCoordinatorMock = mock(EthHashMiningCoordinator.class); when(transactionPoolMock.addLocalTransaction(any(Transaction.class))) .thenReturn(ValidationResult.valid()); final PendingTransactions pendingTransactionsMock = mock(PendingTransactions.class);