diff --git a/crates/mempool/src/mempool_test.rs b/crates/mempool/src/mempool_test.rs index eca15df2..a54a8781 100644 --- a/crates/mempool/src/mempool_test.rs +++ b/crates/mempool/src/mempool_test.rs @@ -197,6 +197,36 @@ fn test_get_txs_multi_nonce() { expected_mempool_state.assert_eq_mempool_state(&mempool); } +#[rstest] +fn test_get_txs_replenishes_queue_only_between_chunks() { + // Setup. + let tx_address_0_nonce_0 = + add_tx_input!(tip: 20, tx_hash: 1, sender_address: "0x0", tx_nonce: 0_u8, account_nonce: 0_u8).tx; + let tx_address_0_nonce_1 = + add_tx_input!(tip: 20, tx_hash: 2, sender_address: "0x0", tx_nonce: 1_u8, account_nonce: 0_u8).tx; + let tx_address_1_nonce_0 = + add_tx_input!(tip: 10, tx_hash: 3, sender_address: "0x1", tx_nonce: 0_u8, account_nonce: 0_u8).tx; + + let queue_txs = [ + TransactionReference::new(&tx_address_0_nonce_0), + TransactionReference::new(&tx_address_1_nonce_0), + ]; + let pool_txs = + [tx_address_0_nonce_0.clone(), tx_address_0_nonce_1.clone(), tx_address_1_nonce_0.clone()]; + let mut mempool: Mempool = MempoolState::new(pool_txs, queue_txs).into(); + + // Test. + let txs = mempool.get_txs(3).unwrap(); + + // Assert: all transactions returned. + // Replenishment done in chunks: account 1 transaction is returned before the one of account 0, + // although its priority is higher. + assert_eq!(txs, &[tx_address_0_nonce_0, tx_address_1_nonce_0, tx_address_0_nonce_1]); + // TODO(Ayelet): Add an MempoolState empty constructor. + let expected_mempool_state = MempoolState::new([], []); + expected_mempool_state.assert_eq_mempool_state(&mempool); +} + #[rstest] fn test_add_tx(mut mempool: Mempool) { // Setup.