|
| 1 | +use std::cmp::Reverse; |
1 | 2 | use std::collections::HashMap;
|
2 | 3 |
|
3 | 4 | use assert_matches::assert_matches;
|
@@ -33,6 +34,11 @@ impl MempoolState {
|
33 | 34 | let tx_queue: TransactionQueue = queue_txs.into_iter().collect();
|
34 | 35 | MempoolState { tx_pool, tx_queue }
|
35 | 36 | }
|
| 37 | + |
| 38 | + fn assert_eq_mempool_state(&self, mempool: &Mempool) { |
| 39 | + assert_eq!(self.tx_pool, mempool.tx_pool); |
| 40 | + assert_eq!(self.tx_queue, mempool.tx_queue); |
| 41 | + } |
36 | 42 | }
|
37 | 43 |
|
38 | 44 | impl From<MempoolState> for Mempool {
|
@@ -139,35 +145,31 @@ fn assert_eq_mempool_queue(mempool: &Mempool, expected_queue: &[ThinTransaction]
|
139 | 145 | #[case::test_get_more_than_all_eligible_txs(5)]
|
140 | 146 | #[case::test_get_less_than_all_eligible_txs(2)]
|
141 | 147 | fn test_get_txs(#[case] requested_txs: usize) {
|
142 |
| - // TODO(Ayelet): Avoid cloning the transactions in the test. |
143 |
| - let add_tx_inputs = [ |
144 |
| - add_tx_input!(tip: 50, tx_hash: 1), |
145 |
| - add_tx_input!(tip: 100, tx_hash: 2, sender_address: "0x1"), |
146 |
| - add_tx_input!(tip: 10, tx_hash: 3, sender_address: "0x2"), |
147 |
| - ]; |
148 |
| - let tx_references_iterator = |
149 |
| - add_tx_inputs.iter().map(|input| TransactionReference::new(&input.tx)); |
150 |
| - let txs_iterator = add_tx_inputs.iter().map(|input| input.tx.clone()); |
| 148 | + let tx1 = add_tx_input!(tip: 50, tx_hash: 1).tx; |
| 149 | + let tx2 = add_tx_input!(tip: 100, tx_hash: 2, sender_address: "0x1").tx; |
| 150 | + let tx3 = add_tx_input!(tip: 10, tx_hash: 3, sender_address: "0x2").tx; |
| 151 | + |
| 152 | + let mut tx_inputs = vec![tx1, tx2, tx3]; |
| 153 | + let tx_references_iterator = tx_inputs.iter().map(TransactionReference::new); |
| 154 | + let txs_iterator = tx_inputs.iter().cloned(); |
151 | 155 |
|
152 | 156 | let mut mempool: Mempool = MempoolState::new(txs_iterator, tx_references_iterator).into();
|
153 | 157 |
|
154 | 158 | let txs = mempool.get_txs(requested_txs).unwrap();
|
155 | 159 |
|
156 |
| - let sorted_txs = [ |
157 |
| - add_tx_inputs[1].tx.clone(), // tip 100 |
158 |
| - add_tx_inputs[0].tx.clone(), // tip 50 |
159 |
| - add_tx_inputs[2].tx.clone(), // tip 10 |
160 |
| - ]; |
| 160 | + tx_inputs.sort_by_key(|tx| Reverse(tx.tip)); |
161 | 161 |
|
162 |
| - // This ensures we do not exceed the number of transactions available in the mempool. |
163 |
| - let max_requested_txs = requested_txs.min(add_tx_inputs.len()); |
| 162 | + // Ensure we do not exceed the number of transactions available in the mempool. |
| 163 | + let max_requested_txs = requested_txs.min(tx_inputs.len()); |
164 | 164 |
|
165 |
| - // checks that the returned transactions are the ones with the highest priority. |
166 |
| - let (expected_queue, remaining_txs) = sorted_txs.split_at(max_requested_txs); |
| 165 | + // Check that the returned transactions are the ones with the highest priority. |
| 166 | + let (expected_queue, remaining_txs) = tx_inputs.split_at(max_requested_txs); |
167 | 167 | assert_eq!(txs, expected_queue);
|
168 | 168 |
|
169 |
| - // checks that the transactions that were not returned are still in the mempool. |
170 |
| - assert_eq_mempool_queue(&mempool, remaining_txs); |
| 169 | + // Check that the transactions that were not returned are still in the mempool. |
| 170 | + let remaining_tx_references = remaining_txs.iter().map(TransactionReference::new); |
| 171 | + let mempool_state = MempoolState::new(remaining_txs.to_vec(), remaining_tx_references); |
| 172 | + mempool_state.assert_eq_mempool_state(&mempool); |
171 | 173 | }
|
172 | 174 |
|
173 | 175 | #[rstest]
|
|
0 commit comments