diff --git a/tests/testsuite/global_cache_tracker.rs b/tests/testsuite/global_cache_tracker.rs index d3f087d72d5..7dfb31997be 100644 --- a/tests/testsuite/global_cache_tracker.rs +++ b/tests/testsuite/global_cache_tracker.rs @@ -22,6 +22,7 @@ use std::fmt::Write; use std::path::Path; use std::path::PathBuf; use std::process::Stdio; +use std::sync::OnceLock; use std::time::{Duration, SystemTime}; /// Helper to create a simple `foo` project which depends on a registry @@ -72,7 +73,18 @@ fn get_git_checkout_names(db_name: &str) -> Vec { } fn days_ago(n: u64) -> SystemTime { - SystemTime::now() - Duration::from_secs(60 * 60 * 24 * n) + now() - Duration::from_secs(60 * 60 * 24 * n) +} + +fn now() -> SystemTime { + // This captures the time once to avoid potential time boundaries or + // inconsistencies affecting a test. For example, on a fast system + // `days_ago(1)` called twice in a row will return the same answer. + // However, on a slower system, or if the clock happens to flip over from + // one second to the next, then it would return different answers. This + // ensures that it always returns the same answer. + static START: OnceLock = OnceLock::new(); + *START.get_or_init(|| SystemTime::now()) } /// Helper for simulating running cargo in the past. Use with the