Skip to content

Commit 11b287e

Browse files
committed
RUM-9908 let ApplicationScope report global Attributes
1 parent 7f5c478 commit 11b287e

File tree

2 files changed

+35
-15
lines changed

2 files changed

+35
-15
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import com.datadog.android.api.storage.DataWriter
1414
import com.datadog.android.core.InternalSdkCore
1515
import com.datadog.android.core.internal.net.FirstPartyHostHeaderTypeResolver
1616
import com.datadog.android.rum.DdRumContentProvider
17+
import com.datadog.android.rum.GlobalRumMonitor
1718
import com.datadog.android.rum.RumSessionListener
1819
import com.datadog.android.rum.internal.domain.RumContext
1920
import com.datadog.android.rum.internal.domain.Time
@@ -115,6 +116,10 @@ internal class RumApplicationScope(
115116
return rumContext
116117
}
117118

119+
override fun getCustomAttributes(): Map<String, Any?> {
120+
return GlobalRumMonitor.get(sdkCore).getAttributes()
121+
}
122+
118123
// endregion
119124

120125
override fun onViewChanged(viewInfo: RumViewInfo) {

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

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import com.datadog.android.api.context.TimeInfo
1313
import com.datadog.android.api.feature.FeatureScope
1414
import com.datadog.android.api.storage.DataWriter
1515
import com.datadog.android.api.storage.EventBatchWriter
16-
import com.datadog.android.core.InternalSdkCore
1716
import com.datadog.android.core.internal.net.FirstPartyHostHeaderTypeResolver
1817
import com.datadog.android.rum.RumSessionListener
1918
import com.datadog.android.rum.internal.FeaturesContextResolver
@@ -24,7 +23,12 @@ import com.datadog.android.rum.internal.vitals.VitalMonitor
2423
import com.datadog.android.rum.metric.interactiontonextview.LastInteractionIdentifier
2524
import com.datadog.android.rum.metric.networksettled.InitialResourceIdentifier
2625
import com.datadog.android.rum.model.ViewEvent
26+
import com.datadog.android.rum.utils.config.GlobalRumMonitorTestConfiguration
2727
import com.datadog.android.rum.utils.forge.Configurator
28+
import com.datadog.tools.unit.annotations.TestConfigurationsProvider
29+
import com.datadog.tools.unit.extensions.TestConfigurationExtension
30+
import com.datadog.tools.unit.extensions.config.TestConfiguration
31+
import com.datadog.tools.unit.forge.exhaustiveAttributes
2832
import fr.xgouchet.elmyr.Forge
2933
import fr.xgouchet.elmyr.annotation.BoolForgery
3034
import fr.xgouchet.elmyr.annotation.FloatForgery
@@ -52,17 +56,15 @@ import kotlin.math.min
5256

5357
@Extensions(
5458
ExtendWith(MockitoExtension::class),
55-
ExtendWith(ForgeExtension::class)
59+
ExtendWith(ForgeExtension::class),
60+
ExtendWith(TestConfigurationExtension::class)
5661
)
5762
@MockitoSettings(strictness = Strictness.LENIENT)
5863
@ForgeConfiguration(Configurator::class)
5964
internal class RumApplicationScopeAttributePropagationTest {
6065

6166
lateinit var testedScope: RumApplicationScope
6267

63-
@Mock
64-
lateinit var mockSdkCore: InternalSdkCore
65-
6668
@Mock
6769
lateinit var mockParentScope: RumScope
6870

@@ -75,9 +77,6 @@ internal class RumApplicationScopeAttributePropagationTest {
7577
@Mock
7678
lateinit var mockSessionListener: RumSessionListener
7779

78-
@Mock
79-
lateinit var mockNetworkSettledResourceIdentifier: InitialResourceIdentifier
80-
8180
@Mock
8281
lateinit var mockLastInteractionIdentifier: LastInteractionIdentifier
8382

@@ -103,10 +102,7 @@ internal class RumApplicationScopeAttributePropagationTest {
103102
lateinit var mockFeaturesContextResolver: FeaturesContextResolver
104103

105104
@Mock
106-
lateinit var mockViewChangedListener: RumViewChangedListener
107-
108-
@Mock
109-
private lateinit var mockSessionEndedMetricDispatcher: SessionMetricDispatcher
105+
lateinit var mockSessionEndedMetricDispatcher: SessionMetricDispatcher
110106

111107
@Mock
112108
lateinit var mockInitialResourceIdentifier: InitialResourceIdentifier
@@ -127,6 +123,8 @@ internal class RumApplicationScopeAttributePropagationTest {
127123
@Forgery
128124
lateinit var fakeDatadogContext: DatadogContext
129125

126+
lateinit var fakeGlobalAttributes: Map<String, Any?>
127+
130128
@BoolForgery
131129
var fakeHasReplay: Boolean = false
132130

@@ -144,6 +142,8 @@ internal class RumApplicationScopeAttributePropagationTest {
144142

145143
@BeforeEach
146144
fun `set up`(forge: Forge) {
145+
fakeGlobalAttributes = forge.exhaustiveAttributes()
146+
147147
fakeDatadogContext = fakeDatadogContext.copy(
148148
source = forge.aValueFrom(ViewEvent.ViewEventSource::class.java).toJson().asString
149149
)
@@ -166,11 +166,11 @@ internal class RumApplicationScopeAttributePropagationTest {
166166
callback.invoke(fakeDatadogContext, mockEventBatchWriter)
167167
}
168168

169-
whenever(mockSdkCore.internalLogger) doReturn mock()
169+
whenever(rumMonitor.mockSdkCore.internalLogger) doReturn mock()
170170

171171
testedScope = RumApplicationScope(
172172
applicationId = fakeApplicationId,
173-
sdkCore = mockSdkCore,
173+
sdkCore = rumMonitor.mockSdkCore,
174174
sampleRate = fakeSampleRate,
175175
backgroundTrackingEnabled = fakeBackgroundTrackingEnabled,
176176
trackFrustrations = fakeTrackFrustrations,
@@ -190,12 +190,27 @@ internal class RumApplicationScopeAttributePropagationTest {
190190

191191
@Test
192192
fun `M return global attributes W getCustomAttributes()`() {
193+
// Given
194+
whenever(rumMonitor.mockInstance.getAttributes()) doReturn fakeGlobalAttributes
195+
193196
// When
194197
val customAttributes = testedScope.getCustomAttributes()
195198

196199
// Then
197-
assertThat(customAttributes).isEmpty()
200+
assertThat(customAttributes)
201+
.containsExactlyInAnyOrderEntriesOf(fakeGlobalAttributes)
198202
}
199203

200204
// endregion
205+
206+
companion object {
207+
208+
val rumMonitor = GlobalRumMonitorTestConfiguration()
209+
210+
@TestConfigurationsProvider
211+
@JvmStatic
212+
fun getTestConfigurations(): List<TestConfiguration> {
213+
return listOf(rumMonitor)
214+
}
215+
}
201216
}

0 commit comments

Comments
 (0)