From 5f13975583b7a55b56e829bb74ad1e5497bf5ca8 Mon Sep 17 00:00:00 2001 From: mh- Date: Sat, 20 Jun 2020 12:58:39 +0200 Subject: [PATCH 1/2] Reverse order of Transmission Risk Levels used for Diagnosis Keys Upload (closes #678) (#679) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Reverse order of the "Transmission Risk Levels" profile for Diagnosis Keys upload Also added test for ProtoFormatConverterExtensions.kt * Reverse order of the "Transmission Risk Levels" profile for Diagnosis Keys upload Small adjustments: 1) Use compareByDescending instead of compareBy and asReversed(); 2) leave the list for upload in a reversed chronological order, just like in the iOS app; 3) add sorting to the test to keep the desired values in the test readable in chronological order Co-authored-by: Hee Tatt Ooi Co-authored-by: Jakob Möller Co-authored-by: harambasicluka <64483219+harambasicluka@users.noreply.github.com> --- .../util/ProtoFormatConverterExtensions.kt | 6 +- .../ProtoFormatConverterExtensionsTest.kt | 124 ++++++++++++++++++ 2 files changed, 127 insertions(+), 3 deletions(-) create mode 100644 Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/ProtoFormatConverterExtensionsTest.kt diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ProtoFormatConverterExtensions.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ProtoFormatConverterExtensions.kt index d0c657bb9ee..b7597b2cafa 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ProtoFormatConverterExtensions.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ProtoFormatConverterExtensions.kt @@ -30,12 +30,12 @@ object ProtoFormatConverterExtensions { private const val MAXIMUM_KEYS = 14 fun List.limitKeyCount() = - this.sortedWith(compareBy { it.rollingStartIntervalNumber }).asReversed().take(MAXIMUM_KEYS) + this.sortedWith(compareByDescending { it.rollingStartIntervalNumber }).take(MAXIMUM_KEYS) fun List.transformKeyHistoryToExternalFormat() = - this.sortedWith(compareBy { it.rollingStartIntervalNumber }) + this.sortedWith(compareByDescending { it.rollingStartIntervalNumber }) .mapIndexed { index, it -> - // The earliest key we receive is from yesterday (i.e. 1 day ago), + // The latest key we receive is from yesterday (i.e. 1 day ago), // thus we need use index+1 val riskValue = if (index + 1 <= DEFAULT_TRANSMISSION_RISK_VECTOR.lastIndex) diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/ProtoFormatConverterExtensionsTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/ProtoFormatConverterExtensionsTest.kt new file mode 100644 index 00000000000..9ffe27e56ca --- /dev/null +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/ProtoFormatConverterExtensionsTest.kt @@ -0,0 +1,124 @@ +package de.rki.coronawarnapp.util + +import com.google.android.gms.nearby.exposurenotification.TemporaryExposureKey +import de.rki.coronawarnapp.util.ProtoFormatConverterExtensions.transformKeyHistoryToExternalFormat +import org.hamcrest.CoreMatchers +import org.hamcrest.MatcherAssert +import org.junit.Test + +private const val DEFAULT_TRANSMISSION_RISK_LEVEL = 1 +private const val TRANSMISSION_RISK_DAY_0 = 5 +private const val TRANSMISSION_RISK_DAY_1 = 6 +private const val TRANSMISSION_RISK_DAY_2 = 8 +private const val TRANSMISSION_RISK_DAY_3 = 8 +private const val TRANSMISSION_RISK_DAY_4 = 8 +private const val TRANSMISSION_RISK_DAY_5 = 5 +private const val TRANSMISSION_RISK_DAY_6 = 3 +private const val TRANSMISSION_RISK_DAY_7 = 1 + +class ProtoFormatConverterExtensionsTest { + + @Test + fun areTransmissionRiskLevelsCorrectlyAssigned() { + + val key1 = byteArrayOf( + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f + ) + + val diagnosisKeyList = mutableListOf() + val numKeys = 13 + for (pos in 0 until numKeys) { + diagnosisKeyList.add( + TemporaryExposureKey.TemporaryExposureKeyBuilder() + .setKeyData(key1) + .setRollingStartIntervalNumber(pos * 144) + .setRollingPeriod(144) + .setTransmissionRiskLevel(0) + .build() + ) + } + + val transformedKeyList = diagnosisKeyList.transformKeyHistoryToExternalFormat() + .sortedWith(compareBy { it.rollingStartIntervalNumber }) + + MatcherAssert.assertThat( + transformedKeyList.size, + CoreMatchers.equalTo(numKeys) + ) + + val correctRiskLevels = arrayOf( + DEFAULT_TRANSMISSION_RISK_LEVEL, + DEFAULT_TRANSMISSION_RISK_LEVEL, + DEFAULT_TRANSMISSION_RISK_LEVEL, + DEFAULT_TRANSMISSION_RISK_LEVEL, + DEFAULT_TRANSMISSION_RISK_LEVEL, + DEFAULT_TRANSMISSION_RISK_LEVEL, + TRANSMISSION_RISK_DAY_7, + TRANSMISSION_RISK_DAY_6, + TRANSMISSION_RISK_DAY_5, + TRANSMISSION_RISK_DAY_4, + TRANSMISSION_RISK_DAY_3, + TRANSMISSION_RISK_DAY_2, + TRANSMISSION_RISK_DAY_1 + ) + + for (pos in 0 until numKeys) { + val key = transformedKeyList[pos] + MatcherAssert.assertThat( + key.transmissionRiskLevel, + CoreMatchers.equalTo(correctRiskLevels[pos]) + ) + MatcherAssert.assertThat( + key.rollingStartIntervalNumber, + CoreMatchers.equalTo(pos * 144) + ) + } + } + + @Test + fun areTransmissionRiskLevelsCorrectlyAssignedWithOnlyOneKey() { + + val key1 = byteArrayOf( + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f + ) + + val diagnosisKeyList = mutableListOf() + val numKeys = 1 + for (pos in 0 until numKeys) { + diagnosisKeyList.add( + TemporaryExposureKey.TemporaryExposureKeyBuilder() + .setKeyData(key1) + .setRollingStartIntervalNumber(pos * 144) + .setRollingPeriod(144) + .setTransmissionRiskLevel(0) + .build() + ) + } + + val transformedKeyList = diagnosisKeyList.transformKeyHistoryToExternalFormat() + .sortedWith(compareBy { it.rollingStartIntervalNumber }) + + MatcherAssert.assertThat( + transformedKeyList.size, + CoreMatchers.equalTo(numKeys) + ) + + val correctRiskLevels = arrayOf( + TRANSMISSION_RISK_DAY_1 + ) + + for (pos in 0 until numKeys) { + val key = transformedKeyList[pos] + MatcherAssert.assertThat( + key.transmissionRiskLevel, + CoreMatchers.equalTo(correctRiskLevels[pos]) + ) + MatcherAssert.assertThat( + key.rollingStartIntervalNumber, + CoreMatchers.equalTo(pos * 144) + ) + } + } +} From 4906bd3b16959b1bca336c081a3718ac06f928c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20M=C3=B6ller?= Date: Sat, 20 Jun 2020 13:13:58 +0200 Subject: [PATCH 2/2] 1.0.4 Version Bump (#686) Signed-off-by: d067928 --- Corona-Warn-App/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Corona-Warn-App/build.gradle b/Corona-Warn-App/build.gradle index d2613856d8e..fbc02d5923a 100644 --- a/Corona-Warn-App/build.gradle +++ b/Corona-Warn-App/build.gradle @@ -33,8 +33,8 @@ android { applicationId 'de.rki.coronawarnapp' minSdkVersion 23 targetSdkVersion 29 - versionCode 30 - versionName "1.0.3" + versionCode 31 + versionName "1.0.4" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" buildConfigField "String", "DOWNLOAD_CDN_URL", "\"$DOWNLOAD_CDN_URL\""