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::{B256, U256};
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};
14use std::collections::HashMap;
15
16pub(crate) fn zip_blocks<'a, B: Block>(
17    headers: impl Iterator<Item = &'a SealedHeader<B::Header>>,
18    bodies: &mut HashMap<B256, B::Body>,
19) -> Vec<BlockResponse<B>> {
20    headers
21        .into_iter()
22        .map(|header| {
23            let body = bodies.remove(&header.hash()).expect("body exists");
24            if header.is_empty() {
25                BlockResponse::Empty(header.clone())
26            } else {
27                BlockResponse::Full(SealedBlock::from_sealed_parts(header.clone(), body))
28            }
29        })
30        .collect()
31}
32
33pub(crate) fn create_raw_bodies(
34    headers: impl IntoIterator<Item = SealedHeader>,
35    bodies: &mut HashMap<B256, BlockBody>,
36) -> Vec<reth_ethereum_primitives::Block> {
37    headers
38        .into_iter()
39        .map(|header| {
40            let body = bodies.remove(&header.hash()).expect("body exists");
41            body.into_block(header.unseal())
42        })
43        .collect()
44}
45
46#[inline]
47pub(crate) fn insert_headers(
48    factory: &ProviderFactory<MockNodeTypesWithDB>,
49    headers: &[SealedHeader],
50) {
51    let provider_rw = factory.provider_rw().expect("failed to create provider");
52    let static_file_provider = provider_rw.static_file_provider();
53    let mut writer = static_file_provider
54        .latest_writer(StaticFileSegment::Headers)
55        .expect("failed to create writer");
56
57    for header in headers {
58        writer
59            .append_header(header.header(), U256::ZERO, &header.hash())
60            .expect("failed to append header");
61    }
62    drop(writer);
63    provider_rw.commit().expect("failed to commit");
64}