Skip to content
Snippets Groups Projects
Unverified Commit f9c8011c authored by Ralf Gehrer's avatar Ralf Gehrer Committed by GitHub
Browse files

A connection timeout should not invalidate the cache (EXPOSUREAPP-3912) (#1698)

parent 2547e10a
No related branches found
No related tags found
No related merge requests found
......@@ -9,6 +9,7 @@ import de.rki.coronawarnapp.diagnosiskeys.server.LocationCode
import de.rki.coronawarnapp.diagnosiskeys.storage.CachedKey
import de.rki.coronawarnapp.diagnosiskeys.storage.CachedKeyInfo.Type
import de.rki.coronawarnapp.diagnosiskeys.storage.KeyCacheRepository
import de.rki.coronawarnapp.exception.http.NetworkConnectTimeoutException
import de.rki.coronawarnapp.storage.DeviceStorage
import de.rki.coronawarnapp.util.TimeAndDateExtensions.toLocalDate
import de.rki.coronawarnapp.util.TimeStamper
......@@ -51,7 +52,12 @@ class HourPackageSyncTool @Inject constructor(
val keysWereRevoked = revokeCachedKeys(downloadConfig.revokedHourPackages)
val missingHours = targetLocations.mapNotNull {
determineMissingHours(it, forceIndexLookup || keysWereRevoked)
try {
determineMissingHours(it, forceIndexLookup || keysWereRevoked)
} catch (e: NetworkConnectTimeoutException) {
Timber.tag(TAG).i("missing hours sync failed due to network timeout")
return SyncResult(successful = false, newPackages = emptyList())
}
}
if (missingHours.isEmpty()) {
Timber.tag(TAG).i("There were no missing hours.")
......@@ -142,6 +148,9 @@ class HourPackageSyncTool @Inject constructor(
val availableHours = run {
val hoursToday = try {
keyServer.getHourIndex(location, today)
} catch (e: NetworkConnectTimeoutException) {
Timber.tag(TAG).e(e, "Failed to get today's hour due - not going to delete the cache.")
throw e
} catch (e: IOException) {
Timber.tag(TAG).e(e, "failed to get today's hour index.")
emptyList()
......
......@@ -4,6 +4,7 @@ import de.rki.coronawarnapp.appconfig.mapping.RevokedKeyPackage
import de.rki.coronawarnapp.diagnosiskeys.storage.CachedKey
import de.rki.coronawarnapp.diagnosiskeys.storage.CachedKeyInfo
import de.rki.coronawarnapp.diagnosiskeys.storage.CachedKeyInfo.Type
import de.rki.coronawarnapp.exception.http.NetworkConnectTimeoutException
import io.kotest.matchers.shouldBe
import io.mockk.coEvery
import io.mockk.coVerify
......@@ -258,4 +259,18 @@ class HourPackageSyncToolTest : CommonSyncToolTest() {
coVerify(exactly = 0) { keyServer.getHourIndex("EUR".loc, "2020-01-04".day) }
}
@Test
fun `network connection time out does not clear the cache and returns an unsuccessful result`() = runBlockingTest {
coEvery { keyServer.getHourIndex(any(), any()) } throws NetworkConnectTimeoutException()
val instance = createInstance()
instance.syncMissingHourPackages(listOf("EUR".loc), false) shouldBe BaseKeyPackageSyncTool.SyncResult(
successful = false,
newPackages = emptyList()
)
coVerify(exactly = 1) { keyServer.getHourIndex("EUR".loc, "2020-01-04".day) }
coVerify(exactly = 0) { keyCache.delete(any()) }
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment