From 4d88611e941152cd64d2fa0626db9b1368d7af51 Mon Sep 17 00:00:00 2001 From: Jax Young Date: Fri, 2 Aug 2024 15:48:11 +0800 Subject: [PATCH] test: add env ATUIN_TEST_LOCAL_TIMEOUT to control test timeout of SQLite This make it possible to control the timeout of SQLite operations in test. And ATUIN_TEST_LOCAL_TIMEOUT defaults to the default local_timeout, which is actually used in the client. Instead of a small timeout (0.1), this change makes the test less likely to fail and better imitate the default behavior. SQLite operation timeout was first introduced from #1590, including connection and store timeout. The env ATUIN_TEST_SQLITE_STORE_TIMEOUT which added by #1703 only specify the store timeout. This commit doesn't deprecate ATUIN_TEST_SQLITE_STORE_TIMEOUT, but control it by setting its default to the new env ATUIN_TEST_LOCAL_TIMEOUT. --- crates/atuin-client/src/database.rs | 22 ++++++++++++++----- .../atuin-client/src/record/sqlite_store.rs | 2 +- crates/atuin-client/src/settings.rs | 10 +++++++++ 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/crates/atuin-client/src/database.rs b/crates/atuin-client/src/database.rs index d01dadb4..4f126030 100644 --- a/crates/atuin-client/src/database.rs +++ b/crates/atuin-client/src/database.rs @@ -762,6 +762,8 @@ impl Database for Sqlite { #[cfg(test)] mod test { + use crate::settings::test_local_timeout; + use super::*; use std::time::{Duration, Instant}; @@ -834,7 +836,9 @@ mod test { #[tokio::test(flavor = "multi_thread")] async fn test_search_prefix() { - let mut db = Sqlite::new("sqlite::memory:", 0.1).await.unwrap(); + let mut db = Sqlite::new("sqlite::memory:", test_local_timeout()) + .await + .unwrap(); new_history_item(&mut db, "ls /home/ellie").await.unwrap(); assert_search_eq(&db, SearchMode::Prefix, FilterMode::Global, "ls", 1) @@ -850,7 +854,9 @@ mod test { #[tokio::test(flavor = "multi_thread")] async fn test_search_fulltext() { - let mut db = Sqlite::new("sqlite::memory:", 0.1).await.unwrap(); + let mut db = Sqlite::new("sqlite::memory:", test_local_timeout()) + .await + .unwrap(); new_history_item(&mut db, "ls /home/ellie").await.unwrap(); assert_search_eq(&db, SearchMode::FullText, FilterMode::Global, "ls", 1) @@ -934,7 +940,9 @@ mod test { #[tokio::test(flavor = "multi_thread")] async fn test_search_fuzzy() { - let mut db = Sqlite::new("sqlite::memory:", 0.1).await.unwrap(); + let mut db = Sqlite::new("sqlite::memory:", test_local_timeout()) + .await + .unwrap(); new_history_item(&mut db, "ls /home/ellie").await.unwrap(); new_history_item(&mut db, "ls /home/frank").await.unwrap(); new_history_item(&mut db, "cd /home/Ellie").await.unwrap(); @@ -1035,7 +1043,9 @@ mod test { #[tokio::test(flavor = "multi_thread")] async fn test_search_reordered_fuzzy() { - let mut db = Sqlite::new("sqlite::memory:", 0.1).await.unwrap(); + let mut db = Sqlite::new("sqlite::memory:", test_local_timeout()) + .await + .unwrap(); // test ordering of results: we should choose the first, even though it happened longer ago. new_history_item(&mut db, "curl").await.unwrap(); @@ -1069,7 +1079,9 @@ mod test { git_root: None, }; - let mut db = Sqlite::new("sqlite::memory:", 0.1).await.unwrap(); + let mut db = Sqlite::new("sqlite::memory:", test_local_timeout()) + .await + .unwrap(); for _i in 1..10000 { new_history_item(&mut db, "i am a duplicated command") .await diff --git a/crates/atuin-client/src/record/sqlite_store.rs b/crates/atuin-client/src/record/sqlite_store.rs index 63ef42f8..23130797 100644 --- a/crates/atuin-client/src/record/sqlite_store.rs +++ b/crates/atuin-client/src/record/sqlite_store.rs @@ -367,7 +367,7 @@ pub(crate) fn test_sqlite_store_timeout() -> f64 { std::env::var("ATUIN_TEST_SQLITE_STORE_TIMEOUT") .ok() .and_then(|x| x.parse().ok()) - .unwrap_or(0.1) + .unwrap_or(crate::settings::test_local_timeout()) } #[cfg(test)] diff --git a/crates/atuin-client/src/settings.rs b/crates/atuin-client/src/settings.rs index 64cb4f3a..669b2501 100644 --- a/crates/atuin-client/src/settings.rs +++ b/crates/atuin-client/src/settings.rs @@ -845,6 +845,16 @@ impl Default for Settings { } } +#[cfg(test)] +pub(crate) fn test_local_timeout() -> f64 { + std::env::var("ATUIN_TEST_LOCAL_TIMEOUT") + .ok() + .and_then(|x| x.parse().ok()) + // this hardcoded value should be replaced by a simple way to get the + // default local_timeout of Settings if possible + .unwrap_or(2.0) +} + #[cfg(test)] mod tests { use std::str::FromStr;