From 5d39a5d739e11124d7df6b046fbd4e39b0b157d2 Mon Sep 17 00:00:00 2001 From: bidetofevil Date: Fri, 2 Aug 2024 22:21:37 -0700 Subject: [PATCH] Don't disable SDK until the next cold start --- .../embracesdk/testcases/ConfigServiceTest.kt | 67 +++++++++++++++++++ .../embrace/android/embracesdk/EmbraceImpl.kt | 1 - .../internal/config/EmbraceConfigService.kt | 5 -- .../embracesdk/EmbraceConfigServiceTest.kt | 16 ----- 4 files changed, 67 insertions(+), 22 deletions(-) create mode 100644 embrace-android-sdk/src/integrationTest/kotlin/io/embrace/android/embracesdk/testcases/ConfigServiceTest.kt diff --git a/embrace-android-sdk/src/integrationTest/kotlin/io/embrace/android/embracesdk/testcases/ConfigServiceTest.kt b/embrace-android-sdk/src/integrationTest/kotlin/io/embrace/android/embracesdk/testcases/ConfigServiceTest.kt new file mode 100644 index 0000000000..5eacbeecfc --- /dev/null +++ b/embrace-android-sdk/src/integrationTest/kotlin/io/embrace/android/embracesdk/testcases/ConfigServiceTest.kt @@ -0,0 +1,67 @@ +@file:Suppress("DEPRECATION") + +package io.embrace.android.embracesdk.testcases + +import android.os.Build.VERSION_CODES.TIRAMISU +import androidx.test.ext.junit.runners.AndroidJUnit4 +import io.embrace.android.embracesdk.Embrace.AppFramework +import io.embrace.android.embracesdk.IntegrationTestRule +import io.embrace.android.embracesdk.recordSession +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertTrue +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.annotation.Config + +/** + * Validation of the basic and miscellaneous functionality of the Android SDK + */ +@Config(sdk = [TIRAMISU]) +@RunWith(AndroidJUnit4::class) +internal class ConfigServiceTest { + @Rule + @JvmField + val testRule: IntegrationTestRule = IntegrationTestRule { + IntegrationTestRule.Harness(startImmediately = false) + } + + @Test + fun `SDK can start`() { + with(testRule) { + assertFalse(embrace.isStarted) + startSdk() + assertEquals(AppFramework.NATIVE, harness.appFramework) + assertFalse(harness.overriddenConfigService.isSdkDisabled()) + assertTrue(embrace.isStarted) + } + } + + @Test + fun `SDK disabled via config cannot start`() { + with(testRule) { + harness.overriddenConfigService.sdkDisabled = true + startSdk() + assertFalse(embrace.isStarted) + } + } + + @Test + fun `disabling SDK will not resort to a stopping after foregrounding agian`() { + with(testRule) { + startSdk() + assertTrue(embrace.isStarted) + with(harness) { + val session = recordSession { + harness.overriddenConfigService.sdkDisabled = true + harness.overriddenConfigService.updateListeners() + } + assertNotNull(session) + assertNotNull(recordSession()) + assertTrue(embrace.isStarted) + } + } + } +} diff --git a/embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/EmbraceImpl.kt b/embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/EmbraceImpl.kt index 5945eca012..3dd3c3c51a 100644 --- a/embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/EmbraceImpl.kt +++ b/embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/EmbraceImpl.kt @@ -177,7 +177,6 @@ internal class EmbraceImpl @JvmOverloads constructor( val essentialServiceModule = bootstrapper.essentialServiceModule if (essentialServiceModule.configService.isSdkDisabled()) { - logger.logInfo("Interrupting SDK start because it is disabled", null) stop() return } diff --git a/embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/internal/config/EmbraceConfigService.kt b/embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/internal/config/EmbraceConfigService.kt index ad79e88824..d34facf6bf 100644 --- a/embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/internal/config/EmbraceConfigService.kt +++ b/embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/internal/config/EmbraceConfigService.kt @@ -1,6 +1,5 @@ package io.embrace.android.embracesdk.internal.config -import io.embrace.android.embracesdk.Embrace import io.embrace.android.embracesdk.internal.clock.Clock import io.embrace.android.embracesdk.internal.comms.api.ApiService import io.embrace.android.embracesdk.internal.config.behavior.AnrBehavior @@ -275,10 +274,6 @@ internal class EmbraceConfigService @JvmOverloads constructor( override fun onForeground(coldStart: Boolean, timestamp: Long) { // Refresh the config on resume if it has expired getConfig() - if (Embrace.getInstance().isStarted && isSdkDisabled()) { - logger.logInfo("Embrace SDK disabled by config") - Embrace.getInstance().internalInterface.stopSdk() - } } override val appFramework: AppFramework = localConfig.sdkConfig.appFramework?.let { diff --git a/embrace-android-sdk/src/test/java/io/embrace/android/embracesdk/EmbraceConfigServiceTest.kt b/embrace-android-sdk/src/test/java/io/embrace/android/embracesdk/EmbraceConfigServiceTest.kt index 50e362a6a6..70a9d09b39 100644 --- a/embrace-android-sdk/src/test/java/io/embrace/android/embracesdk/EmbraceConfigServiceTest.kt +++ b/embrace-android-sdk/src/test/java/io/embrace/android/embracesdk/EmbraceConfigServiceTest.kt @@ -4,7 +4,6 @@ import com.google.common.util.concurrent.MoreExecutors import io.embrace.android.embracesdk.fakes.FakeClock import io.embrace.android.embracesdk.fakes.FakePreferenceService import io.embrace.android.embracesdk.fakes.FakeProcessStateService -import io.embrace.android.embracesdk.internal.EmbraceInternalInterface import io.embrace.android.embracesdk.internal.comms.api.ApiService import io.embrace.android.embracesdk.internal.comms.api.CachedConfig import io.embrace.android.embracesdk.internal.comms.delivery.CacheService @@ -23,10 +22,8 @@ import io.embrace.android.embracesdk.internal.worker.BackgroundWorker import io.mockk.clearAllMocks import io.mockk.every import io.mockk.mockk -import io.mockk.mockkObject import io.mockk.mockkStatic import io.mockk.unmockkAll -import io.mockk.verify import org.junit.After import org.junit.AfterClass import org.junit.Assert.assertEquals @@ -250,19 +247,6 @@ internal class EmbraceConfigServiceTest { assertTrue(configListenerTriggered) } - @Test - fun `test onForeground() with sdk started and config sdkDisabled=true stops the SDK`() { - val mockInternalInterface: EmbraceInternalInterface = mockk(relaxed = true) - mockkObject(Embrace.getImpl()) - every { Embrace.getImpl().isStarted } returns true - every { Embrace.getImpl().internalInterface } returns mockInternalInterface - fakePreferenceService.sdkDisabled = true - - service.onForeground(true, 1100L) - - verify(exactly = 1) { mockInternalInterface.stopSdk() } - } - @Test fun `test isSdkDisabled returns true`() { fakePreferenceService.sdkDisabled = true