Skip to main content

reth_downloaders/bodies/
test_utils.rs

1//! Test helper impls for generating bodies
2
3#![allow(dead_code)]
4
5use alloy_consensus::BlockHeader;
6use alloy_primitives::map::B256Map;
7use reth_ethereum_primitives::BlockBody;
8use reth_network_p2p::bodies::response::BlockResponse;
9use reth_primitives_traits::{Block, SealedBlock, SealedHeader};
10use reth_provider::{
11    test_utils::MockNodeTypesWithDB, ProviderFactory, StaticFileProviderFactory, StaticFileSegment,
12    StaticFileWriter,
13};
14
15pub(crate) fn zip_blocks<'a, B: Block>(
16    headers: impl Iterator<Item = &'a SealedHeader<B::Header>>,
17    bodies: &mut B256Map<B::Body>,
18) -> Vec<BlockResponse<B>> {
19    headers
20        .into_iter()
21        .map(|header| {
22            let body = bodies.remove(&header.hash()).expect("body exists");
23            if header.is_empty() {
24                BlockResponse::Empty(header.clone())
25            } else {
26                BlockResponse::Full(SealedBlock::from_sealed_parts(header.clone(), body))
27            }
28        })
29        .collect()
30}
31
32pub(crate) fn create_raw_bodies(
33    headers: impl IntoIterator<Item = SealedHeader>,
34    bodies: &mut B256Map<BlockBody>,
35) -> Vec<reth_ethereum_primitives::Block> {
36    headers
37        .into_iter()
38        .map(|header| {
39            let body = bodies.remove(&header.hash()).expect("body exists");
40            body.into_block(header.unseal())
41        })
42        .collect()
43}
44
45#[inline]
46pub(crate) fn insert_headers(
47    factory: &ProviderFactory<MockNodeTypesWithDB>,
48    headers: &[SealedHeader],
49) {
50    let provider_rw = factory.provider_rw().expect("failed to create provider");
51    let static_file_provider = provider_rw.static_file_provider();
52    let mut writer = static_file_provider
53        .latest_writer(StaticFileSegment::Headers)
54        .expect("failed to create writer");
55
56    for header in headers {
57        writer.append_header(header.header(), &header.hash()).expect("failed to append header");
58    }
59    drop(writer);
60    provider_rw.commit().expect("failed to commit");
61}