From f348f0cc9fbe4c955e16a92c888efe7969ebd14b Mon Sep 17 00:00:00 2001 From: YYChen01988 Date: Mon, 8 Apr 2024 14:58:03 +0100 Subject: [PATCH] feat(session)End to end test --- .../com/bugsnag/android/SessionTracker.java | 13 ++++---- .../android/mazerunner/MazerunnerApp.kt | 1 + .../mazerunner/StartSessionBehaviour.kt | 31 +++++++++++++++++ .../scenarios/StartSessionAutoModeScenario.kt | 33 +++++++------------ features/smoke_tests/03_sessions.feature | 6 ++-- 5 files changed, 54 insertions(+), 30 deletions(-) create mode 100644 features/fixtures/mazerunner/app/src/main/java/com/bugsnag/android/mazerunner/StartSessionBehaviour.kt diff --git a/bugsnag-android-core/src/main/java/com/bugsnag/android/SessionTracker.java b/bugsnag-android-core/src/main/java/com/bugsnag/android/SessionTracker.java index 5bdc2a40a8..c9bb78cc3d 100644 --- a/bugsnag-android-core/src/main/java/com/bugsnag/android/SessionTracker.java +++ b/bugsnag-android-core/src/main/java/com/bugsnag/android/SessionTracker.java @@ -7,6 +7,7 @@ import com.bugsnag.android.internal.TaskType; import android.app.Activity; +import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -104,18 +105,16 @@ private boolean shouldDiscardSession(boolean autoCaptured) { return true; } else { Session existingSession = currentSession; - if (autoCaptured && - existingSession != null && - !existingSession.isAutoCaptured() && - shouldSuppressFirstAutoSession) { - + if (autoCaptured + && existingSession != null + && !existingSession.isAutoCaptured() + && shouldSuppressFirstAutoSession) { shouldSuppressFirstAutoSession = true; return true; } } - return false; - } + } void pauseSession() { diff --git a/features/fixtures/mazerunner/app/src/main/java/com/bugsnag/android/mazerunner/MazerunnerApp.kt b/features/fixtures/mazerunner/app/src/main/java/com/bugsnag/android/mazerunner/MazerunnerApp.kt index d8788d1a60..ad586c4f5d 100644 --- a/features/fixtures/mazerunner/app/src/main/java/com/bugsnag/android/mazerunner/MazerunnerApp.kt +++ b/features/fixtures/mazerunner/app/src/main/java/com/bugsnag/android/mazerunner/MazerunnerApp.kt @@ -10,6 +10,7 @@ class MazerunnerApp : Application() { super.onCreate() triggerStartupAnrIfRequired() setupNonSdkUsageStrictMode() + triggerManualSessionIfRequired() } /** diff --git a/features/fixtures/mazerunner/app/src/main/java/com/bugsnag/android/mazerunner/StartSessionBehaviour.kt b/features/fixtures/mazerunner/app/src/main/java/com/bugsnag/android/mazerunner/StartSessionBehaviour.kt new file mode 100644 index 0000000000..585f303a36 --- /dev/null +++ b/features/fixtures/mazerunner/app/src/main/java/com/bugsnag/android/mazerunner/StartSessionBehaviour.kt @@ -0,0 +1,31 @@ +package com.bugsnag.android.mazerunner + +import android.app.Application +import com.bugsnag.android.Bugsnag +import com.bugsnag.android.Configuration +import com.bugsnag.android.EndpointConfiguration + +fun Application.triggerManualSessionIfRequired() { + val prefs = getSharedPreferences("SessionPreferences", android.content.Context.MODE_PRIVATE) + val manualSession = prefs.getBoolean("manualSession", false) + + if (manualSession) { + val notifyEndpoint = prefs.getString("notify", null) + val sessionsEndpoint = prefs.getString("sessions", null) + + // we remove the preferences so that we don't affect any future startup + prefs.edit() + .remove("notify") + .remove("sessions") + .commit() + + // we have to startup Bugsnag at this point + val config = Configuration.load(this) + if (!notifyEndpoint.isNullOrBlank() && !sessionsEndpoint.isNullOrBlank()) { + config.endpoints = EndpointConfiguration(notifyEndpoint, sessionsEndpoint) + } + + Bugsnag.start(this, config) + Bugsnag.startSession() + } +} diff --git a/features/fixtures/mazerunner/jvm-scenarios/src/main/java/com/bugsnag/android/mazerunner/scenarios/StartSessionAutoModeScenario.kt b/features/fixtures/mazerunner/jvm-scenarios/src/main/java/com/bugsnag/android/mazerunner/scenarios/StartSessionAutoModeScenario.kt index c1efcc6f42..f157fbdac8 100644 --- a/features/fixtures/mazerunner/jvm-scenarios/src/main/java/com/bugsnag/android/mazerunner/scenarios/StartSessionAutoModeScenario.kt +++ b/features/fixtures/mazerunner/jvm-scenarios/src/main/java/com/bugsnag/android/mazerunner/scenarios/StartSessionAutoModeScenario.kt @@ -1,36 +1,27 @@ package com.bugsnag.android.mazerunner.scenarios import android.content.Context -import android.content.Intent -import com.bugsnag.android.Bugsnag import com.bugsnag.android.Configuration -import com.bugsnag.android.createDefaultDelivery -import com.bugsnag.android.mazerunner.InterceptingDelivery +import kotlin.system.exitProcess -/** - * Sends an automated session payload to Bugsnag. - */ internal class StartSessionAutoModeScenario( config: Configuration, context: Context, eventMetadata: String? ) : Scenario(config, context, eventMetadata) { + override fun startScenario() { + context.applicationContext + .getSharedPreferences("SessionPreferences", Context.MODE_PRIVATE) + .edit() + .putBoolean("manualSession", MANUAL_START) + .putString("notify", config.endpoints.notify) + .putString("sessions", config.endpoints.sessions) + .commit() - init { - val baseDelivery = createDefaultDelivery() - var intercept = true - config.autoTrackSessions = true - config.delivery = InterceptingDelivery(baseDelivery) { - if (intercept) { - intercept = false - continueScenario() - } - } + exitProcess(0) } - private fun continueScenario() { - Bugsnag.startSession() - registerActivityLifecycleCallbacks() - context.startActivity(Intent("com.bugsnag.android.mazerunner.UPDATE_CONTEXT")) + companion object { + private const val MANUAL_START = true } } diff --git a/features/smoke_tests/03_sessions.feature b/features/smoke_tests/03_sessions.feature index 3b750db8d5..3033fed8bf 100644 --- a/features/smoke_tests/03_sessions.feature +++ b/features/smoke_tests/03_sessions.feature @@ -113,5 +113,7 @@ Feature: Session functionality smoke tests And the event "user.name" equals "ManualSessionSmokeScenario" Scenario: Start session in auto mode - When I run "StartSessionAutoModeScenario" - And I wait to receive a session \ No newline at end of file + When I clear any error dialogue + And I run "StartSessionAutoModeScenario" + And I relaunch the app after a crash + Then I wait to receive a session \ No newline at end of file