From 21c2473dab091482a162f208134fef38fd0e8f6a Mon Sep 17 00:00:00 2001 From: Matthias Urhahn <matthias.urhahn@sap.com> Date: Wed, 5 May 2021 16:55:51 +0200 Subject: [PATCH] Adjust test availability constant (DEV) (#3085) * Adjust test availability constant. The server returns a different result after 60, not 21 days. * Fix TAG copy paste error. Co-authored-by: harambasicluka <64483219+harambasicluka@users.noreply.github.com> --- .../coronatest/server/VerificationServer.kt | 7 +++++++ .../coronatest/type/pcr/PCRProcessor.kt | 16 ++++++++-------- .../rapidantigen/RapidAntigenProcessor.kt | 19 +++++++++---------- .../worker/BackgroundConstants.kt | 7 ------- .../server/VerificationServerTest.kt | 6 ++++++ .../coronatest/type/pcr/PCRProcessorTest.kt | 2 +- .../rapidantigen/RapidAntigenProcessorTest.kt | 2 +- .../worker/BackgroundConstantsTest.kt | 1 - 8 files changed, 32 insertions(+), 28 deletions(-) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/server/VerificationServer.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/server/VerificationServer.kt index 3ae32ead1..78d80f3f1 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/server/VerificationServer.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/server/VerificationServer.kt @@ -6,6 +6,7 @@ import de.rki.coronawarnapp.util.PaddingTool.requestPadding import de.rki.coronawarnapp.util.security.HashHelper import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import org.joda.time.Duration import timber.log.Timber import javax.inject.Inject import javax.inject.Singleton @@ -114,6 +115,12 @@ class VerificationServer @Inject constructor( const val PADDING_LENGTH_BODY_TAN_FAKE = 31 + VERIFICATION_BODY_FILL const val DUMMY_REGISTRATION_TOKEN = "11111111-2222-4444-8888-161616161616" + /** + * Test is available for this long on the server. + * After this period the server will delete it and return PENDING if the regtoken is polled again. + */ + val TEST_AVAILABLBILITY = Duration.standardDays(60) + private const val TAG = "VerificationServer" } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessor.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessor.kt index a5d44f688..d866dca57 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessor.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessor.kt @@ -14,6 +14,7 @@ import de.rki.coronawarnapp.coronatest.server.CoronaTestResult.RAT_NEGATIVE import de.rki.coronawarnapp.coronatest.server.CoronaTestResult.RAT_PENDING import de.rki.coronawarnapp.coronatest.server.CoronaTestResult.RAT_POSITIVE import de.rki.coronawarnapp.coronatest.server.CoronaTestResult.RAT_REDEEMED +import de.rki.coronawarnapp.coronatest.server.VerificationServer import de.rki.coronawarnapp.coronatest.tan.CoronaTestTAN import de.rki.coronawarnapp.coronatest.type.CoronaTest import de.rki.coronawarnapp.coronatest.type.CoronaTestProcessor @@ -26,7 +27,6 @@ import de.rki.coronawarnapp.exception.http.BadRequestException import de.rki.coronawarnapp.exception.http.CwaWebException import de.rki.coronawarnapp.exception.reporting.report import de.rki.coronawarnapp.util.TimeStamper -import de.rki.coronawarnapp.worker.BackgroundConstants import org.joda.time.Duration import org.joda.time.Instant import timber.log.Timber @@ -139,7 +139,7 @@ class PCRProcessor @Inject constructor( } test.copy( - testResult = check21PlusDays(test, newTestResult), + testResult = check60Days(test, newTestResult), testResultReceivedAt = determineReceivedDate(test, newTestResult), lastUpdatedAt = nowUTC, lastError = null @@ -153,13 +153,13 @@ class PCRProcessor @Inject constructor( } } - // After 21 days, the previously EXPIRED test is deleted from the server, and it may return pending again. - private fun check21PlusDays(test: CoronaTest, newResult: CoronaTestResult): CoronaTestResult { - val calculateDays = Duration(test.registeredAt, timeStamper.nowUTC).standardDays - Timber.tag(TAG).d("Calculated test age: %d days, newResult=%s", calculateDays, newResult) + // After 60 days, the previously EXPIRED test is deleted from the server, and it may return pending again. + private fun check60Days(test: CoronaTest, newResult: CoronaTestResult): CoronaTestResult { + val calculateDays = Duration(test.registeredAt, timeStamper.nowUTC) + Timber.tag(TAG).d("Calculated test age: %d days, newResult=%s", calculateDays.standardDays, newResult) - return if (newResult == PCR_OR_RAT_PENDING && calculateDays >= BackgroundConstants.POLLING_VALIDITY_MAX_DAYS) { - Timber.tag(TAG).d("$calculateDays is exceeding the maximum polling duration") + return if (newResult == PCR_OR_RAT_PENDING && calculateDays > VerificationServer.TEST_AVAILABLBILITY) { + Timber.tag(TAG).d("$calculateDays is exceeding the test availability.") PCR_REDEEMED } else { newResult diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RapidAntigenProcessor.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RapidAntigenProcessor.kt index 964bb01bd..13654af99 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RapidAntigenProcessor.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RapidAntigenProcessor.kt @@ -13,6 +13,7 @@ import de.rki.coronawarnapp.coronatest.server.CoronaTestResult.RAT_NEGATIVE import de.rki.coronawarnapp.coronatest.server.CoronaTestResult.RAT_PENDING import de.rki.coronawarnapp.coronatest.server.CoronaTestResult.RAT_POSITIVE import de.rki.coronawarnapp.coronatest.server.CoronaTestResult.RAT_REDEEMED +import de.rki.coronawarnapp.coronatest.server.VerificationServer import de.rki.coronawarnapp.coronatest.tan.CoronaTestTAN import de.rki.coronawarnapp.coronatest.type.CoronaTest import de.rki.coronawarnapp.coronatest.type.CoronaTestProcessor @@ -23,7 +24,6 @@ import de.rki.coronawarnapp.exception.http.BadRequestException import de.rki.coronawarnapp.exception.http.CwaWebException import de.rki.coronawarnapp.exception.reporting.report import de.rki.coronawarnapp.util.TimeStamper -import de.rki.coronawarnapp.worker.BackgroundConstants import org.joda.time.Duration import org.joda.time.Instant import timber.log.Timber @@ -112,7 +112,7 @@ class RapidAntigenProcessor @Inject constructor( } test.copy( - testResult = check21PlusDays(test, newTestResult), + testResult = check60Days(test, newTestResult), testResultReceivedAt = determineReceivedDate(test, newTestResult), lastUpdatedAt = nowUTC, lastError = null @@ -126,16 +126,15 @@ class RapidAntigenProcessor @Inject constructor( } } - // After 21 days, the previously EXPIRED test is deleted from the server, and it may return pending again. - private fun check21PlusDays(test: CoronaTest, newResult: CoronaTestResult): CoronaTestResult { - val calculateDays = Duration(test.registeredAt, timeStamper.nowUTC).standardDays - Timber.tag(TAG).d("Calculated test age: %d days, newResult=%s", calculateDays, newResult) + // After 60 days, the previously EXPIRED test is deleted from the server, and it may return pending again. + private fun check60Days(test: CoronaTest, newResult: CoronaTestResult): CoronaTestResult { + val calculateDays = Duration(test.registeredAt, timeStamper.nowUTC) + Timber.tag(TAG).d("Calculated test age: %d days, newResult=%s", calculateDays.standardDays, newResult) - return if ( - (newResult == PCR_OR_RAT_PENDING || newResult == RAT_PENDING) && - calculateDays >= BackgroundConstants.POLLING_VALIDITY_MAX_DAYS + return if ((newResult == PCR_OR_RAT_PENDING || newResult == RAT_PENDING) && + calculateDays > VerificationServer.TEST_AVAILABLBILITY ) { - Timber.tag(TAG).d("$calculateDays is exceeding the maximum polling duration") + Timber.tag(TAG).d("$calculateDays is exceeding the test availability.") RAT_REDEEMED } else { newResult diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/BackgroundConstants.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/BackgroundConstants.kt index 32bec142a..600b8a8f2 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/BackgroundConstants.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/BackgroundConstants.kt @@ -19,13 +19,6 @@ object BackgroundConstants { */ const val WORKER_RETRY_COUNT_THRESHOLD = 2 - /** - * The maximum validity in days for keeping Background polling active - * - * @see TimeUnit.DAYS - */ - const val POLLING_VALIDITY_MAX_DAYS = 21 - /** * Backoff initial delay * diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/server/VerificationServerTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/server/VerificationServerTest.kt index a7f311ba6..86cf61336 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/server/VerificationServerTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/server/VerificationServerTest.kt @@ -13,6 +13,7 @@ import kotlinx.coroutines.runBlocking import okhttp3.ConnectionSpec import okhttp3.mockwebserver.MockResponse import okhttp3.mockwebserver.MockWebServer +import org.joda.time.Duration import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test @@ -211,4 +212,9 @@ class VerificationServerTest : BaseIOTest() { a.headerSizeIgnoringContentLength() shouldBe b.headerSizeIgnoringContentLength() } } + + @Test + fun `test availability constant`() { + VerificationServer.TEST_AVAILABLBILITY shouldBe Duration.standardDays(60) + } } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessorTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessorTest.kt index ab6c4b178..4401dc012 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessorTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessorTest.kt @@ -94,7 +94,7 @@ class PCRProcessorTest : BaseTest() { instance.pollServer(pcrTest).testResult shouldBe PCR_OR_RAT_PENDING val past60DaysTest = pcrTest.copy( - registeredAt = nowUTC.minus(Duration.standardDays(21)) + registeredAt = nowUTC.minus(Duration.standardDays(61)) ) instance.pollServer(past60DaysTest).testResult shouldBe PCR_REDEEMED diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RapidAntigenProcessorTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RapidAntigenProcessorTest.kt index 3cd6913d9..b3287063e 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RapidAntigenProcessorTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RapidAntigenProcessorTest.kt @@ -75,7 +75,7 @@ class RapidAntigenProcessorTest : BaseTest() { instance.pollServer(raTest).testResult shouldBe PCR_OR_RAT_PENDING val past60DaysTest = raTest.copy( - registeredAt = nowUTC.minus(Duration.standardDays(21)) + registeredAt = nowUTC.minus(Duration.standardDays(61)) ) instance.pollServer(past60DaysTest).testResult shouldBe RAT_REDEEMED diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/worker/BackgroundConstantsTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/worker/BackgroundConstantsTest.kt index c932ef5a2..c354d0634 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/worker/BackgroundConstantsTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/worker/BackgroundConstantsTest.kt @@ -9,7 +9,6 @@ class BackgroundConstantsTest { fun allBackgroundConstants() { Assert.assertEquals(BackgroundConstants.KIND_DELAY, 1L) Assert.assertEquals(BackgroundConstants.WORKER_RETRY_COUNT_THRESHOLD, 2) - Assert.assertEquals(BackgroundConstants.POLLING_VALIDITY_MAX_DAYS, 21) Assert.assertEquals(BackgroundConstants.BACKOFF_INITIAL_DELAY, 8L) } } -- GitLab