Skip to content

Commit e165b77

Browse files
committed
Fix RumActionScopeTest tests failing under high CPU load
Events created in RumActionScopeTest were using the real time so they were failing under high CPU Also fix the missing resource key test setup not making sense since the key.toString for the resource key had no relation to the key so the null-ing was irrelevant and the assert statement at the end impossible to fail
1 parent 0443e2a commit e165b77

1 file changed

Lines changed: 30 additions & 17 deletions

File tree

  • features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/internal/domain/scope

features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/internal/domain/scope/RumActionScopeTest.kt

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ import org.mockito.kotlin.verifyNoInteractions
7070
import org.mockito.kotlin.verifyNoMoreInteractions
7171
import org.mockito.kotlin.whenever
7272
import org.mockito.quality.Strictness
73+
import java.lang.ref.WeakReference
7374
import java.util.concurrent.TimeUnit
7475

7576
@Extensions(
@@ -236,7 +237,7 @@ internal class RumActionScopeTest {
236237
@Forgery kind: RumResourceKind
237238
) {
238239
// When
239-
fakeEvent = RumRawEvent.StartResource(key, url, method, emptyMap())
240+
fakeEvent = RumRawEvent.StartResource(key, url, method, emptyMap(), fakeEventTime)
240241
val result = testedScope.handleEvent(fakeEvent, fakeDatadogContext, mockEventWriteScope, mockWriter)
241242
fakeEvent =
242243
RumRawEvent.StopResource(key, statusCode, size, kind, emptyMap(), timeWithOffset(TEST_INACTIVITY_MS * 2))
@@ -314,7 +315,7 @@ internal class RumActionScopeTest {
314315
@Forgery kind: RumResourceKind
315316
) {
316317
// When
317-
fakeEvent = RumRawEvent.StartResource(key, url, method, emptyMap())
318+
fakeEvent = RumRawEvent.StartResource(key, url, method, emptyMap(), fakeEventTime)
318319
val result = testedScope.handleEvent(fakeEvent, fakeDatadogContext, mockEventWriteScope, mockWriter)
319320
fakeEvent =
320321
RumRawEvent.StopResource(key2, statusCode, size, kind, emptyMap(), timeWithOffset(TEST_INACTIVITY_MS * 2))
@@ -345,7 +346,7 @@ internal class RumActionScopeTest {
345346
@Forgery throwable: Throwable
346347
) {
347348
// When
348-
fakeEvent = RumRawEvent.StartResource(key, url, method, emptyMap())
349+
fakeEvent = RumRawEvent.StartResource(key, url, method, emptyMap(), fakeEventTime)
349350
val result = testedScope.handleEvent(fakeEvent, fakeDatadogContext, mockEventWriteScope, mockWriter)
350351
fakeEvent = RumRawEvent.StopResourceWithError(
351352
key,
@@ -438,7 +439,7 @@ internal class RumActionScopeTest {
438439
val errorType = forge.aNullable { anAlphabeticalString() }
439440

440441
// When
441-
fakeEvent = RumRawEvent.StartResource(key, url, method, emptyMap())
442+
fakeEvent = RumRawEvent.StartResource(key, url, method, emptyMap(), fakeEventTime)
442443
val result = testedScope.handleEvent(fakeEvent, fakeDatadogContext, mockEventWriteScope, mockWriter)
443444
fakeEvent = RumRawEvent.StopResourceWithStackTrace(
444445
key,
@@ -528,7 +529,7 @@ internal class RumActionScopeTest {
528529
@Forgery throwable: Throwable
529530
) {
530531
// When
531-
fakeEvent = RumRawEvent.StartResource(key, url, method, emptyMap())
532+
fakeEvent = RumRawEvent.StartResource(key, url, method, emptyMap(), fakeEventTime)
532533
val result = testedScope.handleEvent(fakeEvent, fakeDatadogContext, mockEventWriteScope, mockWriter)
533534
val fakeEvent2 = RumRawEvent.StopResourceWithError(
534535
key2,
@@ -570,7 +571,7 @@ internal class RumActionScopeTest {
570571
val errorType = forge.aNullable { anAlphabeticalString() }
571572

572573
// When
573-
fakeEvent = RumRawEvent.StartResource(key, url, method, emptyMap())
574+
fakeEvent = RumRawEvent.StartResource(key, url, method, emptyMap(), fakeEventTime)
574575
val result = testedScope.handleEvent(fakeEvent, fakeDatadogContext, mockEventWriteScope, mockWriter)
575576
val fakeEvent2 = RumRawEvent.StopResourceWithStackTrace(
576577
key2,
@@ -604,13 +605,21 @@ internal class RumActionScopeTest {
604605
) {
605606
// Given
606607
var key: Any? = Object()
608+
val keyRef = WeakReference(key)
607609

608610
// When
609-
fakeEvent = RumRawEvent.StartResource(key.toString(), url, method, emptyMap())
611+
fakeEvent = RumRawEvent.StartResource(key!!, url, method, emptyMap(), fakeEventTime)
610612
val result = testedScope.handleEvent(fakeEvent, fakeDatadogContext, mockEventWriteScope, mockWriter)
611-
fakeEvent = mockEvent(TEST_INACTIVITY_MS * 2)
613+
614+
// Replace fakeEvent to remove strong reference to key via fakeEvent->StartResource->key field
615+
fakeEvent = mockEvent()
616+
@Suppress("AssignedValueIsNeverRead") // We are force null-ing to allow it to be GC'ed
612617
key = null
613618
System.gc()
619+
assertThat(keyRef.get())
620+
.describedAs("resource key should have been garbage collected by now")
621+
.isNull()
622+
614623
val result2 = testedScope.handleEvent(
615624
mockEvent(TEST_INACTIVITY_MS * 2 + 1),
616625
fakeDatadogContext,
@@ -669,7 +678,6 @@ internal class RumActionScopeTest {
669678
verifyNoMoreInteractions(mockWriter)
670679
assertThat(result).isSameAs(testedScope)
671680
assertThat(result2).isNull()
672-
assertThat(key as? Any).isNull()
673681
}
674682

675683
@Test
@@ -686,7 +694,8 @@ internal class RumActionScopeTest {
686694
stacktrace = null,
687695
isFatal = false,
688696
threads = emptyList(),
689-
attributes = emptyMap()
697+
attributes = emptyMap(),
698+
eventTime = fakeEventTime
690699
)
691700
val result = testedScope.handleEvent(fakeEvent, fakeDatadogContext, mockEventWriteScope, mockWriter)
692701
val result2 = testedScope.handleEvent(
@@ -759,7 +768,7 @@ internal class RumActionScopeTest {
759768
@StringForgery target: String
760769
) {
761770
// When
762-
fakeEvent = RumRawEvent.AddLongTask(duration, target)
771+
fakeEvent = RumRawEvent.AddLongTask(duration, target, eventTime = fakeEventTime)
763772
val result = testedScope.handleEvent(fakeEvent, fakeDatadogContext, mockEventWriteScope, mockWriter)
764773
val result2 = testedScope.handleEvent(
765774
mockEvent(TEST_INACTIVITY_MS * 2 + 1),
@@ -835,7 +844,8 @@ internal class RumActionScopeTest {
835844
stacktrace = null,
836845
isFatal = true,
837846
threads = emptyList(),
838-
attributes = emptyMap()
847+
attributes = emptyMap(),
848+
eventTime = fakeEventTime
839849
)
840850
val result = testedScope.handleEvent(fakeEvent, fakeDatadogContext, mockEventWriteScope, mockWriter)
841851

@@ -909,7 +919,8 @@ internal class RumActionScopeTest {
909919
stacktrace = null,
910920
isFatal = false,
911921
threads = emptyList(),
912-
attributes = emptyMap()
922+
attributes = emptyMap(),
923+
eventTime = fakeEventTime
913924
)
914925
val result = testedScope.handleEvent(fakeEvent, fakeDatadogContext, mockEventWriteScope, mockWriter)
915926
fakeEvent = RumRawEvent.AddError(
@@ -919,7 +930,8 @@ internal class RumActionScopeTest {
919930
stacktrace = null,
920931
isFatal = true,
921932
threads = emptyList(),
922-
attributes = emptyMap()
933+
attributes = emptyMap(),
934+
eventTime = fakeEventTime
923935
)
924936
val result2 = testedScope.handleEvent(fakeEvent, fakeDatadogContext, mockEventWriteScope, mockWriter)
925937

@@ -2733,7 +2745,7 @@ internal class RumActionScopeTest {
27332745
@StringForgery(regex = "http(s?)://[a-z]+\\.com/[a-z]+") url: String
27342746
) {
27352747
// When
2736-
fakeEvent = RumRawEvent.StartResource(key, url, method, emptyMap())
2748+
fakeEvent = RumRawEvent.StartResource(key, url, method, emptyMap(), fakeEventTime)
27372749
val result = testedScope.handleEvent(fakeEvent, fakeDatadogContext, mockEventWriteScope, mockWriter)
27382750
val result2 = testedScope.handleEvent(
27392751
mockEvent(TEST_INACTIVITY_MS * 2 + 1),
@@ -2755,7 +2767,7 @@ internal class RumActionScopeTest {
27552767
@StringForgery(regex = "http(s?)://[a-z]+\\.com/[a-z]+") url: String
27562768
) {
27572769
// When
2758-
fakeEvent = RumRawEvent.StartResource(key, url, method, emptyMap())
2770+
fakeEvent = RumRawEvent.StartResource(key, url, method, emptyMap(), fakeEventTime)
27592771
val result = testedScope.handleEvent(fakeEvent, fakeDatadogContext, mockEventWriteScope, mockWriter)
27602772
val result2 = testedScope.handleEvent(
27612773
mockEvent(TEST_MAX_DURATION_MS + 1),
@@ -3042,7 +3054,8 @@ internal class RumActionScopeTest {
30423054
stacktrace = null,
30433055
isFatal = false,
30443056
threads = emptyList(),
3045-
attributes = emptyMap()
3057+
attributes = emptyMap(),
3058+
eventTime = fakeEventTime
30463059
)
30473060
val result = testedScope.handleEvent(fakeEvent, fakeDatadogContext, mockEventWriteScope, mockWriter)
30483061

0 commit comments

Comments
 (0)