Skip to content

Commit e475950

Browse files
committed
Consolidate storage service fakes and usage
1 parent 40b2f28 commit e475950

File tree

9 files changed

+115
-159
lines changed

9 files changed

+115
-159
lines changed

embrace-android-sdk/src/integrationTest/kotlin/io/embrace/android/embracesdk/testcases/features/DeliveryConnectivityFeatureTest.kt

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import io.embrace.android.embracesdk.fixtures.fakeSessionStoredTelemetryMetadata
77
import io.embrace.android.embracesdk.fixtures.fakeSessionStoredTelemetryMetadata2
88
import io.embrace.android.embracesdk.internal.comms.delivery.NetworkStatus
99
import io.embrace.android.embracesdk.testframework.SdkIntegrationTestRule
10+
import io.embrace.android.embracesdk.testframework.actions.EmbraceSetupInterface
1011
import org.junit.Assert.assertEquals
11-
import org.junit.Before
1212
import org.junit.Rule
1313
import org.junit.Test
1414
import org.junit.runner.RunWith
@@ -17,14 +17,13 @@ import org.junit.runner.RunWith
1717
internal class DeliveryConnectivityFeatureTest {
1818

1919
private lateinit var payloadStorageService: FakePayloadStorageService
20-
20+
2121
@Rule
2222
@JvmField
23-
val testRule: SdkIntegrationTestRule = SdkIntegrationTestRule()
24-
25-
@Before
26-
fun setUp() {
27-
payloadStorageService = FakePayloadStorageService()
23+
val testRule: SdkIntegrationTestRule = SdkIntegrationTestRule {
24+
EmbraceSetupInterface(fakeStorageLayer = true).also {
25+
payloadStorageService = checkNotNull(it.fakePayloadStorageService)
26+
}
2827
}
2928

3029
@Test
@@ -36,7 +35,6 @@ internal class DeliveryConnectivityFeatureTest {
3635
setupAction = {
3736
fakeNetworkConnectivityService.networkStatus = NetworkStatus.NOT_REACHABLE
3837
payloadStorageService.addPayload(sessionMetadata, envelope)
39-
payloadStorageServiceProvider = { payloadStorageService }
4038
},
4139
testCaseAction = {},
4240
assertAction = {
@@ -69,7 +67,6 @@ internal class DeliveryConnectivityFeatureTest {
6967
setupAction = {
7068
fakeNetworkConnectivityService.networkStatus = NetworkStatus.NOT_REACHABLE
7169
payloadStorageService.addPayload(sessionMetadata, envelope)
72-
payloadStorageServiceProvider = { payloadStorageService }
7370
},
7471
testCaseAction = {
7572
recordSession()
@@ -94,7 +91,6 @@ internal class DeliveryConnectivityFeatureTest {
9491
fakeSessionStoredTelemetryMetadata2,
9592
fakeSessionEnvelope(sessionId = "2", startMs = startMs + 1000)
9693
)
97-
payloadStorageServiceProvider = { payloadStorageService }
9894
},
9995
testCaseAction = {},
10096
assertAction = {

embrace-android-sdk/src/integrationTest/kotlin/io/embrace/android/embracesdk/testcases/features/NativeCrashFeatureTest.kt

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package io.embrace.android.embracesdk.testcases.features
22

33
import androidx.test.ext.junit.runners.AndroidJUnit4
44
import io.embrace.android.embracesdk.assertions.getSessionId
5-
import io.embrace.android.embracesdk.fakes.FakePayloadStorageService
65
import io.embrace.android.embracesdk.fakes.TestPlatformSerializer
76
import io.embrace.android.embracesdk.fakes.config.FakeEnabledFeatureConfig
87
import io.embrace.android.embracesdk.fakes.config.FakeInstrumentedConfig
@@ -25,7 +24,6 @@ import io.embrace.android.embracesdk.testframework.assertions.getLastLog
2524
import org.junit.Assert.assertEquals
2625
import org.junit.Assert.assertFalse
2726
import org.junit.Assert.assertTrue
28-
import org.junit.Before
2927
import org.junit.Rule
3028
import org.junit.Test
3129
import org.junit.runner.RunWith
@@ -95,32 +93,24 @@ internal class NativeCrashFeatureTest {
9593
)
9694
private val fakeSymbols = mapOf("libfoo.so" to "symbol_content")
9795

98-
private lateinit var cacheStorageService: FakePayloadStorageService
99-
10096
@Rule
10197
@JvmField
10298
val testRule: SdkIntegrationTestRule = SdkIntegrationTestRule {
10399
EmbraceSetupInterface(
104-
processIdentifier = "8115ec91-3e5e-4d8a-816d-cc40306f9822"
100+
fakeStorageLayer = true
105101
).apply {
106102
getEmbLogger().throwOnInternalError = false
107103
}.also {
108104
it.fakeSymbolService.symbolsForCurrentArch.putAll(fakeSymbols)
109105
}
110106
}
111107

112-
@Before
113-
fun setUp() {
114-
cacheStorageService = FakePayloadStorageService()
115-
}
116-
117108
@Test
118109
fun `native crash with foreground session`() {
119110
testRule.runTest(
120111
instrumentedConfig = config,
121112
setupAction = {
122113
setupCachedDataFromNativeCrash(
123-
storageService = cacheStorageService,
124114
crashData = crashData
125115
)
126116
setupFakeNativeCrash(serializer, crashData)
@@ -148,7 +138,6 @@ internal class NativeCrashFeatureTest {
148138
setupAction = {
149139
val modifiedCrashData = crashData.copy(sessionMetadata = null, sessionEnvelope = null)
150140
setupCachedDataFromNativeCrash(
151-
storageService = cacheStorageService,
152141
crashData = modifiedCrashData
153142
)
154143
setupFakeNativeCrash(serializer, modifiedCrashData)
@@ -173,7 +162,7 @@ internal class NativeCrashFeatureTest {
173162
testRule.runTest(
174163
instrumentedConfig = config,
175164
setupAction = {
176-
setupCachedDataFromNativeCrash(cacheStorageService, crashData = crashData)
165+
setupCachedDataFromNativeCrash(crashData = crashData)
177166
},
178167
testCaseAction = {},
179168
assertAction = {
@@ -190,8 +179,8 @@ internal class NativeCrashFeatureTest {
190179
testRule.runTest(
191180
instrumentedConfig = config,
192181
setupAction = {
193-
setupCachedDataFromNativeCrash(cacheStorageService, crashData = crashData)
194-
setupCachedDataFromNativeCrash(cacheStorageService, crashData = crashData2)
182+
setupCachedDataFromNativeCrash(crashData = crashData)
183+
setupCachedDataFromNativeCrash(crashData = crashData2)
195184
setupFakeNativeCrash(serializer, crashData)
196185
setupFakeNativeCrash(serializer, crashData2)
197186
},
@@ -236,7 +225,7 @@ internal class NativeCrashFeatureTest {
236225
testRule.runTest(
237226
instrumentedConfig = FakeInstrumentedConfig(),
238227
setupAction = {
239-
setupCachedDataFromNativeCrash(cacheStorageService, crashData = crashData)
228+
setupCachedDataFromNativeCrash(crashData = crashData)
240229
setupFakeNativeCrash(serializer, crashData)
241230
},
242231
testCaseAction = {},
@@ -255,7 +244,7 @@ internal class NativeCrashFeatureTest {
255244
testRule.runTest(
256245
instrumentedConfig = config,
257246
setupAction = {
258-
setupCachedDataFromNativeCrash(cacheStorageService, crashData = crashData)
247+
setupCachedDataFromNativeCrash(crashData = crashData)
259248
setupFakeNativeCrash(serializer, crashData)
260249

261250
// simulate JNI call failing to load struct
@@ -276,7 +265,7 @@ internal class NativeCrashFeatureTest {
276265
testRule.runTest(
277266
instrumentedConfig = config,
278267
setupAction = {
279-
setupCachedDataFromNativeCrash(cacheStorageService, crashData = crashData)
268+
setupCachedDataFromNativeCrash(crashData = crashData)
280269
setupFakeNativeCrash(serializer, crashData)
281270

282271
// simulate bad JSON

embrace-android-sdk/src/integrationTest/kotlin/io/embrace/android/embracesdk/testcases/features/ResurrectionFeatureTest.kt

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,13 @@ internal class ResurrectionFeatureTest {
4141
@Rule
4242
@JvmField
4343
val testRule: SdkIntegrationTestRule = SdkIntegrationTestRule {
44-
EmbraceSetupInterface().apply {
44+
EmbraceSetupInterface(
45+
fakeStorageLayer = true
46+
).apply {
4547
getEmbLogger().throwOnInternalError = false
46-
cacheStorageService = FakePayloadStorageService(processIdProvider = getProcessIdentifierProvider())
48+
fakeSymbolService.symbolsForCurrentArch.putAll(fakeSymbols)
4749
}.also {
48-
it.fakeSymbolService.symbolsForCurrentArch.putAll(fakeSymbols)
50+
cacheStorageService = checkNotNull(it.fakeCacheStorageService)
4951
}
5052
}
5153

@@ -60,7 +62,7 @@ internal class ResurrectionFeatureTest {
6062
testRule.runTest(
6163
instrumentedConfig = FakeInstrumentedConfig(enabledFeatures = FakeEnabledFeatureConfig(nativeCrashCapture = true)),
6264
setupAction = {
63-
setupCachedDataFromNativeCrash(cacheStorageService, crashData = crashData)
65+
setupCachedDataFromNativeCrash(crashData = crashData)
6466
setupFakeNativeCrash(serializer, crashData)
6567
},
6668
testCaseAction = {},
@@ -90,7 +92,7 @@ internal class ResurrectionFeatureTest {
9092
testRule.runTest(
9193
instrumentedConfig = FakeInstrumentedConfig(enabledFeatures = FakeEnabledFeatureConfig(nativeCrashCapture = true)),
9294
setupAction = {
93-
setupCachedDataFromNativeCrash(cacheStorageService, crashData = crashData)
95+
setupCachedDataFromNativeCrash(crashData = crashData)
9496
setupFakeNativeCrash(serializer, crashData)
9597
},
9698
testCaseAction = {},
@@ -125,7 +127,7 @@ internal class ResurrectionFeatureTest {
125127
)
126128
),
127129
setupAction = {
128-
setupCachedDataFromNativeCrash(cacheStorageService, crashData = crashData)
130+
setupCachedDataFromNativeCrash(crashData = crashData)
129131
setupFakeNativeCrash(serializer, crashData)
130132
},
131133
testCaseAction = {
@@ -155,7 +157,7 @@ internal class ResurrectionFeatureTest {
155157
testRule.runTest(
156158
instrumentedConfig = FakeInstrumentedConfig(enabledFeatures = FakeEnabledFeatureConfig(nativeCrashCapture = true)),
157159
setupAction = {
158-
setupCachedDataFromNativeCrash(cacheStorageService, crashData = crashData)
160+
setupCachedDataFromNativeCrash(crashData = crashData)
159161
},
160162
testCaseAction = {},
161163
assertAction = {
@@ -173,9 +175,6 @@ internal class ResurrectionFeatureTest {
173175
persistedRemoteConfig = RemoteConfig(
174176
backgroundActivityConfig = BackgroundActivityRemoteConfig(100f)
175177
),
176-
setupAction = {
177-
cacheStorageServiceProvider = { cacheStorageService }
178-
},
179178
testCaseAction = {
180179
recordSession()
181180
recordSession()
@@ -193,9 +192,6 @@ internal class ResurrectionFeatureTest {
193192
persistedRemoteConfig = RemoteConfig(
194193
backgroundActivityConfig = BackgroundActivityRemoteConfig(0f)
195194
),
196-
setupAction = {
197-
cacheStorageServiceProvider = { cacheStorageService }
198-
},
199195
testCaseAction = {
200196
recordSession()
201197
recordSession()

embrace-android-sdk/src/integrationTest/kotlin/io/embrace/android/embracesdk/testcases/session/PeriodicSessionCacheTest.kt

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,23 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
55
import io.embrace.android.embracesdk.assertions.findSessionSpan
66
import io.embrace.android.embracesdk.assertions.findSpanSnapshotOfType
77
import io.embrace.android.embracesdk.assertions.returnIfConditionMet
8+
import io.embrace.android.embracesdk.fakes.FakePayloadStorageService
89
import io.embrace.android.embracesdk.fakes.TestPlatformSerializer
910
import io.embrace.android.embracesdk.internal.arch.schema.EmbType
11+
import io.embrace.android.embracesdk.internal.delivery.PayloadType
1012
import io.embrace.android.embracesdk.internal.delivery.SupportedEnvelopeType
1113
import io.embrace.android.embracesdk.internal.payload.Envelope
1214
import io.embrace.android.embracesdk.internal.payload.SessionPayload
1315
import io.embrace.android.embracesdk.internal.spans.getSessionProperty
14-
import io.embrace.android.embracesdk.testframework.FakeCacheStorageService
1516
import io.embrace.android.embracesdk.testframework.SdkIntegrationTestRule
17+
import io.embrace.android.embracesdk.testframework.actions.EmbraceSetupInterface
1618
import io.embrace.android.embracesdk.testframework.assertions.assertMatches
1719
import org.junit.Assert.assertEquals
1820
import org.junit.Rule
1921
import org.junit.Test
2022
import org.junit.runner.RunWith
2123
import org.robolectric.annotation.Config
24+
import java.util.zip.GZIPInputStream
2225

2326
/**
2427
* Asserts that the session is periodically cached.
@@ -27,30 +30,30 @@ import org.robolectric.annotation.Config
2730
@RunWith(AndroidJUnit4::class)
2831
internal class PeriodicSessionCacheTest {
2932

33+
private lateinit var cacheStorageService: FakePayloadStorageService
34+
3035
@Rule
3136
@JvmField
32-
val testRule: SdkIntegrationTestRule = SdkIntegrationTestRule()
37+
val testRule: SdkIntegrationTestRule = SdkIntegrationTestRule {
38+
EmbraceSetupInterface(fakeStorageLayer = true).also {
39+
cacheStorageService = checkNotNull(it.fakeCacheStorageService)
40+
}
41+
}
3342

3443
@Test
3544
fun `session is periodically cached`() {
3645
var snapshot: Envelope<SessionPayload>? = null
3746
testRule.runTest(
38-
setupAction = {
39-
cacheStorageServiceProvider = ::FakeCacheStorageService
40-
},
4147
testCaseAction = {
42-
val cacheStorageService = getCacheStorageService()
4348
recordSession {
44-
assertEquals(0, cacheStorageService.storedPayloads.size)
49+
assertEquals(0, cacheStorageService.storedPayloadCount())
4550
embrace.addSessionProperty("Test", "Test", true)
46-
val dataSupplier = { cacheStorageService.storedPayloads }
4751
snapshot = returnIfConditionMet(
4852
waitTimeMs = 10000,
4953
desiredValueSupplier = { cacheStorageService.getLastCachedSession() },
50-
dataProvider = dataSupplier,
54+
dataProvider = { cacheStorageService.getLastCachedSession() },
5155
condition = { data ->
52-
data.size > 0 && cacheStorageService.getLastCachedSession().findSpanSnapshotOfType(EmbType.Ux.Session)
53-
.getSessionProperty("Test") != null
56+
data != null && data.findSpanSnapshotOfType(EmbType.Ux.Session).getSessionProperty("Test") != null
5457
},
5558
errorMessageSupplier = { "Timeout waiting for cached session" }
5659
)
@@ -80,14 +83,18 @@ internal class PeriodicSessionCacheTest {
8083
)
8184
}
8285

83-
private fun FakeCacheStorageService.getLastCachedSession(): Envelope<SessionPayload> {
84-
return TestPlatformSerializer().fromJson(
85-
checkNotNull(loadPayloadAsStream(storedPayloads.keys.last())),
86-
checkNotNull(SupportedEnvelopeType.SESSION.serializedType)
87-
)
88-
}
89-
90-
private fun getCacheStorageService(): FakeCacheStorageService {
91-
return testRule.bootstrapper.deliveryModule.cacheStorageService as FakeCacheStorageService
92-
}
86+
private fun FakePayloadStorageService.getLastCachedSession(): Envelope<SessionPayload>? =
87+
storedPayloadMetadata()
88+
.filter { it.payloadType == PayloadType.SESSION }
89+
.let { sessions ->
90+
return if (sessions.isEmpty()) {
91+
null
92+
} else {
93+
val lastSessionMetadata = sessions.last()
94+
return TestPlatformSerializer().fromJson(
95+
GZIPInputStream(loadPayloadAsStream(lastSessionMetadata)),
96+
checkNotNull(SupportedEnvelopeType.SESSION.serializedType)
97+
)
98+
}
99+
}
93100
}

embrace-android-sdk/src/integrationTest/kotlin/io/embrace/android/embracesdk/testframework/FakeCacheStorageService.kt

Lines changed: 0 additions & 41 deletions
This file was deleted.

embrace-android-sdk/src/integrationTest/kotlin/io/embrace/android/embracesdk/testframework/actions/EmbraceActionInterface.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import android.app.Activity
44
import androidx.lifecycle.Lifecycle
55
import io.embrace.android.embracesdk.Embrace
66
import io.embrace.android.embracesdk.fakes.FakeClock
7-
import io.embrace.android.embracesdk.fakes.FakeNetworkConnectivityService
87
import io.embrace.android.embracesdk.internal.comms.delivery.NetworkStatus
98
import io.embrace.android.embracesdk.internal.injection.ModuleInitBootstrapper
109
import org.robolectric.Robolectric
@@ -56,8 +55,7 @@ internal class EmbraceActionInterface(
5655
}
5756

5857
fun simulateNetworkChange(status: NetworkStatus) {
59-
val service = (bootstrapper.essentialServiceModule.networkConnectivityService as FakeNetworkConnectivityService)
60-
service.networkStatus = status
58+
setup.fakeNetworkConnectivityService.networkStatus = status
6159
}
6260

6361
internal fun simulateOpeningActivities(

0 commit comments

Comments
 (0)