浏览代码

Add http/2 tests for jdk http client (#11506)

Lauri Tulmin 9 月之前
父节点
当前提交
de30e3120a

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

@@ -8,10 +8,12 @@ package io.opentelemetry.javaagent.instrumentation.httpclient;
 import io.opentelemetry.instrumentation.httpclient.AbstractJavaHttpClientTest;
 import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
 import io.opentelemetry.instrumentation.testing.junit.http.HttpClientInstrumentationExtension;
+import io.opentelemetry.instrumentation.testing.junit.http.HttpClientTestOptions;
 import java.net.http.HttpClient;
+import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-public class JavaHttpClientTest extends AbstractJavaHttpClientTest {
+public abstract class JavaHttpClientTest extends AbstractJavaHttpClientTest {
 
   @RegisterExtension
   static final InstrumentationExtension testing = HttpClientInstrumentationExtension.forAgent();
@@ -20,4 +22,37 @@ public class JavaHttpClientTest extends AbstractJavaHttpClientTest {
   protected HttpClient configureHttpClient(HttpClient httpClient) {
     return httpClient;
   }
+
+  @Nested
+  static class Http1ClientTest extends JavaHttpClientTest {
+
+    @Override
+    protected void configureHttpClientBuilder(HttpClient.Builder httpClientBuilder) {
+      httpClientBuilder.version(HttpClient.Version.HTTP_1_1);
+    }
+  }
+
+  @Nested
+  static class Http2ClientTest extends JavaHttpClientTest {
+
+    @Override
+    protected void configureHttpClientBuilder(HttpClient.Builder httpClientBuilder) {
+      httpClientBuilder.version(HttpClient.Version.HTTP_2);
+    }
+
+    @Override
+    protected void configure(HttpClientTestOptions.Builder optionsBuilder) {
+      super.configure(optionsBuilder);
+
+      optionsBuilder.setHttpProtocolVersion(
+          uri -> {
+            String uriString = uri.toString();
+            if (uriString.equals("http://localhost:61/")
+                || uriString.equals("https://192.0.2.1/")) {
+              return "1.1";
+            }
+            return "2";
+          });
+    }
+  }
 }

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

@@ -8,11 +8,13 @@ package io.opentelemetry.instrumentation.httpclient;
 import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
 import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpClientTest;
 import io.opentelemetry.instrumentation.testing.junit.http.HttpClientInstrumentationExtension;
+import io.opentelemetry.instrumentation.testing.junit.http.HttpClientTestOptions;
 import java.net.http.HttpClient;
 import java.util.Collections;
+import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-public class JavaHttpClientTest extends AbstractJavaHttpClientTest {
+public abstract class JavaHttpClientTest extends AbstractJavaHttpClientTest {
 
   @RegisterExtension
   static final InstrumentationExtension testing = HttpClientInstrumentationExtension.forLibrary();
@@ -27,4 +29,37 @@ public class JavaHttpClientTest extends AbstractJavaHttpClientTest {
         .build()
         .newHttpClient(httpClient);
   }
+
+  @Nested
+  static class Http1ClientTest extends JavaHttpClientTest {
+
+    @Override
+    protected void configureHttpClientBuilder(HttpClient.Builder httpClientBuilder) {
+      httpClientBuilder.version(HttpClient.Version.HTTP_1_1);
+    }
+  }
+
+  @Nested
+  static class Http2ClientTest extends JavaHttpClientTest {
+
+    @Override
+    protected void configureHttpClientBuilder(HttpClient.Builder httpClientBuilder) {
+      httpClientBuilder.version(HttpClient.Version.HTTP_2);
+    }
+
+    @Override
+    protected void configure(HttpClientTestOptions.Builder optionsBuilder) {
+      super.configure(optionsBuilder);
+
+      optionsBuilder.setHttpProtocolVersion(
+          uri -> {
+            String uriString = uri.toString();
+            if (uriString.equals("http://localhost:61/")
+                || uriString.equals("https://192.0.2.1/")) {
+              return "1.1";
+            }
+            return "2";
+          });
+    }
+  }
 }

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

@@ -26,15 +26,17 @@ public abstract class AbstractJavaHttpClientTest extends AbstractHttpClientTest<
 
   @BeforeAll
   void setUp() {
-    HttpClient httpClient =
+    HttpClient.Builder httpClientBuilder =
         HttpClient.newBuilder()
-            .version(HttpClient.Version.HTTP_1_1)
             .connectTimeout(CONNECTION_TIMEOUT)
-            .followRedirects(HttpClient.Redirect.NORMAL)
-            .build();
+            .followRedirects(HttpClient.Redirect.NORMAL);
+    configureHttpClientBuilder(httpClientBuilder);
+    HttpClient httpClient = httpClientBuilder.build();
     client = configureHttpClient(httpClient);
   }
 
+  protected abstract void configureHttpClientBuilder(HttpClient.Builder httpClientBuilder);
+
   protected abstract HttpClient configureHttpClient(HttpClient httpClient);
 
   @Override

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

@@ -130,7 +130,8 @@ public abstract class AbstractHttpClientTest<REQUEST> implements HttpClientTypeA
     String method = "TEST";
     int responseCode = doRequest(method, uri);
 
-    assertThat(responseCode).isEqualTo(405);
+    assertThat(responseCode)
+        .isEqualTo("2".equals(options.getHttpProtocolVersion().apply(uri)) ? 400 : 405);
 
     testing.waitAndAssertTraces(
         trace ->