Skip to content

Commit a74a6fe

Browse files
authored
Fix latest dep tests 1.33.x (#11945)
1 parent 4872249 commit a74a6fe

File tree

7 files changed

+201
-64
lines changed

7 files changed

+201
-64
lines changed

instrumentation/async-http-client/async-http-client-2.0/javaagent/build.gradle.kts

+22-4
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,27 @@ dependencies {
1818
testInstrumentation(project(":instrumentation:netty:netty-4.1:javaagent"))
1919
}
2020

21-
otelJava {
22-
// AHC uses Unsafe and so does not run on later java version
23-
maxJavaVersionForTests.set(JavaVersion.VERSION_1_8)
21+
val latestDepTest = findProperty("testLatestDeps") as Boolean
22+
val testJavaVersion =
23+
gradle.startParameter.projectProperties["testJavaVersion"]?.let(JavaVersion::toVersion)
24+
?: JavaVersion.current()
25+
26+
if (!latestDepTest) {
27+
otelJava {
28+
// AHC uses Unsafe and so does not run on later java version
29+
maxJavaVersionForTests.set(JavaVersion.VERSION_1_8)
30+
}
31+
}
32+
33+
tasks.withType<Test>().configureEach {
34+
systemProperty("testLatestDeps", latestDepTest)
35+
// async-http-client 3.0 requires java 11
36+
// We are not using minJavaVersionSupported for latestDepTest because that way the instrumentation
37+
// gets compiled with java 11 when running latestDepTest. This causes play-mvc-2.4 latest dep tests
38+
// to fail because they require java 8 and instrumentation compiled with java 11 won't apply.
39+
if (latestDepTest && testJavaVersion.isJava8) {
40+
enabled = false
41+
}
2442
}
2543

2644
tasks {
@@ -35,7 +53,7 @@ tasks {
3553

3654
// async-http-client 2.0.0 does not work with Netty versions newer than this due to referencing an
3755
// internal file.
38-
if (!(findProperty("testLatestDeps") as Boolean)) {
56+
if (!latestDepTest) {
3957
configurations.configureEach {
4058
if (!name.contains("muzzle")) {
4159
resolutionStrategy {

instrumentation/async-http-client/async-http-client-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v2_0/AsyncHttpClientTest.java

+23-5
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,14 @@
1010
import io.opentelemetry.instrumentation.testing.junit.http.HttpClientInstrumentationExtension;
1111
import io.opentelemetry.instrumentation.testing.junit.http.HttpClientResult;
1212
import io.opentelemetry.instrumentation.testing.junit.http.HttpClientTestOptions;
13+
import java.lang.reflect.Method;
1314
import java.net.URI;
15+
import java.time.Duration;
1416
import java.util.Map;
1517
import java.util.concurrent.ExecutionException;
1618
import org.asynchttpclient.AsyncCompletionHandler;
1719
import org.asynchttpclient.AsyncHttpClient;
20+
import org.asynchttpclient.DefaultAsyncHttpClientConfig;
1821
import org.asynchttpclient.Dsl;
1922
import org.asynchttpclient.Request;
2023
import org.asynchttpclient.RequestBuilder;
@@ -31,11 +34,26 @@ class AsyncHttpClientTest extends AbstractHttpClientTest<Request> {
3134
private static final int CONNECTION_TIMEOUT_MS = (int) CONNECTION_TIMEOUT.toMillis();
3235

3336
// request timeout is needed in addition to connect timeout on async-http-client versions 2.1.0+
34-
private static final AsyncHttpClient client =
35-
Dsl.asyncHttpClient(
36-
Dsl.config()
37-
.setConnectTimeout(CONNECTION_TIMEOUT_MS)
38-
.setRequestTimeout(CONNECTION_TIMEOUT_MS));
37+
private static final AsyncHttpClient client = Dsl.asyncHttpClient(configureTimeout(Dsl.config()));
38+
39+
private static DefaultAsyncHttpClientConfig.Builder configureTimeout(
40+
DefaultAsyncHttpClientConfig.Builder builder) {
41+
setTimeout(builder, "setConnectTimeout", CONNECTION_TIMEOUT_MS);
42+
setTimeout(builder, "setRequestTimeout", CONNECTION_TIMEOUT_MS);
43+
return builder;
44+
}
45+
46+
private static void setTimeout(
47+
DefaultAsyncHttpClientConfig.Builder builder, String methodName, int timeout) {
48+
boolean testLatestDeps = Boolean.getBoolean("testLatestDeps");
49+
try {
50+
Method method =
51+
builder.getClass().getMethod(methodName, testLatestDeps ? Duration.class : int.class);
52+
method.invoke(builder, testLatestDeps ? Duration.ofMillis(timeout) : timeout);
53+
} catch (Exception exception) {
54+
throw new IllegalStateException("Failed to set timeout " + methodName, exception);
55+
}
56+
}
3957

4058
@Override
4159
public Request buildRequest(String method, URI uri, Map<String, String> headers) {

instrumentation/lettuce/lettuce-5.1/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/LettuceAsyncClientTest.groovy

+5
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,9 @@ class LettuceAsyncClientTest extends AbstractLettuceAsyncClientTest implements A
1414
RedisClient createClient(String uri) {
1515
return RedisClient.create(uri)
1616
}
17+
18+
@Override
19+
boolean connectHasSpans() {
20+
Boolean.getBoolean("testLatestDeps")
21+
}
1722
}

instrumentation/lettuce/lettuce-5.1/testing/src/main/groovy/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceAsyncClientTest.groovy

+8
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,10 @@ abstract class AbstractLettuceAsyncClientTest extends InstrumentationSpecificati
9898
return true
9999
}
100100

101+
boolean connectHasSpans() {
102+
false
103+
}
104+
101105
def <T> T runWithCallbackSpan(String spanName, Closure callback) {
102106
if (testCallback()) {
103107
return runWithSpan(spanName, callback)
@@ -117,6 +121,10 @@ abstract class AbstractLettuceAsyncClientTest extends InstrumentationSpecificati
117121

118122
then:
119123
connection != null
124+
if (connectHasSpans()) {
125+
// ignore CLIENT SETINFO traces
126+
ignoreTracesAndClear(2)
127+
}
120128
// Lettuce tracing does not trace connect
121129
assertTraces(0) {}
122130

instrumentation/lettuce/lettuce-5.1/testing/src/main/groovy/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientAuthTest.groovy

+36-2
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@
66
package io.opentelemetry.instrumentation.lettuce.v5_1
77

88
import io.lettuce.core.RedisClient
9+
import io.lettuce.core.RedisCommandExecutionException
910
import io.opentelemetry.instrumentation.test.InstrumentationSpecification
1011
import io.opentelemetry.semconv.SemanticAttributes
1112
import org.testcontainers.containers.GenericContainer
1213
import spock.lang.Shared
1314

1415
import static io.opentelemetry.api.trace.SpanKind.CLIENT
16+
import static io.opentelemetry.api.trace.StatusCode.ERROR
1517

1618
abstract class AbstractLettuceSyncClientAuthTest extends InstrumentationSpecification {
1719
public static final int DB_INDEX = 0
@@ -60,8 +62,40 @@ abstract class AbstractLettuceSyncClientAuthTest extends InstrumentationSpecific
6062

6163
expect:
6264
res == "OK"
63-
assertTraces(1) {
64-
trace(0, 1) {
65+
assertTraces(Boolean.getBoolean("testLatestDeps") ? 3 : 1) {
66+
if (Boolean.getBoolean("testLatestDeps")) {
67+
trace(0, 1) {
68+
span(0) {
69+
name "CLIENT"
70+
kind CLIENT
71+
status ERROR
72+
attributes {
73+
"$SemanticAttributes.NET_SOCK_PEER_ADDR" "127.0.0.1"
74+
"$SemanticAttributes.NET_SOCK_PEER_NAME" expectedHostAttributeValue
75+
"$SemanticAttributes.NET_SOCK_PEER_PORT" port
76+
"$SemanticAttributes.DB_SYSTEM" "redis"
77+
"$SemanticAttributes.DB_STATEMENT" "CLIENT SETINFO lib-name Lettuce"
78+
}
79+
errorEvent(RedisCommandExecutionException, "NOAUTH Authentication required.")
80+
}
81+
}
82+
trace(1, 1) {
83+
span(0) {
84+
name "CLIENT"
85+
kind CLIENT
86+
status ERROR
87+
attributes {
88+
"$SemanticAttributes.NET_SOCK_PEER_ADDR" "127.0.0.1"
89+
"$SemanticAttributes.NET_SOCK_PEER_NAME" expectedHostAttributeValue
90+
"$SemanticAttributes.NET_SOCK_PEER_PORT" port
91+
"$SemanticAttributes.DB_SYSTEM" "redis"
92+
"$SemanticAttributes.DB_STATEMENT" { it.startsWith("CLIENT SETINFO lib-ver") }
93+
}
94+
errorEvent(RedisCommandExecutionException, "NOAUTH Authentication required.")
95+
}
96+
}
97+
}
98+
trace(Boolean.getBoolean("testLatestDeps") ? 2 : 0, 1) {
6599
span(0) {
66100
name "AUTH"
67101
kind CLIENT

instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java

+5-12
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import io.lettuce.core.RedisClient;
99
import io.lettuce.core.api.StatefulRedisConnection;
1010
import io.opentelemetry.instrumentation.testing.internal.AutoCleanupExtension;
11-
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
1211
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
1312
import org.junit.jupiter.api.TestInstance;
1413
import org.junit.jupiter.api.extension.RegisterExtension;
@@ -22,13 +21,6 @@
2221
abstract class AbstractLettuceClientTest {
2322
protected static final Logger logger = LoggerFactory.getLogger(AbstractLettuceClientTest.class);
2423

25-
@RegisterExtension
26-
protected static final InstrumentationExtension testing = AgentInstrumentationExtension.create();
27-
28-
public InstrumentationExtension getInstrumentationExtension() {
29-
return testing;
30-
}
31-
3224
@RegisterExtension static final AutoCleanupExtension cleanup = AutoCleanupExtension.create();
3325

3426
protected static final int DB_INDEX = 0;
@@ -40,15 +32,16 @@ public InstrumentationExtension getInstrumentationExtension() {
4032
.waitingFor(Wait.forLogMessage(".*Ready to accept connections.*", 1));
4133

4234
protected static RedisClient redisClient;
43-
4435
protected static StatefulRedisConnection<String, String> connection;
45-
46-
protected abstract RedisClient createClient(String uri);
47-
4836
protected static String host;
37+
protected static String ip;
4938
protected static int port;
5039
protected static String embeddedDbUri;
5140

41+
protected abstract RedisClient createClient(String uri);
42+
43+
protected abstract InstrumentationExtension getInstrumentationExtension();
44+
5245
protected ContainerConnection newContainerConnection() {
5346
GenericContainer<?> server =
5447
new GenericContainer<>("redis:6.2.3-alpine")

0 commit comments

Comments
 (0)