diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/test/java/server/HttpServerResponseEndHandlerInstrumentationTest.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/test/java/server/HttpServerResponseEndHandlerInstrumentationTest.java index 25201f3e872..7dd284f456d 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/test/java/server/HttpServerResponseEndHandlerInstrumentationTest.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/test/java/server/HttpServerResponseEndHandlerInstrumentationTest.java @@ -5,9 +5,9 @@ import static org.junit.jupiter.api.Assumptions.assumeTrue; import datadog.trace.agent.test.AbstractInstrumentationTest; +import io.vertx.core.Future; import io.vertx.core.Handler; import io.vertx.core.Vertx; -import io.vertx.core.buffer.Buffer; import io.vertx.core.http.HttpClient; import io.vertx.core.http.HttpClientOptions; import io.vertx.core.http.HttpClientResponse; @@ -23,6 +23,8 @@ import java.net.ServerSocket; import java.net.URL; import java.nio.charset.StandardCharsets; +import java.util.AbstractMap.SimpleEntry; +import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.AfterAll; @@ -113,22 +115,28 @@ void wrapsApplicationEndHandlerOnVertx51Http2Response() throws Exception { .setProtocolVersion(HttpVersion.HTTP_2) .setHttp2ClearTextUpgrade(false)); try { - HttpClientResponse response = + Map.Entry response = client .request(HttpMethod.GET, port, "localhost", "/end-handler-wrapper") - .compose(request -> request.send()) + // Subscribe on the event loop before response data can be discarded. + .compose(request -> request.send().compose(this::collectResponse)) .toCompletionStage() .toCompletableFuture() .get(10, TimeUnit.SECONDS); - Buffer body = - response.body().toCompletionStage().toCompletableFuture().get(10, TimeUnit.SECONDS); - - assertWrapped(response.statusCode(), body.toString(StandardCharsets.UTF_8), HTTP2_RESPONSE); + assertWrapped(response.getKey(), response.getValue(), HTTP2_RESPONSE); } finally { client.close().toCompletionStage().toCompletableFuture().get(10, TimeUnit.SECONDS); } } + private Future> collectResponse(HttpClientResponse response) { + return response + .body() + .map( + body -> + new SimpleEntry<>(response.statusCode(), body.toString(StandardCharsets.UTF_8))); + } + private static boolean hasVertx51Http1Response() { return hasClass(HTTP1_RESPONSE); }