use std::env;
use std::fs;
use std::path::PathBuf;
use std::sync::atomic::{AtomicU32, Ordering};
use std::time::{SystemTime, UNIX_EPOCH};
static COUNTER: AtomicU32 = AtomicU32::new(0);
pub fn setup_test_dir() -> PathBuf {
let timestamp = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_secs();
let count = COUNTER.fetch_add(1, Ordering::SeqCst);
let mut test_dir = env::temp_dir();
test_dir.push(format!(
"softpath_test_{}_{}_{}" ,
timestamp,
std::process::id(),
count
));
if test_dir.exists() {
let _ = fs::remove_dir_all(&test_dir);
}
fs::create_dir_all(&test_dir).expect("Failed to create test directory");
test_dir
}
pub fn cleanup_test_dir(test_dir: &PathBuf) {
std::thread::sleep(std::time::Duration::from_millis(100));
let mut retries = 3;
while retries > 0 {
match fs::remove_dir_all(test_dir) {
Ok(_) => break,
Err(e) => {
if retries == 1 {
panic!(
"Failed to clean up test directory after {} retries: {}",
4 - retries,
e
);
}
std::thread::sleep(std::time::Duration::from_millis(100));
retries -= 1;
}
}
}
}