Skip to content

Commit

Permalink
fix: ensure receipts are written to storage during test setups (#10660)
Browse files Browse the repository at this point in the history
  • Loading branch information
joshieDo committed Sep 2, 2024
1 parent cbad38a commit aa42dbc
Showing 1 changed file with 39 additions and 21 deletions.
60 changes: 39 additions & 21 deletions crates/storage/provider/src/providers/blockchain_provider.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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::<Vec<_>>()),
)?;

// Commit to both storages: database and static files
UnifiedStorageWriter::commit(provider_rw, factory.static_file_provider())?;

let provider = BlockchainProvider2::new(factory)?;

Expand Down Expand Up @@ -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();
Expand All @@ -3058,24 +3064,30 @@ 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()
);

let block_number = in_memory_block.number;
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()
);

Expand All @@ -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();
Expand All @@ -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()
);

Expand Down

0 comments on commit aa42dbc

Please sign in to comment.