From 38f69359537bd4f481557f6d69bc30c50036d124 Mon Sep 17 00:00:00 2001 From: Mohamed <mohamed.metwalli@sap.com> Date: Wed, 14 Apr 2021 10:55:18 +0200 Subject: [PATCH] Corona Test Config (EXPOSUREAPP-6047) (#2823) * Map CoronaTestConfig * Set default value * Remove todo , aligned --- .../appconfig/AppConfigModule.kt | 5 +++ .../appconfig/CoronaTestConfig.kt | 22 ++++++++++++ .../appconfig/mapping/ConfigMapping.kt | 2 ++ .../appconfig/mapping/ConfigParser.kt | 5 ++- .../mapping/CoronaTestConfigMapper.kt | 36 +++++++++++++++++++ .../appconfig/mapping/DefaultConfigMapping.kt | 2 ++ .../appconfig/mapping/ConfigParserTest.kt | 6 +++- 7 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/CoronaTestConfig.kt create mode 100644 Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/CoronaTestConfigMapper.kt diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/AppConfigModule.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/AppConfigModule.kt index cf775d6f5..90de99cd1 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/AppConfigModule.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/AppConfigModule.kt @@ -5,6 +5,7 @@ import dagger.Provides import de.rki.coronawarnapp.appconfig.download.AppConfigApiV2 import de.rki.coronawarnapp.appconfig.mapping.AnalyticsConfigMapper import de.rki.coronawarnapp.appconfig.mapping.CWAConfigMapper +import de.rki.coronawarnapp.appconfig.mapping.CoronaTestConfigMapper import de.rki.coronawarnapp.appconfig.mapping.ExposureDetectionConfigMapper import de.rki.coronawarnapp.appconfig.mapping.ExposureWindowRiskCalculationConfigMapper import de.rki.coronawarnapp.appconfig.mapping.KeyDownloadParametersMapper @@ -83,6 +84,10 @@ class AppConfigModule { fun presenceTracingMapper(mapper: PresenceTracingConfigMapper): PresenceTracingConfig.Mapper = mapper + @Provides + fun coronaTestConfigMapper(mapper: CoronaTestConfigMapper): + CoronaTestConfig.Mapper = mapper + companion object { private val HTTP_TIMEOUT_APPCONFIG = Duration.standardSeconds(10) } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/CoronaTestConfig.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/CoronaTestConfig.kt new file mode 100644 index 000000000..acba01888 --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/CoronaTestConfig.kt @@ -0,0 +1,22 @@ +package de.rki.coronawarnapp.appconfig + +import de.rki.coronawarnapp.appconfig.mapping.ConfigMapper + +interface CoronaTestConfig { + val coronaRapidAntigenTestParameters: CoronaRapidAntigenTestParametersContainer + + interface Mapper : ConfigMapper<CoronaTestConfig> +} + +data class CoronaRapidAntigenTestParametersContainer( + val hoursToDeemTestOutdated: Int = DEFAULT_HOURS +) { + companion object { + const val DEFAULT_HOURS = 48 + } +} + +data class CoronaTestConfigContainer( + override val coronaRapidAntigenTestParameters: CoronaRapidAntigenTestParametersContainer = + CoronaRapidAntigenTestParametersContainer() +) : CoronaTestConfig diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/ConfigMapping.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/ConfigMapping.kt index bad36b65a..d0d379026 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/ConfigMapping.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/ConfigMapping.kt @@ -2,6 +2,7 @@ package de.rki.coronawarnapp.appconfig.mapping import de.rki.coronawarnapp.appconfig.AnalyticsConfig import de.rki.coronawarnapp.appconfig.CWAConfig +import de.rki.coronawarnapp.appconfig.CoronaTestConfig import de.rki.coronawarnapp.appconfig.ExposureDetectionConfig import de.rki.coronawarnapp.appconfig.ExposureWindowRiskCalculationConfig import de.rki.coronawarnapp.appconfig.KeyDownloadConfig @@ -22,4 +23,5 @@ interface ConfigMapping : val analytics: AnalyticsConfig val logUpload: LogUploadConfig val presenceTracing: PresenceTracingConfig + val coronaTestParameters: CoronaTestConfig } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/ConfigParser.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/ConfigParser.kt index de2214177..ced74a1e8 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/ConfigParser.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/ConfigParser.kt @@ -3,6 +3,7 @@ package de.rki.coronawarnapp.appconfig.mapping import dagger.Reusable import de.rki.coronawarnapp.appconfig.AnalyticsConfig import de.rki.coronawarnapp.appconfig.CWAConfig +import de.rki.coronawarnapp.appconfig.CoronaTestConfig import de.rki.coronawarnapp.appconfig.ExposureDetectionConfig import de.rki.coronawarnapp.appconfig.ExposureWindowRiskCalculationConfig import de.rki.coronawarnapp.appconfig.KeyDownloadConfig @@ -23,6 +24,7 @@ class ConfigParser @Inject constructor( private val analyticsConfigMapper: AnalyticsConfig.Mapper, private val logUploadConfigMapper: LogUploadConfig.Mapper, private val presenceTracingConfigMapper: PresenceTracingConfig.Mapper, + private val coronaTestConfigMapper: CoronaTestConfig.Mapper, ) { fun parse(configBytes: ByteArray): ConfigMapping = try { @@ -36,7 +38,8 @@ class ConfigParser @Inject constructor( survey = surveyConfigMapper.map(it), analytics = analyticsConfigMapper.map(it), logUpload = logUploadConfigMapper.map(it), - presenceTracing = presenceTracingConfigMapper.map(it) + presenceTracing = presenceTracingConfigMapper.map(it), + coronaTestParameters = coronaTestConfigMapper.map(it) ) } } catch (e: Exception) { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/CoronaTestConfigMapper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/CoronaTestConfigMapper.kt new file mode 100644 index 000000000..09fbb9068 --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/CoronaTestConfigMapper.kt @@ -0,0 +1,36 @@ +package de.rki.coronawarnapp.appconfig.mapping + +import dagger.Reusable +import de.rki.coronawarnapp.appconfig.CoronaRapidAntigenTestParametersContainer +import de.rki.coronawarnapp.appconfig.CoronaTestConfig +import de.rki.coronawarnapp.appconfig.CoronaTestConfigContainer +import de.rki.coronawarnapp.server.protocols.internal.v2.AppConfigAndroid.ApplicationConfigurationAndroid +import timber.log.Timber +import javax.inject.Inject + +@Reusable +class CoronaTestConfigMapper @Inject constructor() : CoronaTestConfig.Mapper { + override fun map( + rawConfig: ApplicationConfigurationAndroid + ): CoronaTestConfig { + + if (!rawConfig.hasCoronaTestParameters()) { + Timber.d("coronaTestParameters are missing") + return CoronaTestConfigContainer() + } + + return rawConfig.mapCoronaTestParameters() + } + + private fun ApplicationConfigurationAndroid.mapCoronaTestParameters(): CoronaTestConfig { + val coronaRapidAntigenTestParameters = if (coronaTestParameters.hasCoronaRapidAntigenTestParameters()) { + CoronaRapidAntigenTestParametersContainer( + coronaTestParameters.coronaRapidAntigenTestParameters.hoursToDeemTestOutdated + ) + } else { + Timber.d("coronaRapidAntigenTestParameters is missing") + CoronaRapidAntigenTestParametersContainer() + } + return CoronaTestConfigContainer(coronaRapidAntigenTestParameters) + } +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/DefaultConfigMapping.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/DefaultConfigMapping.kt index cdebdff80..220c854e0 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/DefaultConfigMapping.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/DefaultConfigMapping.kt @@ -2,6 +2,7 @@ package de.rki.coronawarnapp.appconfig.mapping import de.rki.coronawarnapp.appconfig.AnalyticsConfig import de.rki.coronawarnapp.appconfig.CWAConfig +import de.rki.coronawarnapp.appconfig.CoronaTestConfig import de.rki.coronawarnapp.appconfig.ExposureDetectionConfig import de.rki.coronawarnapp.appconfig.ExposureWindowRiskCalculationConfig import de.rki.coronawarnapp.appconfig.KeyDownloadConfig @@ -20,6 +21,7 @@ data class DefaultConfigMapping( override val analytics: AnalyticsConfig, override val logUpload: LogUploadConfig, override val presenceTracing: PresenceTracingConfig, + override val coronaTestParameters: CoronaTestConfig, ) : ConfigMapping, CWAConfig by cwaConfig, KeyDownloadConfig by keyDownloadConfig, diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/mapping/ConfigParserTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/mapping/ConfigParserTest.kt index 6f605d32f..b3c8c07ba 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/mapping/ConfigParserTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/mapping/ConfigParserTest.kt @@ -3,6 +3,7 @@ package de.rki.coronawarnapp.appconfig.mapping import com.google.protobuf.InvalidProtocolBufferException import de.rki.coronawarnapp.appconfig.AnalyticsConfig import de.rki.coronawarnapp.appconfig.CWAConfig +import de.rki.coronawarnapp.appconfig.CoronaTestConfig import de.rki.coronawarnapp.appconfig.ExposureDetectionConfig import de.rki.coronawarnapp.appconfig.ExposureWindowRiskCalculationConfig import de.rki.coronawarnapp.appconfig.KeyDownloadConfig @@ -32,6 +33,7 @@ class ConfigParserTest : BaseTest() { @MockK lateinit var analyticsConfigMapper: AnalyticsConfig.Mapper @MockK lateinit var logUploadConfigMapper: LogUploadConfig.Mapper @MockK lateinit var presenceTracingConfigMapper: PresenceTracingConfig.Mapper + @MockK lateinit var coronaTestConfigMapper: CoronaTestConfig.Mapper private val appConfig171 = File("src/test/resources/appconfig_1_7_1.bin") private val appConfig180 = File("src/test/resources/appconfig_1_8_0.bin") @@ -48,6 +50,7 @@ class ConfigParserTest : BaseTest() { every { analyticsConfigMapper.map(any()) } returns mockk() every { logUploadConfigMapper.map(any()) } returns mockk() every { presenceTracingConfigMapper.map(any()) } returns mockk() + every { coronaTestConfigMapper.map(any()) } returns mockk() appConfig171.exists() shouldBe true appConfig180.exists() shouldBe true @@ -61,7 +64,8 @@ class ConfigParserTest : BaseTest() { surveyConfigMapper = surveyConfigMapper, analyticsConfigMapper = analyticsConfigMapper, logUploadConfigMapper = logUploadConfigMapper, - presenceTracingConfigMapper = presenceTracingConfigMapper + presenceTracingConfigMapper = presenceTracingConfigMapper, + coronaTestConfigMapper = coronaTestConfigMapper, ) @Test -- GitLab