From c918d05aa09a60a567e992e28ac954cfa641bd86 Mon Sep 17 00:00:00 2001 From: Nikita Salnikov-Tarnovski Date: Mon, 29 Mar 2021 07:41:09 +0300 Subject: [PATCH] Add connection reuse tests for Reactor Netty libraries (#2647) --- .../reactor/TracingSubscriber.java | 2 +- .../reactor-netty-0.9-javaagent.gradle | 1 + .../ReactorNettyInstrumentationModule.java | 2 +- .../groovy/ReactorNettyHttpClientTest.groovy | 32 +++++++++++++++++++ .../reactor-netty-1.0-javaagent.gradle | 1 + .../ReactorNettyInstrumentationModule.java | 2 +- .../groovy/ReactorNettyHttpClientTest.groovy | 27 +++++++++++++++- 7 files changed, 63 insertions(+), 4 deletions(-) diff --git a/instrumentation/reactor-3.1/library/src/main/java/io/opentelemetry/instrumentation/reactor/TracingSubscriber.java b/instrumentation/reactor-3.1/library/src/main/java/io/opentelemetry/instrumentation/reactor/TracingSubscriber.java index 6f131af03a..a851ce5412 100644 --- a/instrumentation/reactor-3.1/library/src/main/java/io/opentelemetry/instrumentation/reactor/TracingSubscriber.java +++ b/instrumentation/reactor-3.1/library/src/main/java/io/opentelemetry/instrumentation/reactor/TracingSubscriber.java @@ -44,8 +44,8 @@ public class TracingSubscriber implements CoreSubscriber { Context ctx, io.opentelemetry.context.Context contextToPropagate) { this.subscriber = subscriber; - this.traceContext = contextToPropagate; this.context = ctx; + this.traceContext = contextToPropagate; } @Override diff --git a/instrumentation/reactor-netty-0.9/javaagent/reactor-netty-0.9-javaagent.gradle b/instrumentation/reactor-netty-0.9/javaagent/reactor-netty-0.9-javaagent.gradle index 33b9a59afc..ad4f7ce694 100644 --- a/instrumentation/reactor-netty-0.9/javaagent/reactor-netty-0.9-javaagent.gradle +++ b/instrumentation/reactor-netty-0.9/javaagent/reactor-netty-0.9-javaagent.gradle @@ -19,4 +19,5 @@ dependencies { testInstrumentation project(':instrumentation:reactor-netty-1.0:javaagent') testInstrumentation project(':instrumentation:netty:netty-4.1:javaagent') + testInstrumentation project(':instrumentation:reactor-3.1:javaagent') } diff --git a/instrumentation/reactor-netty-0.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v0_9/ReactorNettyInstrumentationModule.java b/instrumentation/reactor-netty-0.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v0_9/ReactorNettyInstrumentationModule.java index 29c738a79b..523c66d6d1 100644 --- a/instrumentation/reactor-netty-0.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v0_9/ReactorNettyInstrumentationModule.java +++ b/instrumentation/reactor-netty-0.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v0_9/ReactorNettyInstrumentationModule.java @@ -64,7 +64,7 @@ public class ReactorNettyInstrumentationModule extends InstrumentationModule { @Override public Map, String> transformers() { return singletonMap( - isStatic().and(named("create")), + isStatic().and(named("create").or(named("newConnection"))), ReactorNettyInstrumentationModule.class.getName() + "$CreateAdvice"); } } diff --git a/instrumentation/reactor-netty-0.9/javaagent/src/test/groovy/ReactorNettyHttpClientTest.groovy b/instrumentation/reactor-netty-0.9/javaagent/src/test/groovy/ReactorNettyHttpClientTest.groovy index 675b99b427..ac43a06457 100644 --- a/instrumentation/reactor-netty-0.9/javaagent/src/test/groovy/ReactorNettyHttpClientTest.groovy +++ b/instrumentation/reactor-netty-0.9/javaagent/src/test/groovy/ReactorNettyHttpClientTest.groovy @@ -5,6 +5,9 @@ import io.opentelemetry.instrumentation.test.AgentTestTrait import io.opentelemetry.instrumentation.test.base.HttpClientTest +import io.opentelemetry.instrumentation.test.base.SingleConnection +import java.util.concurrent.ExecutionException +import java.util.concurrent.TimeoutException import reactor.netty.http.client.HttpClient import reactor.netty.http.client.HttpClientResponse @@ -45,4 +48,33 @@ class ReactorNettyHttpClientTest extends HttpClientTest implements AgentTestTrai } return resp.status().code() } + + @Override + SingleConnection createSingleConnection(String host, int port) { + String url + try { + url = new URL("http", host, port, "").toString() + } catch (MalformedURLException e) { + throw new ExecutionException(e) + } + + def httpClient = HttpClient + .newConnection() + .baseUrl(url) + + return new SingleConnection() { + + @Override + int doRequest(String path, Map headers) throws ExecutionException, InterruptedException, TimeoutException { + return httpClient + .headers({ h -> headers.each { k, v -> h.add(k, v) } }) + .get() + .uri(path) + .response() + .block() + .status().code() + } + } + } + } diff --git a/instrumentation/reactor-netty-1.0/javaagent/reactor-netty-1.0-javaagent.gradle b/instrumentation/reactor-netty-1.0/javaagent/reactor-netty-1.0-javaagent.gradle index 723b8e5e81..0aa955dda9 100644 --- a/instrumentation/reactor-netty-1.0/javaagent/reactor-netty-1.0-javaagent.gradle +++ b/instrumentation/reactor-netty-1.0/javaagent/reactor-netty-1.0-javaagent.gradle @@ -20,4 +20,5 @@ dependencies { testInstrumentation project(':instrumentation:reactor-netty-0.9:javaagent') testInstrumentation project(':instrumentation:netty:netty-4.1:javaagent') + testInstrumentation project(':instrumentation:reactor-3.1:javaagent') } diff --git a/instrumentation/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettyInstrumentationModule.java b/instrumentation/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettyInstrumentationModule.java index 3f62f374fa..f5d55c3af5 100644 --- a/instrumentation/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettyInstrumentationModule.java +++ b/instrumentation/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettyInstrumentationModule.java @@ -63,7 +63,7 @@ public class ReactorNettyInstrumentationModule extends InstrumentationModule { @Override public Map, String> transformers() { return singletonMap( - isStatic().and(named("create")), + isStatic().and(named("create").or(named("newConnection"))), ReactorNettyInstrumentationModule.class.getName() + "$CreateAdvice"); } } diff --git a/instrumentation/reactor-netty-1.0/javaagent/src/test/groovy/ReactorNettyHttpClientTest.groovy b/instrumentation/reactor-netty-1.0/javaagent/src/test/groovy/ReactorNettyHttpClientTest.groovy index a1f623a27e..cf1e8796a2 100644 --- a/instrumentation/reactor-netty-1.0/javaagent/src/test/groovy/ReactorNettyHttpClientTest.groovy +++ b/instrumentation/reactor-netty-1.0/javaagent/src/test/groovy/ReactorNettyHttpClientTest.groovy @@ -5,6 +5,9 @@ import io.opentelemetry.instrumentation.test.AgentTestTrait import io.opentelemetry.instrumentation.test.base.HttpClientTest +import io.opentelemetry.instrumentation.test.base.SingleConnection +import java.util.concurrent.ExecutionException +import java.util.concurrent.TimeoutException import reactor.netty.http.client.HttpClient import reactor.netty.http.client.HttpClientResponse @@ -29,7 +32,7 @@ class ReactorNettyHttpClientTest extends HttpClientTest implements AgentTestTrai String userAgent() { return "ReactorNetty" } - + @Override int doRequest(String method, URI uri, Map headers = [:], Closure callback = null) { HttpClientResponse resp = HttpClient.create() @@ -45,4 +48,26 @@ class ReactorNettyHttpClientTest extends HttpClientTest implements AgentTestTrai } return resp.status().code() } + + @Override + SingleConnection createSingleConnection(String host, int port) { + def httpClient = HttpClient + .newConnection() + .host(host) + .port(port) + + return new SingleConnection() { + + @Override + int doRequest(String path, Map headers) throws ExecutionException, InterruptedException, TimeoutException { + return httpClient + .headers({ h -> headers.each { k, v -> h.add(k, v) } }) + .get() + .uri(path) + .response() + .block() + .status().code() + } + } + } }