use super::*;
#[tokio::test(start_paused = true)]
async fn timed_bounds_a_hanging_call_at_the_default() {
let hang = std::future::pending::<std::result::Result<u64, std::io::Error>>();
let err = timed(None, "nodeIdOf", hang)
.await
.err()
.map(|e| format!("{e:#}"));
assert!(
err.as_ref()
.is_some_and(|e| e.contains("nodeIdOf timed out after")),
"a hanging call must time out and name itself: {err:?}"
);
}
#[tokio::test(start_paused = true)]
async fn timed_honours_an_explicit_timeout() {
let hang = std::future::pending::<std::result::Result<u64, std::io::Error>>();
let started = tokio::time::Instant::now();
let _ = timed(Some(Duration::from_millis(50)), "get_logs", hang).await;
assert!(
started.elapsed() < DEFAULT_RPC_CALL_TIMEOUT,
"explicit timeout must win over the 10s default"
);
}
#[tokio::test(start_paused = true)]
async fn timed_passes_a_prompt_success_through() {
let ok = async { Ok::<u64, std::io::Error>(7) };
assert_eq!(timed(None, "get_block_number", ok).await.ok(), Some(7));
}
#[tokio::test(start_paused = true)]
async fn hanging_provider_stalls_until_timed_fires() {
use alloy::providers::Provider;
let provider = super::test_support::hanging_provider();
let err = timed(None, "get_block_number", provider.get_block_number())
.await
.err()
.map(|e| format!("{e:#}"));
assert!(
err.as_ref()
.is_some_and(|e| e.contains("get_block_number timed out after")),
"a hanging provider must fail at the deadline, not resolve or error early: {err:?}"
);
}