Skip to content

Commit 3b6d83d

Browse files
committed
address comments
1 parent ff459dd commit 3b6d83d

2 files changed

Lines changed: 149 additions & 102 deletions

File tree

dd-trace-core/src/test/java/datadog/trace/core/DDSpanContextTest.java

Lines changed: 100 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
package 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;
39
import static datadog.trace.api.TracePropagationStyle.DATADOG;
410
import static datadog.trace.api.sampling.PrioritySampling.SAMPLER_DROP;
511
import static datadog.trace.api.sampling.PrioritySampling.SAMPLER_KEEP;
@@ -9,6 +15,8 @@
915
import static datadog.trace.api.sampling.SamplingMechanism.DEFAULT;
1016
import static datadog.trace.api.sampling.SamplingMechanism.MANUAL;
1117
import 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;
1220
import static datadog.trace.core.DDSpanContext.SPAN_SAMPLING_MAX_PER_SECOND_TAG;
1321
import static datadog.trace.core.DDSpanContext.SPAN_SAMPLING_MECHANISM_TAG;
1422
import static datadog.trace.core.DDSpanContext.SPAN_SAMPLING_RULE_RATE_TAG;
@@ -33,6 +41,7 @@
3341
import datadog.trace.bootstrap.instrumentation.api.Tags;
3442
import datadog.trace.common.writer.ListWriter;
3543
import datadog.trace.core.propagation.ExtractedContext;
44+
import datadog.trace.junit.utils.tabletest.TableTestTypeConverters;
3645
import java.util.HashMap;
3746
import java.util.Map;
3847
import java.util.stream.Stream;
@@ -41,9 +50,12 @@
4150
import org.junit.jupiter.params.ParameterizedTest;
4251
import org.junit.jupiter.params.provider.Arguments;
4352
import org.junit.jupiter.params.provider.MethodSource;
53+
import org.junit.jupiter.params.provider.ValueSource;
4454
import org.tabletest.junit.TableTest;
4555
import org.tabletest.junit.TypeConverter;
56+
import org.tabletest.junit.TypeConverterSources;
4657

58+
@TypeConverterSources(TableTestTypeConverters.class)
4759
public 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
}

utils/junit-utils/src/main/java/datadog/trace/junit/utils/tabletest/TableTestTypeConverters.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,53 @@ public static long toLong(String value) {
2222
return Long.decode(token);
2323
}
2424
}
25+
26+
@TypeConverter
27+
public static int toInt(String value) {
28+
if (value == null) {
29+
throw new IllegalArgumentException("Value cannot be null");
30+
}
31+
String token = value.trim();
32+
switch (token) {
33+
case "Integer.MAX_VALUE":
34+
return Integer.MAX_VALUE;
35+
case "Integer.MIN_VALUE":
36+
return Integer.MIN_VALUE;
37+
default:
38+
return Integer.decode(token);
39+
}
40+
}
41+
42+
@TypeConverter
43+
public static Number toNumber(String value) {
44+
if (value == null) {
45+
throw new IllegalArgumentException("Value cannot be null");
46+
}
47+
switch (value) {
48+
case "Integer.MAX_VALUE":
49+
return Integer.MAX_VALUE;
50+
case "Integer.MIN_VALUE":
51+
return Integer.MIN_VALUE;
52+
case "Short.MAX_VALUE":
53+
return Short.MAX_VALUE;
54+
case "Short.MIN_VALUE":
55+
return Short.MIN_VALUE;
56+
case "Float.MAX_VALUE":
57+
return Float.MAX_VALUE;
58+
case "Float.MIN_VALUE":
59+
return Float.MIN_VALUE;
60+
case "Double.MAX_VALUE":
61+
return Double.MAX_VALUE;
62+
case "Double.MIN_VALUE":
63+
return Double.MIN_VALUE;
64+
default:
65+
if (value.endsWith("f")) {
66+
return Float.parseFloat(value);
67+
}
68+
if (value.endsWith("d")) {
69+
return Double.parseDouble(value);
70+
}
71+
return Integer.decode(value);
72+
}
73+
}
2574
}

0 commit comments

Comments
 (0)