2026-05-20 10:08:24 +02:00
//! Integration test helpers, re-exported from `test_fixtures` for backwards
//! compatibility. The actual fixtures live in the `test_fixtures` crate so that
//! non-test consumers (e.g. `integration_bench`) can depend on them without
//! pulling in the test files.
2025-12-31 04:02:25 +03:00
2026-06-01 21:38:22 -03:00
use std ::time ::Duration ;
use anyhow ::{ Context as _ , Result } ;
use log ::info ;
2026-05-20 10:08:24 +02:00
pub use test_fixtures ::* ;
2026-06-01 21:38:22 -03:00
/// Maximum time to wait for the indexer to catch up to the sequencer.
pub const L2_TO_L1_TIMEOUT : Duration = Duration ::from_mins ( 6 ) ;
/// Poll the indexer until its last finalized block id reaches the sequencer's
/// current last block id or until [`L2_TO_L1_TIMEOUT`] elapses.
/// Returns the last indexer block id observed.
pub async fn wait_for_indexer_to_catch_up ( ctx : & TestContext ) -> Result < u64 > {
use indexer_service_rpc ::RpcClient as _ ;
let block_id_to_catch_up =
sequencer_service_rpc ::RpcClient ::get_last_block_id ( ctx . sequencer_client ( ) ) . await ? ;
let mut last_ind : u64 = 1 ;
let inner = async {
loop {
let ind = ctx
. indexer_client ( )
. get_last_finalized_block_id ( )
. await ?
. unwrap_or ( 0 ) ;
last_ind = ind ;
if ind > = block_id_to_catch_up {
let last_seq =
sequencer_service_rpc ::RpcClient ::get_last_block_id ( ctx . sequencer_client ( ) )
. await ? ;
info! (
" Indexer caught up. Indexer last block id: {ind}. Current sequencer last block id: {last_seq} "
) ;
return Ok ( ind ) ;
}
tokio ::time ::sleep ( Duration ::from_secs ( 2 ) ) . await ;
}
} ;
tokio ::time ::timeout ( L2_TO_L1_TIMEOUT , inner )
. await
. with_context ( | | {
format! (
" Indexer failed to catch up within {L2_TO_L1_TIMEOUT:?}. Last indexer block id observed: {last_ind}, but needed to catch up to at least {block_id_to_catch_up} "
)
} ) ?
}