From b2b92de26c459bf8f08369cea73112c3b7bbe2d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E6=AD=A3=E8=B6=85?= Date: Thu, 16 Apr 2026 10:12:16 +0800 Subject: [PATCH] test(ecstore): cover fresh tmp cleanup path (#2562) --- crates/ecstore/src/disk/local.rs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/crates/ecstore/src/disk/local.rs b/crates/ecstore/src/disk/local.rs index 8bf9ec340..e1fb21995 100644 --- a/crates/ecstore/src/disk/local.rs +++ b/crates/ecstore/src/disk/local.rs @@ -2838,6 +2838,32 @@ mod test { assert!(entries.next_entry().await.unwrap().is_some()); } + #[tokio::test] + async fn cleanup_stale_tmp_objects_keeps_fresh_dirs_and_regular_files() { + use tempfile::tempdir; + + let dir = tempdir().unwrap(); + let tmp = LocalDisk::meta_path(dir.path(), RUSTFS_META_TMP_BUCKET); + let fresh_dir = tmp.join("fresh").join("data"); + let regular_file = tmp.join("note.txt"); + let trash = LocalDisk::meta_path(dir.path(), RUSTFS_META_TMP_DELETED_BUCKET); + + fs::create_dir_all(fresh_dir.parent().unwrap()).await.unwrap(); + fs::create_dir_all(&trash).await.unwrap(); + fs::write(&fresh_dir, b"temporary").await.unwrap(); + fs::write(®ular_file, b"keep").await.unwrap(); + + LocalDisk::cleanup_stale_tmp_objects_with_expiry(dir.path().to_path_buf(), Duration::from_secs(60)) + .await + .unwrap(); + + assert!(tmp.join("fresh").exists()); + assert!(regular_file.exists()); + + let mut entries = fs::read_dir(&trash).await.unwrap(); + assert!(entries.next_entry().await.unwrap().is_none()); + } + #[tokio::test] async fn test_scan_dir_includes_nested_object_dirs() { use rustfs_filemeta::MetacacheReader;