Skip to content

Commit 67cba8b

Browse files
committed
RUM-12551: prevent FO events duplication
1 parent df659af commit 67cba8b

File tree

2 files changed

+52
-0
lines changed
  • features/dd-sdk-android-rum/src

2 files changed

+52
-0
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,8 @@ internal open class RumViewScope(
261261
writeScope: EventWriteScope,
262262
writer: DataWriter<Any>
263263
) {
264+
if (stopped) return
265+
264266
sdkCore.newRumEventWriteOperation(datadogContext, writeScope, writer) {
265267
newVitalEvent(
266268
event,
@@ -281,6 +283,8 @@ internal open class RumViewScope(
281283
writeScope: EventWriteScope,
282284
writer: DataWriter<Any>
283285
) {
286+
if (stopped) return
287+
284288
sdkCore.newRumEventWriteOperation(datadogContext, writeScope, writer) {
285289
newVitalEvent(
286290
event,

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

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8609,6 +8609,54 @@ internal class RumViewScopeTest {
86098609

86108610
// region Feature Operations
86118611

8612+
@Test
8613+
fun `M do nothing if view is stopped W handleEvent { StartFeatureOperation }`(
8614+
@StringForgery key: String,
8615+
@StringForgery name: String,
8616+
@LongForgery(min = 0) duration: Long,
8617+
forge: Forge
8618+
) {
8619+
// Given
8620+
val event = RumRawEvent.StartFeatureOperation(
8621+
name,
8622+
attributes = forge.exhaustiveAttributes(excludedKeys = fakeAttributes.keys),
8623+
operationKey = forge.aNullable { key },
8624+
eventTime = fakeEventTime + duration
8625+
)
8626+
8627+
testedScope.stopped = true
8628+
8629+
// When
8630+
testedScope.handleEvent(event, fakeDatadogContext, mockEventWriteScope, mockWriter)
8631+
8632+
// Then
8633+
verifyNoInteractions(mockWriter)
8634+
}
8635+
8636+
@Test
8637+
fun `M do nothing if view is stopped W handleEvent { StopFeatureOperation }`(
8638+
@StringForgery key: String,
8639+
@StringForgery name: String,
8640+
@LongForgery(min = 0) duration: Long,
8641+
forge: Forge
8642+
) {
8643+
// Given
8644+
val event = RumRawEvent.StopFeatureOperation(
8645+
name,
8646+
attributes = forge.exhaustiveAttributes(excludedKeys = fakeAttributes.keys),
8647+
operationKey = forge.aNullable { key },
8648+
failureReason = forge.aNullable { aValueFrom(FailureReason::class.java) },
8649+
eventTime = fakeEventTime + duration
8650+
)
8651+
testedScope.stopped = true
8652+
8653+
// When
8654+
testedScope.handleEvent(event, fakeDatadogContext, mockEventWriteScope, mockWriter)
8655+
8656+
// Then
8657+
verifyNoInteractions(mockWriter)
8658+
}
8659+
86128660
@Test
86138661
fun `M send view update W handleEvent { StartFeatureOperation }`(
86148662
@StringForgery key: String,

0 commit comments

Comments
 (0)