6
6
7
7
package com.datadog.android.rum.internal.metric
8
8
9
+ import com.datadog.android.api.InternalLogger
9
10
import com.datadog.android.rum.internal.domain.scope.RumSessionScope
10
11
import com.datadog.android.rum.model.ViewEvent
11
12
import com.datadog.android.rum.utils.forge.Configurator
12
13
import com.datadog.tools.unit.extensions.TestConfigurationExtension
13
14
import fr.xgouchet.elmyr.annotation.BoolForgery
15
+ import fr.xgouchet.elmyr.annotation.FloatForgery
14
16
import fr.xgouchet.elmyr.annotation.Forgery
15
17
import fr.xgouchet.elmyr.annotation.IntForgery
16
18
import fr.xgouchet.elmyr.annotation.LongForgery
@@ -21,8 +23,12 @@ import org.assertj.core.api.Assertions.assertThat
21
23
import org.junit.jupiter.api.Test
22
24
import org.junit.jupiter.api.extension.ExtendWith
23
25
import org.junit.jupiter.api.extension.Extensions
26
+ import org.mockito.Mockito.mock
24
27
import org.mockito.junit.jupiter.MockitoExtension
25
28
import org.mockito.junit.jupiter.MockitoSettings
29
+ import org.mockito.kotlin.any
30
+ import org.mockito.kotlin.eq
31
+ import org.mockito.kotlin.verify
26
32
import org.mockito.quality.Strictness
27
33
28
34
@Extensions(
@@ -48,10 +54,13 @@ internal class SessionEndedMetricDispatcherTest {
48
54
@BoolForgery
49
55
private var backgroundEventTracking: Boolean = false
50
56
57
+ @FloatForgery(min = 0f , max = 100f )
58
+ private var fakeSessionSampleRate: Float = 1f
59
+
51
60
@Test
52
61
fun `M register session stop W call onSessionStopped()` (@StringForgery fakeSessionId : String ) {
53
62
// Given
54
- val dispatcher = SessionEndedMetricDispatcher (fakeInternalLogger)
63
+ val dispatcher = SessionEndedMetricDispatcher (fakeInternalLogger, fakeSessionSampleRate )
55
64
dispatcher.startMetric(
56
65
fakeSessionId,
57
66
fakeStartReason,
@@ -74,7 +83,7 @@ internal class SessionEndedMetricDispatcherTest {
74
83
@Forgery viewEvent : ViewEvent
75
84
) {
76
85
// Given
77
- val dispatcher = SessionEndedMetricDispatcher (fakeInternalLogger)
86
+ val dispatcher = SessionEndedMetricDispatcher (fakeInternalLogger, fakeSessionSampleRate )
78
87
79
88
// When
80
89
dispatcher.startMetric(
@@ -109,7 +118,7 @@ internal class SessionEndedMetricDispatcherTest {
109
118
@Forgery viewEvents : List <ViewEvent >
110
119
) {
111
120
// Given
112
- val dispatcher = SessionEndedMetricDispatcher (fakeInternalLogger)
121
+ val dispatcher = SessionEndedMetricDispatcher (fakeInternalLogger, fakeSessionSampleRate )
113
122
114
123
// When
115
124
dispatcher.startMetric(
@@ -166,7 +175,7 @@ internal class SessionEndedMetricDispatcherTest {
166
175
@StringForgery errorKinds : List <String >
167
176
) {
168
177
// Given
169
- val dispatcher = SessionEndedMetricDispatcher (fakeInternalLogger)
178
+ val dispatcher = SessionEndedMetricDispatcher (fakeInternalLogger, fakeSessionSampleRate )
170
179
171
180
// When
172
181
dispatcher.startMetric(
@@ -218,7 +227,7 @@ internal class SessionEndedMetricDispatcherTest {
218
227
@Forgery viewEvents : List <ViewEvent >
219
228
) {
220
229
// Given
221
- val dispatcher = SessionEndedMetricDispatcher (fakeInternalLogger)
230
+ val dispatcher = SessionEndedMetricDispatcher (fakeInternalLogger, fakeSessionSampleRate )
222
231
223
232
// When
224
233
dispatcher.startMetric(
@@ -243,7 +252,7 @@ internal class SessionEndedMetricDispatcherTest {
243
252
@Forgery missedTypes : List <SessionEndedMetric .MissedEventType >
244
253
) {
245
254
// Given
246
- val dispatcher = SessionEndedMetricDispatcher (fakeInternalLogger)
255
+ val dispatcher = SessionEndedMetricDispatcher (fakeInternalLogger, fakeSessionSampleRate )
247
256
248
257
// When
249
258
dispatcher.startMetric(
@@ -295,7 +304,7 @@ internal class SessionEndedMetricDispatcherTest {
295
304
Boolean
296
305
) {
297
306
// Given
298
- val dispatcher = SessionEndedMetricDispatcher (fakeInternalLogger)
307
+ val dispatcher = SessionEndedMetricDispatcher (fakeInternalLogger, fakeSessionSampleRate )
299
308
300
309
// When
301
310
dispatcher.startMetric(
@@ -317,7 +326,7 @@ internal class SessionEndedMetricDispatcherTest {
317
326
@LongForgery fakeNtpOffsetAtEnd : Long
318
327
) {
319
328
// Given
320
- val dispatcher = SessionEndedMetricDispatcher (fakeInternalLogger)
329
+ val dispatcher = SessionEndedMetricDispatcher (fakeInternalLogger, fakeSessionSampleRate )
321
330
322
331
// When
323
332
dispatcher.startMetric(
@@ -339,7 +348,7 @@ internal class SessionEndedMetricDispatcherTest {
339
348
@IntForgery(min = 0 , max = 100 ) skippedFramesCount : Int
340
349
) {
341
350
// Given
342
- val dispatcher = SessionEndedMetricDispatcher (fakeInternalLogger)
351
+ val dispatcher = SessionEndedMetricDispatcher (fakeInternalLogger, fakeSessionSampleRate )
343
352
344
353
// When
345
354
dispatcher.startMetric(
@@ -357,6 +366,32 @@ internal class SessionEndedMetricDispatcherTest {
357
366
assertThat(fakeInternalLogger.getSkippedFramesCount()).isEqualTo(skippedFramesCount)
358
367
}
359
368
369
+ @Test
370
+ fun `M has creationSamplingRate AND samplingRate W end metric` (
371
+ @StringForgery fakeSessionId : String
372
+ ) {
373
+ // Given
374
+ val mockInternalLogger = mock<InternalLogger >()
375
+ val dispatcher = SessionEndedMetricDispatcher (mockInternalLogger, fakeSessionSampleRate)
376
+
377
+ // When
378
+ dispatcher.startMetric(
379
+ fakeSessionId,
380
+ fakeStartReason,
381
+ fakeNtpOffsetAtStart,
382
+ backgroundEventTracking
383
+ )
384
+ dispatcher.endMetric(fakeSessionId, fakeNtpOffsetAtEnd)
385
+
386
+ // Then
387
+ verify(mockInternalLogger).logMetric(
388
+ any(),
389
+ any(),
390
+ eq(15.0f ),
391
+ eq(fakeSessionSampleRate)
392
+ )
393
+ }
394
+
360
395
private fun FakeInternalLogger.getNtpAtStartOffset (): Long {
361
396
return lastMetric?.second?.let { attributes ->
362
397
val rse = attributes[SessionEndedMetric .RSE_KEY ] as Map <* , * >
0 commit comments