From 38b0debba97aa3939218b1630dd0000cdb2b47e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Chaonan=E2=80=9D?= Date: Mon, 24 Aug 2026 10:39:40 +0800 Subject: [PATCH] fix(test): share one BSK_HOME lock across lib tests --- crates/bsk-cli/src/cli/record_recovery.rs | 3 +-- crates/bsk-cli/src/cli/record_state.rs | 8 +------- crates/bsk-cli/src/daemon/paths.rs | 18 +++++++++--------- 3 files changed, 11 insertions(+), 18 deletions(-) diff --git a/crates/bsk-cli/src/cli/record_recovery.rs b/crates/bsk-cli/src/cli/record_recovery.rs index f52d1af..a5a9763 100644 --- a/crates/bsk-cli/src/cli/record_recovery.rs +++ b/crates/bsk-cli/src/cli/record_recovery.rs @@ -41,8 +41,7 @@ pub fn clear() { #[cfg(test)] pub(crate) fn test_env_lock() -> std::sync::MutexGuard<'static, ()> { - static GUARD: std::sync::Mutex<()> = std::sync::Mutex::new(()); - GUARD.lock().unwrap_or_else(|e| e.into_inner()) + crate::daemon::paths::test_env_lock() } #[cfg(test)] diff --git a/crates/bsk-cli/src/cli/record_state.rs b/crates/bsk-cli/src/cli/record_state.rs index c56a686..0b93e24 100644 --- a/crates/bsk-cli/src/cli/record_state.rs +++ b/crates/bsk-cli/src/cli/record_state.rs @@ -59,15 +59,9 @@ fn started_at_unix_ms() -> String { #[cfg(test)] mod tests { use super::*; - use std::sync::Mutex; - - fn env_guard() -> &'static Mutex<()> { - static GUARD: Mutex<()> = Mutex::new(()); - &GUARD - } fn with_temp_home(f: F) { - let _lock = env_guard().lock().unwrap_or_else(|e| e.into_inner()); + let _lock = crate::daemon::paths::test_env_lock(); let tmp = tempfile::tempdir().unwrap(); unsafe { std::env::set_var(crate::daemon::paths::BSK_HOME_ENV, tmp.path()); diff --git a/crates/bsk-cli/src/daemon/paths.rs b/crates/bsk-cli/src/daemon/paths.rs index 291a823..dfd1be9 100644 --- a/crates/bsk-cli/src/daemon/paths.rs +++ b/crates/bsk-cli/src/daemon/paths.rs @@ -127,6 +127,13 @@ pub fn pipe_name() -> String { render_pipe_name(&user, &home) } +/// Process-wide lock for tests that mutate `BSK_HOME`. +#[cfg(test)] +pub(crate) fn test_env_lock() -> std::sync::MutexGuard<'static, ()> { + static GUARD: std::sync::Mutex<()> = std::sync::Mutex::new(()); + GUARD.lock().unwrap_or_else(|e| e.into_inner()) +} + /// Render the Windows named-pipe name for a user/home pair. Kept /// platform-agnostic so unit tests on any host can pin the output /// character set. @@ -144,19 +151,12 @@ fn render_pipe_name(user: &str, home: &str) -> String { #[cfg(test)] mod tests { use super::*; - use std::sync::Mutex; use tempfile::TempDir; - /// Serialise tests that mutate the global `BSK_HOME` env var. - fn env_guard() -> &'static Mutex<()> { - static GUARD: Mutex<()> = Mutex::new(()); - &GUARD - } - fn with_temp_home(f: F) { - let _lock = env_guard().lock().unwrap_or_else(|e| e.into_inner()); + let _lock = test_env_lock(); let tmp = TempDir::new().unwrap(); - // SAFETY: serialised by env_guard above. + // SAFETY: serialised by test_env_lock above. unsafe { std::env::set_var(BSK_HOME_ENV, tmp.path().join("bsk")); }