mirror of
https://github.com/logos-blockchain/lssa.git
synced 2026-06-03 23:59:32 +00:00
52 lines
2.0 KiB
Rust
52 lines
2.0 KiB
Rust
//! 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.
|
|
|
|
use std::time::Duration;
|
|
|
|
use anyhow::{Context as _, Result};
|
|
use log::info;
|
|
pub use test_fixtures::*;
|
|
|
|
/// 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}"
|
|
)
|
|
})?
|
|
}
|