Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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<String, String> 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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<String, String>> 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.Snapshot> 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({
Expand Down Expand Up @@ -113,7 +90,11 @@ void injectHttpHeadersWithExtractedOriginal(String traceId, String spanId) {
Map<String, String> 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.Snapshot> 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<String, String> carrier = new HashMap<>();
Expand All @@ -135,25 +116,12 @@ private DDSpanContext mockedSpanContext(DDTraceId traceId, long spanId, int samp
Map<String, String> 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());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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({
Expand Down Expand Up @@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<String, String> 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({
Expand Down Expand Up @@ -101,7 +83,7 @@ void injectHttpHeadersWithHaystackTraceIdInBaggage(
DDSpanContext spanContext = mockSpanContext(traceId, spanId, baggage);
Map<String, String> 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));
Expand All @@ -118,25 +100,7 @@ void injectHttpHeadersWithHaystackTraceIdInBaggage(

private DDSpanContext mockSpanContext(
String traceId, String spanId, Map<String, String> 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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,38 +15,19 @@
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;
import java.util.LinkedHashSet;
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;
Expand Down Expand Up @@ -246,25 +227,12 @@ DDSpanContext mockedContext(
int samplingPriority,
String origin,
Map<String, String> 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"));
}

Expand Down
Loading
Loading