fix(telemetry): Fix FK exception for TelemetryManager enqueue.
This commit is contained in:
parent
fedf620cce
commit
365224cb79
|
@ -25,8 +25,8 @@ plugins {
|
|||
}
|
||||
|
||||
protonCoverage {
|
||||
branchCoveragePercentage.set(87)
|
||||
lineCoveragePercentage.set(93)
|
||||
branchCoveragePercentage.set(90)
|
||||
lineCoveragePercentage.set(95)
|
||||
}
|
||||
|
||||
publishOption.shouldBePublishedAsLib = true
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
|
||||
package me.proton.core.telemetry.domain
|
||||
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import me.proton.core.domain.entity.UserId
|
||||
import me.proton.core.telemetry.domain.entity.TelemetryEvent
|
||||
|
@ -26,6 +27,7 @@ import me.proton.core.telemetry.domain.repository.TelemetryRepository
|
|||
import me.proton.core.telemetry.domain.usecase.IsTelemetryEnabled
|
||||
import me.proton.core.util.kotlin.CoreLogger
|
||||
import me.proton.core.util.kotlin.CoroutineScopeProvider
|
||||
import org.jetbrains.annotations.VisibleForTesting
|
||||
import javax.inject.Inject
|
||||
import kotlin.time.Duration.Companion.hours
|
||||
import kotlin.time.Duration.Companion.seconds
|
||||
|
@ -52,21 +54,26 @@ public class TelemetryManager @Inject internal constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private suspend fun enqueueEvent(
|
||||
@VisibleForTesting
|
||||
internal suspend fun enqueueEvent(
|
||||
userId: UserId?,
|
||||
event: TelemetryEvent,
|
||||
priority: TelemetryPriority = TelemetryPriority.Default
|
||||
) {
|
||||
CoreLogger.d(LogTag.ENQUEUE, "$event")
|
||||
if (isTelemetryEnabled(userId)) {
|
||||
repository.addEvent(userId, event)
|
||||
when (priority) {
|
||||
TelemetryPriority.Immediate -> workerManager.enqueueAndReplace(userId, MIN_DELAY)
|
||||
TelemetryPriority.Default -> workerManager.enqueueOrKeep(userId, MAX_DELAY)
|
||||
runCatching {
|
||||
if (isTelemetryEnabled(userId)) {
|
||||
repository.addEvent(userId, event)
|
||||
when (priority) {
|
||||
TelemetryPriority.Immediate -> workerManager.enqueueAndReplace(userId, MIN_DELAY)
|
||||
TelemetryPriority.Default -> workerManager.enqueueOrKeep(userId, MAX_DELAY)
|
||||
}
|
||||
} else {
|
||||
workerManager.cancel(userId)
|
||||
repository.deleteAllEvents(userId)
|
||||
}
|
||||
} else {
|
||||
workerManager.cancel(userId)
|
||||
repository.deleteAllEvents(userId)
|
||||
}.onFailure {
|
||||
CoreLogger.e(LogTag.ENQUEUE, it)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -89,4 +89,21 @@ class TelemetryManagerTest {
|
|||
coVerify(exactly = 1) { telemetryRepository.addEvent(userId, event) }
|
||||
verify(exactly = 1) { workerManager.enqueueOrKeep(userId, TelemetryManager.MAX_DELAY) }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun sendExceptionHappened() = runTest {
|
||||
coEvery { isTelemetryEnabled(userId) } returns true
|
||||
val event = TelemetryEvent(group = "group", name = "first")
|
||||
coEvery { telemetryRepository.addEvent(userId, event) } throws Exception("Test")
|
||||
|
||||
// WHEN
|
||||
tested.enqueueEvent(userId, event)
|
||||
|
||||
// THEN
|
||||
coVerify(exactly = 0) { telemetryRepository.deleteAllEvents(userId) }
|
||||
verify(exactly = 0) { workerManager.cancel(userId) }
|
||||
|
||||
coVerify(exactly = 1) { telemetryRepository.addEvent(userId, event) }
|
||||
verify(exactly = 0) { workerManager.enqueueOrKeep(userId, TelemetryManager.MAX_DELAY) }
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue