-
Notifications
You must be signed in to change notification settings - Fork 7
/
ThermalStateTest.kt
123 lines (108 loc) · 5.25 KB
/
ThermalStateTest.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
112
113
114
115
116
117
118
119
120
121
122
123
package io.embrace.android.embracesdk.features
import android.os.Build
import android.os.PowerManager
import androidx.test.ext.junit.runners.AndroidJUnit4
import io.embrace.android.embracesdk.IntegrationTestRule
import io.embrace.android.embracesdk.arch.schema.EmbType
import io.embrace.android.embracesdk.config.remote.DataRemoteConfig
import io.embrace.android.embracesdk.config.remote.RemoteConfig
import io.embrace.android.embracesdk.fakes.fakeAutoDataCaptureBehavior
import io.embrace.android.embracesdk.fakes.fakeSdkModeBehavior
import io.embrace.android.embracesdk.findSpanAttribute
import io.embrace.android.embracesdk.findSpanSnapshotsOfType
import io.embrace.android.embracesdk.findSpansOfType
import io.embrace.android.embracesdk.internal.clock.nanosToMillis
import io.embrace.android.embracesdk.recordSession
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.annotation.Config
import org.robolectric.shadows.ShadowActivityManager
@Config(sdk = [Build.VERSION_CODES.Q], shadows = [ShadowActivityManager::class])
@RunWith(AndroidJUnit4::class)
internal class ThermalStateFeatureTest {
@Rule
@JvmField
val testRule: IntegrationTestRule = IntegrationTestRule()
@Before
fun setUp() {
setUpThermalCapture()
}
@Test
fun `single thermal state change generates a snapshot`() {
with(testRule) {
var startTimeMs = 0L
val message = checkNotNull(harness.recordSession {
startTimeMs = harness.overriddenClock.now()
val dataSource =
checkNotNull(bootstrapper.dataSourceModule.thermalStateDataSource?.dataSource)
dataSource.handleThermalStateChange(PowerManager.THERMAL_STATUS_NONE)
})
val snapshots = message.findSpanSnapshotsOfType(EmbType.Performance.ThermalState)
assertEquals(1, snapshots.size)
val snapshot = snapshots.single()
assertEquals("emb-thermal-state", snapshot.name)
assertEquals("perf.thermal_state", snapshot.findSpanAttribute("emb.type"))
assertEquals(PowerManager.THERMAL_STATUS_NONE.toString(), snapshot.findSpanAttribute("status"))
assertEquals(startTimeMs, snapshot.startTimeNanos.nanosToMillis())
}
}
@Test
fun `multiple thermal state changes generate spans`() {
val tickTimeMs = 3000L
with(testRule) {
var startTimeMs = 0L
val message = checkNotNull(harness.recordSession {
startTimeMs = harness.overriddenClock.now()
val dataSource =
checkNotNull(bootstrapper.dataSourceModule.thermalStateDataSource?.dataSource)
dataSource.handleThermalStateChange(PowerManager.THERMAL_STATUS_CRITICAL)
harness.overriddenClock.tick(tickTimeMs)
dataSource.handleThermalStateChange(PowerManager.THERMAL_STATUS_MODERATE)
harness.overriddenClock.tick(tickTimeMs)
dataSource.handleThermalStateChange(PowerManager.THERMAL_STATUS_NONE)
})
val spans = message.findSpansOfType(EmbType.Performance.ThermalState)
assertEquals(2, spans.size)
spans.forEach {
assertEquals("emb-thermal-state", it.name)
assertEquals("perf.thermal_state", it.findSpanAttribute("emb.type"))
}
val firstSpan = spans.first()
assertEquals(PowerManager.THERMAL_STATUS_CRITICAL.toString(), firstSpan.findSpanAttribute("status"))
assertEquals(startTimeMs, firstSpan.startTimeNanos.nanosToMillis())
assertEquals(startTimeMs + tickTimeMs, firstSpan.endTimeNanos.nanosToMillis())
val secondSpan = spans.last()
assertEquals(PowerManager.THERMAL_STATUS_MODERATE.toString(), secondSpan.findSpanAttribute("status"))
assertEquals(startTimeMs + tickTimeMs, secondSpan.startTimeNanos.nanosToMillis())
assertEquals(startTimeMs + tickTimeMs * 2, secondSpan.endTimeNanos.nanosToMillis())
val snapshots = message.findSpanSnapshotsOfType(EmbType.Performance.ThermalState)
assertEquals(1, snapshots.size)
val snapshot = snapshots.single()
assertEquals("emb-thermal-state", snapshot.name)
assertEquals("perf.thermal_state", snapshot.findSpanAttribute("emb.type"))
assertEquals(PowerManager.THERMAL_STATUS_NONE.toString(), snapshot.findSpanAttribute("status"))
assertEquals(startTimeMs + tickTimeMs * 2, snapshot.startTimeNanos.nanosToMillis())
}
}
private fun setUpThermalCapture() {
testRule.harness.overriddenConfigService.autoDataCaptureBehavior =
fakeAutoDataCaptureBehavior(
remoteCfg = {
RemoteConfig(
dataConfig = DataRemoteConfig(pctThermalStatusEnabled = 100.0f)
)
}
)
testRule.harness.overriddenConfigService.sdkModeBehavior =
fakeSdkModeBehavior(
remoteCfg = {
RemoteConfig(
pctBetaFeaturesEnabled = 100.0f
)
}
)
}
}