From 1a290a34a5aa9c187c4c37b1d0f3ee251cc87011 Mon Sep 17 00:00:00 2001 From: Matthias Urhahn <matthias.urhahn@sap.com> Date: Thu, 19 Nov 2020 17:24:17 +0100 Subject: [PATCH] Catch case where we are trying to download on the same hour as previously, but on a new day. (#1670) Co-authored-by: harambasicluka <64483219+harambasicluka@users.noreply.github.com> --- .../diagnosiskeys/download/HourPackageSyncTool.kt | 8 ++++---- .../download/HourPackageSyncToolTest.kt | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/diagnosiskeys/download/HourPackageSyncTool.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/diagnosiskeys/download/HourPackageSyncTool.kt index ad63bbb13..a15a2fa69 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/diagnosiskeys/download/HourPackageSyncTool.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/diagnosiskeys/download/HourPackageSyncTool.kt @@ -11,7 +11,6 @@ import de.rki.coronawarnapp.diagnosiskeys.storage.CachedKeyInfo.Type import de.rki.coronawarnapp.diagnosiskeys.storage.KeyCacheRepository import de.rki.coronawarnapp.storage.DeviceStorage import de.rki.coronawarnapp.util.TimeAndDateExtensions.toLocalDate -import de.rki.coronawarnapp.util.TimeAndDateExtensions.toLocalTime import de.rki.coronawarnapp.util.TimeStamper import de.rki.coronawarnapp.util.coroutine.DispatcherProvider import kotlinx.coroutines.CoroutineScope @@ -19,6 +18,7 @@ import kotlinx.coroutines.Deferred import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.withContext +import org.joda.time.DateTimeZone import org.joda.time.Instant import org.joda.time.LocalDate import org.joda.time.LocalTime @@ -117,10 +117,10 @@ class HourPackageSyncTool @Inject constructor( @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) internal fun expectNewHourPackages(cachedHours: List<CachedKey>, now: Instant): Boolean { - val previousHour = now.toLocalTime().minusHours(1) - val newestHour = cachedHours.map { it.info.toDateTime() }.maxOrNull()?.toLocalTime() + val today = now.toDateTime(DateTimeZone.UTC) + val newestHour = cachedHours.map { it.info.toDateTime() }.maxOrNull() - return previousHour.hourOfDay != newestHour?.hourOfDay + return today.minusHours(1).hourOfDay != newestHour?.hourOfDay || today.toLocalDate() != newestHour.toLocalDate() } @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/download/HourPackageSyncToolTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/download/HourPackageSyncToolTest.kt index 062d1bfb4..f6dae8e55 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/download/HourPackageSyncToolTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/diagnosiskeys/download/HourPackageSyncToolTest.kt @@ -204,6 +204,20 @@ class HourPackageSyncToolTest : CommonSyncToolTest() { instance.expectNewHourPackages(listOf(cachedKey1, cachedKey2), now) shouldBe true } + @Test + fun `EXPECT_NEW_HOUR_PACKAGES does not get confused by same hour on next day`() = runBlockingTest { + val cachedKey1 = mockk<CachedKey>().apply { + every { info } returns mockk<CachedKeyInfo>().apply { + every { toDateTime() } returns Instant.parse("2020-01-01T00:00:03.000Z").toDateTime(DateTimeZone.UTC) + } + } + + val instance = createInstance() + + val now = Instant.parse("2020-01-02T01:00:03.000Z") + instance.expectNewHourPackages(listOf(cachedKey1), now) shouldBe true + } + @Test fun `if keys were revoked skip the EXPECT packages check`() = runBlockingTest { every { timeStamper.nowUTC } returns Instant.parse("2020-01-04T02:00:00.000Z") -- GitLab