From cfe50c0e956a9beed3dedff94a76551ee5bea6c8 Mon Sep 17 00:00:00 2001 From: Suresh Kumar Anaparti Date: Thu, 17 Apr 2025 21:40:14 +0530 Subject: [PATCH] ResourceCleanupService test fix for daylight saving time --- .../ResourceCleanupServiceImplTest.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/server/src/test/java/org/apache/cloudstack/resource/ResourceCleanupServiceImplTest.java b/server/src/test/java/org/apache/cloudstack/resource/ResourceCleanupServiceImplTest.java index 7446e2904885..2ca9c0ef11b7 100644 --- a/server/src/test/java/org/apache/cloudstack/resource/ResourceCleanupServiceImplTest.java +++ b/server/src/test/java/org/apache/cloudstack/resource/ResourceCleanupServiceImplTest.java @@ -17,6 +17,11 @@ package org.apache.cloudstack.resource; import java.lang.reflect.Field; +import java.time.Duration; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.zone.ZoneRules; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -629,9 +634,23 @@ public void testCalculatePastDateFromConfig() { Date result = resourceCleanupService.calculatePastDateFromConfig( ResourceCleanupService.ExpungedResourcesPurgeKeepPastDays.key(), days); - Date today = new Date(); - long diff = today.getTime() - result.getTime(); - Assert.assertEquals(days, TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS)); + Instant resultInstant = result.toInstant(); + ZoneId systemZone = ZoneId.systemDefault(); + ZoneRules rules = systemZone.getRules(); + ZonedDateTime resultDateTime = resultInstant.atZone(systemZone); + boolean isDSTInResultDateTime = rules.isDaylightSavings(resultDateTime.toInstant()); + + ZonedDateTime todayDateTime = ZonedDateTime.now(systemZone); + boolean isDSTInTodayDateTime = rules.isDaylightSavings(todayDateTime.toInstant()); + + Duration duration = Duration.between(resultDateTime, todayDateTime); + long actualDays = TimeUnit.DAYS.convert(duration.toMillis(), TimeUnit.MILLISECONDS); + + if (!isDSTInResultDateTime && isDSTInTodayDateTime) { + Assert.assertEquals(days - 1, actualDays); + } else { + Assert.assertEquals(days, actualDays); + } } @Test