Skip to content

Commit de30e31

Browse files
authored
Add http/2 tests for jdk http client (#11506)
1 parent 5c6aa52 commit de30e31

File tree

4 files changed

+80
-7
lines changed

4 files changed

+80
-7
lines changed

instrumentation/java-http-client/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/httpclient/JavaHttpClientTest.java

+36-1
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@
88
import io.opentelemetry.instrumentation.httpclient.AbstractJavaHttpClientTest;
99
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
1010
import io.opentelemetry.instrumentation.testing.junit.http.HttpClientInstrumentationExtension;
11+
import io.opentelemetry.instrumentation.testing.junit.http.HttpClientTestOptions;
1112
import java.net.http.HttpClient;
13+
import org.junit.jupiter.api.Nested;
1214
import org.junit.jupiter.api.extension.RegisterExtension;
1315

14-
public class JavaHttpClientTest extends AbstractJavaHttpClientTest {
16+
public abstract class JavaHttpClientTest extends AbstractJavaHttpClientTest {
1517

1618
@RegisterExtension
1719
static final InstrumentationExtension testing = HttpClientInstrumentationExtension.forAgent();
@@ -20,4 +22,37 @@ public class JavaHttpClientTest extends AbstractJavaHttpClientTest {
2022
protected HttpClient configureHttpClient(HttpClient httpClient) {
2123
return httpClient;
2224
}
25+
26+
@Nested
27+
static class Http1ClientTest extends JavaHttpClientTest {
28+
29+
@Override
30+
protected void configureHttpClientBuilder(HttpClient.Builder httpClientBuilder) {
31+
httpClientBuilder.version(HttpClient.Version.HTTP_1_1);
32+
}
33+
}
34+
35+
@Nested
36+
static class Http2ClientTest extends JavaHttpClientTest {
37+
38+
@Override
39+
protected void configureHttpClientBuilder(HttpClient.Builder httpClientBuilder) {
40+
httpClientBuilder.version(HttpClient.Version.HTTP_2);
41+
}
42+
43+
@Override
44+
protected void configure(HttpClientTestOptions.Builder optionsBuilder) {
45+
super.configure(optionsBuilder);
46+
47+
optionsBuilder.setHttpProtocolVersion(
48+
uri -> {
49+
String uriString = uri.toString();
50+
if (uriString.equals("http://localhost:61/")
51+
|| uriString.equals("https://192.0.2.1/")) {
52+
return "1.1";
53+
}
54+
return "2";
55+
});
56+
}
57+
}
2358
}

instrumentation/java-http-client/library/src/test/java/io/opentelemetry/instrumentation/httpclient/JavaHttpClientTest.java

+36-1
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@
88
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
99
import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpClientTest;
1010
import io.opentelemetry.instrumentation.testing.junit.http.HttpClientInstrumentationExtension;
11+
import io.opentelemetry.instrumentation.testing.junit.http.HttpClientTestOptions;
1112
import java.net.http.HttpClient;
1213
import java.util.Collections;
14+
import org.junit.jupiter.api.Nested;
1315
import org.junit.jupiter.api.extension.RegisterExtension;
1416

15-
public class JavaHttpClientTest extends AbstractJavaHttpClientTest {
17+
public abstract class JavaHttpClientTest extends AbstractJavaHttpClientTest {
1618

1719
@RegisterExtension
1820
static final InstrumentationExtension testing = HttpClientInstrumentationExtension.forLibrary();
@@ -27,4 +29,37 @@ protected HttpClient configureHttpClient(HttpClient httpClient) {
2729
.build()
2830
.newHttpClient(httpClient);
2931
}
32+
33+
@Nested
34+
static class Http1ClientTest extends JavaHttpClientTest {
35+
36+
@Override
37+
protected void configureHttpClientBuilder(HttpClient.Builder httpClientBuilder) {
38+
httpClientBuilder.version(HttpClient.Version.HTTP_1_1);
39+
}
40+
}
41+
42+
@Nested
43+
static class Http2ClientTest extends JavaHttpClientTest {
44+
45+
@Override
46+
protected void configureHttpClientBuilder(HttpClient.Builder httpClientBuilder) {
47+
httpClientBuilder.version(HttpClient.Version.HTTP_2);
48+
}
49+
50+
@Override
51+
protected void configure(HttpClientTestOptions.Builder optionsBuilder) {
52+
super.configure(optionsBuilder);
53+
54+
optionsBuilder.setHttpProtocolVersion(
55+
uri -> {
56+
String uriString = uri.toString();
57+
if (uriString.equals("http://localhost:61/")
58+
|| uriString.equals("https://192.0.2.1/")) {
59+
return "1.1";
60+
}
61+
return "2";
62+
});
63+
}
64+
}
3065
}

instrumentation/java-http-client/testing/src/main/java/io/opentelemetry/instrumentation/httpclient/AbstractJavaHttpClientTest.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,17 @@ public abstract class AbstractJavaHttpClientTest extends AbstractHttpClientTest<
2626

2727
@BeforeAll
2828
void setUp() {
29-
HttpClient httpClient =
29+
HttpClient.Builder httpClientBuilder =
3030
HttpClient.newBuilder()
31-
.version(HttpClient.Version.HTTP_1_1)
3231
.connectTimeout(CONNECTION_TIMEOUT)
33-
.followRedirects(HttpClient.Redirect.NORMAL)
34-
.build();
32+
.followRedirects(HttpClient.Redirect.NORMAL);
33+
configureHttpClientBuilder(httpClientBuilder);
34+
HttpClient httpClient = httpClientBuilder.build();
3535
client = configureHttpClient(httpClient);
3636
}
3737

38+
protected abstract void configureHttpClientBuilder(HttpClient.Builder httpClientBuilder);
39+
3840
protected abstract HttpClient configureHttpClient(HttpClient httpClient);
3941

4042
@Override

testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,8 @@ void requestWithNonStandardHttpMethod() throws Exception {
130130
String method = "TEST";
131131
int responseCode = doRequest(method, uri);
132132

133-
assertThat(responseCode).isEqualTo(405);
133+
assertThat(responseCode)
134+
.isEqualTo("2".equals(options.getHttpProtocolVersion().apply(uri)) ? 400 : 405);
134135

135136
testing.waitAndAssertTraces(
136137
trace ->

0 commit comments

Comments
 (0)