diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/ConfigurationFileLoader.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/ConfigurationFileLoader.java index c33243e21c5..9cc7f5f5421 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/ConfigurationFileLoader.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/ConfigurationFileLoader.java @@ -1,30 +1,24 @@ package com.datadog.debugger.agent; -import com.datadog.debugger.probe.LogProbe; -import com.datadog.debugger.probe.MetricProbe; +import static com.datadog.debugger.probe.ProbeDefinitionDeserializer.deserializeLogProbe; +import static com.datadog.debugger.probe.ProbeDefinitionDeserializer.deserializeMetricProbe; +import static com.datadog.debugger.probe.ProbeDefinitionDeserializer.deserializeSpanDecorationProbe; +import static com.datadog.debugger.probe.ProbeDefinitionDeserializer.deserializeSpanProbe; +import static com.datadog.debugger.probe.ProbeDefinitionDeserializer.deserializeTriggerProbe; + import com.datadog.debugger.probe.ProbeDefinition; -import com.datadog.debugger.probe.SpanDecorationProbe; -import com.datadog.debugger.probe.SpanProbe; -import com.datadog.debugger.probe.TriggerProbe; -import com.datadog.debugger.util.MoshiHelper; import com.squareup.moshi.JsonAdapter; import com.squareup.moshi.JsonReader; import com.squareup.moshi.JsonWriter; -import com.squareup.moshi.Moshi; -import com.squareup.moshi.Types; import datadog.trace.util.SizeCheckedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; -import java.lang.annotation.Annotation; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; -import java.util.Set; import okio.Okio; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,9 +40,7 @@ public static Configuration from(Path probeFilePath, long maxPayloadSize) { } } while (bytesRead > -1); byte[] configContent = outputStream.toByteArray(); - Moshi moshi = MoshiHelper.createMoshiConfigBuilder().add(new ProbeFileFactory()).build(); - ParameterizedType type = Types.newParameterizedType(List.class, ProbeDefinition.class); - JsonAdapter> adapter = moshi.adapter(type); + JsonAdapter> adapter = new ProbeFileAdapter(); List probeDefinitions = adapter.fromJson( JsonReader.of(Okio.buffer(Okio.source(new ByteArrayInputStream(configContent))))); @@ -59,40 +51,7 @@ public static Configuration from(Path probeFilePath, long maxPayloadSize) { } } - private static class ProbeFileFactory implements JsonAdapter.Factory { - @Override - public JsonAdapter create(Type type, Set annotations, Moshi moshi) { - if (Types.equals(type, Types.newParameterizedType(List.class, ProbeDefinition.class))) { - return new ProbeFileAdapter( - moshi.adapter(LogProbe.class), - moshi.adapter(MetricProbe.class), - moshi.adapter(SpanProbe.class), - moshi.adapter(SpanDecorationProbe.class), - moshi.adapter(TriggerProbe.class)); - } - return null; - } - } - private static class ProbeFileAdapter extends JsonAdapter> { - private final JsonAdapter logProbeAdapter; - private final JsonAdapter metricProbeAdapter; - private final JsonAdapter spanProbeAdapter; - private final JsonAdapter spanDecorationProbeAdapter; - private final JsonAdapter triggerProbeAdapter; - - public ProbeFileAdapter( - JsonAdapter logProbeAdapter, - JsonAdapter metricProbeAdapter, - JsonAdapter spanProbeAdapter, - JsonAdapter spanDecorationProbeAdapter, - JsonAdapter triggerProbeAdapter) { - this.logProbeAdapter = logProbeAdapter; - this.metricProbeAdapter = metricProbeAdapter; - this.spanProbeAdapter = spanProbeAdapter; - this.spanDecorationProbeAdapter = spanDecorationProbeAdapter; - this.triggerProbeAdapter = triggerProbeAdapter; - } @Override public List fromJson(JsonReader reader) throws IOException { @@ -110,19 +69,19 @@ public List fromJson(JsonReader reader) throws IOException { String type = jsonPeekReader.nextString(); switch (type) { case "LOG_PROBE": - probeDefinitions.add(logProbeAdapter.fromJson(reader)); + probeDefinitions.add(deserializeLogProbe(reader)); break; case "METRIC_PROBE": - probeDefinitions.add(metricProbeAdapter.fromJson(reader)); + probeDefinitions.add(deserializeMetricProbe(reader)); break; case "SPAN_PROBE": - probeDefinitions.add(spanProbeAdapter.fromJson(reader)); + probeDefinitions.add(deserializeSpanProbe(reader)); break; case "SPAN_DECORATION_PROBE": - probeDefinitions.add(spanDecorationProbeAdapter.fromJson(reader)); + probeDefinitions.add(deserializeSpanDecorationProbe(reader)); break; case "TRIGGER_PROBE": - probeDefinitions.add(triggerProbeAdapter.fromJson(reader)); + probeDefinitions.add(deserializeTriggerProbe(reader)); break; default: throw new RuntimeException("Unknown type: " + type); diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/probe/ProbeDefinitionDeserializer.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/probe/ProbeDefinitionDeserializer.java index 9501b1ad07b..891200f0c3d 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/probe/ProbeDefinitionDeserializer.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/probe/ProbeDefinitionDeserializer.java @@ -3,6 +3,7 @@ import com.datadog.debugger.agent.Configuration; import com.datadog.debugger.util.MoshiHelper; import com.squareup.moshi.JsonAdapter; +import com.squareup.moshi.JsonReader; import java.io.ByteArrayInputStream; import java.io.IOException; import okio.Okio; @@ -29,22 +30,42 @@ public static MetricProbe deserializeMetricProbe(byte[] content) throws IOExcept return deserialize(METRIC_PROBE_JSON_ADAPTER, content); } + public static MetricProbe deserializeMetricProbe(JsonReader reader) throws IOException { + return METRIC_PROBE_JSON_ADAPTER.fromJson(reader); + } + public static LogProbe deserializeLogProbe(byte[] content) throws IOException { LogProbe logProbe = deserialize(LOG_PROBE_JSON_ADAPTER, content); logProbe.initSamplers(); return logProbe; } + public static LogProbe deserializeLogProbe(JsonReader reader) throws IOException { + LogProbe logProbe = LOG_PROBE_JSON_ADAPTER.fromJson(reader); + logProbe.initSamplers(); + return logProbe; + } + public static SpanProbe deserializeSpanProbe(byte[] content) throws IOException { return deserialize(SPAN_PROBE_JSON_ADAPTER, content); } + public static SpanProbe deserializeSpanProbe(JsonReader reader) throws IOException { + return SPAN_PROBE_JSON_ADAPTER.fromJson(reader); + } + public static TriggerProbe deserializeTriggerProbe(byte[] content) throws IOException { TriggerProbe triggerProbe = deserialize(TRIGGER_PROBE_JSON_ADAPTER, content); triggerProbe.initSamplers(); return triggerProbe; } + public static TriggerProbe deserializeTriggerProbe(JsonReader jsonReader) throws IOException { + TriggerProbe triggerProbe = TRIGGER_PROBE_JSON_ADAPTER.fromJson(jsonReader); + triggerProbe.initSamplers(); + return triggerProbe; + } + public static SpanDecorationProbe deserializeSpanDecorationProbe(byte[] content) throws IOException { SpanDecorationProbe spanDecorationProbe = @@ -53,6 +74,14 @@ public static SpanDecorationProbe deserializeSpanDecorationProbe(byte[] content) return spanDecorationProbe; } + public static SpanDecorationProbe deserializeSpanDecorationProbe(JsonReader jsonReader) + throws IOException { + SpanDecorationProbe spanDecorationProbe = + SPAN_DECORATION_PROBE_JSON_ADAPTER.fromJson(jsonReader); + spanDecorationProbe.initSamplers(); + return spanDecorationProbe; + } + private static T deserialize(JsonAdapter adapter, byte[] content) throws IOException { return adapter.fromJson(Okio.buffer(Okio.source(new ByteArrayInputStream(content)))); } diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/ConfigurationFileLoaderTest.java b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/ConfigurationFileLoaderTest.java index 3dd1f04cc94..c96382cab9a 100644 --- a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/ConfigurationFileLoaderTest.java +++ b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/ConfigurationFileLoaderTest.java @@ -7,6 +7,7 @@ import com.datadog.debugger.probe.ProbeDefinition; import com.datadog.debugger.probe.SpanDecorationProbe; import com.datadog.debugger.probe.SpanProbe; +import com.datadog.debugger.probe.TriggerProbe; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; @@ -21,11 +22,12 @@ public void load() throws Exception { Configuration configuration = ConfigurationFileLoader.from(probeFilePath, 1024 * 1024); assertNotNull(configuration); List definitions = configuration.getDefinitions(); - assertEquals(5, definitions.size()); - assertInstanceOf(MetricProbe.class, definitions.get(0)); - assertInstanceOf(LogProbe.class, definitions.get(1)); + assertEquals(6, definitions.size()); + assertInstanceOf(TriggerProbe.class, definitions.get(0)); + assertInstanceOf(MetricProbe.class, definitions.get(1)); assertInstanceOf(LogProbe.class, definitions.get(2)); - assertInstanceOf(SpanProbe.class, definitions.get(3)); - assertInstanceOf(SpanDecorationProbe.class, definitions.get(4)); + assertInstanceOf(LogProbe.class, definitions.get(3)); + assertInstanceOf(SpanProbe.class, definitions.get(4)); + assertInstanceOf(SpanDecorationProbe.class, definitions.get(5)); } } diff --git a/dd-java-agent/agent-debugger/src/test/resources/test_probe_file.json b/dd-java-agent/agent-debugger/src/test/resources/test_probe_file.json index 9acd77856c9..a7b430f9939 100644 --- a/dd-java-agent/agent-debugger/src/test/resources/test_probe_file.json +++ b/dd-java-agent/agent-debugger/src/test/resources/test_probe_file.json @@ -87,5 +87,19 @@ }, "tags": [], "evaluateAt": "EXIT" + }, + { + "id": "70b55d06-f9fa-403b-a329-4f2f960aed02", + "version": 0, + "type": "TRIGGER_PROBE", + "language": "java", + "where": { + "typeName": "MetadataClientUtils", + "methodName": "listTableWithContinuation" + }, + "tags": [], + "evaluateAt": "EXIT", + "sessionId": "session", + "sampling": { "snapshotsPerSecond": 100 } } ] diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/BaseIntegrationTest.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/BaseIntegrationTest.java index f44bfd5facc..34560553807 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/BaseIntegrationTest.java +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/BaseIntegrationTest.java @@ -21,6 +21,7 @@ import com.squareup.moshi.Moshi; import com.squareup.moshi.Types; import datadog.trace.bootstrap.debugger.CapturedContext; +import datadog.trace.bootstrap.debugger.ProbeId; import datadog.trace.bootstrap.debugger.ProbeRateLimiter; import datadog.trace.test.agent.decoder.DecodedMessage; import datadog.trace.test.agent.decoder.DecodedTrace; @@ -332,23 +333,25 @@ protected void registerProbeStatusListener(Consumer listener) { probeStatusListeners.add(listener); } - protected AtomicBoolean registerCheckReceivedInstalledEmitting() { + protected AtomicBoolean registerCheckReceivedInstalledEmitting(ProbeId probeId) { AtomicBoolean received = new AtomicBoolean(); AtomicBoolean installed = new AtomicBoolean(); AtomicBoolean emitting = new AtomicBoolean(); AtomicBoolean result = new AtomicBoolean(); registerProbeStatusListener( probeStatus -> { - if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.RECEIVED) { - received.set(true); - } - if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.INSTALLED) { - installed.set(true); - } - if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.EMITTING) { - emitting.set(true); + if (probeStatus.getDiagnostics().getProbeId().equals(probeId)) { + if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.RECEIVED) { + received.set(true); + } + if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.INSTALLED) { + installed.set(true); + } + if (probeStatus.getDiagnostics().getStatus() == ProbeStatus.Status.EMITTING) { + emitting.set(true); + } + result.set(received.get() && installed.get() && emitting.get()); } - result.set(received.get() && installed.get() && emitting.get()); }); return result; } diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/LogProbesIntegrationTest.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/LogProbesIntegrationTest.java index 338aa762a6c..4ff2d8bbfb3 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/LogProbesIntegrationTest.java +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/LogProbesIntegrationTest.java @@ -100,7 +100,7 @@ void testFullMethod() throws Exception { assertNull(snapshot.getCaptures().getReturn().getCapturedThrowable()); snapshotReceived.set(true); }); - AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(); + AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(PROBE_ID); processRequests( () -> snapshotReceived.get() && statusResult.get(), () -> @@ -132,7 +132,7 @@ void testFullMethodWithCondition() throws Exception { assertFullMethodCaptureArgs(snapshot.getCaptures().getEntry()); snapshotReceived.set(true); }); - AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(); + AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(PROBE_ID); processRequests( () -> snapshotReceived.get() && statusResult.get(), () -> @@ -166,7 +166,7 @@ void testFullMethodWithConditionAtExit() throws Exception { assertFullMethodCaptureArgs(snapshot.getCaptures().getReturn()); snapshotReceived.set(true); }); - AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(); + AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(PROBE_ID); processRequests( () -> snapshotReceived.get() && statusResult.get(), () -> @@ -199,7 +199,7 @@ void testFullMethodWithConditionFailed() throws Exception { "Cannot find symbol: noarg", snapshot.getEvaluationErrors().get(0).getMessage()); snapshotReceived.set(true); }); - AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(); + AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(PROBE_ID); processRequests( () -> snapshotReceived.get() && statusResult.get(), () -> @@ -236,7 +236,7 @@ void testFullMethodWithLogTemplate() throws Exception { assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); snapshotReceived.set(true); }); - AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(); + AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(PROBE_ID); processRequests( () -> snapshotReceived.get() && correctLogMessage.get() && statusResult.get(), () -> @@ -288,7 +288,7 @@ void testFullMethodWithCaptureExpressions() throws Exception { assertNull(key2Value.getNotCapturedReason()); snapshotReceived.set(true); }); - AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(); + AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(PROBE_ID); processRequests( () -> snapshotReceived.get() && statusResult.get(), () -> @@ -371,7 +371,7 @@ void testLineProbe() throws Exception { assertNull(capturedContext.getCapturedThrowable()); snapshotReceived.set(true); }); - AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(); + AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(LINE_PROBE_ID1); processRequests( () -> snapshotReceived.get() && statusResult.get(), () -> diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/MetricProbesIntegrationTest.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/MetricProbesIntegrationTest.java index 5c700b07acf..dfd5150fcd4 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/MetricProbesIntegrationTest.java +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/MetricProbesIntegrationTest.java @@ -112,7 +112,7 @@ private void doMethodMetric( targetProcess = createProcessBuilder(logFilePath, METHOD_NAME, EXPECTED_UPLOADS).start(); String msgExpected = String.format(expectedMsgFormat, metricName, PROBE_ID.getId()); assertNotNull(retrieveStatsdMessage(msgExpected)); - AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(); + AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(PROBE_ID); processRequests( statusResult::get, () -> String.format("timeout statusResult=%s", statusResult.get())); } @@ -219,7 +219,7 @@ private void doLineMetric( targetProcess = createProcessBuilder(logFilePath, METHOD_NAME, EXPECTED_UPLOADS).start(); String msgExpected = String.format(expectedMsgFormat, metricName, PROBE_ID.getId()); assertNotNull(retrieveStatsdMessage(msgExpected)); - AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(); + AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(PROBE_ID); processRequests( statusResult::get, () -> String.format("timeout statusResult=%s", statusResult.get())); } diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/ProbeFileIntegrationTest.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/ProbeFileIntegrationTest.java new file mode 100644 index 00000000000..3fb17608915 --- /dev/null +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/ProbeFileIntegrationTest.java @@ -0,0 +1,83 @@ +package datadog.smoketest; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; + +import datadog.trace.bootstrap.debugger.ProbeId; +import datadog.trace.test.agent.decoder.DecodedSpan; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInfo; +import org.junit.jupiter.api.condition.DisabledIf; + +public class ProbeFileIntegrationTest extends ServerAppDebuggerIntegrationTest { + private static final ProbeId PROBE_ID2 = new ProbeId("ad4cba6f-d476-4554-b5ed-80dd941a40d8", 0); + private static final ProbeId PROBE_ID3 = new ProbeId("70b55d06-f9fa-403b-a329-4f2f960aed01", 0); + private static final ProbeId PROBE_ID4 = new ProbeId("123356537", 0); + + Path probeFilePath; + + @BeforeEach + @Override + public void setup(TestInfo testInfo) throws Exception { + super.setup(testInfo); + probeFilePath = + Paths.get(ProbeFileIntegrationTest.class.getResource("/test_probe_file.json").toURI()); + appUrl = startAppAndAndGetUrl(); + } + + @Override + protected ProcessBuilder createProcessBuilder(Path logFilePath, String... params) { + List commandParams = getDebuggerCommandParams(); + commandParams.add("-Ddd.trace.enabled=true"); // explicitly enable tracer + commandParams.add("-Ddd.dynamic.instrumentation.probe.file=" + probeFilePath.toString()); + // increase eval timeout for decoration evaluations + commandParams.add("-Ddd.dynamic.instrumentation.evaluation.timeout.ms=100"); + return ProcessBuilderHelper.createProcessBuilder( + commandParams, logFilePath, getAppClass(), params); + } + + @Test + @DisplayName("testProbeFile") + @DisabledIf( + value = "datadog.environment.JavaVirtualMachine#isJ9", + disabledReason = "Flaky on J9 JVMs") + void testProbeFile() throws Exception { + waitForInstrumentation(appUrl); + execute(appUrl, TRACED_METHOD_NAME); + AtomicBoolean snapshotReceived = new AtomicBoolean(); + AtomicBoolean traceReceived = new AtomicBoolean(); + registerSnapshotListener( + snapshot -> { + assertEquals(PROBE_ID.getId(), snapshot.getProbe().getId()); + assertEquals(5, snapshot.getCaptures().getReturn().getArguments().size()); + snapshotReceived.set(true); + }); + registerTraceListener( + decodedTrace -> { + for (DecodedSpan span : decodedTrace.getSpans()) { + if (isDynamicSpan(span)) { + assertEquals("foobar", span.getMeta().get("client")); + assertEquals(PROBE_ID2.getId(), span.getMeta().get("_dd.di.client.probe_id")); + traceReceived.set(true); + } + } + }); + processRequests( + () -> snapshotReceived.get() && traceReceived.get(), + () -> + String.format( + "Timeout! traceReceived=%s snapshotReceived=%s", traceReceived, snapshotReceived)); + assertFalse(logHasErrors(logFilePath, it -> it.contains(" Error "))); + } + + protected boolean isDynamicSpan(DecodedSpan span) { + return span.getName().equals("dd.dynamic.span") + && span.getResource().equals("ServerDebuggerTestApplication.tracedMethod"); + } +} diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/SpanProbesIntegrationTest.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/SpanProbesIntegrationTest.java index 6cf6f17f883..63dc4a9dc98 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/SpanProbesIntegrationTest.java +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/SpanProbesIntegrationTest.java @@ -34,7 +34,7 @@ void testMethodSpan() throws Exception { setCurrentConfiguration(createSpanConfig(spanProbe)); targetProcess = createProcessBuilder(logFilePath, METHOD_NAME, EXPECTED_UPLOADS).start(); - AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(); + AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(PROBE_ID); AtomicBoolean traceReceived = new AtomicBoolean(); registerTraceListener( decodedTrace -> { @@ -64,7 +64,7 @@ void testLineRangeSpan() throws Exception { .build(); setCurrentConfiguration(createSpanConfig(spanProbe)); targetProcess = createProcessBuilder(logFilePath, METHOD_NAME, EXPECTED_UPLOADS).start(); - AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(); + AtomicBoolean statusResult = registerCheckReceivedInstalledEmitting(PROBE_ID); AtomicBoolean traceReceived = new AtomicBoolean(); registerTraceListener( decodedTrace -> { diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/resources/test_probe_file.json b/dd-smoke-tests/debugger-integration-tests/src/test/resources/test_probe_file.json new file mode 100644 index 00000000000..5459e57cfd8 --- /dev/null +++ b/dd-smoke-tests/debugger-integration-tests/src/test/resources/test_probe_file.json @@ -0,0 +1,92 @@ +[ + { + "id": "123356536", + "version": 0, + "language": "java", + "type": "LOG_PROBE", + "where": { + "typeName": "ServerDebuggerTestApplication", + "methodName": "tracedMethod", + "signature": "" + }, + "captureSnapshot": true + }, + { + "id": "100c9a5c-45ad-49dc-818b-c570d31e11d1", + "version": 0, + "type": "LOG_PROBE", + "where": { + "sourceFile": "index.js", + "lines": ["25"] + }, + "template": "Hello World", + "segments": [{ + "str": "Hello World" + }], + "captureSnapshot": true, + "capture": { "maxReferenceDepth": 3 }, + "sampling": { "snapshotsPerSecond": 100 } + }, + { + "id": "123356537", + "language": "java", + "type": "METRIC_PROBE", + "where": { + "typeName": "ServerDebuggerTestApplication", + "methodName": "tracedMethod" + }, + "tags": ["version:v123", "env:staging"], + "kind": "COUNT", + "metricName": "datadog.debugger.fullMethod.calls", + "value": { + "dsl": "42", + "json": 42 + } + }, + { + "id": "ad4cba6f-d476-4554-b5ed-80dd941a40d8", + "version": 0, + "type": "SPAN_DECORATION_PROBE", + "language": "java", + "where": { + "typeName": "ServerDebuggerTestApplication", + "methodName": "tracedMethod", + "signature": "" + }, + "tags": [], + "evaluateAt": "EXIT", + "targetSpan": "ACTIVE", + "decorations": [ + { + "tags": [ + { + "name": "client", + "value": { + "segments": [ + { + "dsl": "argStr", + "json": { + "ref": "argStr" + } + } + ], + "template": "{argStr}" + } + } + ] + } + ] + }, + { + "id": "70b55d06-f9fa-403b-a329-4f2f960aed01", + "version": 0, + "type": "SPAN_PROBE", + "language": "java", + "where": { + "typeName": "ServerDebuggerTestApplication", + "methodName": "tracedMethod" + }, + "tags": [], + "evaluateAt": "EXIT" + } +]