mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
test: add holesky sync test (#9742)
This commit is contained in:
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -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",
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
1
crates/engine/tree/test-data/holesky/1.rlp
Normal file
1
crates/engine/tree/test-data/holesky/1.rlp
Normal file
@ -0,0 +1 @@
|
||||
f90218f90213a0b5f7f912443c940f21fd611f12828d75b534364ed9e95ca4e307729a4661bde4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a069d8c9d72f6fa4ad42d4702b433707212f90db395eb54dc20bc85de253788783a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800184017dd79d808465156ad899d883010d02846765746888676f312e32312e31856c696e7578a0b5f7f912443c940f21fd611f12828d75b534364ed9e95ca4e307729a4661bde488000000000000000084342770c0c0c0
|
||||
1
crates/engine/tree/test-data/holesky/2.rlp
Normal file
1
crates/engine/tree/test-data/holesky/2.rlp
Normal file
@ -0,0 +1 @@
|
||||
f90218f90213a0e9011e6d15a0d0c16f65a38f84375bf1a6b88201b0ad75a2660df0bb8d1ac381a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794c6e2459991bfe27cca6d86722f35da23a1e4cb97a069d8c9d72f6fa4ad42d4702b433707212f90db395eb54dc20bc85de253788783a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800284017e3711808465156af099d883010d02846765746888676f312e32312e31856c696e7578a0b212724aac0df10d75b1b6d795fd4cd17e4ca4f9ee1bfe97871a16a3af64eed1880000000000000000842da282a8c0c0
|
||||
Reference in New Issue
Block a user