#![cfg(all(feature = "postgres", feature = "test-utils"))]
use signet_cold_sql::{SqlColdBackend, SqlColdError};
use std::time::Duration;
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn pg_statement_timeout_trips() {
let Ok(url) = std::env::var("DATABASE_URL") else {
eprintln!("skipping pg_statement_timeout_trips: DATABASE_URL not set");
return;
};
let backend =
SqlColdBackend::connect(&url).await.unwrap().with_read_timeout(Duration::from_millis(50));
let err = backend
.debug_pg_sleep(Duration::from_secs(1))
.await
.expect_err("pg_sleep should trip statement_timeout");
assert!(matches!(err, SqlColdError::Timeout), "expected SqlColdError::Timeout, got: {err}");
}
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn pg_statement_timeout_maps_to_deadline_exceeded() {
let Ok(url) = std::env::var("DATABASE_URL") else {
eprintln!("skipping pg_statement_timeout_maps_to_deadline_exceeded: DATABASE_URL not set");
return;
};
let backend =
SqlColdBackend::connect(&url).await.unwrap().with_read_timeout(Duration::from_millis(50));
let sql_err = backend.debug_pg_sleep(Duration::from_secs(1)).await.unwrap_err();
let cold_err: signet_cold::ColdStorageError = sql_err.into();
assert!(
matches!(cold_err, signet_cold::ColdStorageError::DeadlineExceeded(_)),
"expected DeadlineExceeded, got: {cold_err}"
);
}