From d5de4bde0f396799e376a34a180ab266890b9257 Mon Sep 17 00:00:00 2001 From: sozinov Date: Fri, 31 Jul 2026 16:01:55 +0300 Subject: [PATCH 1/2] MOBILE-281: Replace deviceUUID with MD5 target hash in monitoring logs --- .../inapp/data/mapper/InAppMapper.kt | 4 +- .../operation/response/InAppConfigResponse.kt | 8 +-- .../data/validators/MonitoringValidator.kt | 6 +- .../managers/LogRequestDataManagerImpl.kt | 10 ++- .../monitoring/domain/models/LogRequest.kt | 2 +- ...ingMobileConfigSerializationManagerTest.kt | 12 +++- .../mobile_sdk/monitoring/LogRequestStub.kt | 4 +- .../monitoring/MonitoringValidatorTest.kt | 30 ++++----- .../managers/LogRequestDataManagerImplTest.kt | 66 +++++++++++++++++-- .../Config/ConfigABTestsError.json | 4 +- .../Config/ConfigABTestsOneElementError.json | 4 +- .../ConfigABTestsOneElementTypeError.json | 4 +- .../Config/ConfigABTestsTypeError.json | 4 +- .../Config/ConfigInAppsError.json | 4 +- .../Config/ConfigInAppsTypeError.json | 4 +- .../Config/ConfigMonitoringError.json | 4 +- .../Config/ConfigSettingsError.json | 4 +- .../Config/ConfigSettingsTypeError.json | 4 +- ...igWithSettingsABTestsMonitoringInapps.json | 4 +- ...igWithSettingsABTestsMonitoringInapps.json | 4 +- .../Monitoring/MonitoringConfig.json | 4 +- .../MonitoringLogsElementsMixedError.json | 4 +- .../Monitoring/MonitoringLogsError.json | 4 +- .../MonitoringLogsOldDeviceUuidFormat.json | 16 +++++ .../MonitoringLogsOneElementError.json | 4 +- .../MonitoringLogsOneElementTypeError.json | 4 +- .../MonitoringLogsTwoElementsError.json | 6 +- .../MonitoringLogsTwoElementsTypeError.json | 4 +- 28 files changed, 162 insertions(+), 70 deletions(-) create mode 100644 sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsOldDeviceUuidFormat.json diff --git a/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/mapper/InAppMapper.kt b/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/mapper/InAppMapper.kt index 35715f30c..8346a469a 100644 --- a/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/mapper/InAppMapper.kt +++ b/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/mapper/InAppMapper.kt @@ -73,7 +73,7 @@ internal class InAppMapper { ): LogRequestDto { return LogRequestDto( requestId = logRequestDtoBlank.requestId, - deviceId = logRequestDtoBlank.deviceId, + target = logRequestDtoBlank.target!!, from = logRequestDtoBlank.from, to = logRequestDtoBlank.to ) @@ -311,7 +311,7 @@ internal class InAppMapper { monitoring = inAppConfigResponse.monitoring?.map { LogRequest( requestId = it.requestId, - deviceId = it.deviceId, + target = it.target, from = it.from.convertToZonedDateTime(), to = it.to.convertToZonedDateTime() ) diff --git a/sdk/src/main/java/cloud/mindbox/mobile_sdk/models/operation/response/InAppConfigResponse.kt b/sdk/src/main/java/cloud/mindbox/mobile_sdk/models/operation/response/InAppConfigResponse.kt index 0a1ad6f6c..e0f5da24c 100644 --- a/sdk/src/main/java/cloud/mindbox/mobile_sdk/models/operation/response/InAppConfigResponse.kt +++ b/sdk/src/main/java/cloud/mindbox/mobile_sdk/models/operation/response/InAppConfigResponse.kt @@ -123,8 +123,8 @@ internal data class InappSettingsDto( internal data class LogRequestDto( @SerializedName("requestId") val requestId: String, - @SerializedName("deviceUUID") - val deviceId: String, + @SerializedName("target") + val target: String, @SerializedName("from") val from: String, @SerializedName("to") @@ -204,8 +204,8 @@ internal data class MonitoringDto( internal data class LogRequestDtoBlank( @SerializedName("requestId") val requestId: String, - @SerializedName("deviceUUID") - val deviceId: String, + @SerializedName("target") + val target: String?, @SerializedName("from") val from: String, @SerializedName("to") diff --git a/sdk/src/main/java/cloud/mindbox/mobile_sdk/monitoring/data/validators/MonitoringValidator.kt b/sdk/src/main/java/cloud/mindbox/mobile_sdk/monitoring/data/validators/MonitoringValidator.kt index 410fd4180..a3ad816ce 100644 --- a/sdk/src/main/java/cloud/mindbox/mobile_sdk/monitoring/data/validators/MonitoringValidator.kt +++ b/sdk/src/main/java/cloud/mindbox/mobile_sdk/monitoring/data/validators/MonitoringValidator.kt @@ -11,7 +11,7 @@ import org.threeten.bp.format.DateTimeFormatter internal class MonitoringValidator { fun validateLogRequestDtoBlank(logRequest: LogRequestDtoBlank): Boolean { - return validateRequestId(logRequest) && validateDeviceId(logRequest) && validateFrom( + return validateRequestId(logRequest) && validateTarget(logRequest) && validateFrom( logRequest ) && validateTo(logRequest) } @@ -20,8 +20,8 @@ internal class MonitoringValidator { return logRequest.requestId.isNullOrBlank().not() } - private fun validateDeviceId(logRequest: LogRequestDtoBlank): Boolean { - return logRequest.deviceId.isNullOrBlank().not() + private fun validateTarget(logRequest: LogRequestDtoBlank): Boolean { + return logRequest.target.isNullOrBlank().not() } private fun validateFrom(logRequest: LogRequestDtoBlank): Boolean { diff --git a/sdk/src/main/java/cloud/mindbox/mobile_sdk/monitoring/domain/managers/LogRequestDataManagerImpl.kt b/sdk/src/main/java/cloud/mindbox/mobile_sdk/monitoring/domain/managers/LogRequestDataManagerImpl.kt index a99641433..696300f66 100644 --- a/sdk/src/main/java/cloud/mindbox/mobile_sdk/monitoring/domain/managers/LogRequestDataManagerImpl.kt +++ b/sdk/src/main/java/cloud/mindbox/mobile_sdk/monitoring/domain/managers/LogRequestDataManagerImpl.kt @@ -3,13 +3,21 @@ package cloud.mindbox.mobile_sdk.monitoring.domain.managers import cloud.mindbox.mobile_sdk.monitoring.domain.interfaces.LogRequestDataManager import cloud.mindbox.mobile_sdk.monitoring.domain.models.LogRequest import cloud.mindbox.mobile_sdk.repository.MindboxPreferences +import java.security.MessageDigest + +internal fun String.md5(): String = MessageDigest.getInstance("MD5") + .digest(lowercase().toByteArray(Charsets.UTF_8)) + .joinToString(separator = "") { byte -> "%02x".format(byte) } internal class LogRequestDataManagerImpl : LogRequestDataManager { override fun filterCurrentDeviceUuidLogs(logs: List?): List { if (logs.isNullOrEmpty()) return emptyList() + val deviceUuid = MindboxPreferences.deviceUuid + if (deviceUuid.isBlank()) return emptyList() + val deviceUuidHash = deviceUuid.md5() return logs.filter { logRequest -> - logRequest.deviceId == MindboxPreferences.deviceUuid + logRequest.target.equals(deviceUuidHash, ignoreCase = true) } } diff --git a/sdk/src/main/java/cloud/mindbox/mobile_sdk/monitoring/domain/models/LogRequest.kt b/sdk/src/main/java/cloud/mindbox/mobile_sdk/monitoring/domain/models/LogRequest.kt index a6d9cfe70..9fc48bdc0 100644 --- a/sdk/src/main/java/cloud/mindbox/mobile_sdk/monitoring/domain/models/LogRequest.kt +++ b/sdk/src/main/java/cloud/mindbox/mobile_sdk/monitoring/domain/models/LogRequest.kt @@ -4,7 +4,7 @@ import org.threeten.bp.ZonedDateTime internal data class LogRequest( val requestId: String, - val deviceId: String, + val target: String, val from: ZonedDateTime, val to: ZonedDateTime, ) diff --git a/sdk/src/test/java/cloud/mindbox/mobile_sdk/inapp/data/managers/serialization/MonitoringMobileConfigSerializationManagerTest.kt b/sdk/src/test/java/cloud/mindbox/mobile_sdk/inapp/data/managers/serialization/MonitoringMobileConfigSerializationManagerTest.kt index a728981cb..eaf6fbb0d 100644 --- a/sdk/src/test/java/cloud/mindbox/mobile_sdk/inapp/data/managers/serialization/MonitoringMobileConfigSerializationManagerTest.kt +++ b/sdk/src/test/java/cloud/mindbox/mobile_sdk/inapp/data/managers/serialization/MonitoringMobileConfigSerializationManagerTest.kt @@ -38,6 +38,16 @@ class MonitoringMobileConfigSerializationManagerTest { assertEquals(2, config.logs?.size) } + @Test + fun monitoringConfig_withOldDeviceUuidFormat_shouldParseWithNullTarget() { + val json = getJson("ConfigParsing/Monitoring/MonitoringLogsOldDeviceUuidFormat.json") + val config = manager.deserializeMonitoring(json)!! + + assertEquals(2, config.logs?.size) + assertNull(config.logs?.first()?.target) + assertEquals("248eccb79da2bbca61c133c59e4a1516", config.logs?.last()?.target) + } + @Test fun monitoringConfig_withLogsError_shouldSetMonitoringToNull() { // Key is `logsTests` instead of `logs` @@ -78,7 +88,7 @@ class MonitoringMobileConfigSerializationManagerTest { @Test fun monitoringConfig_withLogsTwoElementsError_shouldParseSuccessfullyRemainsElements() { - // Key is `request` instead `requestId` and key is `device` instead of `deviceUUID` + // Key is `request` instead of `requestId` and key is `toTest` instead of `to` mockkObject(MindboxLoggerImpl) val json = getJson("ConfigParsing/Monitoring/MonitoringLogsTwoElementsError.json") diff --git a/sdk/src/test/java/cloud/mindbox/mobile_sdk/monitoring/LogRequestStub.kt b/sdk/src/test/java/cloud/mindbox/mobile_sdk/monitoring/LogRequestStub.kt index feb0f2f40..282ff07be 100644 --- a/sdk/src/test/java/cloud/mindbox/mobile_sdk/monitoring/LogRequestStub.kt +++ b/sdk/src/test/java/cloud/mindbox/mobile_sdk/monitoring/LogRequestStub.kt @@ -8,14 +8,14 @@ internal class LogRequestStub { companion object { fun getLogRequest(): LogRequest = LogRequest( requestId = "", - deviceId = "", + target = "", from = ZonedDateTime.now(), to = ZonedDateTime.now() ) fun getLogRequestDtoBlank(): LogRequestDtoBlank = LogRequestDtoBlank( requestId = "", - deviceId = "", + target = "", from = "", to = "" ) diff --git a/sdk/src/test/java/cloud/mindbox/mobile_sdk/monitoring/MonitoringValidatorTest.kt b/sdk/src/test/java/cloud/mindbox/mobile_sdk/monitoring/MonitoringValidatorTest.kt index b5fa07a8f..a754f6f67 100644 --- a/sdk/src/test/java/cloud/mindbox/mobile_sdk/monitoring/MonitoringValidatorTest.kt +++ b/sdk/src/test/java/cloud/mindbox/mobile_sdk/monitoring/MonitoringValidatorTest.kt @@ -22,7 +22,7 @@ internal class MonitoringValidatorTest { assertTrue( monitoringValidator.validateLogRequestDtoBlank( LogRequestStub.getLogRequestDtoBlank() - .copy(requestId = "123", deviceId = "abvc", from = "2023-01-15T00:00:00", to = "2023-01-30T00:00:00") + .copy(requestId = "123", target = "334db432a8f72f64a89664682f7bc032", from = "2023-01-15T00:00:00", to = "2023-01-30T00:00:00") ) ) } @@ -32,7 +32,7 @@ internal class MonitoringValidatorTest { assertFalse( monitoringValidator.validateLogRequestDtoBlank( LogRequestStub.getLogRequestDtoBlank() - .copy(requestId = "", deviceId = "abvc", from = "2023-01-15T00:00:00", to = "2023-01-30T00:00:00") + .copy(requestId = "", target = "334db432a8f72f64a89664682f7bc032", from = "2023-01-15T00:00:00", to = "2023-01-30T00:00:00") ) ) } @@ -42,27 +42,27 @@ internal class MonitoringValidatorTest { assertFalse( monitoringValidator.validateLogRequestDtoBlank( LogRequestStub.getLogRequestDtoBlank() - .copy(requestId = "", deviceId = "abvc", from = "2023-01-15T00:00:00", to = "2023-01-30T00:00:00") + .copy(requestId = "", target = "334db432a8f72f64a89664682f7bc032", from = "2023-01-15T00:00:00", to = "2023-01-30T00:00:00") ) ) } @Test - fun `monitoring validation deviceId error empty string`() { + fun `monitoring validation target error empty string`() { assertFalse( monitoringValidator.validateLogRequestDtoBlank( LogRequestStub.getLogRequestDtoBlank() - .copy(requestId = "", deviceId = "", from = "2023-01-15T00:00:00", to = "2023-01-30T00:00:00") + .copy(requestId = "asd", target = "", from = "2023-01-15T00:00:00", to = "2023-01-30T00:00:00") ) ) } @Test - fun `monitoring validation deviceId error null`() { + fun `monitoring validation target error null`() { assertFalse( monitoringValidator.validateLogRequestDtoBlank( LogRequestStub.getLogRequestDtoBlank() - .copy(requestId = "asd", deviceId = "", from = "2023-01-15T00:00:00", to = "2023-01-30T00:00:00") + .copy(requestId = "asd", target = null, from = "2023-01-15T00:00:00", to = "2023-01-30T00:00:00") ) ) } @@ -72,7 +72,7 @@ internal class MonitoringValidatorTest { assertFalse( monitoringValidator.validateLogRequestDtoBlank( LogRequestStub.getLogRequestDtoBlank() - .copy(requestId = "123", deviceId = "abvc", from = "", to = "2023-01-30T00:00:00") + .copy(requestId = "123", target = "334db432a8f72f64a89664682f7bc032", from = "", to = "2023-01-30T00:00:00") ) ) } @@ -82,7 +82,7 @@ internal class MonitoringValidatorTest { assertFalse( monitoringValidator.validateLogRequestDtoBlank( LogRequestStub.getLogRequestDtoBlank() - .copy(requestId = "123", deviceId = "abvc", from = "", to = "2023-01-30T00:00:00") + .copy(requestId = "123", target = "334db432a8f72f64a89664682f7bc032", from = "", to = "2023-01-30T00:00:00") ) ) } @@ -92,7 +92,7 @@ internal class MonitoringValidatorTest { assertFalse( monitoringValidator.validateLogRequestDtoBlank( LogRequestStub.getLogRequestDtoBlank() - .copy(requestId = "123", deviceId = "abvc", from = "null", to = "2023-01-30T00:00:00") + .copy(requestId = "123", target = "334db432a8f72f64a89664682f7bc032", from = "null", to = "2023-01-30T00:00:00") ) ) } @@ -102,7 +102,7 @@ internal class MonitoringValidatorTest { assertFalse( monitoringValidator.validateLogRequestDtoBlank( LogRequestStub.getLogRequestDtoBlank() - .copy(requestId = "asd", deviceId = "abvc", from = "2023-01-15T00:00:00", to = "") + .copy(requestId = "asd", target = "334db432a8f72f64a89664682f7bc032", from = "2023-01-15T00:00:00", to = "") ) ) } @@ -112,7 +112,7 @@ internal class MonitoringValidatorTest { assertFalse( monitoringValidator.validateLogRequestDtoBlank( LogRequestStub.getLogRequestDtoBlank() - .copy(requestId = "asd", deviceId = "abvc", from = "2023-01-15T00:00:00", to = "") + .copy(requestId = "asd", target = "334db432a8f72f64a89664682f7bc032", from = "2023-01-15T00:00:00", to = "") ) ) } @@ -122,7 +122,7 @@ internal class MonitoringValidatorTest { assertFalse( monitoringValidator.validateLogRequestDtoBlank( LogRequestStub.getLogRequestDtoBlank() - .copy(requestId = "asd", deviceId = "abvc", from = "2023-01-15T00:00:00", to = "abc") + .copy(requestId = "asd", target = "334db432a8f72f64a89664682f7bc032", from = "2023-01-15T00:00:00", to = "abc") ) ) } @@ -132,7 +132,7 @@ internal class MonitoringValidatorTest { assertFalse( monitoringValidator.validateLogRequestDtoBlank( LogRequestStub.getLogRequestDtoBlank() - .copy(requestId = "asd", deviceId = "abvc", from = "1970-01-01T00:00:00", to = "2023-01-15T00:00:00") + .copy(requestId = "asd", target = "334db432a8f72f64a89664682f7bc032", from = "1970-01-01T00:00:00", to = "2023-01-15T00:00:00") ) ) } @@ -142,7 +142,7 @@ internal class MonitoringValidatorTest { assertFalse( monitoringValidator.validateLogRequestDtoBlank( LogRequestStub.getLogRequestDtoBlank() - .copy(requestId = "asd", deviceId = "abvc", from = "2023-01-15T00:00:00", to = "1970-01-01T00:00:00") + .copy(requestId = "asd", target = "334db432a8f72f64a89664682f7bc032", from = "2023-01-15T00:00:00", to = "1970-01-01T00:00:00") ) ) } diff --git a/sdk/src/test/java/cloud/mindbox/mobile_sdk/monitoring/domain/managers/LogRequestDataManagerImplTest.kt b/sdk/src/test/java/cloud/mindbox/mobile_sdk/monitoring/domain/managers/LogRequestDataManagerImplTest.kt index 734200aac..4f812874f 100644 --- a/sdk/src/test/java/cloud/mindbox/mobile_sdk/monitoring/domain/managers/LogRequestDataManagerImplTest.kt +++ b/sdk/src/test/java/cloud/mindbox/mobile_sdk/monitoring/domain/managers/LogRequestDataManagerImplTest.kt @@ -30,7 +30,7 @@ internal class LogRequestDataManagerImplTest { mockkObject(MindboxPreferences) every { MindboxPreferences.deviceUuid - } returns "456" + } returns DEVICE_UUID AndroidThreeTen.init(ApplicationProvider.getApplicationContext()) } @@ -51,11 +51,45 @@ internal class LogRequestDataManagerImplTest { @Test fun `test monitoring checks only current deviceUuid success`() { val testLogRequests = listOf( - LogRequestStub.getLogRequest().copy(deviceId = "456"), - LogRequestStub.getLogRequest().copy(deviceId = "123") + LogRequestStub.getLogRequest().copy(target = DEVICE_UUID_HASH), + LogRequestStub.getLogRequest().copy(target = OTHER_DEVICE_UUID_HASH) ) val actualResult = logRequestDataManager.filterCurrentDeviceUuidLogs(testLogRequests) - assertTrue(actualResult.size == 1 && actualResult.first().deviceId == "456") + assertTrue(actualResult.size == 1 && actualResult.first().target == DEVICE_UUID_HASH) + } + + @Test + fun `test uppercase deviceUuid is lowercased before hashing`() { + every { + MindboxPreferences.deviceUuid + } returns DEVICE_UUID.uppercase() + val testLogRequests = listOf( + LogRequestStub.getLogRequest().copy(target = DEVICE_UUID_HASH) + ) + val actualResult = logRequestDataManager.filterCurrentDeviceUuidLogs(testLogRequests) + assertEquals(1, actualResult.size) + } + + @Test + fun `test target hash comparison is case insensitive`() { + val testLogRequests = listOf( + LogRequestStub.getLogRequest().copy(target = DEVICE_UUID_HASH.uppercase()) + ) + val actualResult = logRequestDataManager.filterCurrentDeviceUuidLogs(testLogRequests) + assertEquals(1, actualResult.size) + } + + @Test + fun `test blank deviceUuid matches nothing`() { + every { + MindboxPreferences.deviceUuid + } returns "" + val testLogRequests = listOf( + LogRequestStub.getLogRequest().copy(target = "d41d8cd98f00b204e9800998ecf8427e"), + LogRequestStub.getLogRequest().copy(target = DEVICE_UUID_HASH) + ) + val actualResult = logRequestDataManager.filterCurrentDeviceUuidLogs(testLogRequests) + assertEquals(emptyList(), actualResult) } @Test @@ -72,4 +106,28 @@ internal class LogRequestDataManagerImplTest { val testHashSet = hashSetOf(processedId) assertFalse(logRequestDataManager.checkRequestIdProcessed(testHashSet, unprocessedId)) } + + @Test + fun `md5 matches shared deviceUUID vectors`() { + val vectors = mapOf( + DEVICE_UUID to DEVICE_UUID_HASH, + "126e6225-3170-4089-a6f0-3d1ed8f64153" to OTHER_DEVICE_UUID_HASH, + "7e570ddf-8270-40a8-a369-b584ff5e9ff0" to "000baa91b37b3c201e3f8604c7845201", + DEVICE_UUID.uppercase() to DEVICE_UUID_HASH, + ) + vectors.forEach { (deviceUuid, expectedTarget) -> + assertEquals(expectedTarget, deviceUuid.md5()) + } + } + + @Test + fun `md5 of empty string is the well-known constant`() { + assertEquals("d41d8cd98f00b204e9800998ecf8427e", "".md5()) + } + + companion object { + private const val DEVICE_UUID = "216e6225-3170-4089-a6f0-3d1ed8f64153" + private const val DEVICE_UUID_HASH = "334db432a8f72f64a89664682f7bc032" + private const val OTHER_DEVICE_UUID_HASH = "248eccb79da2bbca61c133c59e4a1516" + } } diff --git a/sdk/src/test/resources/ConfigParsing/Config/ConfigABTestsError.json b/sdk/src/test/resources/ConfigParsing/Config/ConfigABTestsError.json index da30d8f57..7946ec8c7 100644 --- a/sdk/src/test/resources/ConfigParsing/Config/ConfigABTestsError.json +++ b/sdk/src/test/resources/ConfigParsing/Config/ConfigABTestsError.json @@ -374,13 +374,13 @@ "logs": [ { "requestId": "bb978cd7-ce4c-4239-a5d2-4b7e5d4fb5b9", - "deviceUUID": "216e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "334db432a8f72f64a89664682f7bc032", "from": "2024-02-12T10:00:00", "to": "2024-02-14T20:30:00" }, { "requestId": "8e829a63-a5c3-4e1c-a772-41fd61f8f331", - "deviceUUID": "126e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "248eccb79da2bbca61c133c59e4a1516", "from": "2023-02-10T00:00:00", "to": "2023-03-01T20:30:00" } diff --git a/sdk/src/test/resources/ConfigParsing/Config/ConfigABTestsOneElementError.json b/sdk/src/test/resources/ConfigParsing/Config/ConfigABTestsOneElementError.json index d1c19f241..8ebc81b72 100644 --- a/sdk/src/test/resources/ConfigParsing/Config/ConfigABTestsOneElementError.json +++ b/sdk/src/test/resources/ConfigParsing/Config/ConfigABTestsOneElementError.json @@ -374,13 +374,13 @@ "logs": [ { "requestId": "bb978cd7-ce4c-4239-a5d2-4b7e5d4fb5b9", - "deviceUUID": "216e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "334db432a8f72f64a89664682f7bc032", "from": "2024-02-12T10:00:00", "to": "2024-02-14T20:30:00" }, { "requestId": "8e829a63-a5c3-4e1c-a772-41fd61f8f331", - "deviceUUID": "126e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "248eccb79da2bbca61c133c59e4a1516", "from": "2023-02-10T00:00:00", "to": "2023-03-01T20:30:00" } diff --git a/sdk/src/test/resources/ConfigParsing/Config/ConfigABTestsOneElementTypeError.json b/sdk/src/test/resources/ConfigParsing/Config/ConfigABTestsOneElementTypeError.json index 084b59601..deb429718 100644 --- a/sdk/src/test/resources/ConfigParsing/Config/ConfigABTestsOneElementTypeError.json +++ b/sdk/src/test/resources/ConfigParsing/Config/ConfigABTestsOneElementTypeError.json @@ -345,13 +345,13 @@ "logs": [ { "requestId": "bb978cd7-ce4c-4239-a5d2-4b7e5d4fb5b9", - "deviceUUID": "216e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "334db432a8f72f64a89664682f7bc032", "from": "2024-02-12T10:00:00", "to": "2024-02-14T20:30:00" }, { "requestId": "8e829a63-a5c3-4e1c-a772-41fd61f8f331", - "deviceUUID": "126e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "248eccb79da2bbca61c133c59e4a1516", "from": "2023-02-10T00:00:00", "to": "2023-03-01T20:30:00" } diff --git a/sdk/src/test/resources/ConfigParsing/Config/ConfigABTestsTypeError.json b/sdk/src/test/resources/ConfigParsing/Config/ConfigABTestsTypeError.json index 760413fc7..37e3783ac 100644 --- a/sdk/src/test/resources/ConfigParsing/Config/ConfigABTestsTypeError.json +++ b/sdk/src/test/resources/ConfigParsing/Config/ConfigABTestsTypeError.json @@ -297,13 +297,13 @@ "logs": [ { "requestId": "bb978cd7-ce4c-4239-a5d2-4b7e5d4fb5b9", - "deviceUUID": "216e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "334db432a8f72f64a89664682f7bc032", "from": "2024-02-12T10:00:00", "to": "2024-02-14T20:30:00" }, { "requestId": "8e829a63-a5c3-4e1c-a772-41fd61f8f331", - "deviceUUID": "126e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "248eccb79da2bbca61c133c59e4a1516", "from": "2023-02-10T00:00:00", "to": "2023-03-01T20:30:00" } diff --git a/sdk/src/test/resources/ConfigParsing/Config/ConfigInAppsError.json b/sdk/src/test/resources/ConfigParsing/Config/ConfigInAppsError.json index c0e8fa334..0367f064a 100644 --- a/sdk/src/test/resources/ConfigParsing/Config/ConfigInAppsError.json +++ b/sdk/src/test/resources/ConfigParsing/Config/ConfigInAppsError.json @@ -299,13 +299,13 @@ "logs": [ { "requestId": "bb978cd7-ce4c-4239-a5d2-4b7e5d4fb5b9", - "deviceUUID": "216e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "334db432a8f72f64a89664682f7bc032", "from": "2024-02-12T10:00:00", "to": "2024-02-14T20:30:00" }, { "requestId": "8e829a63-a5c3-4e1c-a772-41fd61f8f331", - "deviceUUID": "126e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "248eccb79da2bbca61c133c59e4a1516", "from": "2023-02-10T00:00:00", "to": "2023-03-01T20:30:00" } diff --git a/sdk/src/test/resources/ConfigParsing/Config/ConfigInAppsTypeError.json b/sdk/src/test/resources/ConfigParsing/Config/ConfigInAppsTypeError.json index 877892ab3..94dc44798 100644 --- a/sdk/src/test/resources/ConfigParsing/Config/ConfigInAppsTypeError.json +++ b/sdk/src/test/resources/ConfigParsing/Config/ConfigInAppsTypeError.json @@ -4,13 +4,13 @@ "logs": [ { "requestId": "bb978cd7-ce4c-4239-a5d2-4b7e5d4fb5b9", - "deviceUUID": "216e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "334db432a8f72f64a89664682f7bc032", "from": "2024-02-12T10:00:00", "to": "2024-02-14T20:30:00" }, { "requestId": "8e829a63-a5c3-4e1c-a772-41fd61f8f331", - "deviceUUID": "126e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "248eccb79da2bbca61c133c59e4a1516", "from": "2023-02-10T00:00:00", "to": "2023-03-01T20:30:00" } diff --git a/sdk/src/test/resources/ConfigParsing/Config/ConfigMonitoringError.json b/sdk/src/test/resources/ConfigParsing/Config/ConfigMonitoringError.json index dbe49607d..606469032 100644 --- a/sdk/src/test/resources/ConfigParsing/Config/ConfigMonitoringError.json +++ b/sdk/src/test/resources/ConfigParsing/Config/ConfigMonitoringError.json @@ -3,13 +3,13 @@ "logs": [ { "requestId": "bb978cd7-ce4c-4239-a5d2-4b7e5d4fb5b9", - "deviceUUID": "216e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "334db432a8f72f64a89664682f7bc032", "from": "2024-02-12T10:00:00", "to": "2024-02-14T20:30:00" }, { "requestId": "8e829a63-a5c3-4e1c-a772-41fd61f8f331", - "deviceUUID": "126e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "248eccb79da2bbca61c133c59e4a1516", "from": "2023-02-10T00:00:00", "to": "2023-03-01T20:30:00" } diff --git a/sdk/src/test/resources/ConfigParsing/Config/ConfigSettingsError.json b/sdk/src/test/resources/ConfigParsing/Config/ConfigSettingsError.json index 193bf6809..4d06e9eeb 100644 --- a/sdk/src/test/resources/ConfigParsing/Config/ConfigSettingsError.json +++ b/sdk/src/test/resources/ConfigParsing/Config/ConfigSettingsError.json @@ -316,13 +316,13 @@ "logs": [ { "requestId": "bb978cd7-ce4c-4239-a5d2-4b7e5d4fb5b9", - "deviceUUID": "216e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "334db432a8f72f64a89664682f7bc032", "from": "2024-02-12T10:00:00", "to": "2024-02-14T20:30:00" }, { "requestId": "8e829a63-a5c3-4e1c-a772-41fd61f8f331", - "deviceUUID": "126e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "248eccb79da2bbca61c133c59e4a1516", "from": "2023-02-10T00:00:00", "to": "2023-03-01T20:30:00" } diff --git a/sdk/src/test/resources/ConfigParsing/Config/ConfigSettingsTypeError.json b/sdk/src/test/resources/ConfigParsing/Config/ConfigSettingsTypeError.json index 54e190a12..8e766c25a 100644 --- a/sdk/src/test/resources/ConfigParsing/Config/ConfigSettingsTypeError.json +++ b/sdk/src/test/resources/ConfigParsing/Config/ConfigSettingsTypeError.json @@ -301,13 +301,13 @@ "logs": [ { "requestId": "bb978cd7-ce4c-4239-a5d2-4b7e5d4fb5b9", - "deviceUUID": "216e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "334db432a8f72f64a89664682f7bc032", "from": "2024-02-12T10:00:00", "to": "2024-02-14T20:30:00" }, { "requestId": "8e829a63-a5c3-4e1c-a772-41fd61f8f331", - "deviceUUID": "126e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "248eccb79da2bbca61c133c59e4a1516", "from": "2023-02-10T00:00:00", "to": "2023-03-01T20:30:00" } diff --git a/sdk/src/test/resources/ConfigParsing/Config/ConfigWithSettingsABTestsMonitoringInapps.json b/sdk/src/test/resources/ConfigParsing/Config/ConfigWithSettingsABTestsMonitoringInapps.json index 597c8d76d..a8075a58d 100644 --- a/sdk/src/test/resources/ConfigParsing/Config/ConfigWithSettingsABTestsMonitoringInapps.json +++ b/sdk/src/test/resources/ConfigParsing/Config/ConfigWithSettingsABTestsMonitoringInapps.json @@ -301,13 +301,13 @@ "logs": [ { "requestId": "bb978cd7-ce4c-4239-a5d2-4b7e5d4fb5b9", - "deviceUUID": "216e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "334db432a8f72f64a89664682f7bc032", "from": "2024-02-12T10:00:00", "to": "2024-02-14T20:30:00" }, { "requestId": "8e829a63-a5c3-4e1c-a772-41fd61f8f331", - "deviceUUID": "126e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "248eccb79da2bbca61c133c59e4a1516", "from": "2023-02-10T00:00:00", "to": "2023-03-01T20:30:00" } diff --git a/sdk/src/test/resources/ConfigParsing/ConfigWithSettingsABTestsMonitoringInapps.json b/sdk/src/test/resources/ConfigParsing/ConfigWithSettingsABTestsMonitoringInapps.json index 045b13cac..6d2f21ded 100644 --- a/sdk/src/test/resources/ConfigParsing/ConfigWithSettingsABTestsMonitoringInapps.json +++ b/sdk/src/test/resources/ConfigParsing/ConfigWithSettingsABTestsMonitoringInapps.json @@ -304,13 +304,13 @@ "logs": [ { "requestId": "bb978cd7-ce4c-4239-a5d2-4b7e5d4fb5b9", - "deviceUUID": "216e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "334db432a8f72f64a89664682f7bc032", "from": "2024-02-12T10:00:00", "to": "2024-02-14T20:30:00" }, { "requestId": "8e829a63-a5c3-4e1c-a772-41fd61f8f331", - "deviceUUID": "126e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "248eccb79da2bbca61c133c59e4a1516", "from": "2023-02-10T00:00:00", "to": "2023-03-01T20:30:00" } diff --git a/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringConfig.json b/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringConfig.json index a9136d529..c792a883f 100644 --- a/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringConfig.json +++ b/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringConfig.json @@ -2,13 +2,13 @@ "logs": [ { "requestId": "bb978cd7-ce4c-4239-a5d2-4b7e5d4fb5b9", - "deviceUUID": "216e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "334db432a8f72f64a89664682f7bc032", "from": "2024-02-12T10:00:00", "to": "2024-02-14T20:30:00" }, { "requestId": "8e829a63-a5c3-4e1c-a772-41fd61f8f331", - "deviceUUID": "126e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "248eccb79da2bbca61c133c59e4a1516", "from": "2023-02-10T00:00:00", "to": "2023-03-01T20:30:00" } diff --git a/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsElementsMixedError.json b/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsElementsMixedError.json index 373fa1e75..77cb99b6e 100644 --- a/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsElementsMixedError.json +++ b/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsElementsMixedError.json @@ -2,13 +2,13 @@ "logs": [ { "requestId": 1, - "deviceUUID": "216e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "334db432a8f72f64a89664682f7bc032", "from": "2024-02-12T10:00:00", "to": "2024-02-14T20:30:00" }, { "requestId": "8e829a63-a5c3-4e1c-a772-41fd61f8f331", - "deviceUUID": "126e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "248eccb79da2bbca61c133c59e4a1516", "fromTest": "2023-02-10T00:00:00", "to": "2023-03-01T20:30:00" } diff --git a/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsError.json b/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsError.json index 9213c9c13..2b0217fa0 100644 --- a/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsError.json +++ b/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsError.json @@ -6,13 +6,13 @@ { "requestId": "bb978cd7-ce4c-4239-a5d2-4b7e5d4fb5b9", - "deviceUUID": "216e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "334db432a8f72f64a89664682f7bc032", "from": "2024-02-12T10:00:00", "to": "2024-02-14T20:30:00" }, { "requestId": "8e829a63-a5c3-4e1c-a772-41fd61f8f331", - "deviceUUID": "126e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "248eccb79da2bbca61c133c59e4a1516", "from": "2023-02-10T00:00:00", "to": "2023-03-01T20:30:00" } diff --git a/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsOldDeviceUuidFormat.json b/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsOldDeviceUuidFormat.json new file mode 100644 index 000000000..e60377b08 --- /dev/null +++ b/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsOldDeviceUuidFormat.json @@ -0,0 +1,16 @@ +{ + "logs": [ + { + "requestId": "bb978cd7-ce4c-4239-a5d2-4b7e5d4fb5b9", + "deviceUUID": "216e6225-3170-4089-a6f0-3d1ed8f64153", + "from": "2024-02-12T10:00:00", + "to": "2024-02-14T20:30:00" + }, + { + "requestId": "8e829a63-a5c3-4e1c-a772-41fd61f8f331", + "target": "248eccb79da2bbca61c133c59e4a1516", + "from": "2023-02-10T00:00:00", + "to": "2023-03-01T20:30:00" + } + ] +} diff --git a/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsOneElementError.json b/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsOneElementError.json index e263115b2..4559c93d4 100644 --- a/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsOneElementError.json +++ b/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsOneElementError.json @@ -6,13 +6,13 @@ "request": "bb978cd7-ce4c-4239-a5d2-4b7e5d4fb5b9", - "deviceUUID": "216e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "334db432a8f72f64a89664682f7bc032", "from": "2024-02-12T10:00:00", "to": "2024-02-14T20:30:00" }, { "requestId": "8e829a63-a5c3-4e1c-a772-41fd61f8f331", - "deviceUUID": "126e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "248eccb79da2bbca61c133c59e4a1516", "from": "2023-02-10T00:00:00", "to": "2023-03-01T20:30:00" } diff --git a/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsOneElementTypeError.json b/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsOneElementTypeError.json index 083079863..341cbb0aa 100644 --- a/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsOneElementTypeError.json +++ b/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsOneElementTypeError.json @@ -6,13 +6,13 @@ "requestId": 1, - "deviceUUID": "216e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "334db432a8f72f64a89664682f7bc032", "from": "2024-02-12T10:00:00", "to": "2024-02-14T20:30:00" }, { "requestId": "8e829a63-a5c3-4e1c-a772-41fd61f8f331", - "deviceUUID": "126e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "248eccb79da2bbca61c133c59e4a1516", "from": "2023-02-10T00:00:00", "to": "2023-03-01T20:30:00" } diff --git a/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsTwoElementsError.json b/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsTwoElementsError.json index a9e929838..c45fd61b5 100644 --- a/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsTwoElementsError.json +++ b/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsTwoElementsError.json @@ -2,15 +2,15 @@ "logs": [ { "request": "bb978cd7-ce4c-4239-a5d2-4b7e5d4fb5b9", - "deviceUUID": "216e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "334db432a8f72f64a89664682f7bc032", "from": "2024-02-12T10:00:00", "to": "2024-02-14T20:30:00" }, { "requestId": "8e829a63-a5c3-4e1c-a772-41fd61f8f331", - "device": "126e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "248eccb79da2bbca61c133c59e4a1516", "from": "2023-02-10T00:00:00", - "to": "2023-03-01T20:30:00" + "toTest": "2023-03-01T20:30:00" } ] } diff --git a/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsTwoElementsTypeError.json b/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsTwoElementsTypeError.json index 88baa9808..ad67dc5d5 100644 --- a/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsTwoElementsTypeError.json +++ b/sdk/src/test/resources/ConfigParsing/Monitoring/MonitoringLogsTwoElementsTypeError.json @@ -2,13 +2,13 @@ "logs": [ { "requestId": 1, - "deviceUUID": "216e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "334db432a8f72f64a89664682f7bc032", "from": "2024-02-12T10:00:00", "to": "2024-02-14T20:30:00" }, { "requestId": "8e829a63-a5c3-4e1c-a772-41fd61f8f331", - "deviceUUID": "126e6225-3170-4089-a6f0-3d1ed8f64153", + "target": "248eccb79da2bbca61c133c59e4a1516", "from": { }, "to": "2023-03-01T20:30:00" } From f1e689c017f480055746da763dd7fa4ee1aecb23 Mon Sep 17 00:00:00 2001 From: sozinov Date: Fri, 31 Jul 2026 16:36:30 +0300 Subject: [PATCH 2/2] MOBILE-281: use value class for MD5 String --- .../inapp/data/mapper/InAppMapper.kt | 3 ++- .../managers/LogRequestDataManagerImpl.kt | 10 +++------- .../monitoring/domain/models/LogRequest.kt | 17 ++++++++++++++++- .../mobile_sdk/monitoring/LogRequestStub.kt | 3 ++- .../managers/LogRequestDataManagerImplTest.kt | 19 ++++++++++--------- 5 files changed, 33 insertions(+), 19 deletions(-) diff --git a/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/mapper/InAppMapper.kt b/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/mapper/InAppMapper.kt index 8346a469a..c0cc1ccdb 100644 --- a/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/mapper/InAppMapper.kt +++ b/sdk/src/main/java/cloud/mindbox/mobile_sdk/inapp/data/mapper/InAppMapper.kt @@ -19,6 +19,7 @@ import cloud.mindbox.mobile_sdk.models.operation.response.FrequencyDto.Frequency import cloud.mindbox.mobile_sdk.models.operation.response.FrequencyDto.FrequencyOnceDto.Companion.FREQUENCY_KIND_SESSION import cloud.mindbox.mobile_sdk.models.toMilliseconds import cloud.mindbox.mobile_sdk.monitoring.domain.models.LogRequest +import cloud.mindbox.mobile_sdk.monitoring.domain.models.Md5Hash import kotlin.math.roundToInt internal class InAppMapper { @@ -311,7 +312,7 @@ internal class InAppMapper { monitoring = inAppConfigResponse.monitoring?.map { LogRequest( requestId = it.requestId, - target = it.target, + target = Md5Hash.ofHex(it.target), from = it.from.convertToZonedDateTime(), to = it.to.convertToZonedDateTime() ) diff --git a/sdk/src/main/java/cloud/mindbox/mobile_sdk/monitoring/domain/managers/LogRequestDataManagerImpl.kt b/sdk/src/main/java/cloud/mindbox/mobile_sdk/monitoring/domain/managers/LogRequestDataManagerImpl.kt index 696300f66..62db4092f 100644 --- a/sdk/src/main/java/cloud/mindbox/mobile_sdk/monitoring/domain/managers/LogRequestDataManagerImpl.kt +++ b/sdk/src/main/java/cloud/mindbox/mobile_sdk/monitoring/domain/managers/LogRequestDataManagerImpl.kt @@ -2,12 +2,8 @@ package cloud.mindbox.mobile_sdk.monitoring.domain.managers import cloud.mindbox.mobile_sdk.monitoring.domain.interfaces.LogRequestDataManager import cloud.mindbox.mobile_sdk.monitoring.domain.models.LogRequest +import cloud.mindbox.mobile_sdk.monitoring.domain.models.Md5Hash import cloud.mindbox.mobile_sdk.repository.MindboxPreferences -import java.security.MessageDigest - -internal fun String.md5(): String = MessageDigest.getInstance("MD5") - .digest(lowercase().toByteArray(Charsets.UTF_8)) - .joinToString(separator = "") { byte -> "%02x".format(byte) } internal class LogRequestDataManagerImpl : LogRequestDataManager { @@ -15,9 +11,9 @@ internal class LogRequestDataManagerImpl : LogRequestDataManager { if (logs.isNullOrEmpty()) return emptyList() val deviceUuid = MindboxPreferences.deviceUuid if (deviceUuid.isBlank()) return emptyList() - val deviceUuidHash = deviceUuid.md5() + val deviceUuidHash = Md5Hash.ofDeviceUuid(deviceUuid) return logs.filter { logRequest -> - logRequest.target.equals(deviceUuidHash, ignoreCase = true) + logRequest.target == deviceUuidHash } } diff --git a/sdk/src/main/java/cloud/mindbox/mobile_sdk/monitoring/domain/models/LogRequest.kt b/sdk/src/main/java/cloud/mindbox/mobile_sdk/monitoring/domain/models/LogRequest.kt index 9fc48bdc0..4cdccc321 100644 --- a/sdk/src/main/java/cloud/mindbox/mobile_sdk/monitoring/domain/models/LogRequest.kt +++ b/sdk/src/main/java/cloud/mindbox/mobile_sdk/monitoring/domain/models/LogRequest.kt @@ -1,10 +1,25 @@ package cloud.mindbox.mobile_sdk.monitoring.domain.models import org.threeten.bp.ZonedDateTime +import java.security.MessageDigest internal data class LogRequest( val requestId: String, - val target: String, + val target: Md5Hash, val from: ZonedDateTime, val to: ZonedDateTime, ) + +@JvmInline +internal value class Md5Hash private constructor(private val hex: String) { + + companion object { + fun ofHex(hex: String): Md5Hash = Md5Hash(hex.lowercase()) + + fun ofDeviceUuid(deviceUuid: String): Md5Hash = Md5Hash( + MessageDigest.getInstance("MD5") + .digest(deviceUuid.lowercase().toByteArray(Charsets.UTF_8)) + .joinToString(separator = "") { byte -> "%02x".format(byte) } + ) + } +} diff --git a/sdk/src/test/java/cloud/mindbox/mobile_sdk/monitoring/LogRequestStub.kt b/sdk/src/test/java/cloud/mindbox/mobile_sdk/monitoring/LogRequestStub.kt index 282ff07be..35100eeb2 100644 --- a/sdk/src/test/java/cloud/mindbox/mobile_sdk/monitoring/LogRequestStub.kt +++ b/sdk/src/test/java/cloud/mindbox/mobile_sdk/monitoring/LogRequestStub.kt @@ -2,13 +2,14 @@ package cloud.mindbox.mobile_sdk.monitoring import cloud.mindbox.mobile_sdk.models.operation.response.LogRequestDtoBlank import cloud.mindbox.mobile_sdk.monitoring.domain.models.LogRequest +import cloud.mindbox.mobile_sdk.monitoring.domain.models.Md5Hash import org.threeten.bp.ZonedDateTime internal class LogRequestStub { companion object { fun getLogRequest(): LogRequest = LogRequest( requestId = "", - target = "", + target = Md5Hash.ofHex(""), from = ZonedDateTime.now(), to = ZonedDateTime.now() ) diff --git a/sdk/src/test/java/cloud/mindbox/mobile_sdk/monitoring/domain/managers/LogRequestDataManagerImplTest.kt b/sdk/src/test/java/cloud/mindbox/mobile_sdk/monitoring/domain/managers/LogRequestDataManagerImplTest.kt index 4f812874f..722a6c871 100644 --- a/sdk/src/test/java/cloud/mindbox/mobile_sdk/monitoring/domain/managers/LogRequestDataManagerImplTest.kt +++ b/sdk/src/test/java/cloud/mindbox/mobile_sdk/monitoring/domain/managers/LogRequestDataManagerImplTest.kt @@ -3,6 +3,7 @@ package cloud.mindbox.mobile_sdk.monitoring.domain.managers import androidx.test.core.app.ApplicationProvider import cloud.mindbox.mobile_sdk.monitoring.LogRequestStub import cloud.mindbox.mobile_sdk.monitoring.domain.models.LogRequest +import cloud.mindbox.mobile_sdk.monitoring.domain.models.Md5Hash import cloud.mindbox.mobile_sdk.repository.MindboxPreferences import com.jakewharton.threetenabp.AndroidThreeTen import io.mockk.every @@ -51,11 +52,11 @@ internal class LogRequestDataManagerImplTest { @Test fun `test monitoring checks only current deviceUuid success`() { val testLogRequests = listOf( - LogRequestStub.getLogRequest().copy(target = DEVICE_UUID_HASH), - LogRequestStub.getLogRequest().copy(target = OTHER_DEVICE_UUID_HASH) + LogRequestStub.getLogRequest().copy(target = Md5Hash.ofHex(DEVICE_UUID_HASH)), + LogRequestStub.getLogRequest().copy(target = Md5Hash.ofHex(OTHER_DEVICE_UUID_HASH)) ) val actualResult = logRequestDataManager.filterCurrentDeviceUuidLogs(testLogRequests) - assertTrue(actualResult.size == 1 && actualResult.first().target == DEVICE_UUID_HASH) + assertTrue(actualResult.size == 1 && actualResult.first().target == Md5Hash.ofHex(DEVICE_UUID_HASH)) } @Test @@ -64,7 +65,7 @@ internal class LogRequestDataManagerImplTest { MindboxPreferences.deviceUuid } returns DEVICE_UUID.uppercase() val testLogRequests = listOf( - LogRequestStub.getLogRequest().copy(target = DEVICE_UUID_HASH) + LogRequestStub.getLogRequest().copy(target = Md5Hash.ofHex(DEVICE_UUID_HASH)) ) val actualResult = logRequestDataManager.filterCurrentDeviceUuidLogs(testLogRequests) assertEquals(1, actualResult.size) @@ -73,7 +74,7 @@ internal class LogRequestDataManagerImplTest { @Test fun `test target hash comparison is case insensitive`() { val testLogRequests = listOf( - LogRequestStub.getLogRequest().copy(target = DEVICE_UUID_HASH.uppercase()) + LogRequestStub.getLogRequest().copy(target = Md5Hash.ofHex(DEVICE_UUID_HASH.uppercase())) ) val actualResult = logRequestDataManager.filterCurrentDeviceUuidLogs(testLogRequests) assertEquals(1, actualResult.size) @@ -85,8 +86,8 @@ internal class LogRequestDataManagerImplTest { MindboxPreferences.deviceUuid } returns "" val testLogRequests = listOf( - LogRequestStub.getLogRequest().copy(target = "d41d8cd98f00b204e9800998ecf8427e"), - LogRequestStub.getLogRequest().copy(target = DEVICE_UUID_HASH) + LogRequestStub.getLogRequest().copy(target = Md5Hash.ofHex("d41d8cd98f00b204e9800998ecf8427e")), + LogRequestStub.getLogRequest().copy(target = Md5Hash.ofHex(DEVICE_UUID_HASH)) ) val actualResult = logRequestDataManager.filterCurrentDeviceUuidLogs(testLogRequests) assertEquals(emptyList(), actualResult) @@ -116,13 +117,13 @@ internal class LogRequestDataManagerImplTest { DEVICE_UUID.uppercase() to DEVICE_UUID_HASH, ) vectors.forEach { (deviceUuid, expectedTarget) -> - assertEquals(expectedTarget, deviceUuid.md5()) + assertEquals(Md5Hash.ofHex(expectedTarget), Md5Hash.ofDeviceUuid(deviceUuid)) } } @Test fun `md5 of empty string is the well-known constant`() { - assertEquals("d41d8cd98f00b204e9800998ecf8427e", "".md5()) + assertEquals(Md5Hash.ofHex("d41d8cd98f00b204e9800998ecf8427e"), Md5Hash.ofDeviceUuid("")) } companion object {