From aa42dbcf30d2808d03907a561bf80245687f9731 Mon Sep 17 00:00:00 2001 From: joshieDo <93316087+joshieDo@users.noreply.github.com> Date: Mon, 2 Sep 2024 18:22:26 +0100 Subject: [PATCH] fix: ensure receipts are written to storage during test setups (#10660) --- .../src/providers/blockchain_provider.rs | 60 ++++++++++++------- 1 file changed, 39 insertions(+), 21 deletions(-) diff --git a/crates/storage/provider/src/providers/blockchain_provider.rs b/crates/storage/provider/src/providers/blockchain_provider.rs index a5f8432bc302..6e5c7ee6bcaf 100644 --- a/crates/storage/provider/src/providers/blockchain_provider.rs +++ b/crates/storage/provider/src/providers/blockchain_provider.rs @@ -1444,7 +1444,8 @@ mod tests { use crate::{ providers::BlockchainProvider2, test_utils::{create_test_provider_factory, create_test_provider_factory_with_chain_spec}, - BlockWriter, CanonChainTracker, StaticFileWriter, + writer::UnifiedStorageWriter, + BlockWriter, CanonChainTracker, StaticFileProviderFactory, StaticFileWriter, }; use itertools::Itertools; use rand::Rng; @@ -1547,21 +1548,26 @@ mod tests { let factory = create_test_provider_factory_with_chain_spec(chain_spec); let provider_rw = factory.provider_rw()?; - // Insert blocks and receipts into the database + // Insert blocks into the database for block in &database_blocks { provider_rw.insert_historical_block( block.clone().seal_with_senders().expect("failed to seal block with senders"), )?; - - // Insert the receipts into the database using the writer from the provider_rw - let mut writer = - provider_rw.static_file_provider().latest_writer(StaticFileSegment::Receipts)?; - let block_number = block.number as usize; - for receipt in receipts.get(block_number).unwrap() { - writer.append_receipt(block.number, receipt)?; - } } - provider_rw.commit()?; + + // Insert receipts into the static files + UnifiedStorageWriter::new( + &provider_rw, + Some(factory.static_file_provider().latest_writer(StaticFileSegment::Receipts)?), + ) + .append_receipts_from_blocks( + // The initial block number is required + database_blocks.first().map(|b| b.number).unwrap_or_default(), + receipts.iter().map(|vec| vec.clone().into_iter().map(Some).collect::>()), + )?; + + // Commit to both storages: database and static files + UnifiedStorageWriter::commit(provider_rw, factory.static_file_provider())?; let provider = BlockchainProvider2::new(factory)?; @@ -3049,7 +3055,7 @@ mod tests { &mut rng, TEST_BLOCKS_COUNT, TEST_BLOCKS_COUNT, - BlockRangeParams::default(), + BlockRangeParams { tx_count: 1..3, ..Default::default() }, )?; let database_block = database_blocks.first().unwrap().clone(); @@ -3058,12 +3064,18 @@ mod tests { let block_number = database_block.number; let block_hash = database_block.header.hash(); + assert!(!receipts.get(database_block.number as usize).unwrap().is_empty()); + assert!(!provider + .receipts_by_number_or_tag(database_block.number.into())? + .unwrap() + .is_empty()); + assert_eq!( - provider.receipts_by_block_id(block_number.into())?.unwrap_or_default(), + provider.receipts_by_block_id(block_number.into())?.unwrap(), receipts.get(block_number as usize).unwrap().clone() ); assert_eq!( - provider.receipts_by_block_id(block_hash.into())?.unwrap_or_default(), + provider.receipts_by_block_id(block_hash.into())?.unwrap(), receipts.get(block_number as usize).unwrap().clone() ); @@ -3071,11 +3083,11 @@ mod tests { let block_hash = in_memory_block.header.hash(); assert_eq!( - provider.receipts_by_block_id(block_number.into())?.unwrap_or_default(), + provider.receipts_by_block_id(block_number.into())?.unwrap(), receipts.get(block_number as usize).unwrap().clone() ); assert_eq!( - provider.receipts_by_block_id(block_hash.into())?.unwrap_or_default(), + provider.receipts_by_block_id(block_hash.into())?.unwrap(), receipts.get(block_number as usize).unwrap().clone() ); @@ -3089,7 +3101,7 @@ mod tests { &mut rng, TEST_BLOCKS_COUNT, TEST_BLOCKS_COUNT, - BlockRangeParams::default(), + BlockRangeParams { tx_count: 1..3, ..Default::default() }, )?; let database_block = database_blocks.first().unwrap().clone(); @@ -3099,20 +3111,26 @@ mod tests { let safe_block = in_memory_blocks.get(in_memory_block_count - 2).unwrap().clone(); let finalized_block = in_memory_blocks.get(in_memory_block_count - 3).unwrap().clone(); + assert!(!receipts.get(database_block.number as usize).unwrap().is_empty()); + assert!(!provider + .receipts_by_number_or_tag(database_block.number.into())? + .unwrap() + .is_empty()); + assert_eq!( - provider.receipts_by_number_or_tag(database_block.number.into())?.unwrap_or_default(), + provider.receipts_by_number_or_tag(database_block.number.into())?.unwrap(), receipts.get(database_block.number as usize).unwrap().clone() ); assert_eq!( - provider.receipts_by_number_or_tag(BlockNumberOrTag::Latest)?.unwrap_or_default(), + provider.receipts_by_number_or_tag(BlockNumberOrTag::Latest)?.unwrap(), receipts.get(canonical_block.number as usize).unwrap().clone() ); assert_eq!( - provider.receipts_by_number_or_tag(BlockNumberOrTag::Safe)?.unwrap_or_default(), + provider.receipts_by_number_or_tag(BlockNumberOrTag::Safe)?.unwrap(), receipts.get(safe_block.number as usize).unwrap().clone() ); assert_eq!( - provider.receipts_by_number_or_tag(BlockNumberOrTag::Finalized)?.unwrap_or_default(), + provider.receipts_by_number_or_tag(BlockNumberOrTag::Finalized)?.unwrap(), receipts.get(finalized_block.number as usize).unwrap().clone() );