From ef5ccc232a847501d4dc3ceeeaba53891523bcf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E6=AD=A3=E8=B6=85?= Date: Thu, 30 Apr 2026 20:14:15 +0800 Subject: [PATCH] test(filemeta): cover shared cache reuse (#2754) --- crates/filemeta/src/metacache.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/crates/filemeta/src/metacache.rs b/crates/filemeta/src/metacache.rs index 90cacbc45..def7023f8 100644 --- a/crates/filemeta/src/metacache.rs +++ b/crates/filemeta/src/metacache.rs @@ -1004,6 +1004,29 @@ mod tests { run_cache_workload(cache, 32, 120, 2048).await; } + #[tokio::test] + async fn test_cache_get_shared_reuses_fresh_value() { + let calls = Arc::new(AtomicUsize::new(0)); + let cache = Arc::new(Cache::new( + Box::new({ + let calls = Arc::clone(&calls); + move || { + let calls = Arc::clone(&calls); + Box::pin(async move { Ok(calls.fetch_add(1, Ordering::SeqCst)) }) + } + }), + Duration::from_secs(60), + Opts::default(), + )); + + let first = Arc::clone(&cache).get_shared().await.expect("prime cache should succeed"); + let second = Arc::clone(&cache).get_shared().await.expect("fresh cache hit should succeed"); + + assert!(Arc::ptr_eq(&first, &second)); + assert_eq!(*first, 0); + assert_eq!(calls.load(Ordering::SeqCst), 1); + } + #[tokio::test(flavor = "multi_thread", worker_threads = 4)] async fn test_cache_no_wait_returns_stale_and_refreshes_in_background() { let calls = Arc::new(AtomicUsize::new(0));