Skip to content

Commit

Permalink
Merge pull request #81 from embrace-io/extract-session-number
Browse files Browse the repository at this point in the history
Extract session ordinal logic to preference service
  • Loading branch information
fractalwrench committed Nov 17, 2023
2 parents 8cfc0f0 + 60f1de2 commit 503dde0
Show file tree
Hide file tree
Showing 6 changed files with 24 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -226,9 +226,11 @@ internal class EmbracePreferencesService(
get() = prefs.getBooleanPreference(LAST_USER_MESSAGE_FAILED_KEY, false)
set(value) = prefs.setBooleanPreference(LAST_USER_MESSAGE_FAILED_KEY, value)

override var sessionNumber: Int
get() = prefs.getIntegerPreference(LAST_SESSION_NUMBER_KEY) ?: 0
set(value) = prefs.setIntegerPreference(LAST_SESSION_NUMBER_KEY, value)
override fun getIncrementAndGetSessionNumber(): Int {
val sessionNumber = (prefs.getIntegerPreference(LAST_SESSION_NUMBER_KEY) ?: 0) + 1
prefs.setIntegerPreference(LAST_SESSION_NUMBER_KEY, sessionNumber)
return sessionNumber
}

override var javaScriptBundleURL: String?
get() = prefs.getStringPreference(JAVA_SCRIPT_BUNDLE_URL_KEY)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,11 @@ internal interface PreferencesService {
var userMessageNeedsRetry: Boolean

/**
* Last session number. Increments by one.
* Increments and returns the session number ordinal. This is an integer that increments
* at the start of every session. This allows us to check the % of sessions that didn't get
* delivered to the backend.
*/
var sessionNumber: Int
fun getIncrementAndGetSessionNumber(): Int

/**
* Last javaScript bundle string url.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ internal class SessionHandler(
coldStart,
startType,
startTime,
incrementAndGetSessionNumber(),
preferencesService.getIncrementAndGetSessionNumber(),
userService.loadUserInfoFromDisk(),
sessionProperties.get()
)
Expand Down Expand Up @@ -354,15 +354,6 @@ internal class SessionHandler(
return fullEndSessionMessage
}

/**
* @return session number incremented by 1
*/
private fun incrementAndGetSessionNumber(): Int {
val sessionNumber = preferencesService.sessionNumber + 1
preferencesService.sessionNumber = sessionNumber
return sessionNumber
}

/**
* It starts a background job that will schedule a callback to automatically end the session.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ internal class FakePreferenceService(
@Deprecated("") override var customPersonas: Set<String>? = null,
override var lastConfigFetchDate: Long? = null,
override var userMessageNeedsRetry: Boolean = false,
override var sessionNumber: Int = 0,
override var reactNativeVersionNumber: String? = null,
override var unityVersionNumber: String? = null,
override var unityBuildIdNumber: String? = null,
Expand All @@ -34,7 +33,8 @@ internal class FakePreferenceService(
override var jailbroken: Boolean? = null,
override var applicationExitInfoHistory: Set<String>? = null,
override var cpuName: String? = null,
override var egl: String? = null
override var egl: String? = null,
val sessionNumber: () -> Int = { 0 }
) : PreferencesService {

var networkCaptureRuleOver = false
Expand All @@ -47,5 +47,7 @@ internal class FakePreferenceService(
override fun decreaseNetworkCaptureRuleRemainingCount(id: String, maxCount: Int) {
}

override fun getIncrementAndGetSessionNumber(): Int = sessionNumber()

override fun isUsersFirstDay(): Boolean = firstDay
}
Original file line number Diff line number Diff line change
Expand Up @@ -188,13 +188,10 @@ internal class EmbracePreferencesServiceTest {

@Test
fun `test session number is saved`() {
assertEquals(0, service.sessionNumber)

service.sessionNumber = 1234
assertEquals(1234, service.sessionNumber)

service.sessionNumber = -1
assertEquals(0, service.sessionNumber)
assertEquals(1, service.getIncrementAndGetSessionNumber())
assertEquals(2, service.getIncrementAndGetSessionNumber())
assertEquals(3, service.getIncrementAndGetSessionNumber())
assertEquals(4, service.getIncrementAndGetSessionNumber())
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import io.embrace.android.embracesdk.fakes.FakeAndroidMetadataService
import io.embrace.android.embracesdk.fakes.FakeClock
import io.embrace.android.embracesdk.fakes.FakeConfigService
import io.embrace.android.embracesdk.fakes.FakeGatingService
import io.embrace.android.embracesdk.fakes.FakePreferenceService
import io.embrace.android.embracesdk.fakes.FakeUserService
import io.embrace.android.embracesdk.fakes.fakeAutoDataCaptureBehavior
import io.embrace.android.embracesdk.fakes.fakeDataCaptureEventBehavior
Expand All @@ -36,6 +35,7 @@ import io.embrace.android.embracesdk.ndk.NdkService
import io.embrace.android.embracesdk.payload.Session
import io.embrace.android.embracesdk.payload.SessionMessage
import io.embrace.android.embracesdk.payload.UserInfo
import io.embrace.android.embracesdk.prefs.PreferencesService
import io.embrace.android.embracesdk.session.EmbraceSessionService.Companion.SESSION_CACHING_INTERVAL
import io.embrace.android.embracesdk.session.properties.EmbraceSessionProperties
import io.mockk.Called
Expand Down Expand Up @@ -66,7 +66,7 @@ internal class SessionHandlerTest {

companion object {
private val logger: InternalEmbraceLogger = InternalEmbraceLogger()
private val preferencesService: FakePreferenceService = FakePreferenceService()
private val preferencesService: PreferencesService = mockk(relaxed = true)
private val mockUserService: FakeUserService = FakeUserService()
private val mockNetworkConnectivityService: NetworkConnectivityService =
mockk(relaxUnitFun = true)
Expand All @@ -86,7 +86,7 @@ internal class SessionHandlerTest {
private val mockSessionPeriodicCacheExecutorService: ScheduledExecutorService = mockk(relaxed = true)
private const val sessionUuid = "99fcae22-0db5-4b63-b49d-315eecce4889"
private const val now = 123L
private const val sessionNumber = 5
private var sessionNumber = 5
private val mockSessionProperties: EmbraceSessionProperties = mockk(relaxed = true)
private val emptyMapSessionProperties: Map<String, String> = emptyMap()
private val mockUserInfo: UserInfo = mockk()
Expand Down Expand Up @@ -123,7 +123,6 @@ internal class SessionHandlerTest {
@Before
fun before() {
mockActiveSession = mockk(relaxed = true)
preferencesService.sessionNumber = sessionNumber
every { mockSessionProperties.get() } returns emptyMapSessionProperties

metadataService = FakeAndroidMetadataService()
Expand Down Expand Up @@ -238,7 +237,6 @@ internal class SessionHandlerTest {
with(checkNotNull(sessionMessage?.session)) {
assertEquals(sessionUuid, this.sessionId)
assertEquals(startTime, now)
assertEquals(sessionNumber + 1, number)
assertTrue(isColdStart)
assertEquals(sessionStartType, startType)
assertEquals(emptyMapSessionProperties, properties)
Expand All @@ -251,6 +249,7 @@ internal class SessionHandlerTest {
assertEquals(metadataService.getDeviceInfo(), deviceInfo)
assertEquals(metadataService.getAppInfo(), appInfo)
}
verify(exactly = 1) { preferencesService.getIncrementAndGetSessionNumber() }
}

@Test
Expand Down Expand Up @@ -280,7 +279,7 @@ internal class SessionHandlerTest {
@Test
fun `onSession started successfully with no preference service session number`() {
// return absent session number
preferencesService.sessionNumber = 0
sessionNumber = 0
sessionLocalConfig = SessionLocalConfig(maxSessionSeconds = 5, asyncEnd = false)
every { mockBreadcrumbService.getLastViewBreadcrumbScreenName() } returns "screen"
val sessionStartType = Session.SessionLifeEventType.STATE
Expand All @@ -295,7 +294,7 @@ internal class SessionHandlerTest {
mockPeriodicCachingRunnable
)

assertEquals(1, preferencesService.sessionNumber)
verify(exactly = 1) { preferencesService.getIncrementAndGetSessionNumber() }
assertNotNull(sessionMessage)
assertNotNull(sessionMessage!!.session)
// no need to verify anything else because it's already verified in another test case
Expand Down

0 comments on commit 503dde0

Please sign in to comment.