test: add holesky sync test (#9742)

This commit is contained in:
Matthias Seitz
2024-07-23 22:11:45 +02:00
committed by GitHub
parent 5a9de035bf
commit d107827b69
5 changed files with 78 additions and 2 deletions

2
Cargo.lock generated
View File

@ -6975,6 +6975,7 @@ dependencies = [
name = "reth-engine-tree"
version = "1.0.3"
dependencies = [
"alloy-rlp",
"aquamarine",
"assert_matches",
"futures",
@ -7006,6 +7007,7 @@ dependencies = [
"reth-prune-types",
"reth-revm",
"reth-rpc-types",
"reth-rpc-types-compat",
"reth-stages",
"reth-stages-api",
"reth-stages-types",

View File

@ -74,6 +74,9 @@ reth-prune-types.workspace = true
reth-stages = { workspace = true, features = ["test-utils"] }
reth-chain-state = { workspace = true, features = ["test-utils"] }
reth-tracing.workspace = true
reth-rpc-types-compat.workspace = true
alloy-rlp.workspace = true
assert_matches.workspace = true
rand.workspace = true

View File

@ -1438,14 +1438,20 @@ impl PersistenceState {
mod tests {
use super::*;
use crate::persistence::PersistenceAction;
use alloy_rlp::Decodable;
use reth_beacon_consensus::EthBeaconConsensus;
use reth_chain_state::{test_utils::get_executed_blocks, BlockState};
use reth_chainspec::{ChainSpecBuilder, MAINNET};
use reth_chainspec::{ChainSpecBuilder, HOLESKY, MAINNET};
use reth_ethereum_engine_primitives::EthEngineTypes;
use reth_evm::test_utils::MockExecutorProvider;
use reth_payload_builder::PayloadServiceCommand;
use reth_primitives::Bytes;
use reth_provider::test_utils::MockEthProvider;
use std::sync::mpsc::{channel, Sender};
use reth_rpc_types_compat::engine::block_to_payload_v1;
use std::{
str::FromStr,
sync::mpsc::{channel, Sender},
};
use tokio::sync::mpsc::unbounded_channel;
struct TestHarness {
@ -1456,6 +1462,44 @@ mod tests {
payload_command_rx: UnboundedReceiver<PayloadServiceCommand<EthEngineTypes>>,
}
impl TestHarness {
fn holesky() -> Self {
let (action_tx, action_rx) = channel();
let persistence_handle = PersistenceHandle::new(action_tx);
let chain_spec = HOLESKY.clone();
let consensus = Arc::new(EthBeaconConsensus::new(chain_spec.clone()));
let provider = MockEthProvider::default();
let executor_factory = MockExecutorProvider::default();
let payload_validator = ExecutionPayloadValidator::new(chain_spec.clone());
let (to_tree_tx, to_tree_rx) = channel();
let (from_tree_tx, from_tree_rx) = unbounded_channel();
let header = chain_spec.genesis_header().seal_slow();
let engine_api_tree_state = EngineApiTreeState::new(10, 10, header.num_hash());
let (to_payload_service, payload_command_rx) = unbounded_channel();
let payload_builder = PayloadBuilderHandle::new(to_payload_service);
let tree = EngineApiTreeHandlerImpl::new(
provider,
executor_factory,
consensus,
payload_validator,
to_tree_rx,
from_tree_tx,
engine_api_tree_state,
header,
persistence_handle,
payload_builder,
);
Self { tree, to_tree_tx, blocks: vec![], action_rx, payload_command_rx }
}
}
fn get_default_test_harness(number_of_blocks: u64) -> TestHarness {
let blocks: Vec<_> = get_executed_blocks(0..number_of_blocks).collect();
@ -1593,4 +1637,29 @@ mod tests {
let resp = rx.await.unwrap().unwrap().await.unwrap();
assert!(resp.payload_status.is_syncing());
}
#[tokio::test]
async fn test_holesky_payload() {
let s = include_str!("../../test-data/holesky/1.rlp");
let data = Bytes::from_str(s).unwrap();
let block = Block::decode(&mut data.as_ref()).unwrap();
let sealed = block.seal_slow();
let payload = block_to_payload_v1(sealed);
let TestHarness { mut tree, to_tree_tx, action_rx, blocks, payload_command_rx } =
TestHarness::holesky();
// set backfill active
tree.is_backfill_active = true;
let (tx, rx) = oneshot::channel();
tree.on_engine_message(FromEngine::Request(BeaconEngineMessage::NewPayload {
payload: payload.clone().into(),
cancun_fields: None,
tx,
}));
let resp = rx.await.unwrap().unwrap();
assert!(resp.is_syncing());
}
}

View File

@ -0,0 +1 @@
f90218f90213a0b5f7f912443c940f21fd611f12828d75b534364ed9e95ca4e307729a4661bde4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a069d8c9d72f6fa4ad42d4702b433707212f90db395eb54dc20bc85de253788783a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800184017dd79d808465156ad899d883010d02846765746888676f312e32312e31856c696e7578a0b5f7f912443c940f21fd611f12828d75b534364ed9e95ca4e307729a4661bde488000000000000000084342770c0c0c0

View File

@ -0,0 +1 @@
f90218f90213a0e9011e6d15a0d0c16f65a38f84375bf1a6b88201b0ad75a2660df0bb8d1ac381a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794c6e2459991bfe27cca6d86722f35da23a1e4cb97a069d8c9d72f6fa4ad42d4702b433707212f90db395eb54dc20bc85de253788783a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800284017e3711808465156af099d883010d02846765746888676f312e32312e31856c696e7578a0b212724aac0df10d75b1b6d795fd4cd17e4ca4f9ee1bfe97871a16a3af64eed1880000000000000000842da282a8c0c0