-
Notifications
You must be signed in to change notification settings - Fork 8
/
PayloadFactorySessionTest.kt
111 lines (92 loc) · 3.34 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
104
105
106
107
108
109
110
111
package io.embrace.android.embracesdk.session
import io.embrace.android.embracesdk.FakeDeliveryService
import io.embrace.android.embracesdk.fakes.FakeClock
import io.embrace.android.embracesdk.fakes.FakeConfigService
import io.embrace.android.embracesdk.fakes.FakeProcessStateService
import io.embrace.android.embracesdk.fakes.fakeSession
import io.embrace.android.embracesdk.fakes.injection.FakeInitModule
import io.embrace.android.embracesdk.internal.spans.SpansSink
import io.embrace.android.embracesdk.session.message.PayloadFactory
import io.embrace.android.embracesdk.session.message.PayloadFactoryImpl
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 val initial = fakeSession()
private lateinit var spansSink: SpansSink
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()
spansSink = FakeInitModule(clock = clock).spansSink
}
@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.startSessionWithState(456, coldStart)
assertNull(deliveryService.lastSentCachedSession)
}
@Test
fun `spanService that is not initialized will not result in any complete spans`() {
initializeSessionService()
assertEquals(0, spansSink.completedSpans().size)
}
@Test
fun `session capture disabled after onForeground`() {
initializeSessionService()
service.startSessionWithState(clock.now(), true)
clock.tick(10000)
// missing end call simulates service being disabled halfway through.
// nothing is delivered
assertEquals(0, deliveryService.lastSentSessions.size)
service.startSessionWithState(clock.now(), false)
clock.tick(10000L)
service.endSessionWithState(initial, clock.now())
assertEquals(1, deliveryService.lastSentSessions.size)
}
private fun initializeSessionService(
isActivityInBackground: Boolean = true
) {
processStateService.isInBackground = isActivityInBackground
service = PayloadFactoryImpl(
deliveryService,
mockk(relaxed = true)
)
}
}