Skip to content

Commit babffa4

Browse files
committed
Consolidate storage service fakes and usage
1 parent e95d01c commit babffa4

9 files changed

Lines changed: 120 additions & 161 deletions

File tree

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: 12 additions & 20 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
@@ -27,7 +26,6 @@ import io.embrace.android.embracesdk.testframework.assertions.getLogOfType
2726
import org.junit.Assert.assertEquals
2827
import org.junit.Assert.assertFalse
2928
import org.junit.Assert.assertTrue
30-
import org.junit.Before
3129
import org.junit.Rule
3230
import org.junit.Test
3331
import org.junit.runner.RunWith
@@ -97,32 +95,24 @@ internal class NativeCrashFeatureTest {
9795
)
9896
private val fakeSymbols = mapOf("libfoo.so" to "symbol_content")
9997

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

114-
@Before
115-
fun setUp() {
116-
cacheStorageService = FakePayloadStorageService()
117-
}
118-
119110
@Test
120111
fun `native crash with foreground session`() {
121112
testRule.runTest(
122113
instrumentedConfig = config,
123114
setupAction = {
124115
setupCachedDataFromNativeCrash(
125-
storageService = cacheStorageService,
126116
crashData = crashData
127117
)
128118
setupFakeNativeCrash(serializer, crashData)
@@ -150,7 +140,6 @@ internal class NativeCrashFeatureTest {
150140
setupAction = {
151141
val modifiedCrashData = crashData.copy(sessionMetadata = null, sessionEnvelope = null)
152142
setupCachedDataFromNativeCrash(
153-
storageService = cacheStorageService,
154143
crashData = modifiedCrashData
155144
)
156145
setupFakeNativeCrash(serializer, modifiedCrashData)
@@ -159,8 +148,11 @@ internal class NativeCrashFeatureTest {
159148
recordSession()
160149
},
161150
assertAction = {
162-
val envelope = getLogEnvelopes(2)
163-
.single { it.resource == fakeEnvelopeResource && it.metadata == fakeEnvelopeMetadata }
151+
val envelope = getSingleLogEnvelope()
152+
with(envelope) {
153+
assertEquals(fakeEnvelopeResource, resource)
154+
assertEquals(fakeEnvelopeMetadata, metadata)
155+
}
164156
val log = envelope.getLogOfType(EmbType.System.NativeCrash)
165157
assertNativeCrashSent(log, crashData, fakeSymbols)
166158
}
@@ -172,7 +164,7 @@ internal class NativeCrashFeatureTest {
172164
testRule.runTest(
173165
instrumentedConfig = config,
174166
setupAction = {
175-
setupCachedDataFromNativeCrash(cacheStorageService, crashData = crashData)
167+
setupCachedDataFromNativeCrash(crashData = crashData)
176168
},
177169
testCaseAction = {},
178170
assertAction = {
@@ -189,8 +181,8 @@ internal class NativeCrashFeatureTest {
189181
testRule.runTest(
190182
instrumentedConfig = config,
191183
setupAction = {
192-
setupCachedDataFromNativeCrash(cacheStorageService, crashData = crashData)
193-
setupCachedDataFromNativeCrash(cacheStorageService, crashData = crashData2)
184+
setupCachedDataFromNativeCrash(crashData = crashData)
185+
setupCachedDataFromNativeCrash(crashData = crashData2)
194186
setupFakeNativeCrash(serializer, crashData)
195187
setupFakeNativeCrash(serializer, crashData2)
196188
},
@@ -235,7 +227,7 @@ internal class NativeCrashFeatureTest {
235227
testRule.runTest(
236228
instrumentedConfig = FakeInstrumentedConfig(),
237229
setupAction = {
238-
setupCachedDataFromNativeCrash(cacheStorageService, crashData = crashData)
230+
setupCachedDataFromNativeCrash(crashData = crashData)
239231
setupFakeNativeCrash(serializer, crashData)
240232
},
241233
testCaseAction = {},
@@ -254,7 +246,7 @@ internal class NativeCrashFeatureTest {
254246
testRule.runTest(
255247
instrumentedConfig = config,
256248
setupAction = {
257-
setupCachedDataFromNativeCrash(cacheStorageService, crashData = crashData)
249+
setupCachedDataFromNativeCrash(crashData = crashData)
258250
setupFakeNativeCrash(serializer, crashData)
259251

260252
// simulate JNI call failing to load struct
@@ -275,7 +267,7 @@ internal class NativeCrashFeatureTest {
275267
testRule.runTest(
276268
instrumentedConfig = config,
277269
setupAction = {
278-
setupCachedDataFromNativeCrash(cacheStorageService, crashData = crashData)
270+
setupCachedDataFromNativeCrash(crashData = crashData)
279271
setupFakeNativeCrash(serializer, crashData)
280272

281273
// 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.

0 commit comments

Comments
 (0)