From cb6e6d671499b08bbc7c5e43b74a387a4057f9a5 Mon Sep 17 00:00:00 2001 From: Matthias Urhahn <matthias.urhahn@sap.com> Date: Wed, 11 Nov 2020 09:57:31 +0100 Subject: [PATCH] Fix missing error dialog (DEV) (#1564) * Fix task exceptions not being forwarded to our current error UI elements. * Clean up old transaction names. * Use simple class name as error tag. * Prevent error reporting from triggering in unit tests due to static access. * Move isUnitTest to CWDebug Co-authored-by: harambasicluka <64483219+harambasicluka@users.noreply.github.com> --- .../de/rki/coronawarnapp/bugreporting/BugReporter.kt | 2 ++ .../exception/reporting/ExceptionReporter.kt | 3 +++ .../java/de/rki/coronawarnapp/task/TaskController.kt | 5 +++++ .../internal/DefaultTaskCoroutineScope.kt} | 4 ++-- .../de/rki/coronawarnapp/task/internal/TaskModule.kt | 3 +-- .../src/main/java/de/rki/coronawarnapp/util/CWADebug.kt | 9 +++++++++ Corona-Warn-App/src/test/java/testhelpers/IsAUnitTest.kt | 3 +++ 7 files changed, 25 insertions(+), 4 deletions(-) rename Corona-Warn-App/src/main/java/de/rki/coronawarnapp/{transaction/TransactionCoroutineScope.kt => task/internal/DefaultTaskCoroutineScope.kt} (75%) create mode 100644 Corona-Warn-App/src/test/java/testhelpers/IsAUnitTest.kt diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/BugReporter.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/BugReporter.kt index d3ae63b59..d67d523d9 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/BugReporter.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/BugReporter.kt @@ -1,5 +1,6 @@ package de.rki.coronawarnapp.bugreporting +import de.rki.coronawarnapp.util.CWADebug import de.rki.coronawarnapp.util.di.AppInjector interface BugReporter { @@ -7,6 +8,7 @@ interface BugReporter { } fun Throwable.reportProblem(tag: String? = null, info: String? = null) { + if (CWADebug.isAUnitTest) return val reporter = AppInjector.component.bugReporter reporter.report(this, tag, info) } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ExceptionReporter.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ExceptionReporter.kt index 8f602075d..06a6455a5 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ExceptionReporter.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ExceptionReporter.kt @@ -10,6 +10,7 @@ import de.rki.coronawarnapp.exception.ExceptionCategory import de.rki.coronawarnapp.exception.reporting.ReportingConstants.STATUS_CODE_GOOGLE_API_FAIL import de.rki.coronawarnapp.exception.reporting.ReportingConstants.STATUS_CODE_GOOGLE_UPDATE_NEEDED import de.rki.coronawarnapp.exception.reporting.ReportingConstants.STATUS_CODE_REACHED_REQUEST_LIMIT +import de.rki.coronawarnapp.util.CWADebug import de.rki.coronawarnapp.util.tryFormattedError import java.io.PrintWriter import java.io.StringWriter @@ -22,6 +23,8 @@ fun Throwable.report( prefix: String?, suffix: String? ) { + if (CWADebug.isAUnitTest) return + reportProblem(tag = prefix, info = suffix) val context = CoronaWarnApplication.getAppContext() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/task/TaskController.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/task/TaskController.kt index 77e223947..46b3964b9 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/task/TaskController.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/task/TaskController.kt @@ -1,6 +1,9 @@ package de.rki.coronawarnapp.task import androidx.annotation.VisibleForTesting +import de.rki.coronawarnapp.bugreporting.reportProblem +import de.rki.coronawarnapp.exception.ExceptionCategory +import de.rki.coronawarnapp.exception.reporting.report import de.rki.coronawarnapp.task.TaskFactory.Config.CollisionBehavior import de.rki.coronawarnapp.task.internal.InternalTaskState import de.rki.coronawarnapp.util.TimeStamper @@ -147,6 +150,8 @@ class TaskController @Inject constructor( state.job.getCompleted() } else { Timber.tag(TAG).e(error, "Task failed: %s", state) + error.report(ExceptionCategory.INTERNAL) + error.reportProblem(tag = state.request.type.simpleName) null } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/TransactionCoroutineScope.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/task/internal/DefaultTaskCoroutineScope.kt similarity index 75% rename from Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/TransactionCoroutineScope.kt rename to Corona-Warn-App/src/main/java/de/rki/coronawarnapp/task/internal/DefaultTaskCoroutineScope.kt index 0e27712b8..c10a3c041 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/TransactionCoroutineScope.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/task/internal/DefaultTaskCoroutineScope.kt @@ -1,4 +1,4 @@ -package de.rki.coronawarnapp.transaction +package de.rki.coronawarnapp.task.internal import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -8,6 +8,6 @@ import javax.inject.Singleton import kotlin.coroutines.CoroutineContext @Singleton -class TransactionCoroutineScope @Inject constructor() : CoroutineScope { +class DefaultTaskCoroutineScope @Inject constructor() : CoroutineScope { override val coroutineContext: CoroutineContext = SupervisorJob() + Dispatchers.Default } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/task/internal/TaskModule.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/task/internal/TaskModule.kt index c94f6beb9..f0169422b 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/task/internal/TaskModule.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/task/internal/TaskModule.kt @@ -4,7 +4,6 @@ import dagger.Module import dagger.Provides import de.rki.coronawarnapp.task.TaskCoroutineScope import de.rki.coronawarnapp.task.example.QueueingTaskModule -import de.rki.coronawarnapp.transaction.TransactionCoroutineScope import kotlinx.coroutines.CoroutineScope import javax.inject.Singleton @@ -17,5 +16,5 @@ class TaskModule { @Provides @Singleton @TaskCoroutineScope - fun provideScope(scope: TransactionCoroutineScope): CoroutineScope = scope + fun provideScope(scope: DefaultTaskCoroutineScope): CoroutineScope = scope } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/CWADebug.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/CWADebug.kt index 8efb6c148..cade97a58 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/CWADebug.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/CWADebug.kt @@ -31,4 +31,13 @@ object CWADebug { DEVICE("device"), DEVICE_FOR_TESTERS("deviceForTesters") } + + val isAUnitTest: Boolean by lazy { + try { + Class.forName("testhelpers.IsAUnitTest") + true + } catch (e: Exception) { + false + } + } } diff --git a/Corona-Warn-App/src/test/java/testhelpers/IsAUnitTest.kt b/Corona-Warn-App/src/test/java/testhelpers/IsAUnitTest.kt new file mode 100644 index 000000000..2af3e4cb7 --- /dev/null +++ b/Corona-Warn-App/src/test/java/testhelpers/IsAUnitTest.kt @@ -0,0 +1,3 @@ +package testhelpers + +class IsAUnitTest -- GitLab