From 9b9e0db9f6467a5389d91c329d3f3e7dd45a67e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E6=AD=A3=E8=B6=85?= Date: Thu, 7 May 2026 05:12:22 +0800 Subject: [PATCH] test(lifecycle): cover ILM process time aliases (#2839) --- crates/ecstore/src/bucket/lifecycle/core.rs | 78 ++++++++++++++++----- 1 file changed, 61 insertions(+), 17 deletions(-) diff --git a/crates/ecstore/src/bucket/lifecycle/core.rs b/crates/ecstore/src/bucket/lifecycle/core.rs index 9fb8d3aee..1288e785e 100644 --- a/crates/ecstore/src/bucket/lifecycle/core.rs +++ b/crates/ecstore/src/bucket/lifecycle/core.rs @@ -958,6 +958,12 @@ mod tests { use std::sync::Arc; use time::macros::datetime; + fn with_default_ilm_process_time(test: impl FnOnce()) { + temp_env::with_var_unset(ENV_ILM_PROCESS_TIME, || { + temp_env::with_var_unset(ENV_ILM_PROCESS_TIME_DEPRECATED, test); + }); + } + #[tokio::test] #[serial] async fn validate_accepts_zero_expiration_days() { @@ -2151,37 +2157,75 @@ mod tests { // --- TASK-003 tests: Round up to next UTC processing boundary --- #[test] + #[serial] fn expected_expiry_time_rounds_up_to_next_midnight_utc() { - // Object created at 2025-01-15T10:30:45Z, expire in 30 days - let mod_time = datetime!(2025-01-15 10:30:45 UTC); - let result = expected_expiry_time(mod_time, 30); + with_default_ilm_process_time(|| { + // Object created at 2025-01-15T10:30:45Z, expire in 30 days + let mod_time = datetime!(2025-01-15 10:30:45 UTC); + let result = expected_expiry_time(mod_time, 30); - // Should round up to the next midnight: 2025-02-15T00:00:00Z - assert_eq!(result.hour(), 0); - assert_eq!(result.minute(), 0); - assert_eq!(result.second(), 0); - assert_eq!(result, datetime!(2025-02-15 00:00:00 UTC)); + // Should round up to the next midnight: 2025-02-15T00:00:00Z + assert_eq!(result.hour(), 0); + assert_eq!(result.minute(), 0); + assert_eq!(result.second(), 0); + assert_eq!(result, datetime!(2025-02-15 00:00:00 UTC)); + }); } #[test] + #[serial] fn expected_expiry_time_immediate_expiry_returns_epoch() { - let mod_time = datetime!(2025-06-01 12:00:00 UTC); - let result = expected_expiry_time(mod_time, 0); - assert_eq!(result, OffsetDateTime::UNIX_EPOCH); + with_default_ilm_process_time(|| { + let mod_time = datetime!(2025-06-01 12:00:00 UTC); + let result = expected_expiry_time(mod_time, 0); + assert_eq!(result, OffsetDateTime::UNIX_EPOCH); + }); } #[test] + #[serial] fn expected_expiry_time_preserves_exact_midnight_boundary() { - let mod_time = datetime!(2025-03-01 00:00:00 UTC); - let result = expected_expiry_time(mod_time, 1); - assert_eq!(result, datetime!(2025-03-02 00:00:00 UTC)); + with_default_ilm_process_time(|| { + let mod_time = datetime!(2025-03-01 00:00:00 UTC); + let result = expected_expiry_time(mod_time, 1); + assert_eq!(result, datetime!(2025-03-02 00:00:00 UTC)); + }); } #[test] + #[serial] fn expected_expiry_time_rounds_end_of_day_to_following_midnight() { - let mod_time = datetime!(2025-06-15 23:59:59 UTC); - let result = expected_expiry_time(mod_time, 1); - assert_eq!(result, datetime!(2025-06-17 00:00:00 UTC)); + with_default_ilm_process_time(|| { + let mod_time = datetime!(2025-06-15 23:59:59 UTC); + let result = expected_expiry_time(mod_time, 1); + assert_eq!(result, datetime!(2025-06-17 00:00:00 UTC)); + }); + } + + #[test] + #[serial] + fn expected_expiry_time_uses_canonical_process_time_boundary() { + let mod_time = datetime!(2025-01-15 10:30:45 UTC); + + temp_env::with_var(ENV_ILM_PROCESS_TIME, Some("3600"), || { + temp_env::with_var_unset(ENV_ILM_PROCESS_TIME_DEPRECATED, || { + let result = expected_expiry_time(mod_time, 1); + assert_eq!(result, datetime!(2025-01-16 11:00:00 UTC)); + }); + }); + } + + #[test] + #[serial] + fn expected_expiry_time_uses_deprecated_process_time_alias() { + let mod_time = datetime!(2025-01-15 10:30:45 UTC); + + temp_env::with_var_unset(ENV_ILM_PROCESS_TIME, || { + temp_env::with_var(ENV_ILM_PROCESS_TIME_DEPRECATED, Some("3600"), || { + let result = expected_expiry_time(mod_time, 1); + assert_eq!(result, datetime!(2025-01-16 11:00:00 UTC)); + }); + }); } #[test]