Skip to content

Commit cfd6f7d

Browse files
committed
Support recording of baggage, that would be sent to agent as trace metadata, during tests
1 parent dd9bbdd commit cfd6f7d

File tree

2 files changed

+26
-18
lines changed

2 files changed

+26
-18
lines changed

dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import datadog.trace.bootstrap.instrumentation.api.Tags
3939
import datadog.trace.bootstrap.instrumentation.api.URIDataAdapter
4040
import datadog.trace.bootstrap.instrumentation.api.URIUtils
4141
import datadog.trace.core.DDSpan
42+
import datadog.trace.core.Metadata
4243
import datadog.trace.core.datastreams.StatsGroup
4344
import datadog.trace.test.util.Flaky
4445
import groovy.json.JsonOutput
@@ -780,6 +781,15 @@ abstract class HttpServerTest<SERVER> extends WithHttpServer<SERVER> {
780781

781782
def "test baggage span tags are properly added"() {
782783
setup:
784+
def recordedBaggage = [:]
785+
TEST_WRITER.metadataConsumer = { Metadata md ->
786+
md.baggage.forEach { k, v ->
787+
// record non-internal baggage sent to agent as trace metadata
788+
if (!k.startsWith("_dd.")) {
789+
recordedBaggage.put(k, v)
790+
}
791+
}
792+
}
783793
// Use default configuration for TRACE_BAGGAGE_TAG_KEYS (user.id, session.id, account.id)
784794
def baggageHeader = "user.id=test-user,session.id=test-session,account.id=test-account,language=en"
785795
def request = request(SUCCESS, 'GET', null)
@@ -799,12 +809,7 @@ abstract class HttpServerTest<SERVER> extends WithHttpServer<SERVER> {
799809
trace(spanCount(SUCCESS)) {
800810
sortSpansByStart()
801811
// Verify baggage tags are added for default configured keys only
802-
serverSpan(it, null, null, 'GET', SUCCESS, [
803-
"baggage.user.id": "test-user",
804-
"baggage.session.id": "test-session",
805-
"baggage.account.id": "test-account"
806-
// "baggage.language" should NOT be present since it's not in default config
807-
])
812+
serverSpan(it, null, null, 'GET', SUCCESS)
808813
if (hasHandlerSpan()) {
809814
handlerSpan(it)
810815
}
@@ -814,6 +819,12 @@ abstract class HttpServerTest<SERVER> extends WithHttpServer<SERVER> {
814819
}
815820
}
816821
}
822+
recordedBaggage == [
823+
"baggage.user.id": "test-user",
824+
"baggage.session.id": "test-session",
825+
"baggage.account.id": "test-account"
826+
// "baggage.language" should NOT be present since it's not in default config
827+
]
817828

818829
and:
819830
if (isDataStreamsEnabled()) {

dd-trace-core/src/main/java/datadog/trace/common/writer/ListWriter.java

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import static java.util.concurrent.TimeUnit.SECONDS;
66

77
import datadog.trace.core.DDSpan;
8+
import datadog.trace.core.MetadataConsumer;
89
import java.util.List;
910
import java.util.concurrent.CopyOnWriteArrayList;
1011
import java.util.concurrent.TimeUnit;
@@ -25,6 +26,8 @@ public class ListWriter extends CopyOnWriteArrayList<List<DDSpan>> implements Wr
2526

2627
private Filter filter = ACCEPT_ALL;
2728

29+
private MetadataConsumer metadataConsumer = MetadataConsumer.NO_OP;
30+
2831
public List<DDSpan> firstTrace() {
2932
return get(0);
3033
}
@@ -37,18 +40,7 @@ public void write(List<DDSpan> trace) {
3740
for (DDSpan span : trace) {
3841
// This is needed to properly do all delayed processing to make this writer even
3942
// remotely realistic so the test actually test something
40-
span.processTagsAndBaggage(
41-
metadata -> {
42-
// surface injected baggage metadata as span tags so they can be asserted
43-
metadata
44-
.getBaggage()
45-
.forEach(
46-
(k, v) -> {
47-
if (!k.startsWith("_dd.") && span.getTag(k) == null) {
48-
span.setTag(k, v);
49-
}
50-
});
51-
});
43+
span.processTagsAndBaggage(metadataConsumer);
5244
}
5345

5446
add(trace);
@@ -127,6 +119,11 @@ public void setFilter(Filter filter) {
127119
this.filter = filter;
128120
}
129121

122+
/** Set a {@link MetadataConsumer} to capture what trace metadata would be sent to the agent. */
123+
public void setMetadataConsumer(MetadataConsumer metadataConsumer) {
124+
this.metadataConsumer = metadataConsumer;
125+
}
126+
130127
private boolean isReported(DDSpan span) {
131128
for (List<DDSpan> trace : this) {
132129
for (DDSpan aSpan : trace) {

0 commit comments

Comments
 (0)