diff --git a/tooling/reorgs/src/main.rs b/tooling/reorgs/src/main.rs index 82616858be..7a84475d4b 100644 --- a/tooling/reorgs/src/main.rs +++ b/tooling/reorgs/src/main.rs @@ -32,6 +32,7 @@ async fn main() { info!("Starting test run"); info!(""); + run_test(&cmd_path, no_reorgs_full_sync_smoke_test).await; run_test(&cmd_path, test_one_block_reorg_and_back).await; run_test(&cmd_path, test_storage_slots_reorg).await; run_test(&cmd_path, test_many_blocks_reorg).await; @@ -79,6 +80,20 @@ where info!(""); } +async fn no_reorgs_full_sync_smoke_test(simulator: Arc>) { + let mut simulator = simulator.lock().await; + + // Start two ethrex nodes + let node0 = simulator.start_node().await; + let node1 = simulator.start_node().await; + + // Create a chain and extend it with a few empty blocks + let base_chain = node0.extend_chain(simulator.get_base_chain(), 10).await; + + // Try to fully sync node1 (which is a peer of node0) + node1.update_forkchoice(&base_chain).await; +} + async fn test_one_block_reorg_and_back(simulator: Arc>) { let mut simulator = simulator.lock().await; let signer: Signer = LocalSigner::new( diff --git a/tooling/reorgs/src/simulator.rs b/tooling/reorgs/src/simulator.rs index 227db3e2c7..f5c867bbdb 100644 --- a/tooling/reorgs/src/simulator.rs +++ b/tooling/reorgs/src/simulator.rs @@ -285,6 +285,15 @@ impl Node { chain } + pub async fn extend_chain(&self, mut chain: Chain, num_blocks: usize) -> Chain { + for _ in 0..num_blocks { + chain = self.build_payload(chain).await; + self.notify_new_payload(&chain).await; + } + self.update_forkchoice(&chain).await; + chain + } + pub async fn notify_new_payload(&self, chain: &Chain) { let head = chain.blocks.last().unwrap(); let execution_payload = ExecutionPayload::from_block(head.clone());