Skip to content

Commit a8485a4

Browse files
authored
Merge b86d1b4 into 32f5d93
2 parents 32f5d93 + b86d1b4 commit a8485a4

File tree

12 files changed

+99
-47
lines changed

12 files changed

+99
-47
lines changed

firebase-sessions/src/main/kotlin/com/google/firebase/sessions/FirebaseSessions.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ internal constructor(
6060

6161
private fun initiateSessionStart() {
6262
val sessionDetails = sessionGenerator.generateNewSession()
63-
val sessionEvent = SessionEvents.startSession(firebaseApp, sessionDetails)
63+
val sessionEvent = SessionEvents.startSession(firebaseApp, sessionDetails, sessionSettings)
6464

6565
if (sessionDetails.collectEvents) {
6666
sessionCoordinator.attemptLoggingSessionEvent(sessionEvent)

firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionEvents.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import com.google.firebase.encoders.DataEncoder
2121
import com.google.firebase.encoders.FieldDescriptor
2222
import com.google.firebase.encoders.ObjectEncoderContext
2323
import com.google.firebase.encoders.json.JsonDataEncoderBuilder
24+
import com.google.firebase.sessions.settings.SessionsSettings
2425

2526
/**
2627
* Contains functions for [SessionEvent]s.
@@ -103,7 +104,8 @@ internal object SessionEvents {
103104
fun startSession(
104105
firebaseApp: FirebaseApp,
105106
sessionDetails: SessionDetails,
106-
currentTimeUs: Long = WallClock.currentTimeUs(),
107+
sessionsSettings: SessionsSettings,
108+
currentTimeUs: Long = WallClock.currentTimeUs()
107109
) =
108110
SessionEvent(
109111
eventType = EventType.SESSION_START,
@@ -113,6 +115,7 @@ internal object SessionEvents {
113115
sessionDetails.firstSessionId,
114116
sessionDetails.sessionIndex,
115117
currentTimeUs,
118+
DataCollectionStatus(sessionSamplingRate = sessionsSettings.samplingRate),
116119
),
117120
applicationInfo = getApplicationInfo(firebaseApp)
118121
)

firebase-sessions/src/test/kotlin/com/google/firebase/sessions/ApplicationInfoTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class ApplicationInfoTest {
3131

3232
@Test
3333
fun applicationInfo_populatesInfoCorrectly() {
34-
val applicationInfo = SessionEvents.getApplicationInfo(FakeFirebaseApp.fakeFirebaseApp())
34+
val applicationInfo = SessionEvents.getApplicationInfo(FakeFirebaseApp().firebaseApp)
3535
assertThat(applicationInfo)
3636
.isEqualTo(
3737
ApplicationInfo(

firebase-sessions/src/test/kotlin/com/google/firebase/sessions/EventGDTLoggerTest.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import com.google.android.datatransport.Event
2121
import com.google.android.datatransport.TransportFactory
2222
import com.google.common.truth.Truth.assertThat
2323
import com.google.firebase.FirebaseApp
24+
import com.google.firebase.sessions.settings.SessionsSettings
2425
import com.google.firebase.sessions.testing.FakeFirebaseApp
2526
import com.google.firebase.sessions.testing.FakeProvider
2627
import com.google.firebase.sessions.testing.FakeTransportFactory
@@ -35,10 +36,12 @@ class EventGDTLoggerTest {
3536

3637
@Test
3738
fun event_logsToGoogleDataTransport() {
39+
val fakeFirebaseApp = FakeFirebaseApp()
3840
val sessionEvent =
3941
SessionEvents.startSession(
40-
FakeFirebaseApp.fakeFirebaseApp(),
42+
fakeFirebaseApp.firebaseApp,
4143
TestSessionEventData.TEST_SESSION_DETAILS,
44+
SessionsSettings(fakeFirebaseApp.firebaseApp.applicationContext),
4245
TestSessionEventData.TEST_SESSION_TIMESTAMP_US,
4346
)
4447
val fakeTransportFactory = FakeTransportFactory()
@@ -50,7 +53,7 @@ class EventGDTLoggerTest {
5053
assertThat(fakeTransportFactory.name).isEqualTo("FIREBASE_APPQUALITY_SESSION")
5154
assertThat(fakeTransportFactory.payloadEncoding).isEqualTo(Encoding.of("json"))
5255
assertThat(fakeTransportFactory.fakeTransport!!.sentEvent)
53-
.isEqualTo(Event.ofData(TestSessionEventData.EXPECTED_DEFAULT_SESSION_EVENT))
56+
.isEqualTo(Event.ofData(TestSessionEventData.TEST_SESSION_EVENT))
5457
}
5558

5659
@After

firebase-sessions/src/test/kotlin/com/google/firebase/sessions/LocalOverrideSettingsTest.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class LocalOverrideSettingsTest {
3232

3333
@Test
3434
fun localOverrides_returnsNullByDefault() {
35-
val context = FakeFirebaseApp.fakeFirebaseApp().applicationContext
35+
val context = FakeFirebaseApp().firebaseApp.applicationContext
3636

3737
val localSettings = LocalOverrideSettings(context)
3838
assertThat(localSettings.sessionEnabled).isNull()
@@ -46,7 +46,7 @@ class LocalOverrideSettingsTest {
4646
metadata.putBoolean("firebase_sessions_enabled", false)
4747
metadata.putDouble("firebase_sessions_sampling_rate", 0.5)
4848
metadata.putInt("firebase_sessions_sessions_restart_timeout", 180)
49-
val context = FakeFirebaseApp.fakeFirebaseApp(metadata).applicationContext
49+
val context = FakeFirebaseApp(metadata).firebaseApp.applicationContext
5050

5151
val localSettings = LocalOverrideSettings(context)
5252
assertThat(localSettings.sessionEnabled).isFalse()
@@ -59,7 +59,7 @@ class LocalOverrideSettingsTest {
5959
val metadata = Bundle()
6060
metadata.putBoolean("firebase_sessions_enabled", false)
6161
metadata.putInt("firebase_sessions_sessions_restart_timeout", 180)
62-
val context = FakeFirebaseApp.fakeFirebaseApp(metadata).applicationContext
62+
val context = FakeFirebaseApp(metadata).firebaseApp.applicationContext
6363

6464
val localSettings = LocalOverrideSettings(context)
6565
assertThat(localSettings.sessionEnabled).isFalse()

firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionCoordinatorTest.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package com.google.firebase.sessions
1818

1919
import androidx.test.ext.junit.runners.AndroidJUnit4
2020
import com.google.common.truth.Truth.assertThat
21+
import com.google.firebase.sessions.settings.SessionsSettings
2122
import com.google.firebase.sessions.testing.FakeEventGDTLogger
2223
import com.google.firebase.sessions.testing.FakeFirebaseApp
2324
import com.google.firebase.sessions.testing.FakeFirebaseInstallations
@@ -43,10 +44,12 @@ class SessionCoordinatorTest {
4344
)
4445

4546
// Construct an event with no fid set.
47+
val fakeFirebaseApp = FakeFirebaseApp()
4648
val sessionEvent =
4749
SessionEvents.startSession(
48-
FakeFirebaseApp.fakeFirebaseApp(),
50+
fakeFirebaseApp.firebaseApp,
4951
TestSessionEventData.TEST_SESSION_DETAILS,
52+
SessionsSettings(fakeFirebaseApp.firebaseApp.applicationContext),
5053
TestSessionEventData.TEST_SESSION_TIMESTAMP_US,
5154
)
5255

firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionEventEncoderTest.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
2020
import com.google.common.truth.Truth.assertThat
2121
import com.google.firebase.FirebaseApp
2222
import com.google.firebase.sessions.SessionEvents.SESSION_EVENT_ENCODER
23+
import com.google.firebase.sessions.settings.SessionsSettings
2324
import com.google.firebase.sessions.testing.FakeFirebaseApp
2425
import com.google.firebase.sessions.testing.TestSessionEventData
2526
import org.junit.After
@@ -36,10 +37,12 @@ class SessionEventEncoderTest {
3637

3738
@Test
3839
fun sessionEvent_encodesToJson() {
40+
val fakeFirebaseApp = FakeFirebaseApp()
3941
val sessionEvent =
4042
SessionEvents.startSession(
41-
FakeFirebaseApp.fakeFirebaseApp(),
43+
fakeFirebaseApp.firebaseApp,
4244
TestSessionEventData.TEST_SESSION_DETAILS,
45+
SessionsSettings(fakeFirebaseApp.firebaseApp.applicationContext),
4346
TestSessionEventData.TEST_SESSION_TIMESTAMP_US,
4447
)
4548

firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionEventTest.kt

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,16 @@
1616

1717
package com.google.firebase.sessions
1818

19+
import android.os.Bundle
1920
import com.google.common.truth.Truth.assertThat
2021
import com.google.firebase.FirebaseApp
22+
import com.google.firebase.sessions.settings.SessionsSettings
2123
import com.google.firebase.sessions.testing.FakeFirebaseApp
22-
import com.google.firebase.sessions.testing.TestSessionEventData
24+
import com.google.firebase.sessions.testing.TestSessionEventData.TEST_DATA_COLLECTION_STATUS
25+
import com.google.firebase.sessions.testing.TestSessionEventData.TEST_SESSION_DATA
26+
import com.google.firebase.sessions.testing.TestSessionEventData.TEST_SESSION_DETAILS
27+
import com.google.firebase.sessions.testing.TestSessionEventData.TEST_SESSION_EVENT
28+
import com.google.firebase.sessions.testing.TestSessionEventData.TEST_SESSION_TIMESTAMP_US
2329
import org.junit.After
2430
import org.junit.Test
2531
import org.junit.runner.RunWith
@@ -29,14 +35,41 @@ import org.robolectric.RobolectricTestRunner
2935
class SessionEventTest {
3036
@Test
3137
fun sessionStart_populatesSessionDetailsCorrectly() {
38+
val fakeFirebaseApp = FakeFirebaseApp()
3239
val sessionEvent =
3340
SessionEvents.startSession(
34-
FakeFirebaseApp.fakeFirebaseApp(),
35-
TestSessionEventData.TEST_SESSION_DETAILS,
36-
TestSessionEventData.TEST_SESSION_TIMESTAMP_US,
41+
fakeFirebaseApp.firebaseApp,
42+
TEST_SESSION_DETAILS,
43+
SessionsSettings(fakeFirebaseApp.firebaseApp.applicationContext),
44+
TEST_SESSION_TIMESTAMP_US,
3745
)
3846

39-
assertThat(sessionEvent).isEqualTo(TestSessionEventData.EXPECTED_DEFAULT_SESSION_EVENT)
47+
assertThat(sessionEvent).isEqualTo(TEST_SESSION_EVENT)
48+
}
49+
50+
@Test
51+
fun sessionStart_samplingRate() {
52+
val metadata = Bundle()
53+
metadata.putDouble("firebase_sessions_sampling_rate", 0.5)
54+
val fakeFirebaseApp = FakeFirebaseApp(metadata)
55+
56+
val sessionEvent =
57+
SessionEvents.startSession(
58+
fakeFirebaseApp.firebaseApp,
59+
TEST_SESSION_DETAILS,
60+
SessionsSettings(fakeFirebaseApp.firebaseApp.applicationContext),
61+
TEST_SESSION_TIMESTAMP_US,
62+
)
63+
64+
assertThat(sessionEvent)
65+
.isEqualTo(
66+
TEST_SESSION_EVENT.copy(
67+
sessionData =
68+
TEST_SESSION_DATA.copy(
69+
dataCollectionStatus = TEST_DATA_COLLECTION_STATUS.copy(sessionSamplingRate = 0.5)
70+
)
71+
)
72+
)
4073
}
4174

4275
@After

firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionInitiatorTest.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class SessionInitiatorTest {
5050
@Test
5151
fun coldStart_initiatesSession() {
5252
val sessionStartCounter = SessionStartCounter()
53-
val context = FakeFirebaseApp.fakeFirebaseApp().applicationContext
53+
val context = FakeFirebaseApp().firebaseApp.applicationContext
5454
val settings = SessionsSettings(context)
5555

5656
// Simulate a cold start by simply constructing the SessionInitiator object
@@ -63,7 +63,7 @@ class SessionInitiatorTest {
6363
fun appForegrounded_largeInterval_initiatesSession() {
6464
val fakeClock = FakeClock()
6565
val sessionStartCounter = SessionStartCounter()
66-
val context = FakeFirebaseApp.fakeFirebaseApp().applicationContext
66+
val context = FakeFirebaseApp().firebaseApp.applicationContext
6767
val settings = SessionsSettings(context)
6868

6969
val sessionInitiator =
@@ -84,7 +84,7 @@ class SessionInitiatorTest {
8484
fun appForegrounded_smallInterval_doesNotInitiatesSession() {
8585
val fakeClock = FakeClock()
8686
val sessionStartCounter = SessionStartCounter()
87-
val context = FakeFirebaseApp.fakeFirebaseApp().applicationContext
87+
val context = FakeFirebaseApp().firebaseApp.applicationContext
8888
val settings = SessionsSettings(context)
8989

9090
val sessionInitiator =
@@ -105,7 +105,7 @@ class SessionInitiatorTest {
105105
fun appForegrounded_background_foreground_largeIntervals_initiatesSessions() {
106106
val fakeClock = FakeClock()
107107
val sessionStartCounter = SessionStartCounter()
108-
val context = FakeFirebaseApp.fakeFirebaseApp().applicationContext
108+
val context = FakeFirebaseApp().firebaseApp.applicationContext
109109
val settings = SessionsSettings(context)
110110

111111
val sessionInitiator =
@@ -129,7 +129,7 @@ class SessionInitiatorTest {
129129
fun appForegrounded_background_foreground_smallIntervals_doesNotInitiateNewSessions() {
130130
val fakeClock = FakeClock()
131131
val sessionStartCounter = SessionStartCounter()
132-
val context = FakeFirebaseApp.fakeFirebaseApp().applicationContext
132+
val context = FakeFirebaseApp().firebaseApp.applicationContext
133133
val settings = SessionsSettings(context)
134134

135135
val sessionInitiator =

firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionsSettingsTest.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class SessionsSettingsTest {
3232

3333
@Test
3434
fun sessionSettings_fetchDefaults() {
35-
val context = FakeFirebaseApp.fakeFirebaseApp().applicationContext
35+
val context = FakeFirebaseApp().firebaseApp.applicationContext
3636

3737
val sessionsSettings = SessionsSettings(context)
3838
assertThat(sessionsSettings.sessionsEnabled).isTrue()
@@ -46,7 +46,7 @@ class SessionsSettingsTest {
4646
metadata.putBoolean("firebase_sessions_enabled", false)
4747
metadata.putDouble("firebase_sessions_sampling_rate", 0.5)
4848
metadata.putInt("firebase_sessions_sessions_restart_timeout", 180)
49-
val context = FakeFirebaseApp.fakeFirebaseApp(metadata).applicationContext
49+
val context = FakeFirebaseApp(metadata).firebaseApp.applicationContext
5050

5151
val sessionsSettings = SessionsSettings(context)
5252
assertThat(sessionsSettings.sessionsEnabled).isFalse()
@@ -59,7 +59,7 @@ class SessionsSettingsTest {
5959
val metadata = Bundle()
6060
metadata.putBoolean("firebase_sessions_enabled", false)
6161
metadata.putDouble("firebase_sessions_sampling_rate", 0.5)
62-
val context = FakeFirebaseApp.fakeFirebaseApp(metadata).applicationContext
62+
val context = FakeFirebaseApp(metadata).firebaseApp.applicationContext
6363

6464
val sessionsSettings = SessionsSettings(context)
6565
assertThat(sessionsSettings.sessionsEnabled).isFalse()

firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/FakeFirebaseApp.kt

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,10 @@ import com.google.firebase.ktx.Firebase
2626
import com.google.firebase.ktx.initialize
2727
import org.robolectric.Shadows
2828

29-
object FakeFirebaseApp {
30-
internal val MOCK_PROJECT_ID = "project"
31-
internal val MOCK_APP_ID = "1:12345:android:app"
32-
internal val MOCK_API_KEY = "RANDOM_APIKEY_FOR_TESTING"
33-
internal val MOCK_APP_VERSION = "1.0.0"
29+
internal class FakeFirebaseApp(metadata: Bundle? = null) {
30+
val firebaseApp: FirebaseApp
3431

35-
fun fakeFirebaseApp(): FirebaseApp {
36-
return fakeFirebaseApp(null)
37-
}
38-
39-
fun fakeFirebaseApp(metadata: Bundle?): FirebaseApp {
32+
init {
4033
val shadowPackageManager =
4134
Shadows.shadowOf(ApplicationProvider.getApplicationContext<Context>().packageManager)
4235
val packageInfo =
@@ -45,12 +38,10 @@ object FakeFirebaseApp {
4538
.build()
4639
packageInfo.versionName = MOCK_APP_VERSION
4740

48-
if (metadata != null) {
49-
packageInfo.applicationInfo.metaData = metadata
50-
}
41+
metadata?.let { packageInfo.applicationInfo.metaData = it }
5142
shadowPackageManager.installPackage(packageInfo)
5243

53-
val firebaseApp =
44+
firebaseApp =
5445
Firebase.initialize(
5546
ApplicationProvider.getApplicationContext(),
5647
FirebaseOptions.Builder()
@@ -59,6 +50,12 @@ object FakeFirebaseApp {
5950
.setProjectId(MOCK_PROJECT_ID)
6051
.build()
6152
)
62-
return firebaseApp
53+
}
54+
55+
companion object {
56+
internal const val MOCK_PROJECT_ID = "project"
57+
internal const val MOCK_APP_ID = "1:12345:android:app"
58+
internal const val MOCK_API_KEY = "RANDOM_APIKEY_FOR_TESTING"
59+
internal const val MOCK_APP_VERSION = "1.0.0"
6360
}
6461
}

firebase-sessions/src/test/kotlin/com/google/firebase/sessions/testing/TestSessionEventData.kt

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,27 @@ internal object TestSessionEventData {
3131

3232
const val TEST_SESSION_TIMESTAMP_US: Long = 12340000
3333

34-
val EXPECTED_DEFAULT_SESSION_EVENT =
34+
val TEST_DATA_COLLECTION_STATUS =
35+
DataCollectionStatus(
36+
performance = DataCollectionState.COLLECTION_ENABLED,
37+
crashlytics = DataCollectionState.COLLECTION_ENABLED,
38+
sessionSamplingRate = 1.0
39+
)
40+
41+
val TEST_SESSION_DATA =
42+
SessionInfo(
43+
sessionId = "a1b2c3",
44+
firstSessionId = "a1a1a1",
45+
sessionIndex = 3,
46+
eventTimestampUs = TEST_SESSION_TIMESTAMP_US,
47+
dataCollectionStatus = TEST_DATA_COLLECTION_STATUS,
48+
firebaseInstallationId = "",
49+
)
50+
51+
val TEST_SESSION_EVENT =
3552
SessionEvent(
3653
eventType = EventType.SESSION_START,
37-
sessionData =
38-
SessionInfo(
39-
sessionId = "a1b2c3",
40-
firstSessionId = "a1a1a1",
41-
sessionIndex = 3,
42-
firebaseInstallationId = "",
43-
eventTimestampUs = TestSessionEventData.TEST_SESSION_TIMESTAMP_US,
44-
),
54+
sessionData = TEST_SESSION_DATA,
4555
applicationInfo =
4656
ApplicationInfo(
4757
appId = FakeFirebaseApp.MOCK_APP_ID,

0 commit comments

Comments
 (0)