Skip to content

Commit 775ec98

Browse files
committed
feat(core): Add support for test session token header
1 parent 09682f2 commit 775ec98

6 files changed

Lines changed: 51 additions & 7 deletions

File tree

communication/src/main/java/datadog/communication/ddagent/SharedCommunicationObjects.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
public class SharedCommunicationObjects {
2727
private static final Logger log = LoggerFactory.getLogger(SharedCommunicationObjects.class);
2828

29+
private static final String X_DATADOG_TEST_SESSION_TOKEN = "X-Datadog-Test-Session-Token";
30+
2931
private final List<Runnable> pausedComponents = new ArrayList<>();
3032
private volatile boolean paused;
3133

@@ -90,9 +92,27 @@ public void createRemaining(Config config) {
9092
agentHttpClient =
9193
OkHttpUtils.buildHttpClient(
9294
OkHttpUtils.isPlainHttp(agentUrl), unixDomainSocket, namedPipe, httpClientTimeout);
95+
String testSessionToken = config.getTestAgentSessionToken();
96+
if (testSessionToken != null) {
97+
agentHttpClient = injectTestAgentSessionHeaderInterceptor(testSessionToken);
98+
}
9399
}
94100
}
95101

102+
private OkHttpClient injectTestAgentSessionHeaderInterceptor(String testSessionToken) {
103+
return agentHttpClient
104+
.newBuilder()
105+
.addInterceptor(
106+
chain ->
107+
chain.proceed(
108+
chain
109+
.request()
110+
.newBuilder()
111+
.header(X_DATADOG_TEST_SESSION_TOKEN, testSessionToken)
112+
.build()))
113+
.build();
114+
}
115+
96116
/** Registers a callback to be called when remote communications resume. */
97117
public void whenReady(Runnable callback) {
98118
if (paused) {

dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public final class TracerConfig {
3232
public static final String PROXY_NO_PROXY = "proxy.no_proxy";
3333
public static final String TRACE_AGENT_PATH = "trace.agent.path";
3434
public static final String TRACE_AGENT_ARGS = "trace.agent.args";
35+
public static final String TEST_AGENT_SESSION_TOKEN = "test.agent.session.token";
3536
public static final String PRIORITY_SAMPLING = "priority.sampling";
3637
public static final String PRIORITY_SAMPLING_FORCE = "priority.sampling.force";
3738
@Deprecated public static final String TRACE_RESOLVER_ENABLED = "trace.resolver.enabled";

internal-api/src/main/java/datadog/trace/api/Config.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -669,6 +669,7 @@
669669
import static datadog.trace.api.config.TracerConfig.SPAN_SAMPLING_RULES_FILE;
670670
import static datadog.trace.api.config.TracerConfig.SPAN_TAGS;
671671
import static datadog.trace.api.config.TracerConfig.SPLIT_BY_TAGS;
672+
import static datadog.trace.api.config.TracerConfig.TEST_AGENT_SESSION_TOKEN;
672673
import static datadog.trace.api.config.TracerConfig.TRACE_128_BIT_TRACEID_GENERATION_ENABLED;
673674
import static datadog.trace.api.config.TracerConfig.TRACE_AGENT_ARGS;
674675
import static datadog.trace.api.config.TracerConfig.TRACE_AGENT_PATH;
@@ -1365,6 +1366,7 @@ public static String getHostName() {
13651366
private final boolean azureFunctions;
13661367
private final boolean awsServerless;
13671368
private final String traceAgentPath;
1369+
private final String testAgentSessionToken;
13681370
private final List<String> traceAgentArgs;
13691371
private final String dogStatsDPath;
13701372
private final List<String> dogStatsDArgs;
@@ -3105,6 +3107,7 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment())
31053107

31063108
azureAppServices = configProvider.getBoolean(AZURE_APP_SERVICES, false);
31073109
traceAgentPath = configProvider.getString(TRACE_AGENT_PATH);
3110+
testAgentSessionToken = configProvider.getString(TEST_AGENT_SESSION_TOKEN);
31083111
String traceAgentArgsString = configProvider.getString(TRACE_AGENT_ARGS);
31093112
if (traceAgentArgsString == null) {
31103113
traceAgentArgs = Collections.emptyList();
@@ -5028,6 +5031,10 @@ public String getTraceAgentPath() {
50285031
return traceAgentPath;
50295032
}
50305033

5034+
public String getTestAgentSessionToken() {
5035+
return testAgentSessionToken;
5036+
}
5037+
50315038
public List<String> getTraceAgentArgs() {
50325039
return traceAgentArgs;
50335040
}

metadata/supported-configurations.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4065,6 +4065,14 @@
40654065
"aliases": []
40664066
}
40674067
],
4068+
"DD_TEST_AGENT_SESSION_TOKEN": [
4069+
{
4070+
"version": "A",
4071+
"type": "string",
4072+
"default": null,
4073+
"aliases": []
4074+
}
4075+
],
40684076
"DD_TEST_FAILED_TEST_REPLAY_ENABLED": [
40694077
{
40704078
"version": "A",

utils/config-utils/src/main/java/datadog/trace/api/ConfigSetting.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,13 @@ public final class ConfigSetting {
2525

2626
private static final Set<String> CONFIG_FILTER_LIST =
2727
new HashSet<>(
28-
Arrays.asList("DD_API_KEY", "dd.api-key", "dd.profiling.api-key", "dd.profiling.apikey"));
28+
Arrays.asList(
29+
"DD_API_KEY",
30+
"dd.api-key",
31+
"dd.profiling.api-key",
32+
"dd.profiling.apikey",
33+
"test.agent.session.token",
34+
"DD_TEST_AGENT_SESSION_TOKEN"));
2935

3036
public static ConfigSetting of(String key, Object value, ConfigOrigin origin) {
3137
return new ConfigSetting(key, value, origin, ABSENT_SEQ_ID, null);

utils/config-utils/src/test/java/datadog/trace/api/ConfigSettingTest.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,14 @@ void supportsEqualityCheck(
4444
}
4545

4646
@TableTest({
47-
"scenario | key | value | filteredValue",
48-
"DD_API_KEY | DD_API_KEY | somevalue | <hidden> ",
49-
"dd.api-key | dd.api-key | somevalue | <hidden> ",
50-
"dd.profiling.api-key | dd.profiling.api-key | somevalue | <hidden> ",
51-
"dd.profiling.apikey | dd.profiling.apikey | somevalue | <hidden> ",
52-
"some.other.key | some.other.key | somevalue | somevalue "
47+
"scenario | key | value | filteredValue",
48+
"DD_API_KEY | DD_API_KEY | somevalue | <hidden> ",
49+
"dd.api-key | dd.api-key | somevalue | <hidden> ",
50+
"dd.profiling.api-key | dd.profiling.api-key | somevalue | <hidden> ",
51+
"dd.profiling.apikey | dd.profiling.apikey | somevalue | <hidden> ",
52+
"session token prop | test.agent.session.token | somevalue | <hidden> ",
53+
"session token env | DD_TEST_AGENT_SESSION_TOKEN | somevalue | <hidden> ",
54+
"some.other.key | some.other.key | somevalue | somevalue "
5355
})
5456
void filtersKeyValues(String key, String value, String filteredValue) {
5557
assertEquals(filteredValue, ConfigSetting.of(key, value, ConfigOrigin.DEFAULT).stringValue());

0 commit comments

Comments
 (0)