-
Notifications
You must be signed in to change notification settings - Fork 7
/
PayloadFactorySessionTest.kt
103 lines (88 loc) · 3.59 KB
/
PayloadFactorySessionTest.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package io.embrace.android.embracesdk.session
import io.embrace.android.embracesdk.FakeDeliveryService
import io.embrace.android.embracesdk.capture.envelope.SessionEnvelopeSource
import io.embrace.android.embracesdk.fakes.FakeClock
import io.embrace.android.embracesdk.fakes.FakeConfigService
import io.embrace.android.embracesdk.fakes.FakeEnvelopeMetadataSource
import io.embrace.android.embracesdk.fakes.FakeEnvelopeResourceSource
import io.embrace.android.embracesdk.fakes.FakeProcessStateService
import io.embrace.android.embracesdk.fakes.FakeSessionPayloadSource
import io.embrace.android.embracesdk.fakes.injection.FakeInitModule
import io.embrace.android.embracesdk.internal.spans.SpanSink
import io.embrace.android.embracesdk.session.lifecycle.ProcessState
import io.embrace.android.embracesdk.session.message.PayloadFactory
import io.embrace.android.embracesdk.session.message.PayloadFactoryImpl
import io.embrace.android.embracesdk.session.message.V1PayloadMessageCollator
import io.embrace.android.embracesdk.session.message.V2PayloadMessageCollator
import io.mockk.clearAllMocks
import io.mockk.mockk
import io.mockk.mockkStatic
import io.mockk.unmockkAll
import org.junit.After
import org.junit.AfterClass
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
import org.junit.Before
import org.junit.BeforeClass
import org.junit.Test
import java.util.concurrent.ExecutorService
internal class PayloadFactorySessionTest {
private lateinit var spanSink: SpanSink
private lateinit var service: PayloadFactory
private lateinit var deliveryService: FakeDeliveryService
private lateinit var configService: FakeConfigService
companion object {
private val processStateService = FakeProcessStateService()
private val clock = FakeClock()
@BeforeClass
@JvmStatic
fun beforeClass() {
mockkStatic(ExecutorService::class)
}
@AfterClass
@JvmStatic
fun afterClass() {
unmockkAll()
}
}
@Before
fun before() {
deliveryService = FakeDeliveryService()
configService = FakeConfigService()
spanSink = FakeInitModule(clock = clock).openTelemetryModule.spanSink
}
@After
fun after() {
clearAllMocks(answers = false)
}
@Test
fun `initializing service should detect early sessions`() {
initializeSessionService(isActivityInBackground = false)
assertNull(deliveryService.lastSentCachedSession)
}
@Test
fun `on foreground starts state session successfully for cold start`() {
initializeSessionService()
val coldStart = true
service.startPayloadWithState(ProcessState.FOREGROUND, 456, coldStart)
assertNull(deliveryService.lastSentCachedSession)
}
@Test
fun `spanService that is not initialized will not result in any complete spans`() {
initializeSessionService()
assertEquals(0, spanSink.completedSpans().size)
}
private fun initializeSessionService(
isActivityInBackground: Boolean = true
) {
processStateService.isInBackground = isActivityInBackground
val sessionEnvelopeSource = SessionEnvelopeSource(
metadataSource = FakeEnvelopeMetadataSource(),
resourceSource = FakeEnvelopeResourceSource(),
sessionPayloadSource = FakeSessionPayloadSource()
)
val v1Collator = mockk<V1PayloadMessageCollator>(relaxed = true)
val v2Collator = V2PayloadMessageCollator(v1Collator, sessionEnvelopeSource)
service = PayloadFactoryImpl(v1Collator, v2Collator, FakeConfigService())
}
}