From cb6bb894252dee6c372fede9974f691ef49bf5b8 Mon Sep 17 00:00:00 2001 From: Karthik Nadig Date: Wed, 5 Aug 2026 14:22:38 -0700 Subject: [PATCH] test: prevent virtualenvwrapper temp directory collisions (Fixes #498) Combine timestamp, process ID, and an atomic sequence so parallel tests cannot share cleanup paths. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- crates/pet-virtualenvwrapper/src/environments.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/crates/pet-virtualenvwrapper/src/environments.rs b/crates/pet-virtualenvwrapper/src/environments.rs index 643c9869..1dbe743d 100644 --- a/crates/pet-virtualenvwrapper/src/environments.rs +++ b/crates/pet-virtualenvwrapper/src/environments.rs @@ -59,19 +59,23 @@ mod tests { use std::{ fs, path::Path, + sync::atomic::{AtomicUsize, Ordering}, time::{SystemTime, UNIX_EPOCH}, }; #[cfg(windows)] use std::os::windows::fs::symlink_dir; + static NEXT_TEST_DIR_ID: AtomicUsize = AtomicUsize::new(0); + fn create_test_dir(name: &str) -> PathBuf { - let unique = SystemTime::now() + let id = NEXT_TEST_DIR_ID.fetch_add(1, Ordering::Relaxed); + let timestamp = SystemTime::now() .duration_since(UNIX_EPOCH) .unwrap() .as_nanos(); let directory = std::env::temp_dir().join(format!( - "pet-virtualenvwrapper-{name}-{}-{unique}", + "pet-virtualenvwrapper-{name}-{}-{timestamp}-{id}", std::process::id() )); fs::create_dir_all(&directory).unwrap();