@@ -7,7 +7,7 @@ import datadog.trace.api.gateway.Flow
77import datadog.trace.api.gateway.InstrumentationGateway
88import datadog.trace.api.gateway.RequestContext
99import datadog.trace.api.gateway.RequestContextSlot
10- import datadog.trace.api.TraceConfig
10+ import datadog.trace.api.TraceConfig ;
1111import datadog.trace.bootstrap.ActiveSubsystems
1212import datadog.trace.bootstrap.instrumentation.api.AgentPropagation
1313import datadog.trace.bootstrap.instrumentation.api.AgentSpan
@@ -35,17 +35,6 @@ class HttpServerDecoratorTest extends ServerDecoratorTest {
3535
3636 def span = Mock (AgentSpan )
3737
38- static class MapCarrierVisitor
39- implements AgentPropagation.ContextVisitor<Map > {
40- @Override
41- void forEachKey (Map carrier , AgentPropagation.KeyClassifier classifier ) {
42- Map<String , String > headers = carrier. headers
43- headers?. each {
44- classifier. accept(it. key, it. value)
45- }
46- }
47- }
48-
4938 boolean origAppSecActive
5039
5140 void setup () {
@@ -364,103 +353,111 @@ class HttpServerDecoratorTest extends ServerDecoratorTest {
364353
365354 def " test response headers with trace.header.tags" () {
366355 setup :
367- def traceConfig = Mock ( TraceConfig )
368- traceConfig. getResponseHeaderTags() >> headerTags
369-
370- def tags = [:]
356+ injectSysConfig( " trace.header.tags " , headerTags )
357+ def traceConfig = Mock ( TraceConfig ) {
358+ getResponseHeaderTags() >> [(headerTags . split( " : " )[ 0 ] . toLowerCase()): headerTags . split( " : " )[ 1 ]]
359+ }
371360
372361 def responseSpan = Mock (AgentSpan )
373362 responseSpan. traceConfig() >> traceConfig
374- responseSpan. setTag(_, _) >> { String k , String v ->
375- tags[k] = v
376- return responseSpan
377- }
378-
379- def decorator = newDecorator(null , new MapCarrierVisitor ())
363+
364+ def decorator = newDecorator()
380365
381366 when :
367+ println " Groovy mock span class: ${ responseSpan.getClass().name} "
368+ println " Direct call: " + responseSpan. traceConfig()
369+
382370 decorator. onResponse(responseSpan, resp)
383371
384372 then :
385- if (expectedTag){
386- expectedTag. each {
387- assert tags[it. key] == it. value
388- }
373+ for (Map.Entry < String , String > entry : expectedTag. entrySet()) {
374+ assert responseSpan. getTag(entry. getKey()). equals(entry. getValue())
389375 }
390376
391377 where :
392- headerTags | resp | expectedTag
393- [:] | [status : 200 , headers : [' X-Custom-Header' : ' custom-value' , ' Content-Type' : ' application/json' ]] | [:]
394- [" x-custom-header" : " abc" ] | [status : 200 , headers : [' X-Custom-Header' : ' custom-value' , ' Content-Type' : ' application/json' ]] | [abc :" custom-value" ]
395- [" *" : " datadog.response.headers." ] | [status : 200 , headers : [' X-Custom-Header' : ' custom-value' , ' Content-Type' : ' application/json' ]] | [" datadog.response.headers.x-custom-header" :" custom-value" , " datadog.response.headers.content-type" :" application/json" ]
378+ headerTags | resp | expectedTag
379+ " X-Custom-Header:abc" | [status : 200 , headers : [' X-Custom-Header' : ' custom-value' , ' Content-Type' : ' application/json' ]] | [abc :" custom-value" ]
396380 }
397381
398382 @Override
399383 def newDecorator () {
400- return newDecorator(null , null )
384+ return newDecorator(null )
401385 }
402386
403- def newDecorator (TracerAPI tracer , AgentPropagation.ContextVisitor < Map > contextVisitor ) {
387+ def newDecorator (TracerAPI tracer ) {
404388 if (! tracer) {
405389 tracer = AgentTracer . NOOP_TRACER
406390 }
407391
408392 return new HttpServerDecorator<Map , Map , Map , Map<String , String > > () {
409- @Override
410- protected TracerAPI tracer () {
411- return tracer
412- }
393+ @Override
394+ protected TracerAPI tracer () {
395+ return tracer
396+ }
413397
414- @Override
415- protected String [] instrumentationNames () {
416- return [" test1" , " test2" ]
417- }
398+ @Override
399+ protected String [] instrumentationNames () {
400+ return [" test1" , " test2" ]
401+ }
418402
419- @Override
420- protected CharSequence component () {
421- return " test-component"
422- }
403+ @Override
404+ protected CharSequence component () {
405+ return " test-component"
406+ }
423407
424- @Override
425- protected AgentPropagation.ContextVisitor <Map<String , String > > getter () {
426- return ContextVisitors . stringValuesMap()
427- }
408+ @Override
409+ protected AgentPropagation.ContextVisitor <Map<String , String > > getter () {
410+ return ContextVisitors . stringValuesMap()
411+ }
428412
429- @Override
430- protected AgentPropagation.ContextVisitor <Map > responseGetter () {
431- return contextVisitor
432- }
413+ @Override
414+ protected AgentPropagation.ContextVisitor <Map > responseGetter () {
415+ return new MapCarrierVisitor ()
416+ }
433417
434- @Override
435- CharSequence spanName () {
436- return " http-test-span"
437- }
418+ @Override
419+ CharSequence spanName () {
420+ return " http-test-span"
421+ }
438422
439- @Override
440- protected String method (Map m ) {
441- return m. method
442- }
423+ @Override
424+ protected String method (Map m ) {
425+ return m. method
426+ }
443427
444- @Override
445- protected URIDataAdapter url (Map m ) {
446- return m. url == null ? null : new URIDefaultDataAdapter (m. url)
447- }
428+ @Override
429+ protected URIDataAdapter url (Map m ) {
430+ return m. url == null ? null : new URIDefaultDataAdapter (m. url)
431+ }
448432
449- @Override
450- protected String peerHostIP (Map m ) {
451- return m. peerIp
452- }
433+ @Override
434+ protected String peerHostIP (Map m ) {
435+ return m. peerIp
436+ }
453437
454- @Override
455- protected int peerPort (Map m ) {
456- return m. port == null ? 0 : m. port
457- }
438+ @Override
439+ protected int peerPort (Map m ) {
440+ return m. port == null ? 0 : m. port
441+ }
458442
443+ @Override
444+ protected int status (Map m ) {
445+ return m. status == null ? 0 : m. status
446+ }
447+
448+ static class MapCarrierVisitor
449+ implements AgentPropagation.ContextVisitor<Map > {
459450 @Override
460- protected int status (Map m ) {
461- return m. status == null ? 0 : m. status
451+ void forEachKey (Map carrier , AgentPropagation.KeyClassifier classifier ) {
452+ Map<String , String > headers = carrier. headers
453+ if (headers != null ) {
454+ for (Map.Entry < String , String > entry : headers. entrySet()) {
455+ classifier. accept(entry. key, entry. value)
456+ }
457+ }
462458 }
463459 }
460+ }
464461 }
465462
466463 def " test startSpan and InstrumentationGateway" () {
@@ -494,7 +491,7 @@ class HttpServerDecoratorTest extends ServerDecoratorTest {
494491 getUniversalCallbackProvider() >> cbpAppSec // no iast callbacks, so this is equivalent
495492 getDataStreamsMonitoring() >> Mock (DataStreamsMonitoring )
496493 }
497- def decorator = newDecorator(mTracer, null )
494+ def decorator = newDecorator(mTracer)
498495
499496 when :
500497 decorator. startSpan(" test" , headers, null )
0 commit comments