Skip to content

Commit a67406e

Browse files
authored
Merge pull request #2412 from DataDog/xgouchet/flaky_deterministic_tests
Fix flaky test
2 parents 9c591a9 + e964187 commit a67406e

File tree

1 file changed

+15
-16
lines changed

1 file changed

+15
-16
lines changed

Diff for: dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/sampling/DeterministicSamplerTest.kt

+15-16
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ package com.datadog.android.core.sampling
22

33
import com.datadog.android.utils.forge.Configurator
44
import com.datadog.trace.sampling.JavaDeterministicSampler
5+
import fr.xgouchet.elmyr.Forge
56
import fr.xgouchet.elmyr.annotation.FloatForgery
6-
import fr.xgouchet.elmyr.annotation.LongForgery
77
import fr.xgouchet.elmyr.junit5.ForgeConfiguration
88
import fr.xgouchet.elmyr.junit5.ForgeExtension
99
import org.assertj.core.api.Assertions.assertThat
@@ -36,11 +36,15 @@ internal class DeterministicSamplerTest {
3636

3737
private var stubIdConverter: (ULong) -> ULong = { it }
3838

39+
private lateinit var fakeTraceIds: List<Long>
40+
3941
@Mock
4042
lateinit var mockSampleRateProvider: () -> Float
4143

4244
@BeforeEach
43-
fun `set up`() {
45+
fun `set up`(forge: Forge) {
46+
val listSize = forge.anInt(256, 1024)
47+
fakeTraceIds = forge.aList(listSize) { aLong() }
4448
testedSampler = DeterministicSampler(
4549
stubIdConverter,
4650
mockSampleRateProvider
@@ -65,15 +69,14 @@ internal class DeterministicSamplerTest {
6569

6670
@RepeatedTest(128)
6771
fun `M return consistent results W sample() {java implementation}`(
68-
@LongForgery traceIds: List<Long>,
6972
@FloatForgery(min = 0f, max = 100f) fakeSampleRate: Float
7073
) {
7174
// Given
7275
whenever(mockSampleRateProvider.invoke()) doReturn fakeSampleRate
7376
val javaSampler = JavaDeterministicSampler(fakeSampleRate / 100f)
7477

7578
// When
76-
traceIds.forEach {
79+
fakeTraceIds.forEach {
7780
val result = testedSampler.sample(it.toULong())
7881
val expectedResult = javaSampler.sample(it)
7982

@@ -83,34 +86,32 @@ internal class DeterministicSamplerTest {
8386

8487
@RepeatedTest(128)
8588
fun `the sampler will sample the values based on the fixed sample rate`(
86-
@LongForgery traceIds: List<Long>,
8789
@FloatForgery(min = 0f, max = 100f) fakeSampleRate: Float
8890
) {
8991
// Given
9092
whenever(mockSampleRateProvider.invoke()) doReturn fakeSampleRate
9193
var sampledIn = 0
9294

9395
// When
94-
traceIds.forEach {
96+
fakeTraceIds.forEach {
9597
if (testedSampler.sample(it.toULong())) {
9698
sampledIn++
9799
}
98100
}
99101

100102
// Then
101-
assertThat(sampledIn.toFloat()).isCloseTo(traceIds.size * fakeSampleRate / 100f, Offset.offset(7.5f))
103+
val offset = 2.5f * fakeTraceIds.size
104+
assertThat(sampledIn.toFloat()).isCloseTo(fakeTraceIds.size * fakeSampleRate / 100f, Offset.offset(offset))
102105
}
103106

104107
@Test
105-
fun `when sample rate is 0 all values will be dropped`(
106-
@LongForgery traceIds: List<Long>
107-
) {
108+
fun `when sample rate is 0 all values will be dropped`() {
108109
// Given
109110
whenever(mockSampleRateProvider.invoke()) doReturn 0f
110111
var sampledIn = 0
111112

112113
// When
113-
traceIds.forEach {
114+
fakeTraceIds.forEach {
114115
if (testedSampler.sample(it.toULong())) {
115116
sampledIn++
116117
}
@@ -121,22 +122,20 @@ internal class DeterministicSamplerTest {
121122
}
122123

123124
@Test
124-
fun `when sample rate is 100 all values will pass`(
125-
@LongForgery traceIds: List<Long>
126-
) {
125+
fun `when sample rate is 100 all values will pass`() {
127126
// Given
128127
whenever(mockSampleRateProvider.invoke()) doReturn 100f
129128
var sampledIn = 0
130129

131130
// When
132-
traceIds.forEach {
131+
fakeTraceIds.forEach {
133132
if (testedSampler.sample(it.toULong())) {
134133
sampledIn++
135134
}
136135
}
137136

138137
// Then
139-
assertThat(sampledIn).isEqualTo(traceIds.size)
138+
assertThat(sampledIn).isEqualTo(fakeTraceIds.size)
140139
}
141140

142141
@Test

0 commit comments

Comments
 (0)