diff --git a/dd-java-agent-ittests/dd-java-agent-ittests.gradle b/dd-java-agent-ittests/dd-java-agent-ittests.gradle index dcf2438223..dcc11adeb9 100644 --- a/dd-java-agent-ittests/dd-java-agent-ittests.gradle +++ b/dd-java-agent-ittests/dd-java-agent-ittests.gradle @@ -52,7 +52,7 @@ test { } if (project.hasProperty("disableShadowRelocate") && disableShadowRelocate) { - exclude 'datadog/trace/agent/ShadowPackageRenamingTest.class' + exclude 'datadog/trace/agent/integration/classloading/ShadowPackageRenamingTest.class' } } diff --git a/dd-trace-ot/src/main/java/datadog/trace/common/writer/DDApi.java b/dd-trace-ot/src/main/java/datadog/trace/common/writer/DDApi.java index 8759d4efdb..ca455a95aa 100644 --- a/dd-trace-ot/src/main/java/datadog/trace/common/writer/DDApi.java +++ b/dd-trace-ot/src/main/java/datadog/trace/common/writer/DDApi.java @@ -10,10 +10,10 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; -import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -40,8 +40,8 @@ public class DDApi { private final ObjectMapper objectMapper = new ObjectMapper(new MessagePackFactory()); public DDApi(final String host, final int port) { - if (endpointAvailable("http://" + host + ":" + port + TRACES_ENDPOINT_V4) - && endpointAvailable("http://" + host + ":" + port + SERVICES_ENDPOINT_V4)) { + if (traceEndpointAvailable("http://" + host + ":" + port + TRACES_ENDPOINT_V4) + && serviceEndpointAvailable("http://" + host + ":" + port + SERVICES_ENDPOINT_V4)) { this.tracesEndpoint = "http://" + host + ":" + port + TRACES_ENDPOINT_V4; this.servicesEndpoint = "http://" + host + ":" + port + SERVICES_ENDPOINT_V4; } else { @@ -163,11 +163,15 @@ public class DDApi { } } - private boolean endpointAvailable(final String endpoint) { - return endpointAvailable(endpoint, true); + private boolean traceEndpointAvailable(final String endpoint) { + return endpointAvailable(endpoint, Collections.emptyList(), true); } - private boolean endpointAvailable(final String endpoint, final boolean retry) { + private boolean serviceEndpointAvailable(final String endpoint) { + return endpointAvailable(endpoint, Collections.emptyMap(), true); + } + + private boolean endpointAvailable(final String endpoint, final Object data, final boolean retry) { try { final HttpURLConnection httpCon = getHttpURLConnection(endpoint); @@ -175,13 +179,14 @@ public class DDApi { httpCon.setConnectTimeout((int) TimeUnit.SECONDS.toMillis(1)); httpCon.setReadTimeout((int) TimeUnit.SECONDS.toMillis(1)); - final OutputStreamWriter out = new OutputStreamWriter(httpCon.getOutputStream()); + final OutputStream out = httpCon.getOutputStream(); + objectMapper.writeValue(out, data); out.flush(); out.close(); return httpCon.getResponseCode() == 200; } catch (final IOException e) { if (retry) { - return endpointAvailable(endpoint, false); + return endpointAvailable(endpoint, data, false); } } return false; diff --git a/dd-trace-ot/src/test/groovy/datadog/trace/api/writer/DDApiTest.groovy b/dd-trace-ot/src/test/groovy/datadog/trace/api/writer/DDApiTest.groovy index b7de75569b..19cae1be62 100644 --- a/dd-trace-ot/src/test/groovy/datadog/trace/api/writer/DDApiTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/trace/api/writer/DDApiTest.groovy @@ -30,10 +30,12 @@ class DDApiTest extends Specification { def agent = ratpack { handlers { put("v0.4/traces") { - response.status(200).send() + def status = request.contentLength > 0 ? 200 : 500 + response.status(status).send() } put("v0.4/services") { - response.status(200).send() + def status = request.contentLength > 0 ? 200 : 500 + response.status(status).send() } } } @@ -56,7 +58,8 @@ class DDApiTest extends Specification { response.status(404).send() } put("v0.4/services") { - response.status(200).send() + def status = request.contentLength > 0 ? 200 : 500 + response.status(status).send() } } } @@ -87,7 +90,8 @@ class DDApiTest extends Specification { } } put("v0.4/services") { - response.status(200).send() + def status = request.contentLength > 0 ? 200 : 500 + response.status(status).send() } } } @@ -144,10 +148,12 @@ class DDApiTest extends Specification { def agent = ratpack { handlers { put("v0.4/traces") { - response.status(200).send() + def status = request.contentLength > 0 ? 200 : 500 + response.status(status).send() } put("v0.4/services") { - response.status(200).send() + def status = request.contentLength > 0 ? 200 : 500 + response.status(status).send() } } } @@ -167,7 +173,8 @@ class DDApiTest extends Specification { def agent = ratpack { handlers { put("v0.4/traces") { - response.status(200).send() + def status = request.contentLength > 0 ? 200 : 500 + response.status(status).send() } put("v0.4/services") { response.status(404).send() @@ -193,7 +200,8 @@ class DDApiTest extends Specification { def agent = ratpack { handlers { put("v0.4/traces") { - response.status(200).send() + def status = request.contentLength > 0 ? 200 : 500 + response.status(status).send() } put("v0.4/services") { requestContentType.set(request.contentType) @@ -243,11 +251,13 @@ class DDApiTest extends Specification { def agent = ratpack { handlers { put("v0.4/traces") { - response.status(200).send('{"hello":"test"}') + def status = request.contentLength > 0 ? 200 : 500 + response.status(status).send('{"hello":"test"}') } put("v0.4/services") { if (servicesAvailable) { - response.status(200).send('{"service-response":"from-test"}') + def status = request.contentLength > 0 ? 200 : 500 + response.status(status).send('{"service-response":"from-test"}') } else { response.status(404).send('{"service-response":"from-test"}') } @@ -280,10 +290,12 @@ class DDApiTest extends Specification { def v3Agent = ratpack { handlers { put("v0.3/traces") { - response.status(200).send() + def status = request.contentLength > 0 ? 200 : 500 + response.status(status).send() } put("v0.3/services") { - response.status(200).send() + def status = request.contentLength > 0 ? 200 : 500 + response.status(status).send() } } } @@ -307,21 +319,25 @@ class DDApiTest extends Specification { def agent = ratpack { handlers { put("v0.3/traces") { - response.status(200).send() + def status = request.contentLength > 0 ? 200 : 500 + response.status(status).send() } put("v0.3/services") { - response.status(200).send() + def status = request.contentLength > 0 ? 200 : 500 + response.status(status).send() } put("v0.4/traces") { Blocking.exec { Thread.sleep(delayTrace) - response.status(200).send() + def status = request.contentLength > 0 ? 200 : 500 + response.status(status).send() } } put("v0.4/services") { Blocking.exec { Thread.sleep(delayServices) - response.status(200).send() + def status = request.contentLength > 0 ? 200 : 500 + response.status(status).send() } } }