diff --git a/dd-trace-core/src/test/java/datadog/trace/core/propagation/AbstractHttpInjectorTest.java b/dd-trace-core/src/test/java/datadog/trace/core/propagation/AbstractHttpInjectorTest.java new file mode 100644 index 00000000000..3098ab217ec --- /dev/null +++ b/dd-trace-core/src/test/java/datadog/trace/core/propagation/AbstractHttpInjectorTest.java @@ -0,0 +1,62 @@ +package datadog.trace.core.propagation; + +import datadog.trace.api.DDSpanId; +import datadog.trace.api.DDTraceId; +import datadog.trace.api.datastreams.NoopPathwayContext; +import datadog.trace.common.writer.ListWriter; +import datadog.trace.core.CoreTracer; +import datadog.trace.core.DDCoreJavaSpecification; +import datadog.trace.core.DDSpanContext; +import java.util.Map; +import org.junit.jupiter.api.BeforeEach; + +/** This class is a base test class for the {@link HttpCodec.Injector} tests. */ +abstract class AbstractHttpInjectorTest extends DDCoreJavaSpecification { + protected CoreTracer tracer; + protected HttpCodec.Injector injector; + + /** + * Creates the injector under test. + * + * @return {@code null} by default for tests that build injectors per test case. + */ + protected HttpCodec.Injector newInjector() { + return null; + } + + @BeforeEach + void setupInjectorTest() { + this.tracer = tracerBuilder().writer(new ListWriter()).build(); + this.injector = newInjector(); + } + + /** Builds a span context with the standard fake service/operation/resource values. */ + protected DDSpanContext mockSpanContext( + DDTraceId traceId, + long spanId, + int samplingPriority, + CharSequence origin, + Map baggage, + PropagationTags propagationTags) { + return new DDSpanContext( + traceId, + spanId, + DDSpanId.ZERO, + null, + "fakeService", + "fakeOperation", + "fakeResource", + samplingPriority, + origin, + baggage, + false, + "fakeType", + 0, + this.tracer.createTraceCollector(DDTraceId.ONE), + null, + null, + NoopPathwayContext.INSTANCE, + false, + propagationTags); + } +} diff --git a/dd-trace-core/src/test/java/datadog/trace/core/propagation/B3HttpInjectorTest.java b/dd-trace-core/src/test/java/datadog/trace/core/propagation/B3HttpInjectorTest.java index b1a606c1106..a60923a6ebc 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/propagation/B3HttpInjectorTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/propagation/B3HttpInjectorTest.java @@ -15,50 +15,27 @@ import datadog.context.propagation.CarrierSetter; import datadog.trace.api.Config; -import datadog.trace.api.DDSpanId; import datadog.trace.api.DDTraceId; import datadog.trace.api.DynamicConfig; -import datadog.trace.api.datastreams.NoopPathwayContext; import datadog.trace.bootstrap.instrumentation.api.TagContext; -import datadog.trace.common.writer.ListWriter; -import datadog.trace.core.CoreTracer; -import datadog.trace.core.DDCoreJavaSpecification; import datadog.trace.core.DDSpanContext; import datadog.trace.junit.utils.converter.PrioritySamplingConverter; import java.util.HashMap; import java.util.Map; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.converter.ConvertWith; import org.tabletest.junit.TableTest; -class B3HttpInjectorTest extends DDCoreJavaSpecification { +class B3HttpInjectorTest extends AbstractHttpInjectorTest { private static final CarrierSetter> MAP_SETTER = Map::put; - private HttpCodec.Injector injector; - private HttpCodec.Extractor extractor; - private CoreTracer tracer; - protected boolean tracePropagationB3Padding() { return DEFAULT_PROPAGATION_B3_PADDING_ENABLED; } - @BeforeEach - void setup() { - this.injector = B3HttpCodec.newCombinedInjector(tracePropagationB3Padding()); - - DynamicConfig dynamicConfig = - DynamicConfig.create().setHeaderTags(emptyMap()).setBaggageMapping(emptyMap()).apply(); - this.extractor = B3HttpCodec.newExtractor(Config.get(), dynamicConfig::captureTraceConfig); - - ListWriter writer = new ListWriter(); - this.tracer = tracerBuilder().writer(writer).build(); - } - - @AfterEach - void tearDown() { - this.tracer.close(); + @Override + protected HttpCodec.Injector newInjector() { + return B3HttpCodec.newCombinedInjector(tracePropagationB3Padding()); } @TableTest({ @@ -113,7 +90,11 @@ void injectHttpHeadersWithExtractedOriginal(String traceId, String spanId) { Map headers = new HashMap<>(); headers.put(TRACE_ID_KEY.toUpperCase(), traceId); headers.put(SPAN_ID_KEY.toUpperCase(), spanId); - TagContext context = this.extractor.extract(headers, stringValuesMap()); + DynamicConfig dynamicConfig = + DynamicConfig.create().setHeaderTags(emptyMap()).setBaggageMapping(emptyMap()).apply(); + HttpCodec.Extractor extractor = + B3HttpCodec.newExtractor(Config.get(), dynamicConfig::captureTraceConfig); + TagContext context = extractor.extract(headers, stringValuesMap()); DDSpanContext mockedContext = mockedSpanContext(context); Map carrier = new HashMap<>(); @@ -135,25 +116,12 @@ private DDSpanContext mockedSpanContext(DDTraceId traceId, long spanId, int samp Map baggage = new HashMap<>(); baggage.put("k1", "v1"); baggage.put("k2", "v2"); - return new DDSpanContext( + return mockSpanContext( traceId, spanId, - DDSpanId.ZERO, - null, - "fakeService", - "fakeOperation", - "fakeResource", samplingPriority, "fakeOrigin", baggage, - false, - "fakeType", - 0, - this.tracer.createTraceCollector(DDTraceId.ONE), - null, - null, - NoopPathwayContext.INSTANCE, - false, PropagationTags.factory().empty()); } diff --git a/dd-trace-core/src/test/java/datadog/trace/core/propagation/DatadogHttpInjectorTest.java b/dd-trace-core/src/test/java/datadog/trace/core/propagation/DatadogHttpInjectorTest.java index 5ad95b53a5f..24234535f9c 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/propagation/DatadogHttpInjectorTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/propagation/DatadogHttpInjectorTest.java @@ -17,37 +17,20 @@ import datadog.trace.api.DD128bTraceId; import datadog.trace.api.DDSpanId; import datadog.trace.api.DDTraceId; -import datadog.trace.api.datastreams.NoopPathwayContext; -import datadog.trace.common.writer.ListWriter; -import datadog.trace.core.CoreTracer; -import datadog.trace.core.DDCoreJavaSpecification; import datadog.trace.core.DDSpanContext; import datadog.trace.junit.utils.converter.PrioritySamplingConverter; import datadog.trace.junit.utils.converter.TraceIdConverter; import java.util.HashMap; import java.util.Map; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.converter.ConvertWith; import org.tabletest.junit.TableTest; -class DatadogHttpInjectorTest extends DDCoreJavaSpecification { - private HttpCodec.Injector injector; - private CoreTracer tracer; +class DatadogHttpInjectorTest extends AbstractHttpInjectorTest { - @BeforeEach - void setup() { - this.injector = - DatadogHttpCodec.newInjector(singletonMap("some-baggage-key", "SOME_CUSTOM_HEADER")); - - ListWriter writer = new ListWriter(); - this.tracer = tracerBuilder().writer(writer).build(); - } - - @AfterEach - void tearDown() { - this.tracer.close(); + @Override + protected HttpCodec.Injector newInjector() { + return DatadogHttpCodec.newInjector(singletonMap("some-baggage-key", "SOME_CUSTOM_HEADER")); } @TableTest({ @@ -196,25 +179,7 @@ private DDSpanContext mockSpanContext( ddPTags == null ? PropagationTags.factory().empty() : PropagationTags.factory().fromHeaderValue(DATADOG, ddPTags); - return new DDSpanContext( - traceId, - DDSpanId.from(spanId), - DDSpanId.ZERO, - null, - "fakeService", - "fakeOperation", - "fakeResource", - samplingPriority, - origin, - baggage, - false, - "fakeType", - 0, - this.tracer.createTraceCollector(DDTraceId.ONE), - null, - null, - NoopPathwayContext.INSTANCE, - false, - propagationTags); + return mockSpanContext( + traceId, DDSpanId.from(spanId), samplingPriority, origin, baggage, propagationTags); } } diff --git a/dd-trace-core/src/test/java/datadog/trace/core/propagation/HaystackHttpInjectorTest.java b/dd-trace-core/src/test/java/datadog/trace/core/propagation/HaystackHttpInjectorTest.java index 4e1ba647c85..b44a0998909 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/propagation/HaystackHttpInjectorTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/propagation/HaystackHttpInjectorTest.java @@ -14,38 +14,20 @@ import datadog.trace.api.DDSpanId; import datadog.trace.api.DDTraceId; -import datadog.trace.api.datastreams.NoopPathwayContext; -import datadog.trace.common.writer.ListWriter; -import datadog.trace.core.CoreTracer; -import datadog.trace.core.DDCoreJavaSpecification; import datadog.trace.core.DDSpanContext; import datadog.trace.junit.utils.converter.TraceIdConverter; import java.util.HashMap; import java.util.Map; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.converter.ConvertWith; import org.tabletest.junit.TableTest; -class HaystackHttpInjectorTest extends DDCoreJavaSpecification { +class HaystackHttpInjectorTest extends AbstractHttpInjectorTest { // UUID representation of DDSpanId.ZERO private static final String ZERO_UUID = "44617461-646f-6721-0000-000000000000"; - private HttpCodec.Injector injector; - private CoreTracer tracer; - - @BeforeEach - void setup() { - Map baggageMap = singletonMap("some-baggage-key", "SOME_CUSTOM_HEADER"); - this.injector = HaystackHttpCodec.newInjector(baggageMap); - - ListWriter writer = new ListWriter(); - this.tracer = tracerBuilder().writer(writer).build(); - } - - @AfterEach - void tearDown() { - this.tracer.close(); + @Override + protected HttpCodec.Injector newInjector() { + return HaystackHttpCodec.newInjector(singletonMap("some-baggage-key", "SOME_CUSTOM_HEADER")); } @TableTest({ @@ -101,7 +83,7 @@ void injectHttpHeadersWithHaystackTraceIdInBaggage( DDSpanContext spanContext = mockSpanContext(traceId, spanId, baggage); Map carrier = new HashMap<>(); - injector.inject(spanContext, carrier, Map::put); + this.injector.inject(spanContext, carrier, Map::put); assertEquals(traceUuid, carrier.get(TRACE_ID_KEY)); assertEquals(traceUuid, spanContext.unsafeGetTag(HAYSTACK_TRACE_ID_BAGGAGE_KEY)); @@ -118,25 +100,7 @@ void injectHttpHeadersWithHaystackTraceIdInBaggage( private DDSpanContext mockSpanContext( String traceId, String spanId, Map baggage) { - return new DDSpanContext( - DDTraceId.from(traceId), - DDSpanId.from(spanId), - DDSpanId.ZERO, - null, - "fakeService", - "fakeOperation", - "fakeResource", - SAMPLER_KEEP, - null, - baggage, - false, - "fakeType", - 0, - this.tracer.createTraceCollector(DDTraceId.ONE), - null, - null, - NoopPathwayContext.INSTANCE, - false, - null); + return mockSpanContext( + DDTraceId.from(traceId), DDSpanId.from(spanId), SAMPLER_KEEP, null, baggage, null); } } diff --git a/dd-trace-core/src/test/java/datadog/trace/core/propagation/HttpInjectorTest.java b/dd-trace-core/src/test/java/datadog/trace/core/propagation/HttpInjectorTest.java index 24812059903..90e1d488dca 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/propagation/HttpInjectorTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/propagation/HttpInjectorTest.java @@ -15,13 +15,8 @@ import static org.mockito.Mockito.when; import datadog.trace.api.Config; -import datadog.trace.api.DDSpanId; import datadog.trace.api.DDTraceId; import datadog.trace.api.TracePropagationStyle; -import datadog.trace.api.datastreams.NoopPathwayContext; -import datadog.trace.common.writer.ListWriter; -import datadog.trace.core.CoreTracer; -import datadog.trace.core.DDCoreJavaSpecification; import datadog.trace.core.DDSpanContext; import datadog.trace.junit.utils.converter.PrioritySamplingConverter; import java.util.HashMap; @@ -29,24 +24,10 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.converter.ConvertWith; import org.tabletest.junit.TableTest; -class HttpInjectorTest extends DDCoreJavaSpecification { - private CoreTracer tracer; - - @BeforeEach - void setup() { - ListWriter writer = new ListWriter(); - this.tracer = tracerBuilder().writer(writer).build(); - } - - @AfterEach - void tearDown() { - this.tracer.close(); - } +class HttpInjectorTest extends AbstractHttpInjectorTest { protected boolean tracePropagationB3Padding() { return DEFAULT_PROPAGATION_B3_PADDING_ENABLED; @@ -246,25 +227,12 @@ DDSpanContext mockedContext( int samplingPriority, String origin, Map baggage) { - return new DDSpanContext( + return mockSpanContext( traceId, spanId, - DDSpanId.ZERO, - null, - "fakeService", - "fakeOperation", - "fakeResource", samplingPriority, origin, baggage, - false, - "fakeType", - 0, - this.tracer.createTraceCollector(DDTraceId.ONE), - null, - null, - NoopPathwayContext.INSTANCE, - false, PropagationTags.factory().fromHeaderValue(DATADOG, "_dd.p.usr=123")); } diff --git a/dd-trace-core/src/test/java/datadog/trace/core/propagation/W3CHttpInjectorTest.java b/dd-trace-core/src/test/java/datadog/trace/core/propagation/W3CHttpInjectorTest.java index 459c035b42d..fc0256b5eb2 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/propagation/W3CHttpInjectorTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/propagation/W3CHttpInjectorTest.java @@ -7,45 +7,27 @@ import static datadog.trace.core.propagation.W3CHttpCodec.OT_BAGGAGE_PREFIX; import static datadog.trace.core.propagation.W3CHttpCodec.TRACE_PARENT_KEY; import static datadog.trace.core.propagation.W3CHttpCodec.TRACE_STATE_KEY; -import static datadog.trace.core.propagation.W3CHttpCodec.newInjector; import static java.util.Collections.singletonMap; import static org.junit.jupiter.api.Assertions.assertEquals; import datadog.trace.api.DDSpanId; import datadog.trace.api.DDTraceId; -import datadog.trace.api.datastreams.NoopPathwayContext; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import datadog.trace.common.writer.ListWriter; -import datadog.trace.core.CoreTracer; -import datadog.trace.core.DDCoreJavaSpecification; import datadog.trace.core.DDSpanContext; import datadog.trace.junit.utils.converter.PrioritySamplingConverter; import datadog.trace.junit.utils.converter.TraceIdConverter; import java.util.HashMap; import java.util.Map; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.converter.ConvertWith; import org.tabletest.junit.TableTest; -class W3CHttpInjectorTest extends DDCoreJavaSpecification { +class W3CHttpInjectorTest extends AbstractHttpInjectorTest { - private HttpCodec.Injector injector; - private CoreTracer tracer; - - @BeforeEach - void setup() { - this.injector = newInjector(singletonMap("some-baggage-key", "SOME_CUSTOM_HEADER")); - - ListWriter writer = new ListWriter(); - this.tracer = tracerBuilder().writer(writer).build(); - } - - @AfterEach - void tearDown() { - this.tracer.close(); + @Override + protected HttpCodec.Injector newInjector() { + return W3CHttpCodec.newInjector(singletonMap("some-baggage-key", "SOME_CUSTOM_HEADER")); } @TableTest({ @@ -198,33 +180,4 @@ static long extractLastParentId(Map carrier) { } throw new AssertionError("No 'p:' in dd tracestate: " + traceState); } - - private DDSpanContext mockSpanContext( - DDTraceId traceId, - long spanId, - int samplingPriority, - String origin, - Map baggage, - PropagationTags propagationTags) { - return new DDSpanContext( - traceId, - spanId, - DDSpanId.ZERO, - null, - "fakeService", - "fakeOperation", - "fakeResource", - samplingPriority, - origin, - baggage, - false, - "fakeType", - 0, - this.tracer.createTraceCollector(DDTraceId.ONE), - null, - null, - NoopPathwayContext.INSTANCE, - false, - propagationTags); - } } diff --git a/dd-trace-core/src/test/java/datadog/trace/core/propagation/XRayHttpInjectorTest.java b/dd-trace-core/src/test/java/datadog/trace/core/propagation/XRayHttpInjectorTest.java index db681314524..87e2c98abcf 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/propagation/XRayHttpInjectorTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/propagation/XRayHttpInjectorTest.java @@ -15,47 +15,35 @@ import datadog.trace.api.DDSpanId; import datadog.trace.api.DDTraceId; import datadog.trace.api.DynamicConfig; -import datadog.trace.api.datastreams.NoopPathwayContext; import datadog.trace.api.time.TimeSource; import datadog.trace.bootstrap.instrumentation.api.TagContext; -import datadog.trace.common.writer.ListWriter; -import datadog.trace.core.CoreTracer; -import datadog.trace.core.DDCoreJavaSpecification; +import datadog.trace.core.CoreTracer.CoreTracerBuilder; import datadog.trace.core.DDSpanContext; import datadog.trace.core.datastreams.DataStreamsMonitoring; import datadog.trace.junit.utils.converter.PrioritySamplingConverter; import datadog.trace.junit.utils.converter.TraceIdConverter; import java.util.HashMap; import java.util.Map; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.converter.ConvertWith; import org.tabletest.junit.TableTest; -class XRayHttpInjectorTest extends DDCoreJavaSpecification { - private HttpCodec.Injector injector; - private CoreTracer tracer; +class XRayHttpInjectorTest extends AbstractHttpInjectorTest { - @BeforeEach - void setup() { - this.injector = - XRayHttpCodec.newInjector(singletonMap("some-baggage-key", "SOME_CUSTOM_HEADER")); + @Override + protected CoreTracerBuilder tracerBuilder() { TimeSource timeSource = mock(TimeSource.class); when(timeSource.getCurrentTimeMillis()).thenReturn(1_664_906_869_196L); when(timeSource.getCurrentTimeNanos()).thenReturn(1_664_906_869_196_787_813L); when(timeSource.getNanoTicks()).thenReturn(1_664_906_869_196L); - this.tracer = - tracerBuilder() - .dataStreamsMonitoring(mock(DataStreamsMonitoring.class)) - .writer(new ListWriter()) - .timeSource(timeSource) - .build(); + return super.tracerBuilder() + .dataStreamsMonitoring(mock(DataStreamsMonitoring.class)) + .timeSource(timeSource); } - @AfterEach - void tearDown() { - this.tracer.close(); + @Override + protected HttpCodec.Injector newInjector() { + return XRayHttpCodec.newInjector(singletonMap("some-baggage-key", "SOME_CUSTOM_HEADER")); } @TableTest({ @@ -137,25 +125,6 @@ void injectHttpHeadersWithEndToEnd() { private DDSpanContext createContext( DDTraceId traceId, long spanId, int samplingPriority, Map baggage) { - return new DDSpanContext( - traceId, - spanId, - DDSpanId.ZERO, - null, - "fakeService", - "fakeOperation", - "fakeResource", - samplingPriority, - "fakeOrigin", - baggage, - false, - "fakeType", - 0, - this.tracer.createTraceCollector(DDTraceId.ONE), - null, - null, - NoopPathwayContext.INSTANCE, - false, - null); + return mockSpanContext(traceId, spanId, samplingPriority, "fakeOrigin", baggage, null); } }