public int getPendingTransactionCount() { return transactionPool.getPendingTransactions().size(); } }
@Test public void invalidTransactionIsDeletedFromPendingTransactions() { transactions.addRemoteTransaction(transaction1); transactions.addRemoteTransaction(transaction2); final List<Transaction> parsedTransactions = Lists.newArrayList(); transactions.selectTransactions( transaction -> { parsedTransactions.add(transaction); return TransactionSelectionResult.DELETE_TRANSACTION_AND_CONTINUE; }); assertThat(parsedTransactions.size()).isEqualTo(2); assertThat(parsedTransactions.get(0)).isEqualTo(transaction2); assertThat(parsedTransactions.get(1)).isEqualTo(transaction1); assertThat(transactions.size()).isZero(); }
@Test public void shouldReplaceOnlyTransactionFromSenderWhenItHasTheSameNonce() { final Transaction transaction1 = transactionWithNonceSenderAndGasPrice(1, KEYS1, 1); final Transaction transaction1b = transactionWithNonceSenderAndGasPrice(1, KEYS1, 2); assertThat(transactions.addRemoteTransaction(transaction1)).isTrue(); assertThat(transactions.addRemoteTransaction(transaction1b)).isTrue(); assertTransactionNotPending(transaction1); assertTransactionPending(transaction1b); assertThat(transactions.size()).isEqualTo(1); }
@Test public void shouldDropOldestTransactionWhenLimitExceeded() { final Transaction oldestTransaction = createTransaction(0); transactions.addRemoteTransaction(oldestTransaction); for (int i = 1; i < MAX_TRANSACTIONS; i++) { transactions.addRemoteTransaction(createTransaction(i)); } assertThat(transactions.size()).isEqualTo(MAX_TRANSACTIONS); transactions.addRemoteTransaction(createTransaction(MAX_TRANSACTIONS + 1)); assertThat(transactions.size()).isEqualTo(MAX_TRANSACTIONS); assertTransactionNotPending(oldestTransaction); }
@Test public void shouldNotReplaceTransactionWithSameSenderAndNonceWhenGasPriceIsLower() { final Transaction transaction1 = transactionWithNonceSenderAndGasPrice(1, KEYS1, 2); final Transaction transaction1b = transactionWithNonceSenderAndGasPrice(1, KEYS1, 1); assertThat(transactions.addRemoteTransaction(transaction1)).isTrue(); transactions.addTransactionListener(listener); assertThat(transactions.addRemoteTransaction(transaction1b)).isFalse(); assertTransactionNotPending(transaction1b); assertTransactionPending(transaction1); assertThat(transactions.size()).isEqualTo(1); verifyZeroInteractions(listener); }
@Test public void shouldReplaceTransactionWithSameSenderAndNonce() { final Transaction transaction1 = transactionWithNonceSenderAndGasPrice(1, KEYS1, 1); final Transaction transaction1b = transactionWithNonceSenderAndGasPrice(1, KEYS1, 2); final Transaction transaction2 = transactionWithNonceSenderAndGasPrice(2, KEYS1, 1); assertThat(transactions.addRemoteTransaction(transaction1)).isTrue(); assertThat(transactions.addRemoteTransaction(transaction2)).isTrue(); assertThat(transactions.addRemoteTransaction(transaction1b)).isTrue(); assertTransactionNotPending(transaction1); assertTransactionPending(transaction1b); assertTransactionPending(transaction2); assertThat(transactions.size()).isEqualTo(2); }
@Test public void shouldHandleMaximumTransactionLimitCorrectlyWhenSameTransactionAddedMultipleTimes() { transactions.addRemoteTransaction(createTransaction(0)); transactions.addRemoteTransaction(createTransaction(0)); for (int i = 1; i < MAX_TRANSACTIONS; i++) { transactions.addRemoteTransaction(createTransaction(i)); } assertThat(transactions.size()).isEqualTo(MAX_TRANSACTIONS); transactions.addRemoteTransaction(createTransaction(MAX_TRANSACTIONS + 1)); transactions.addRemoteTransaction(createTransaction(MAX_TRANSACTIONS + 2)); assertThat(transactions.size()).isEqualTo(MAX_TRANSACTIONS); }
@Test public void shouldStartDroppingLocalTransactionsWhenPoolIsFullOfLocalTransactions() { final Transaction firstLocalTransaction = createTransaction(0); transactions.addLocalTransaction(firstLocalTransaction); for (int i = 1; i <= MAX_TRANSACTIONS; i++) { transactions.addLocalTransaction(createTransaction(i)); } assertThat(transactions.size()).isEqualTo(MAX_TRANSACTIONS); assertTransactionNotPending(firstLocalTransaction); }
@Test public void shouldPrioritizeLocalTransaction() { final Transaction localTransaction = createTransaction(0); transactions.addLocalTransaction(localTransaction); for (int i = 1; i <= MAX_TRANSACTIONS; i++) { transactions.addRemoteTransaction(createTransaction(i)); } assertThat(transactions.size()).isEqualTo(MAX_TRANSACTIONS); assertTransactionPending(localTransaction); }
@Test public void shouldIgnoreUnknownTransactionsThatAreAddedInABlock() { transactions.addRemoteTransaction(transaction1); appendBlock(transaction1, transaction2); assertTransactionNotPending(transaction1); assertTransactionNotPending(transaction2); assertThat(transactions.size()).isZero(); }
@Test public void shouldRemoveMultipleTransactionsAddedInOneBlock() { transactions.addRemoteTransaction(transaction1); transactions.addRemoteTransaction(transaction2); appendBlock(transaction1, transaction2); assertTransactionNotPending(transaction1); assertTransactionNotPending(transaction2); assertThat(transactions.size()).isZero(); }
assertThat(pendingTransactions.size()).isEqualTo(0);