Skip to content

Commit 06aa14c

Browse files
committed
add test for both get_block_headers and get_block_bodies in store.rs
1 parent 6607360 commit 06aa14c

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

crates/storage/store.rs

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1510,6 +1510,7 @@ mod tests {
15101510
run_test(test_genesis_block, engine_type).await;
15111511
run_test(test_iter_accounts, engine_type).await;
15121512
run_test(test_iter_storage, engine_type).await;
1513+
run_test(test_get_block_headers_and_bodies_bulk, engine_type).await;
15131514
}
15141515

15151516
async fn test_iter_accounts(store: Store) {
@@ -1634,6 +1635,68 @@ mod tests {
16341635
assert_eq!(stored_body, block_body);
16351636
}
16361637

1638+
async fn test_get_block_headers_and_bodies_bulk(store: Store) {
1639+
// Create and store multiple blocks
1640+
let mut headers = Vec::new();
1641+
let mut bodies = Vec::new();
1642+
1643+
for i in 0..5u64 {
1644+
let (mut header, body) = create_block_for_testing();
1645+
header.number = i;
1646+
// Make them unique by modifying the timestamp
1647+
header.timestamp = 1000 + i;
1648+
let hash = header.hash();
1649+
1650+
store.add_block_header(hash, header.clone()).await.unwrap();
1651+
store.add_block_body(hash, body.clone()).await.unwrap();
1652+
store
1653+
.forkchoice_update(None, i, hash, None, None)
1654+
.await
1655+
.unwrap();
1656+
1657+
headers.push(header);
1658+
bodies.push(body);
1659+
}
1660+
1661+
// Test bulk fetch of headers
1662+
let fetched_headers = store.get_block_headers(0, 4).await.unwrap();
1663+
assert_eq!(fetched_headers.len(), 5);
1664+
for (i, fetched) in fetched_headers.into_iter().enumerate() {
1665+
let fetched = fetched.expect("header should exist");
1666+
// Ensure hashes are computed for comparison
1667+
let _ = fetched.hash();
1668+
let _ = headers[i].hash();
1669+
assert_eq!(fetched, headers[i]);
1670+
}
1671+
1672+
// Test bulk fetch of bodies
1673+
let fetched_bodies = store.get_block_bodies(0, 4).await.unwrap();
1674+
assert_eq!(fetched_bodies.len(), 5);
1675+
for (i, fetched) in fetched_bodies.into_iter().enumerate() {
1676+
let fetched = fetched.expect("body should exist");
1677+
assert_eq!(fetched, bodies[i]);
1678+
}
1679+
1680+
// Test partial range
1681+
let partial_headers = store.get_block_headers(2, 4).await.unwrap();
1682+
assert_eq!(partial_headers.len(), 3);
1683+
for (i, fetched) in partial_headers.into_iter().enumerate() {
1684+
let fetched = fetched.expect("header should exist");
1685+
let _ = fetched.hash();
1686+
let _ = headers[i + 2].hash();
1687+
assert_eq!(fetched, headers[i + 2]);
1688+
}
1689+
1690+
// Test range with missing blocks (beyond stored range)
1691+
let extended_headers = store.get_block_headers(3, 7).await.unwrap();
1692+
assert_eq!(extended_headers.len(), 5);
1693+
assert!(extended_headers[0].is_some());
1694+
assert!(extended_headers[1].is_some());
1695+
assert!(extended_headers[2].is_none());
1696+
assert!(extended_headers[3].is_none());
1697+
assert!(extended_headers[4].is_none());
1698+
}
1699+
16371700
fn create_block_for_testing() -> (BlockHeader, BlockBody) {
16381701
let block_header = BlockHeader {
16391702
parent_hash: H256::from_str(

0 commit comments

Comments
 (0)