Skip to content

Commit

Permalink
Don't disable SDK until the next cold start
Browse files Browse the repository at this point in the history
  • Loading branch information
bidetofevil committed Aug 3, 2024
1 parent c4cd964 commit 9b9dee6
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 22 deletions.
Original file line number Diff line number Diff line change
@@ -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)
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 9b9dee6

Please sign in to comment.