reth_downloaders/bodies/
test_utils.rs1#![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}