Skip to content

Commit ec6b6ac

Browse files
committed
RUM-10363: Fix appUptimeNs and RumResourceInputStreamTest.kt tests
1 parent 988fca2 commit ec6b6ac

File tree

4 files changed

+60
-48
lines changed

4 files changed

+60
-48
lines changed

dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/time/DefaultAppStartTimeProviderTest.kt

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import org.junit.jupiter.api.extension.ExtendWith
2121
import org.junit.jupiter.api.extension.Extensions
2222
import org.mockito.Mock
2323
import org.mockito.junit.jupiter.MockitoExtension
24+
import org.mockito.kotlin.doReturn
2425
import org.mockito.kotlin.whenever
2526
import java.util.concurrent.TimeUnit
2627

@@ -42,8 +43,8 @@ class DefaultAppStartTimeProviderTest {
4243
@LongForgery(min = 0L) fakeCurrentTimeNs: Long
4344
) {
4445
// Given
45-
whenever(mockBuildSdkVersionProvider.version).thenReturn(apiVersion)
46-
whenever(mockTimeProvider.getDeviceElapsedTimeNs()).thenReturn(fakeCurrentTimeNs)
46+
whenever(mockBuildSdkVersionProvider.version) doReturn apiVersion
47+
whenever(mockTimeProvider.getDeviceElapsedTimeNs()) doReturn fakeCurrentTimeNs
4748
val diffMs = SystemClock.elapsedRealtime() - Process.getStartElapsedRealtime()
4849
val expectedStartTimeNs = fakeCurrentTimeNs - TimeUnit.MILLISECONDS.toNanos(diffMs)
4950

@@ -63,7 +64,7 @@ class DefaultAppStartTimeProviderTest {
6364
@IntForgery(min = Build.VERSION_CODES.M, max = Build.VERSION_CODES.N) apiVersion: Int
6465
) {
6566
// Given
66-
whenever(mockBuildSdkVersionProvider.version).thenReturn(apiVersion)
67+
whenever(mockBuildSdkVersionProvider.version) doReturn apiVersion
6768
val startTimeNs = DdRumContentProvider.createTimeNs
6869

6970
// When
@@ -80,25 +81,27 @@ class DefaultAppStartTimeProviderTest {
8081
@Test
8182
fun `M return app uptime W appUptimeNs`(
8283
@IntForgery(min = Build.VERSION_CODES.N) apiVersion: Int,
83-
@LongForgery(min = 1000000L) fakeCurrentTimeNs: Long,
84-
@LongForgery(min = 100L, max = 999999L) fakeUptimeNs: Long
84+
@LongForgery(min = 1000000L) fakeStartTimeNs: Long,
85+
@LongForgery(min = 1000L, max = 100000L) fakeUptimeNs: Long
8586
) {
8687
// Given
87-
whenever(mockBuildSdkVersionProvider.version).thenReturn(apiVersion)
88+
whenever(mockBuildSdkVersionProvider.version) doReturn apiVersion
89+
8890
val diffMs = SystemClock.elapsedRealtime() - Process.getStartElapsedRealtime()
89-
val fakeStartTimeNs = fakeCurrentTimeNs - TimeUnit.MILLISECONDS.toNanos(diffMs)
91+
val fakeCurrentTimeNs = fakeStartTimeNs + TimeUnit.MILLISECONDS.toNanos(diffMs)
92+
9093
whenever(mockTimeProvider.getDeviceElapsedTimeNs())
91-
.thenReturn(fakeCurrentTimeNs)
92-
.thenReturn(fakeStartTimeNs + fakeUptimeNs)
94+
.doReturn(fakeCurrentTimeNs)
95+
.doReturn(fakeStartTimeNs + fakeUptimeNs)
9396

94-
// When
95-
val testedAppStartTimeProvider = DefaultAppStartTimeProvider(
97+
val testedProvider = DefaultAppStartTimeProvider(
9698
mockTimeProvider,
9799
mockBuildSdkVersionProvider
98100
)
99-
// First call initializes appStartTimeNs
100-
testedAppStartTimeProvider.appStartTimeNs
101-
val uptime = testedAppStartTimeProvider.appUptimeNs
101+
102+
// When
103+
testedProvider.appStartTimeNs
104+
val uptime = testedProvider.appUptimeNs
102105

103106
// Then
104107
assertThat(uptime).isEqualTo(fakeUptimeNs)
@@ -107,26 +110,27 @@ class DefaultAppStartTimeProviderTest {
107110
@Test
108111
fun `M return increasing uptime W appUptimeNs called multiple times`(
109112
@IntForgery(min = Build.VERSION_CODES.N) apiVersion: Int,
110-
@LongForgery(min = 1000000L) fakeCurrentTimeNs: Long
113+
@LongForgery(min = 1000000L) fakeStartTimeNs: Long
111114
) {
112115
// Given
113-
whenever(mockBuildSdkVersionProvider.version).thenReturn(apiVersion)
116+
whenever(mockBuildSdkVersionProvider.version) doReturn apiVersion
114117
val diffMs = SystemClock.elapsedRealtime() - Process.getStartElapsedRealtime()
115-
val fakeStartTimeNs = fakeCurrentTimeNs - TimeUnit.MILLISECONDS.toNanos(diffMs)
118+
val fakeCurrentTimeNs = fakeStartTimeNs + TimeUnit.MILLISECONDS.toNanos(diffMs)
119+
116120
whenever(mockTimeProvider.getDeviceElapsedTimeNs())
117-
.thenReturn(fakeCurrentTimeNs)
118-
.thenReturn(fakeStartTimeNs + 100L)
119-
.thenReturn(fakeStartTimeNs + 200L)
121+
.doReturn(fakeCurrentTimeNs)
122+
.doReturn(fakeStartTimeNs + 100L)
123+
.doReturn(fakeStartTimeNs + 200L)
120124

121-
// When
122-
val testedAppStartTimeProvider = DefaultAppStartTimeProvider(
125+
val testedProvider = DefaultAppStartTimeProvider(
123126
mockTimeProvider,
124127
mockBuildSdkVersionProvider
125128
)
126-
// First call initializes appStartTimeNs
127-
testedAppStartTimeProvider.appStartTimeNs
128-
val uptime1 = testedAppStartTimeProvider.appUptimeNs
129-
val uptime2 = testedAppStartTimeProvider.appUptimeNs
129+
130+
// When
131+
testedProvider.appStartTimeNs
132+
val uptime1 = testedProvider.appUptimeNs
133+
val uptime2 = testedProvider.appUptimeNs
130134

131135
// Then
132136
assertThat(uptime2).isGreaterThan(uptime1)

features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/resource/ContextExtTest.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ package com.datadog.android.rum.resource
99
import android.content.Context
1010
import android.content.res.AssetManager
1111
import android.content.res.Resources
12-
import com.datadog.android.api.SdkCore
12+
import com.datadog.android.api.feature.FeatureSdkCore
1313
import com.datadog.android.internal.utils.toHexString
1414
import com.datadog.tools.unit.forge.BaseConfigurator
1515
import fr.xgouchet.elmyr.annotation.IntForgery
@@ -45,7 +45,7 @@ class ContextExtTest {
4545
lateinit var mockContext: Context
4646

4747
@Mock
48-
lateinit var mockSdkCore: SdkCore
48+
lateinit var mockSdkCore: FeatureSdkCore
4949

5050
@Mock
5151
lateinit var mockAssetManager: AssetManager
@@ -57,6 +57,8 @@ class ContextExtTest {
5757
fun `set up`() {
5858
whenever(mockContext.assets) doReturn mockAssetManager
5959
whenever(mockContext.resources) doReturn mockResources
60+
61+
whenever(mockSdkCore.timeProvider) doReturn mock()
6062
}
6163

6264
@Test

features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/resource/InputStreamExtTest.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
package com.datadog.android.rum.resource
88

9-
import com.datadog.android.api.SdkCore
9+
import com.datadog.android.api.feature.FeatureSdkCore
1010
import com.datadog.tools.unit.forge.BaseConfigurator
1111
import fr.xgouchet.elmyr.annotation.StringForgery
1212
import fr.xgouchet.elmyr.junit5.ForgeConfiguration
@@ -17,7 +17,9 @@ import org.junit.jupiter.api.extension.ExtendWith
1717
import org.junit.jupiter.api.extension.Extensions
1818
import org.mockito.junit.jupiter.MockitoExtension
1919
import org.mockito.junit.jupiter.MockitoSettings
20+
import org.mockito.kotlin.doReturn
2021
import org.mockito.kotlin.mock
22+
import org.mockito.kotlin.whenever
2123
import org.mockito.quality.Strictness
2224
import java.io.InputStream
2325

@@ -37,7 +39,8 @@ class InputStreamExtTest {
3739
) {
3840
// Given
3941
val mockIS: InputStream = mock()
40-
val mockSdkCore: SdkCore = mock()
42+
val mockSdkCore: FeatureSdkCore = mock()
43+
whenever(mockSdkCore.timeProvider) doReturn mock()
4144

4245
// When
4346
val result = mockIS.asRumResource(url, mockSdkCore)

features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/resource/RumResourceInputStreamTest.kt

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
package com.datadog.android.rum.resource
88

9+
import com.datadog.android.api.feature.FeatureSdkCore
10+
import com.datadog.android.internal.time.TimeProvider
911
import com.datadog.android.rum.RumErrorSource
1012
import com.datadog.android.rum.RumResourceKind
1113
import com.datadog.android.rum.internal.domain.event.ResourceTiming
@@ -45,10 +47,7 @@ import org.mockito.quality.Strictness
4547
import java.io.BufferedReader
4648
import java.io.IOException
4749
import java.io.InputStream
48-
import java.lang.RuntimeException
49-
import java.util.concurrent.TimeUnit
5050
import kotlin.math.min
51-
import kotlin.system.measureNanoTime
5251

5352
@Extensions(
5453
ExtendWith(MockitoExtension::class),
@@ -64,6 +63,9 @@ internal class RumResourceInputStreamTest {
6463
@Mock
6564
lateinit var mockInputStream: InputStream
6665

66+
@Mock
67+
lateinit var mockTimeProvider: TimeProvider
68+
6769
@StringForgery
6870
lateinit var fakeUrl: String
6971

@@ -72,6 +74,7 @@ internal class RumResourceInputStreamTest {
7274

7375
@BeforeEach
7476
fun `set up`() {
77+
whenever((rumMonitor.mockSdkCore as FeatureSdkCore).timeProvider) doReturn mockTimeProvider
7578
testedInputStream = RumResourceInputStream(mockInputStream, fakeUrl, rumMonitor.mockSdkCore)
7679

7780
// M start resource W init
@@ -658,24 +661,26 @@ internal class RumResourceInputStreamTest {
658661

659662
@Test
660663
fun `M register resource with timing W read() + close() {bufferedReader}`(
661-
@StringForgery content: String
664+
@StringForgery content: String,
665+
@LongForgery(min = 0L) fakeCallStartNs: Long,
666+
@LongForgery(min = 0L) fakeDownloadStartNs: Long,
667+
@LongForgery(min = 0L) fakeDownloadDurationNs: Long
662668
) {
663669
// Given
664670
val contentBytes = content.toByteArray()
665671
val inputStream = contentBytes.inputStream()
672+
val fakeFirstByteNs = fakeCallStartNs + fakeDownloadStartNs
673+
val fakeLastByteNs = fakeFirstByteNs + fakeDownloadDurationNs
674+
675+
whenever(mockTimeProvider.getDeviceElapsedTimeNs())
676+
.thenReturn(fakeCallStartNs)
677+
.thenReturn(fakeFirstByteNs)
678+
.thenReturn(fakeLastByteNs)
679+
666680
testedInputStream = RumResourceInputStream(inputStream, fakeUrl, rumMonitor.mockSdkCore)
667-
Thread.sleep(500)
668-
var download: Long
669681

670682
// When
671-
val result = testedInputStream.bufferedReader().use {
672-
var text: String
673-
download = measureNanoTime {
674-
text = it.readText()
675-
}
676-
Thread.sleep(500)
677-
text
678-
}
683+
val result = testedInputStream.bufferedReader().use { it.readText() }
679684

680685
// Then
681686
assertThat(result).isEqualTo(content)
@@ -697,10 +702,8 @@ internal class RumResourceInputStreamTest {
697702
assertThat(firstValue.dnsDuration).isEqualTo(0L)
698703
assertThat(firstValue.sslDuration).isEqualTo(0L)
699704
assertThat(firstValue.firstByteDuration).isEqualTo(0L)
700-
assertThat(firstValue.downloadStart).isGreaterThan(
701-
TimeUnit.MILLISECONDS.toNanos(500)
702-
)
703-
assertThat(firstValue.downloadDuration).isLessThanOrEqualTo(download)
705+
assertThat(firstValue.downloadStart).isEqualTo(fakeDownloadStartNs)
706+
assertThat(firstValue.downloadDuration).isEqualTo(fakeDownloadDurationNs)
704707
}
705708
verify(rumMonitor.mockInstance).stopResource(
706709
testedInputStream.key,

0 commit comments

Comments
 (0)