From a98d98e80fe598e7abceeee16a758790d5041049 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Tue, 30 Jul 2024 15:33:43 +0300 Subject: [PATCH 1/3] Fix latest dep tests --- .../javaagent/build.gradle.kts | 20 ++- .../v2_0/AsyncHttpClientTest.java | 28 +++- .../v5_1/AbstractLettuceAsyncClientTest.java | 9 +- .../v5_1/AbstractLettuceClientTest.java | 19 +-- .../AbstractLettuceSyncClientAuthTest.java | 90 +++++++++--- .../v5_1/AbstractLettuceSyncClientTest.java | 135 +++++++++++++----- 6 files changed, 218 insertions(+), 83 deletions(-) diff --git a/instrumentation/async-http-client/async-http-client-2.0/javaagent/build.gradle.kts b/instrumentation/async-http-client/async-http-client-2.0/javaagent/build.gradle.kts index 30b722110c08..f335c8c690c1 100644 --- a/instrumentation/async-http-client/async-http-client-2.0/javaagent/build.gradle.kts +++ b/instrumentation/async-http-client/async-http-client-2.0/javaagent/build.gradle.kts @@ -18,14 +18,26 @@ dependencies { testInstrumentation(project(":instrumentation:netty:netty-4.1:javaagent")) } -otelJava { - // AHC uses Unsafe and so does not run on later java version - maxJavaVersionForTests.set(JavaVersion.VERSION_1_8) +val latestDepTest = findProperty("testLatestDeps") as Boolean + +if (latestDepTest) { + otelJava { + minJavaVersionSupported.set(JavaVersion.VERSION_11) + } +} else { + otelJava { + // AHC uses Unsafe and so does not run on later java version + maxJavaVersionForTests.set(JavaVersion.VERSION_1_8) + } +} + +tasks.withType().configureEach { + systemProperty("testLatestDeps", latestDepTest) } // async-http-client 2.0.0 does not work with Netty versions newer than this due to referencing an // internal file. -if (!(findProperty("testLatestDeps") as Boolean)) { +if (!latestDepTest) { configurations.configureEach { if (!name.contains("muzzle")) { resolutionStrategy { diff --git a/instrumentation/async-http-client/async-http-client-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v2_0/AsyncHttpClientTest.java b/instrumentation/async-http-client/async-http-client-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v2_0/AsyncHttpClientTest.java index e8b25349aca9..6e968d6b9759 100644 --- a/instrumentation/async-http-client/async-http-client-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v2_0/AsyncHttpClientTest.java +++ b/instrumentation/async-http-client/async-http-client-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v2_0/AsyncHttpClientTest.java @@ -10,11 +10,14 @@ import io.opentelemetry.instrumentation.testing.junit.http.HttpClientInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientResult; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientTestOptions; +import java.lang.reflect.Method; import java.net.URI; +import java.time.Duration; import java.util.Map; import java.util.concurrent.ExecutionException; import org.asynchttpclient.AsyncCompletionHandler; import org.asynchttpclient.AsyncHttpClient; +import org.asynchttpclient.DefaultAsyncHttpClientConfig; import org.asynchttpclient.Dsl; import org.asynchttpclient.Request; import org.asynchttpclient.RequestBuilder; @@ -31,11 +34,26 @@ class AsyncHttpClientTest extends AbstractHttpClientTest { private static final int CONNECTION_TIMEOUT_MS = (int) CONNECTION_TIMEOUT.toMillis(); // request timeout is needed in addition to connect timeout on async-http-client versions 2.1.0+ - private static final AsyncHttpClient client = - Dsl.asyncHttpClient( - Dsl.config() - .setConnectTimeout(CONNECTION_TIMEOUT_MS) - .setRequestTimeout(CONNECTION_TIMEOUT_MS)); + private static final AsyncHttpClient client = Dsl.asyncHttpClient(configureTimeout(Dsl.config())); + + private static DefaultAsyncHttpClientConfig.Builder configureTimeout( + DefaultAsyncHttpClientConfig.Builder builder) { + setTimeout(builder, "setConnectTimeout", CONNECTION_TIMEOUT_MS); + setTimeout(builder, "setRequestTimeout", CONNECTION_TIMEOUT_MS); + return builder; + } + + private static void setTimeout( + DefaultAsyncHttpClientConfig.Builder builder, String methodName, int timeout) { + boolean testLatestDeps = Boolean.getBoolean("testLatestDeps"); + try { + Method method = + builder.getClass().getMethod(methodName, testLatestDeps ? Duration.class : int.class); + method.invoke(builder, testLatestDeps ? Duration.ofMillis(timeout) : timeout); + } catch (Exception exception) { + throw new IllegalStateException("Failed to set timeout " + methodName, exception); + } + } @Override public Request buildRequest(String method, URI uri, Map headers) { diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceAsyncClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceAsyncClientTest.java index 7aecb49b892b..7b99265a2ca4 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceAsyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceAsyncClientTest.java @@ -103,8 +103,13 @@ void testConnectUsingGetOnConnectionFuture() throws Exception { cleanup.deferCleanup(testConnectionClient::shutdown); assertThat(connection1).isNotNull(); - // Lettuce tracing does not trace connect - assertThat(getInstrumentationExtension().spans()).isEmpty(); + if (Boolean.getBoolean("testLatestDeps")) { + // ignore CLIENT SETINFO traces + getInstrumentationExtension().waitForTraces(2); + } else { + // Lettuce tracing does not trace connect + assertThat(getInstrumentationExtension().spans()).isEmpty(); + } } @Test diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java index 2cd18303d9e2..38b5df08085c 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java @@ -8,7 +8,6 @@ import io.lettuce.core.RedisClient; import io.lettuce.core.api.StatefulRedisConnection; import io.opentelemetry.instrumentation.testing.internal.AutoCleanupExtension; -import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.extension.RegisterExtension; @@ -22,13 +21,6 @@ abstract class AbstractLettuceClientTest { protected static final Logger logger = LoggerFactory.getLogger(AbstractLettuceClientTest.class); - @RegisterExtension - protected static final InstrumentationExtension testing = AgentInstrumentationExtension.create(); - - public InstrumentationExtension getInstrumentationExtension() { - return testing; - } - @RegisterExtension static final AutoCleanupExtension cleanup = AutoCleanupExtension.create(); protected static final int DB_INDEX = 0; @@ -40,19 +32,16 @@ public InstrumentationExtension getInstrumentationExtension() { .waitingFor(Wait.forLogMessage(".*Ready to accept connections.*", 1)); protected static RedisClient redisClient; - protected static StatefulRedisConnection connection; - - protected abstract RedisClient createClient(String uri); - protected static String host; - protected static String ip; - protected static int port; - protected static String embeddedDbUri; + protected abstract RedisClient createClient(String uri); + + protected abstract InstrumentationExtension getInstrumentationExtension(); + protected ContainerConnection newContainerConnection() { GenericContainer server = new GenericContainer<>("redis:6.2.3-alpine") diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientAuthTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientAuthTest.java index a067003b9ae0..c74c918d355f 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientAuthTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientAuthTest.java @@ -10,6 +10,7 @@ import io.lettuce.core.api.sync.RedisCommands; import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions; import io.opentelemetry.semconv.NetworkAttributes; import io.opentelemetry.semconv.ServerAttributes; import io.opentelemetry.semconv.incubating.DbIncubatingAttributes; @@ -59,23 +60,76 @@ void testAuthCommand() throws Exception { assertThat(result).isEqualTo("OK"); - getInstrumentationExtension() - .waitAndAssertTraces( - trace -> - trace.hasSpansSatisfyingExactly( - span -> - span.hasName("AUTH") - .hasKind(SpanKind.CLIENT) - .hasAttributesSatisfyingExactly( - equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"), - equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), - equalTo(NetworkAttributes.NETWORK_PEER_PORT, port), - equalTo(ServerAttributes.SERVER_ADDRESS, host), - equalTo(ServerAttributes.SERVER_PORT, port), - equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "AUTH ?")) - .hasEventsSatisfyingExactly( - event -> event.hasName("redis.encode.start"), - event -> event.hasName("redis.encode.end")))); + if (Boolean.getBoolean("testLatestDeps")) { + getInstrumentationExtension() + .waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> + span.hasName("CLIENT") + .hasKind(SpanKind.CLIENT) + .hasAttributesSatisfyingExactly( + equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"), + equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), + equalTo(NetworkAttributes.NETWORK_PEER_PORT, port), + equalTo(ServerAttributes.SERVER_ADDRESS, host), + equalTo(ServerAttributes.SERVER_PORT, port), + equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), + equalTo( + DbIncubatingAttributes.DB_STATEMENT, + "CLIENT SETINFO lib-name Lettuce"))), + trace -> + trace.hasSpansSatisfyingExactly( + span -> + span.hasName("CLIENT") + .hasKind(SpanKind.CLIENT) + .hasAttributesSatisfyingExactly( + equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"), + equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), + equalTo(NetworkAttributes.NETWORK_PEER_PORT, port), + equalTo(ServerAttributes.SERVER_ADDRESS, host), + equalTo(ServerAttributes.SERVER_PORT, port), + equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), + OpenTelemetryAssertions.satisfies( + DbIncubatingAttributes.DB_STATEMENT, + stringAssert -> + stringAssert.startsWith("CLIENT SETINFO lib-ver")))), + trace -> + trace.hasSpansSatisfyingExactly( + span -> + span.hasName("AUTH") + .hasKind(SpanKind.CLIENT) + .hasAttributesSatisfyingExactly( + equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"), + equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), + equalTo(NetworkAttributes.NETWORK_PEER_PORT, port), + equalTo(ServerAttributes.SERVER_ADDRESS, host), + equalTo(ServerAttributes.SERVER_PORT, port), + equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), + equalTo(DbIncubatingAttributes.DB_STATEMENT, "AUTH ?")) + .hasEventsSatisfyingExactly( + event -> event.hasName("redis.encode.start"), + event -> event.hasName("redis.encode.end")))); + + } else { + getInstrumentationExtension() + .waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> + span.hasName("AUTH") + .hasKind(SpanKind.CLIENT) + .hasAttributesSatisfyingExactly( + equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"), + equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), + equalTo(NetworkAttributes.NETWORK_PEER_PORT, port), + equalTo(ServerAttributes.SERVER_ADDRESS, host), + equalTo(ServerAttributes.SERVER_PORT, port), + equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), + equalTo(DbIncubatingAttributes.DB_STATEMENT, "AUTH ?")) + .hasEventsSatisfyingExactly( + event -> event.hasName("redis.encode.start"), + event -> event.hasName("redis.encode.end")))); + } } } diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java index b9e53ffb83a1..2492fb4c27ec 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java @@ -20,6 +20,7 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.test.utils.PortUtils; +import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions; import io.opentelemetry.semconv.NetworkAttributes; import io.opentelemetry.semconv.ServerAttributes; import io.opentelemetry.semconv.incubating.DbIncubatingAttributes; @@ -81,8 +82,13 @@ void testConnect() { StatefulRedisConnection testConnection = redisClient.connect(); cleanup.deferCleanup(testConnection); - // Lettuce tracing does not trace connect - assertThat(getInstrumentationExtension().spans()).isEmpty(); + if (Boolean.getBoolean("testLatestDeps")) { + // ignore CLIENT SETINFO traces + getInstrumentationExtension().waitForTraces(2); + } else { + // Lettuce tracing does not trace connect + assertThat(getInstrumentationExtension().spans()).isEmpty(); + } } @Test @@ -206,6 +212,12 @@ void testListCommand() { ContainerConnection containerConnection = newContainerConnection(); RedisCommands commands = containerConnection.connection.sync(); + if (Boolean.getBoolean("testLatestDeps")) { + // ignore CLIENT SETINFO traces + getInstrumentationExtension().waitForTraces(2); + getInstrumentationExtension().clearData(); + } + long res = commands.lpush("TESTLIST", "TESTLIST ELEMENT"); assertThat(res).isEqualTo(1); @@ -350,43 +362,82 @@ void testDebugSegfaultCommandWithNoArgumentProducesNoSpan() { commands.debugSegfault(); - getInstrumentationExtension() - .waitAndAssertTraces( - trace -> { - if (Boolean.getBoolean("testLatestDeps")) { - trace.hasSpansSatisfyingExactly( - span -> - span.hasName("DEBUG") - .hasKind(SpanKind.CLIENT) - .hasAttributesSatisfyingExactly( - equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"), - equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), - equalTo( - NetworkAttributes.NETWORK_PEER_PORT, containerConnection.port), - equalTo(ServerAttributes.SERVER_ADDRESS, host), - equalTo(ServerAttributes.SERVER_PORT, containerConnection.port), - equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "DEBUG SEGFAULT"))); - } else { - trace.hasSpansSatisfyingExactly( - span -> - span.hasName("DEBUG") - .hasKind(SpanKind.CLIENT) - .hasAttributesSatisfyingExactly( - equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"), - equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), - equalTo( - NetworkAttributes.NETWORK_PEER_PORT, containerConnection.port), - equalTo(ServerAttributes.SERVER_ADDRESS, host), - equalTo(ServerAttributes.SERVER_PORT, containerConnection.port), - equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "DEBUG SEGFAULT")) - // these are no longer recorded since Lettuce 6.1.6 - .hasEventsSatisfyingExactly( - event -> event.hasName("redis.encode.start"), - event -> event.hasName("redis.encode.end"))); - } - }); + if (Boolean.getBoolean("testLatestDeps")) { + getInstrumentationExtension() + .waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> + span.hasName("CLIENT") + .hasKind(SpanKind.CLIENT) + .hasAttributesSatisfyingExactly( + equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"), + equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), + equalTo( + NetworkAttributes.NETWORK_PEER_PORT, + containerConnection.port), + equalTo(ServerAttributes.SERVER_ADDRESS, host), + equalTo(ServerAttributes.SERVER_PORT, containerConnection.port), + equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), + equalTo( + DbIncubatingAttributes.DB_STATEMENT, + "CLIENT SETINFO lib-name Lettuce"))), + trace -> + trace.hasSpansSatisfyingExactly( + span -> + span.hasName("CLIENT") + .hasKind(SpanKind.CLIENT) + .hasAttributesSatisfyingExactly( + equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"), + equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), + equalTo( + NetworkAttributes.NETWORK_PEER_PORT, + containerConnection.port), + equalTo(ServerAttributes.SERVER_ADDRESS, host), + equalTo(ServerAttributes.SERVER_PORT, containerConnection.port), + equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), + OpenTelemetryAssertions.satisfies( + DbIncubatingAttributes.DB_STATEMENT, + stringAssert -> + stringAssert.startsWith("CLIENT SETINFO lib-ver")))), + trace -> + trace.hasSpansSatisfyingExactly( + span -> + span.hasName("DEBUG") + .hasKind(SpanKind.CLIENT) + .hasAttributesSatisfyingExactly( + equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"), + equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), + equalTo( + NetworkAttributes.NETWORK_PEER_PORT, + containerConnection.port), + equalTo(ServerAttributes.SERVER_ADDRESS, host), + equalTo(ServerAttributes.SERVER_PORT, containerConnection.port), + equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), + equalTo(DbIncubatingAttributes.DB_STATEMENT, "DEBUG SEGFAULT")))); + } else { + getInstrumentationExtension() + .waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> + span.hasName("DEBUG") + .hasKind(SpanKind.CLIENT) + .hasAttributesSatisfyingExactly( + equalTo(NetworkAttributes.NETWORK_TYPE, "ipv4"), + equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, ip), + equalTo( + NetworkAttributes.NETWORK_PEER_PORT, + containerConnection.port), + equalTo(ServerAttributes.SERVER_ADDRESS, host), + equalTo(ServerAttributes.SERVER_PORT, containerConnection.port), + equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), + equalTo(DbIncubatingAttributes.DB_STATEMENT, "DEBUG SEGFAULT")) + // these are no longer recorded since Lettuce 6.1.6 + .hasEventsSatisfyingExactly( + event -> event.hasName("redis.encode.start"), + event -> event.hasName("redis.encode.end")))); + } } @Test @@ -395,6 +446,12 @@ void testShutdownCommandProducesNoSpan() { ContainerConnection containerConnection = newContainerConnection(); RedisCommands commands = containerConnection.connection.sync(); + if (Boolean.getBoolean("testLatestDeps")) { + // ignore CLIENT SETINFO traces + getInstrumentationExtension().waitForTraces(2); + getInstrumentationExtension().clearData(); + } + commands.shutdown(false); getInstrumentationExtension() From afd6f0f2493c2bb9dc2be2350c1f5e5a03f8ba80 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Tue, 30 Jul 2024 16:56:15 +0300 Subject: [PATCH 2/3] fix --- .../lettuce/v5_1/LettuceAsyncClientTest.java | 5 +++++ .../lettuce/v5_1/AbstractLettuceAsyncClientTest.java | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/instrumentation/lettuce/lettuce-5.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/LettuceAsyncClientTest.java b/instrumentation/lettuce/lettuce-5.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/LettuceAsyncClientTest.java index 595699bdee36..692c49243901 100644 --- a/instrumentation/lettuce/lettuce-5.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/LettuceAsyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/LettuceAsyncClientTest.java @@ -24,4 +24,9 @@ public InstrumentationExtension getInstrumentationExtension() { protected RedisClient createClient(String uri) { return RedisClient.create(uri); } + + @Override + protected boolean connectHasSpans() { + return Boolean.getBoolean("testLatestDeps"); + } } diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceAsyncClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceAsyncClientTest.java index 7b99265a2ca4..4cb3f7ff171b 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceAsyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceAsyncClientTest.java @@ -90,6 +90,10 @@ boolean testCallback() { return true; } + protected boolean connectHasSpans() { + return false; + } + @Test void testConnectUsingGetOnConnectionFuture() throws Exception { RedisClient testConnectionClient = RedisClient.create(embeddedDbUri); @@ -103,7 +107,7 @@ void testConnectUsingGetOnConnectionFuture() throws Exception { cleanup.deferCleanup(testConnectionClient::shutdown); assertThat(connection1).isNotNull(); - if (Boolean.getBoolean("testLatestDeps")) { + if (connectHasSpans()) { // ignore CLIENT SETINFO traces getInstrumentationExtension().waitForTraces(2); } else { From c7a90784da15eb629d2ae7f5b7ff033ce9f7ce98 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Wed, 31 Jul 2024 10:17:03 +0300 Subject: [PATCH 3/3] fix --- .../javaagent/build.gradle.kts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/instrumentation/async-http-client/async-http-client-2.0/javaagent/build.gradle.kts b/instrumentation/async-http-client/async-http-client-2.0/javaagent/build.gradle.kts index f335c8c690c1..9c573a0fd4ec 100644 --- a/instrumentation/async-http-client/async-http-client-2.0/javaagent/build.gradle.kts +++ b/instrumentation/async-http-client/async-http-client-2.0/javaagent/build.gradle.kts @@ -19,12 +19,11 @@ dependencies { } val latestDepTest = findProperty("testLatestDeps") as Boolean +val testJavaVersion = + gradle.startParameter.projectProperties["testJavaVersion"]?.let(JavaVersion::toVersion) + ?: JavaVersion.current() -if (latestDepTest) { - otelJava { - minJavaVersionSupported.set(JavaVersion.VERSION_11) - } -} else { +if (!latestDepTest) { otelJava { // AHC uses Unsafe and so does not run on later java version maxJavaVersionForTests.set(JavaVersion.VERSION_1_8) @@ -33,6 +32,13 @@ if (latestDepTest) { tasks.withType().configureEach { systemProperty("testLatestDeps", latestDepTest) + // async-http-client 3.0 requires java 11 + // We are not using minJavaVersionSupported for latestDepTest because that way the instrumentation + // gets compiled with java 11 when running latestDepTest. This causes play-mvc-2.4 latest dep tests + // to fail because they require java 8 and instrumentation compiled with java 11 won't apply. + if (latestDepTest && testJavaVersion.isJava8) { + enabled = false + } } // async-http-client 2.0.0 does not work with Netty versions newer than this due to referencing an