From 82cd84eca7d7dee4d7c93f9dd7b5c0e0bdf0967a Mon Sep 17 00:00:00 2001 From: Bjerg Date: Tue, 20 Dec 2022 01:29:04 +0100 Subject: [PATCH] test: fix `emits_bodies_in_order` test (#534) * feat(test-utils): make body tx count configurable * test: fix `emits_bodies_in_order` test --- bin/reth/src/db/mod.rs | 2 +- crates/interfaces/src/test_utils/generators.rs | 16 +++++++++++----- crates/net/downloaders/src/bodies/concurrent.rs | 14 +++++++++----- crates/net/downloaders/src/test_utils.rs | 2 +- crates/stages/src/stages/bodies.rs | 2 +- crates/stages/src/stages/senders.rs | 2 +- 6 files changed, 24 insertions(+), 14 deletions(-) diff --git a/bin/reth/src/db/mod.rs b/bin/reth/src/db/mod.rs index 66adb7860..4d88828e5 100644 --- a/bin/reth/src/db/mod.rs +++ b/bin/reth/src/db/mod.rs @@ -131,7 +131,7 @@ impl<'a, DB: Database> DbTool<'a, DB> { /// Seeds the database with some random data, only used for testing fn seed(&mut self, len: u64) -> Result<()> { info!("Generating random block range from 0 to {len}"); - let chain = random_block_range(0..len, Default::default()); + let chain = random_block_range(0..len, Default::default(), 0..64); self.db.update(|tx| { chain.iter().try_for_each(|block| { diff --git a/crates/interfaces/src/test_utils/generators.rs b/crates/interfaces/src/test_utils/generators.rs index bc5cc2436..1830d1837 100644 --- a/crates/interfaces/src/test_utils/generators.rs +++ b/crates/interfaces/src/test_utils/generators.rs @@ -1,4 +1,4 @@ -use rand::{thread_rng, Rng}; +use rand::{distributions::uniform::SampleRange, thread_rng, Rng}; use reth_primitives::{ proofs, Address, BlockLocked, Bytes, Header, SealedHeader, Signature, Transaction, TransactionKind, TransactionSigned, TxLegacy, H256, U256, @@ -141,13 +141,19 @@ pub fn random_block(number: u64, parent: Option, tx_count: Option) -> /// in the result will be equal to `head`. /// /// See [random_block] for considerations when validating the generated blocks. -pub fn random_block_range(rng: std::ops::Range, head: H256) -> Vec { - let mut blocks = Vec::with_capacity(rng.end.saturating_sub(rng.start) as usize); - for idx in rng { +pub fn random_block_range( + block_numbers: std::ops::Range, + head: H256, + tx_count: std::ops::Range, +) -> Vec { + let mut rng = rand::thread_rng(); + let mut blocks = + Vec::with_capacity(block_numbers.end.saturating_sub(block_numbers.start) as usize); + for idx in block_numbers { blocks.push(random_block( idx, Some(blocks.last().map(|block: &BlockLocked| block.header.hash()).unwrap_or(head)), - None, + Some(tx_count.clone().sample_single(&mut rng)), )); } blocks diff --git a/crates/net/downloaders/src/bodies/concurrent.rs b/crates/net/downloaders/src/bodies/concurrent.rs index 9d73aa1df..1f43c411b 100644 --- a/crates/net/downloaders/src/bodies/concurrent.rs +++ b/crates/net/downloaders/src/bodies/concurrent.rs @@ -244,11 +244,15 @@ mod tests { .into_iter() .map(| header | { let body = bodies .remove(&header.hash()).unwrap(); - BlockResponse::Full(BlockLocked { - header, - body: body.transactions, - ommers: body.ommers.into_iter().map(|o| o.seal()).collect(), - }) + if header.is_empty() { + BlockResponse::Empty(header) + } else { + BlockResponse::Full(BlockLocked { + header, + body: body.transactions, + ommers: body.ommers.into_iter().map(|o| o.seal()).collect(), + }) + } }) .collect::>() ); diff --git a/crates/net/downloaders/src/test_utils.rs b/crates/net/downloaders/src/test_utils.rs index 38fb451c5..f488cd02d 100644 --- a/crates/net/downloaders/src/test_utils.rs +++ b/crates/net/downloaders/src/test_utils.rs @@ -19,7 +19,7 @@ use tokio::sync::Mutex; pub(crate) fn generate_bodies( rng: std::ops::Range, ) -> (Vec, HashMap) { - let blocks = random_block_range(rng, H256::zero()); + let blocks = random_block_range(rng, H256::zero(), 0..2); let headers = blocks.iter().map(|block| block.header.clone()).collect(); let bodies = blocks diff --git a/crates/stages/src/stages/bodies.rs b/crates/stages/src/stages/bodies.rs index cd53a50b9..74c88d9d5 100644 --- a/crates/stages/src/stages/bodies.rs +++ b/crates/stages/src/stages/bodies.rs @@ -626,7 +626,7 @@ mod tests { fn seed_execution(&mut self, input: ExecInput) -> Result { let start = input.stage_progress.unwrap_or_default(); let end = input.previous_stage_progress() + 1; - let blocks = random_block_range(start..end, GENESIS_HASH); + let blocks = random_block_range(start..end, GENESIS_HASH, 0..2); self.tx.insert_headers(blocks.iter().map(|block| &block.header))?; if let Some(progress) = blocks.first() { // Insert last progress data diff --git a/crates/stages/src/stages/senders.rs b/crates/stages/src/stages/senders.rs index 708bb0576..1d7163cf6 100644 --- a/crates/stages/src/stages/senders.rs +++ b/crates/stages/src/stages/senders.rs @@ -251,7 +251,7 @@ mod tests { let stage_progress = input.stage_progress.unwrap_or_default(); let end = input.previous_stage_progress() + 1; - let blocks = random_block_range(stage_progress..end, H256::zero()); + let blocks = random_block_range(stage_progress..end, H256::zero(), 0..2); let mut current_tx_id = 0; blocks.iter().try_for_each(|b| -> Result<(), TestRunnerError> {