@@ -70,6 +70,7 @@ import org.mockito.kotlin.verifyNoInteractions
7070import org.mockito.kotlin.verifyNoMoreInteractions
7171import org.mockito.kotlin.whenever
7272import org.mockito.quality.Strictness
73+ import java.lang.ref.WeakReference
7374import 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