11package datadog .trace .core ;
22
3+ import static datadog .trace .api .DDTags .DJM_ENABLED ;
4+ import static datadog .trace .api .DDTags .DSM_ENABLED ;
5+ import static datadog .trace .api .DDTags .PROFILING_CONTEXT_ENGINE ;
6+ import static datadog .trace .api .DDTags .PROFILING_ENABLED ;
7+ import static datadog .trace .api .DDTags .THREAD_ID ;
8+ import static datadog .trace .api .DDTags .THREAD_NAME ;
39import static datadog .trace .api .TracePropagationStyle .DATADOG ;
410import static datadog .trace .api .sampling .PrioritySampling .SAMPLER_DROP ;
511import static datadog .trace .api .sampling .PrioritySampling .SAMPLER_KEEP ;
915import static datadog .trace .api .sampling .SamplingMechanism .DEFAULT ;
1016import static datadog .trace .api .sampling .SamplingMechanism .MANUAL ;
1117import static datadog .trace .api .sampling .SamplingMechanism .SPAN_SAMPLING_RATE ;
18+ import static datadog .trace .bootstrap .instrumentation .api .Tags .SPAN_KIND ;
19+ import static datadog .trace .core .DDSpanContext .SPAN_KIND_VALUES ;
1220import static datadog .trace .core .DDSpanContext .SPAN_SAMPLING_MAX_PER_SECOND_TAG ;
1321import static datadog .trace .core .DDSpanContext .SPAN_SAMPLING_MECHANISM_TAG ;
1422import static datadog .trace .core .DDSpanContext .SPAN_SAMPLING_RULE_RATE_TAG ;
3341import datadog .trace .bootstrap .instrumentation .api .Tags ;
3442import datadog .trace .common .writer .ListWriter ;
3543import datadog .trace .core .propagation .ExtractedContext ;
44+ import datadog .trace .junit .utils .tabletest .TableTestTypeConverters ;
3645import java .util .HashMap ;
3746import java .util .Map ;
3847import java .util .stream .Stream ;
4150import org .junit .jupiter .params .ParameterizedTest ;
4251import org .junit .jupiter .params .provider .Arguments ;
4352import org .junit .jupiter .params .provider .MethodSource ;
53+ import org .junit .jupiter .params .provider .ValueSource ;
4454import org .tabletest .junit .TableTest ;
4555import org .tabletest .junit .TypeConverter ;
56+ import org .tabletest .junit .TypeConverterSources ;
4657
58+ @ TypeConverterSources (TableTestTypeConverters .class )
4759public class DDSpanContextTest extends DDCoreJavaSpecification {
4860
4961 private ListWriter writer ;
@@ -91,8 +103,8 @@ void nullValuesForTagsDeleteExistingTags(String scenario, String name) throws Ex
91103 if (!name .equals ("some.tag" )) {
92104 expectedTags .put ("some.tag" , "asdf" );
93105 }
94- expectedTags .put (DDTags . THREAD_NAME , thread .getName ());
95- expectedTags .put (DDTags . THREAD_ID , thread .getId ());
106+ expectedTags .put (THREAD_NAME , thread .getName ());
107+ expectedTags .put (THREAD_ID , thread .getId ());
96108 expectedTags .put (DDTags .DD_SVC_SRC , ServiceNameSources .MANUAL );
97109
98110 assertTagmap (context .getTags (), expectedTags );
@@ -126,8 +138,8 @@ void specialTagsSetCertainValues(String scenario, String name, String value, Str
126138
127139 Thread thread = Thread .currentThread ();
128140 Map <String , Object > expectedTags = new HashMap <>();
129- expectedTags .put (DDTags . THREAD_NAME , thread .getName ());
130- expectedTags .put (DDTags . THREAD_ID , thread .getId ());
141+ expectedTags .put (THREAD_NAME , thread .getName ());
142+ expectedTags .put (THREAD_ID , thread .getId ());
131143 expectedTags .put (DDTags .DD_SVC_SRC , ServiceNameSources .MANUAL );
132144 assertTagmap (context .getTags (), expectedTags );
133145
@@ -175,8 +187,8 @@ void tagsCanBeAddedToContext(String name, Object value) throws Exception {
175187 Thread thread = Thread .currentThread ();
176188 Map <String , Object > expectedTags = new HashMap <>();
177189 expectedTags .put (name , value );
178- expectedTags .put (DDTags . THREAD_NAME , thread .getName ());
179- expectedTags .put (DDTags . THREAD_ID , thread .getId ());
190+ expectedTags .put (THREAD_NAME , thread .getName ());
191+ expectedTags .put (THREAD_ID , thread .getId ());
180192 expectedTags .put (DDTags .DD_SVC_SRC , ServiceNameSources .MANUAL );
181193
182194 assertTagmap (context .getTags (), expectedTags );
@@ -215,39 +227,6 @@ void metricsUseExpectedTypes(Class<?> expectedType, Number value) {
215227 span .finish ();
216228 }
217229
218- @ TypeConverter
219- public static Number toNumber (String value ) {
220- if (value == null ) {
221- throw new IllegalArgumentException ("Value cannot be null" );
222- }
223- switch (value ) {
224- case "Integer.MAX_VALUE" :
225- return Integer .MAX_VALUE ;
226- case "Integer.MIN_VALUE" :
227- return Integer .MIN_VALUE ;
228- case "Short.MAX_VALUE" :
229- return Short .MAX_VALUE ;
230- case "Short.MIN_VALUE" :
231- return Short .MIN_VALUE ;
232- case "Float.MAX_VALUE" :
233- return Float .MAX_VALUE ;
234- case "Float.MIN_VALUE" :
235- return Float .MIN_VALUE ;
236- case "Double.MAX_VALUE" :
237- return Double .MAX_VALUE ;
238- case "Double.MIN_VALUE" :
239- return Double .MIN_VALUE ;
240- default :
241- if (value .endsWith ("f" )) {
242- return Float .parseFloat (value );
243- }
244- if (value .endsWith ("d" )) {
245- return Double .parseDouble (value );
246- }
247- return Integer .decode (value );
248- }
249- }
250-
251230 @ Test
252231 void forceKeepReallyKeepsTrace () {
253232 AgentSpan span =
@@ -320,12 +299,12 @@ void setTraceSegmentTagsAndDataOnCorrectSpan() {
320299 }
321300
322301 @ TableTest ({
323- "scenario | rate | limit " ,
324- "rate= 1.0 limit= 10 | 1.0 | 10 " ,
325- "rate= 0.5 limit=100 | 0.5 | 100 " ,
326- "rate= 0.25 no limit | 0.25 | 2147483647 "
302+ "rate | limit " ,
303+ "1.0 | 10 " ,
304+ "0.5 | 100 " ,
305+ "0.25 | Integer.MAX_VALUE "
327306 })
328- void setSingleSpanSamplingTags (String scenario , double rate , int limit ) {
307+ void setSingleSpanSamplingTags (double rate , int limit ) {
329308 AgentSpan span =
330309 tracer
331310 .buildSpan ("fakeOperation" )
@@ -439,33 +418,27 @@ void serviceNameSourceIsPropagatedFromParentToChildSpan() {
439418
440419 @ Test
441420 void spanKindOrdinalConstantsAndSpanKindValuesArrayStayInSync () {
442- assertEquals (DDSpanContext .SPAN_KIND_CUSTOM + 1 , DDSpanContext . SPAN_KIND_VALUES .length );
421+ assertEquals (DDSpanContext .SPAN_KIND_CUSTOM + 1 , SPAN_KIND_VALUES .length );
443422
444- assertEquals (
445- Tags .SPAN_KIND_SERVER , DDSpanContext .SPAN_KIND_VALUES [DDSpanContext .SPAN_KIND_SERVER ]);
446- assertEquals (
447- Tags .SPAN_KIND_CLIENT , DDSpanContext .SPAN_KIND_VALUES [DDSpanContext .SPAN_KIND_CLIENT ]);
448- assertEquals (
449- Tags .SPAN_KIND_PRODUCER , DDSpanContext .SPAN_KIND_VALUES [DDSpanContext .SPAN_KIND_PRODUCER ]);
450- assertEquals (
451- Tags .SPAN_KIND_CONSUMER , DDSpanContext .SPAN_KIND_VALUES [DDSpanContext .SPAN_KIND_CONSUMER ]);
452- assertEquals (
453- Tags .SPAN_KIND_INTERNAL , DDSpanContext .SPAN_KIND_VALUES [DDSpanContext .SPAN_KIND_INTERNAL ]);
454- assertEquals (
455- Tags .SPAN_KIND_BROKER , DDSpanContext .SPAN_KIND_VALUES [DDSpanContext .SPAN_KIND_BROKER ]);
423+ assertEquals (Tags .SPAN_KIND_SERVER , SPAN_KIND_VALUES [DDSpanContext .SPAN_KIND_SERVER ]);
424+ assertEquals (Tags .SPAN_KIND_CLIENT , SPAN_KIND_VALUES [DDSpanContext .SPAN_KIND_CLIENT ]);
425+ assertEquals (Tags .SPAN_KIND_PRODUCER , SPAN_KIND_VALUES [DDSpanContext .SPAN_KIND_PRODUCER ]);
426+ assertEquals (Tags .SPAN_KIND_CONSUMER , SPAN_KIND_VALUES [DDSpanContext .SPAN_KIND_CONSUMER ]);
427+ assertEquals (Tags .SPAN_KIND_INTERNAL , SPAN_KIND_VALUES [DDSpanContext .SPAN_KIND_INTERNAL ]);
428+ assertEquals (Tags .SPAN_KIND_BROKER , SPAN_KIND_VALUES [DDSpanContext .SPAN_KIND_BROKER ]);
456429
457- assertNull (DDSpanContext . SPAN_KIND_VALUES [DDSpanContext .SPAN_KIND_UNSET ]);
458- assertNull (DDSpanContext . SPAN_KIND_VALUES [DDSpanContext .SPAN_KIND_CUSTOM ]);
430+ assertNull (SPAN_KIND_VALUES [DDSpanContext .SPAN_KIND_UNSET ]);
431+ assertNull (SPAN_KIND_VALUES [DDSpanContext .SPAN_KIND_CUSTOM ]);
459432 }
460433
461434 @ TableTest ({
462- "scenario | kindString | expectedOrdinal" ,
463- "server | server | 1 " ,
464- "client | client | 2 " ,
465- "producer | producer | 3 " ,
466- "consumer | consumer | 4 " ,
467- "internal | internal | 5 " ,
468- "broker | broker | 6 "
435+ "scenario | kindString | expectedOrdinal " ,
436+ "server | server | DDSpanContext.SPAN_KIND_SERVER " ,
437+ "client | client | DDSpanContext.SPAN_KIND_CLIENT " ,
438+ "producer | producer | DDSpanContext.SPAN_KIND_PRODUCER " ,
439+ "consumer | consumer | DDSpanContext.SPAN_KIND_CONSUMER " ,
440+ "internal | internal | DDSpanContext.SPAN_KIND_INTERNAL " ,
441+ "broker | broker | DDSpanContext.SPAN_KIND_BROKER "
469442 })
470443 void setSpanKindOrdinalRoundTripsWithSpanKindValues (
471444 String scenario , String kindString , int expectedOrdinal ) {
@@ -474,25 +447,49 @@ void setSpanKindOrdinalRoundTripsWithSpanKindValues(
474447 context .setSpanKindOrdinal (kindString );
475448
476449 assertEquals (expectedOrdinal , context .getSpanKindOrdinal ());
477- assertEquals (kindString , DDSpanContext . SPAN_KIND_VALUES [expectedOrdinal ]);
450+ assertEquals (kindString , SPAN_KIND_VALUES [expectedOrdinal ]);
478451
479452 span .finish ();
480453 }
481454
482- @ TableTest ({
483- "scenario | kindString" ,
484- "server | server " ,
485- "client | client " ,
486- "producer | producer " ,
487- "consumer | consumer " ,
488- "internal | internal " ,
489- "broker | broker "
490- })
491- void setTagAndGetTagRoundTripForSpanKind (String scenario , String kindString ) {
455+ @ TypeConverter
456+ public static int toInt (String value ) {
457+ if (value == null ) {
458+ throw new IllegalArgumentException ("Value cannot be null" );
459+ }
460+ switch (value ) {
461+ case "DDSpanContext.SPAN_KIND_SERVER" :
462+ return DDSpanContext .SPAN_KIND_SERVER ;
463+ case "DDSpanContext.SPAN_KIND_CLIENT" :
464+ return DDSpanContext .SPAN_KIND_CLIENT ;
465+ case "DDSpanContext.SPAN_KIND_PRODUCER" :
466+ return DDSpanContext .SPAN_KIND_PRODUCER ;
467+ case "DDSpanContext.SPAN_KIND_CONSUMER" :
468+ return DDSpanContext .SPAN_KIND_CONSUMER ;
469+ case "DDSpanContext.SPAN_KIND_BROKER" :
470+ return DDSpanContext .SPAN_KIND_BROKER ;
471+ case "DDSpanContext.SPAN_KIND_INTERNAL" :
472+ return DDSpanContext .SPAN_KIND_INTERNAL ;
473+ default :
474+ return TableTestTypeConverters .toInt (value );
475+ }
476+ }
477+
478+ @ ParameterizedTest
479+ @ ValueSource (
480+ strings = {
481+ Tags .SPAN_KIND_SERVER ,
482+ Tags .SPAN_KIND_CLIENT ,
483+ Tags .SPAN_KIND_PRODUCER ,
484+ Tags .SPAN_KIND_CONSUMER ,
485+ Tags .SPAN_KIND_INTERNAL ,
486+ Tags .SPAN_KIND_BROKER
487+ })
488+ void setTagAndGetTagRoundTripForSpanKind (String kindString ) {
492489 AgentSpan span = tracer .buildSpan ("test" , "test" ).start ();
493- span .setTag (Tags . SPAN_KIND , kindString );
490+ span .setTag (SPAN_KIND , kindString );
494491
495- assertEquals (kindString , span .getTag (Tags . SPAN_KIND ));
492+ assertEquals (kindString , span .getTag (SPAN_KIND ));
496493
497494 span .finish ();
498495 }
@@ -501,39 +498,40 @@ void setTagAndGetTagRoundTripForSpanKind(String scenario, String kindString) {
501498 void getTagReturnsNullWhenSpanKindNotSet () {
502499 AgentSpan span = tracer .buildSpan ("test" , "test" ).start ();
503500
504- assertNull (span .getTag (Tags . SPAN_KIND ));
501+ assertNull (span .getTag (SPAN_KIND ));
505502
506503 span .finish ();
507504 }
508505
509- @ TableTest ({
510- "scenario | kindString" ,
511- "server | server " ,
512- "client | client " ,
513- "producer | producer " ,
514- "consumer | consumer " ,
515- "internal | internal " ,
516- "broker | broker "
517- })
518- void setTagThenRemoveTagClearsSpanKind (String scenario , String kindString ) {
506+ @ ParameterizedTest
507+ @ ValueSource (
508+ strings = {
509+ Tags .SPAN_KIND_SERVER ,
510+ Tags .SPAN_KIND_CLIENT ,
511+ Tags .SPAN_KIND_PRODUCER ,
512+ Tags .SPAN_KIND_CONSUMER ,
513+ Tags .SPAN_KIND_INTERNAL ,
514+ Tags .SPAN_KIND_BROKER
515+ })
516+ void setTagThenRemoveTagClearsSpanKind (String kindString ) {
519517 AgentSpan span = tracer .buildSpan ("test" , "test" ).start ();
520- span .setTag (Tags . SPAN_KIND , kindString );
518+ span .setTag (SPAN_KIND , kindString );
521519
522- assertEquals (kindString , span .getTag (Tags . SPAN_KIND ));
520+ assertEquals (kindString , span .getTag (SPAN_KIND ));
523521
524- ((DDSpan ) span ).context ().removeTag (Tags . SPAN_KIND );
522+ ((DDSpan ) span ).context ().removeTag (SPAN_KIND );
525523
526- assertNull (span .getTag (Tags . SPAN_KIND ));
524+ assertNull (span .getTag (SPAN_KIND ));
527525
528526 span .finish ();
529527 }
530528
531529 @ Test
532530 void setTagWithCustomSpanKindFallsBackToTagMap () {
533531 AgentSpan span = tracer .buildSpan ("test" , "test" ).start ();
534- span .setTag (Tags . SPAN_KIND , "custom-kind" );
532+ span .setTag (SPAN_KIND , "custom-kind" );
535533
536- assertEquals ("custom-kind" , span .getTag (Tags . SPAN_KIND ));
534+ assertEquals ("custom-kind" , span .getTag (SPAN_KIND ));
537535
538536 span .finish ();
539537 }
@@ -550,13 +548,13 @@ static void assertTagmap(Map<?, ?> source, Map<?, ?> comparison, boolean removeT
550548 sourceWithoutCommonTags .remove ("_sample_rate" );
551549 sourceWithoutCommonTags .remove ("process_id" );
552550 sourceWithoutCommonTags .remove ("_dd.trace_span_attribute_schema" );
553- sourceWithoutCommonTags .remove (DDTags . PROFILING_ENABLED );
554- sourceWithoutCommonTags .remove (DDTags . PROFILING_CONTEXT_ENGINE );
555- sourceWithoutCommonTags .remove (DDTags . DSM_ENABLED );
556- sourceWithoutCommonTags .remove (DDTags . DJM_ENABLED );
551+ sourceWithoutCommonTags .remove (PROFILING_ENABLED );
552+ sourceWithoutCommonTags .remove (PROFILING_CONTEXT_ENGINE );
553+ sourceWithoutCommonTags .remove (DSM_ENABLED );
554+ sourceWithoutCommonTags .remove (DJM_ENABLED );
557555 if (removeThread ) {
558- sourceWithoutCommonTags .remove (DDTags . THREAD_ID );
559- sourceWithoutCommonTags .remove (DDTags . THREAD_NAME );
556+ sourceWithoutCommonTags .remove (THREAD_ID );
557+ sourceWithoutCommonTags .remove (THREAD_NAME );
560558 }
561559 assertEquals (comparison , sourceWithoutCommonTags );
562560 }
0 commit comments