Skip to content
Snippets Groups Projects
Unverified Commit 3f896fac authored by Matthias Urhahn's avatar Matthias Urhahn Committed by GitHub
Browse files

Reduce config check timeout for the update checker (EXPOSUREAPP-6101) (#3245)


* Reduce config check timeout for the update checker by 50% to reduce app blocking on launch due to bad internet or firewalls.

* LINT

Co-authored-by: default avatarharambasicluka <64483219+harambasicluka@users.noreply.github.com>
parent 58ccacb3
No related branches found
No related tags found
No related merge requests found
...@@ -8,6 +8,7 @@ import de.rki.coronawarnapp.appconfig.AppConfigProvider ...@@ -8,6 +8,7 @@ import de.rki.coronawarnapp.appconfig.AppConfigProvider
import de.rki.coronawarnapp.appconfig.CWAConfig import de.rki.coronawarnapp.appconfig.CWAConfig
import de.rki.coronawarnapp.appconfig.internal.ApplicationConfigurationCorruptException import de.rki.coronawarnapp.appconfig.internal.ApplicationConfigurationCorruptException
import de.rki.coronawarnapp.environment.BuildConfigWrap import de.rki.coronawarnapp.environment.BuildConfigWrap
import kotlinx.coroutines.withTimeout
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
...@@ -29,13 +30,15 @@ class UpdateChecker @Inject constructor( ...@@ -29,13 +30,15 @@ class UpdateChecker @Inject constructor(
) )
Result(isUpdateNeeded = true, updateIntent = createUpdateAction()) Result(isUpdateNeeded = true, updateIntent = createUpdateAction())
} catch (exception: Exception) { } catch (e: Exception) {
Timber.tag(TAG).e("Exception caught:%s", exception.localizedMessage) Timber.tag(TAG).e(e, "Update check failed, network connection?")
Result(isUpdateNeeded = false) Result(isUpdateNeeded = false)
} }
private suspend fun isUpdateNeeded(): Boolean { private suspend fun isUpdateNeeded(): Boolean {
val cwaAppConfig: CWAConfig = appConfigProvider.getAppConfig() val cwaAppConfig: CWAConfig = withTimeout(UPDATE_CHECK_TIMEOUT) {
appConfigProvider.getAppConfig()
}
val minVersionFromServer = cwaAppConfig.minVersionCode val minVersionFromServer = cwaAppConfig.minVersionCode
...@@ -43,7 +46,6 @@ class UpdateChecker @Inject constructor( ...@@ -43,7 +46,6 @@ class UpdateChecker @Inject constructor(
Timber.tag(TAG).d("minVersionFromServer:%s", minVersionFromServer) Timber.tag(TAG).d("minVersionFromServer:%s", minVersionFromServer)
Timber.tag(TAG).d("Current app version:%s", currentVersion) Timber.tag(TAG).d("Current app version:%s", currentVersion)
val needsImmediateUpdate = VersionComparator.isVersionOlder( val needsImmediateUpdate = VersionComparator.isVersionOlder(
currentVersion, currentVersion,
minVersionFromServer minVersionFromServer
...@@ -67,7 +69,7 @@ class UpdateChecker @Inject constructor( ...@@ -67,7 +69,7 @@ class UpdateChecker @Inject constructor(
companion object { companion object {
private const val TAG: String = "UpdateChecker" private const val TAG: String = "UpdateChecker"
private const val UPDATE_CHECK_TIMEOUT = 5_000L
private const val STORE_PREFIX = "https://play.google.com/store/apps/details?id=" private const val STORE_PREFIX = "https://play.google.com/store/apps/details?id="
private const val COM_ANDROID_VENDING = "com.android.vending" private const val COM_ANDROID_VENDING = "com.android.vending"
} }
......
...@@ -12,7 +12,9 @@ import io.mockk.coVerifySequence ...@@ -12,7 +12,9 @@ import io.mockk.coVerifySequence
import io.mockk.every import io.mockk.every
import io.mockk.impl.annotations.MockK import io.mockk.impl.annotations.MockK
import io.mockk.mockkObject import io.mockk.mockkObject
import kotlinx.coroutines.delay
import kotlinx.coroutines.test.runBlockingTest import kotlinx.coroutines.test.runBlockingTest
import okio.IOException
import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import testhelpers.BaseTest import testhelpers.BaseTest
...@@ -89,4 +91,40 @@ class UpdateCheckerTest : BaseTest() { ...@@ -89,4 +91,40 @@ class UpdateCheckerTest : BaseTest() {
appConfigProvider.getAppConfig() appConfigProvider.getAppConfig()
} }
} }
@Test
fun `timeout after 5 seconds`() = runBlockingTest {
every { configData.minVersionCode } returns 10
every { BuildConfigWrap.VERSION_CODE } returns 9
coEvery { appConfigProvider.getAppConfig() } coAnswers {
delay(4_000)
configData
}
createInstance().checkForUpdate().apply {
isUpdateNeeded shouldBe true
updateIntent shouldNotBe null
}
coEvery { appConfigProvider.getAppConfig() } coAnswers {
delay(6_000)
throw IOException()
}
createInstance().checkForUpdate().apply {
isUpdateNeeded shouldBe false
updateIntent shouldBe null
}
coEvery { appConfigProvider.getAppConfig() } coAnswers {
delay(6_000)
configData
}
createInstance().checkForUpdate().apply {
isUpdateNeeded shouldBe false
updateIntent shouldBe null
}
}
} }
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