@@ -91,12 +91,12 @@ class TracingConfigPollerTest extends DDCoreSpecification {
9191 priority == expectedPriority
9292
9393 where :
94- service | env | clusterName | expectedPriority
95- " test-service" | " staging" | null | 5
96- " test-service" | " *" | null | 4
97- " *" | " staging" | null | 3
98- null | null | " test-cluster" | 2
99- " *" | " *" | null | 1
94+ service | env | clusterName | expectedPriority
95+ " test-service" | " staging" | null | 5
96+ " test-service" | " *" | null | 4
97+ " *" | " staging" | null | 3
98+ null | null | " test-cluster" | 2
99+ " *" | " *" | null | 1
100100 }
101101
102102
@@ -179,10 +179,10 @@ class TracingConfigPollerTest extends DDCoreSpecification {
179179
180180 then :
181181 // Service level config should take precedence due to higher priority (4 vs 1)
182- tracer. captureTraceConfig(). serviceMapping == [" service-specific" :" service-mapped" ]
182+ tracer. captureTraceConfig(). serviceMapping == [" service-specific" : " service-mapped" ]
183183 tracer. captureTraceConfig(). traceSampleRate == 1.0 // should be clamped to 1.0
184- tracer. captureTraceConfig(). requestHeaderTags == [" x-custom-header" :" custom.header" ]
185- tracer. captureTraceConfig(). responseHeaderTags == [" x-custom-header" :" custom.header" ]
184+ tracer. captureTraceConfig(). requestHeaderTags == [" x-custom-header" : " custom.header" ]
185+ tracer. captureTraceConfig(). responseHeaderTags == [" x-custom-header" : " custom.header" ]
186186
187187 when :
188188 // Remove service level config
@@ -191,7 +191,7 @@ class TracingConfigPollerTest extends DDCoreSpecification {
191191
192192 then :
193193 // Should fall back to org level config
194- tracer. captureTraceConfig(). serviceMapping == [" org-service" :" org-mapped" ]
194+ tracer. captureTraceConfig(). serviceMapping == [" org-service" : " org-mapped" ]
195195 tracer. captureTraceConfig(). traceSampleRate == 0.7
196196 tracer. captureTraceConfig(). requestHeaderTags == [:]
197197 tracer. captureTraceConfig(). responseHeaderTags == [:]
@@ -209,4 +209,72 @@ class TracingConfigPollerTest extends DDCoreSpecification {
209209 cleanup :
210210 tracer?. close()
211211 }
212+
213+ def " test two org levels config setting different flags works" () {
214+ setup :
215+ def orgConfig1Key = ParsedConfigKey . parse(" datadog/2/APM_TRACING/org_config/config1" )
216+ def orgConfig2Key = ParsedConfigKey . parse(" datadog/2/APM_TRACING/org_config/config2" )
217+ def poller = Mock (ConfigurationPoller )
218+ def sco = new SharedCommunicationObjects (
219+ okHttpClient : Mock (OkHttpClient ),
220+ monitoring : Mock (Monitoring ),
221+ agentUrl : HttpUrl . get(' https://example.com' ),
222+ featuresDiscovery : Mock (DDAgentFeaturesDiscovery ),
223+ configurationPoller : poller
224+ )
225+
226+ def updater
227+
228+ when :
229+ def tracer = CoreTracer . builder()
230+ .sharedCommunicationObjects(sco)
231+ .pollForTracingConfiguration()
232+ .build()
233+
234+ then :
235+ 1 * poller. addListener(Product . APM_TRACING , _ as ProductListener ) >> {
236+ updater = it[1 ] // capture config updater for further testing
237+ }
238+ and :
239+ tracer. captureTraceConfig(). isTraceEnabled() == true
240+ tracer. captureTraceConfig(). isDataStreamsEnabled() == false
241+
242+ when :
243+ // Add org level config with ApmTracing enabled
244+ updater. accept(orgConfig1Key, """
245+ {
246+ "service_target": {
247+ "service": "*",
248+ "env": "*"
249+ },
250+ "lib_config": {
251+ "tracing_enabled": true
252+ }
253+ }
254+ """ . getBytes(StandardCharsets . UTF_8 ), null )
255+
256+ // Add second org level config with DataStreams enabled
257+ updater. accept(orgConfig2Key, """
258+ {
259+ "service_target": {
260+ "service": "*",
261+ "env": "*"
262+ },
263+ "lib_config": {
264+ "data_streams_enabled": true
265+ }
266+ }
267+ """ . getBytes(StandardCharsets . UTF_8 ), null )
268+
269+ // Commit both configs
270+ updater. commit()
271+
272+ then :
273+ // Both org level configs should be merged, with data streams enabled
274+ tracer. captureTraceConfig(). isTraceEnabled() == true
275+ tracer. captureTraceConfig(). isDataStreamsEnabled() == true
276+
277+ cleanup :
278+ tracer?. close()
279+ }
212280}
0 commit comments