Browse Source

Convert jetty-httpclient Groovy tests to Java (#9072)

pg.yang 1 year ago
parent
commit
976dfb2bc5

+ 0 - 24
instrumentation/jetty-httpclient/jetty-httpclient-9.2/javaagent/src/test/groovy/io/opentelemetry/javaagent/instrumentation/jetty/httpclient/v9_2/JettyHttpClient9AgentTest.groovy

@@ -1,24 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.javaagent.instrumentation.jetty.httpclient.v9_2
-
-import io.opentelemetry.instrumentation.jetty.httpclient.v9_2.AbstractJettyClient9Test
-import io.opentelemetry.instrumentation.test.AgentTestTrait
-import org.eclipse.jetty.client.HttpClient
-import org.eclipse.jetty.util.ssl.SslContextFactory
-
-class JettyHttpClient9AgentTest extends AbstractJettyClient9Test implements AgentTestTrait {
-
-  @Override
-  HttpClient createStandardClient() {
-    return new HttpClient()
-  }
-
-  @Override
-  HttpClient createHttpsClient(SslContextFactory sslContextFactory) {
-    return new HttpClient(sslContextFactory)
-  }
-}

+ 29 - 0
instrumentation/jetty-httpclient/jetty-httpclient-9.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jetty/httpclient/v9_2/JettyHttpClient9AgentTest.java

@@ -0,0 +1,29 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.instrumentation.jetty.httpclient.v9_2;
+
+import io.opentelemetry.instrumentation.jetty.httpclient.v9_2.AbstractJettyClient9Test;
+import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
+import io.opentelemetry.instrumentation.testing.junit.http.HttpClientInstrumentationExtension;
+import org.eclipse.jetty.client.HttpClient;
+import org.eclipse.jetty.util.ssl.SslContextFactory;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+class JettyHttpClient9AgentTest extends AbstractJettyClient9Test {
+
+  @RegisterExtension
+  static final InstrumentationExtension extension = HttpClientInstrumentationExtension.forAgent();
+
+  @Override
+  public HttpClient createStandardClient() {
+    return new HttpClient();
+  }
+
+  @Override
+  public HttpClient createHttpsClient(SslContextFactory sslContextFactory) {
+    return new HttpClient(sslContextFactory);
+  }
+}

+ 0 - 31
instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/test/groovy/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/JettyHttpClient9LibraryTest.groovy

@@ -1,31 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.instrumentation.jetty.httpclient.v9_2
-
-
-import io.opentelemetry.instrumentation.test.LibraryTestTrait
-import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpClientTest
-import org.eclipse.jetty.client.HttpClient
-import org.eclipse.jetty.util.ssl.SslContextFactory
-
-class JettyHttpClient9LibraryTest extends AbstractJettyClient9Test implements LibraryTestTrait {
-
-  @Override
-  HttpClient createStandardClient() {
-    return JettyClientTelemetry.builder(getOpenTelemetry())
-      .setCapturedRequestHeaders([AbstractHttpClientTest.TEST_REQUEST_HEADER])
-      .setCapturedResponseHeaders([AbstractHttpClientTest.TEST_RESPONSE_HEADER])
-      .build().getHttpClient()
-  }
-
-  @Override
-  HttpClient createHttpsClient(SslContextFactory sslContextFactory) {
-    return JettyClientTelemetry.builder(getOpenTelemetry())
-      .setSslContextFactory(sslContextFactory)
-      .build()
-      .getHttpClient()
-  }
-}

+ 39 - 0
instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/test/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/JettyHttpClient9LibraryTest.java

@@ -0,0 +1,39 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.instrumentation.jetty.httpclient.v9_2;
+
+import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
+import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpClientTest;
+import io.opentelemetry.instrumentation.testing.junit.http.HttpClientInstrumentationExtension;
+import java.util.Collections;
+import org.eclipse.jetty.client.HttpClient;
+import org.eclipse.jetty.util.ssl.SslContextFactory;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+class JettyHttpClient9LibraryTest extends AbstractJettyClient9Test {
+
+  @RegisterExtension
+  static final InstrumentationExtension extension = HttpClientInstrumentationExtension.forLibrary();
+
+  @Override
+  protected HttpClient createStandardClient() {
+    return JettyClientTelemetry.builder(testing.getOpenTelemetry())
+        .setCapturedRequestHeaders(
+            Collections.singletonList(AbstractHttpClientTest.TEST_REQUEST_HEADER))
+        .setCapturedResponseHeaders(
+            Collections.singletonList(AbstractHttpClientTest.TEST_RESPONSE_HEADER))
+        .build()
+        .getHttpClient();
+  }
+
+  @Override
+  protected HttpClient createHttpsClient(SslContextFactory sslContextFactory) {
+    return JettyClientTelemetry.builder(testing.getOpenTelemetry())
+        .setSslContextFactory(sslContextFactory)
+        .build()
+        .getHttpClient();
+  }
+}

+ 0 - 4
instrumentation/jetty-httpclient/jetty-httpclient-9.2/testing/build.gradle.kts

@@ -10,9 +10,5 @@ dependencies {
 
   api("org.eclipse.jetty:jetty-client:$jettyVers_base9")
 
-  implementation("org.junit.jupiter:junit-jupiter-api")
-
-  implementation("org.apache.groovy:groovy")
   implementation("io.opentelemetry:opentelemetry-api")
-  implementation("org.spockframework:spock-core")
 }

+ 0 - 145
instrumentation/jetty-httpclient/jetty-httpclient-9.2/testing/src/main/groovy/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/AbstractJettyClient9Test.groovy

@@ -1,145 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.instrumentation.jetty.httpclient.v9_2
-
-
-import io.opentelemetry.instrumentation.test.base.HttpClientTest
-import io.opentelemetry.instrumentation.testing.junit.http.HttpClientResult
-import org.eclipse.jetty.client.HttpClient
-import org.eclipse.jetty.client.api.ContentResponse
-import org.eclipse.jetty.client.api.Request
-import org.eclipse.jetty.client.api.Response
-import org.eclipse.jetty.client.api.Result
-import org.eclipse.jetty.http.HttpMethod
-import org.eclipse.jetty.util.ssl.SslContextFactory
-import spock.lang.Shared
-import spock.lang.Unroll
-
-import java.util.concurrent.TimeUnit
-
-abstract class AbstractJettyClient9Test extends HttpClientTest<Request> {
-
-  abstract HttpClient createStandardClient()
-
-  abstract HttpClient createHttpsClient(SslContextFactory sslContextFactory)
-
-
-  @Shared
-  def client = createStandardClient()
-  @Shared
-  def httpsClient = null
-
-  Request jettyRequest = null
-
-  def setupSpec() {
-    //Start the main Jetty HttpClient and a https client
-    client.setConnectTimeout(CONNECT_TIMEOUT_MS)
-    client.start()
-
-    SslContextFactory tlsCtx = new SslContextFactory()
-    httpsClient = createHttpsClient(tlsCtx)
-    httpsClient.setFollowRedirects(false)
-    httpsClient.start()
-  }
-
-  @Override
-  Request buildRequest(String method, URI uri, Map<String, String> headers) {
-    HttpClient theClient = uri.scheme == 'https' ? httpsClient : client
-
-    Request request = theClient.newRequest(uri)
-    request.agent("Jetty")
-
-    HttpMethod methodObj = HttpMethod.valueOf(method)
-    request.method(methodObj)
-    request.timeout(CONNECT_TIMEOUT_MS, TimeUnit.MILLISECONDS)
-
-    jettyRequest = request
-
-    return request
-  }
-
-  @Override
-  String userAgent() {
-    return "Jetty"
-  }
-
-  @Override
-  int sendRequest(Request request, String method, URI uri, Map<String, String> headers) {
-    headers.each { k, v ->
-      request.header(k, v)
-    }
-
-    ContentResponse response = request.send()
-
-    return response.status
-  }
-
-  private static class JettyClientListener implements Request.FailureListener, Response.FailureListener {
-    volatile Throwable failure
-
-    @Override
-    void onFailure(Request requestF, Throwable failure) {
-      this.failure = failure
-    }
-
-    @Override
-    void onFailure(Response responseF, Throwable failure) {
-      this.failure = failure
-    }
-  }
-
-  @Override
-  void sendRequestWithCallback(Request request, String method, URI uri, Map<String, String> headers, HttpClientResult requestResult) {
-    JettyClientListener jcl = new JettyClientListener()
-
-    request.onRequestFailure(jcl)
-    request.onResponseFailure(jcl)
-    headers.each { k, v ->
-      request.header(k, v)
-    }
-
-    request.send(new Response.CompleteListener() {
-      @Override
-      void onComplete(Result result) {
-        if (jcl.failure != null) {
-          requestResult.complete(jcl.failure)
-          return
-        }
-
-        requestResult.complete(result.response.status)
-      }
-    })
-  }
-
-  @Override
-  boolean testRedirects() {
-    false
-  }
-
-  @Unroll
-  def "test content of #method request #url"() {
-    when:
-    def request = buildRequest(method, url, [:])
-    def response = request.send()
-
-    then:
-    response.status == 200
-    response.getContentAsString() == "Hello."
-
-    assertTraces(1) {
-      trace(0, 2) {
-        clientSpan(it, 0, null, method, url)
-        serverSpan(it, 1, span(0))
-      }
-    }
-
-    where:
-    path << ["/success"]
-
-    method = "GET"
-    url = resolveAddress(path)
-  }
-}

+ 114 - 0
instrumentation/jetty-httpclient/jetty-httpclient-9.2/testing/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/AbstractJettyClient9Test.java

@@ -0,0 +1,114 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.instrumentation.jetty.httpclient.v9_2;
+
+import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpClientTest;
+import io.opentelemetry.instrumentation.testing.junit.http.HttpClientResult;
+import io.opentelemetry.instrumentation.testing.junit.http.HttpClientTestOptions;
+import java.net.URI;
+import java.util.Map;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import org.eclipse.jetty.client.HttpClient;
+import org.eclipse.jetty.client.api.Request;
+import org.eclipse.jetty.client.api.Response;
+import org.eclipse.jetty.util.ssl.SslContextFactory;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+
+public abstract class AbstractJettyClient9Test extends AbstractHttpClientTest<Request> {
+
+  private static final String USER_AGENT = "Jetty";
+
+  private HttpClient client;
+  private HttpClient httpsClient;
+
+  @BeforeEach
+  public void before() throws Exception {
+    // Start the main Jetty HttpClient and a https client
+    client = createStandardClient();
+    client.setConnectTimeout(5000L);
+    client.start();
+
+    SslContextFactory tlsCtx = new SslContextFactory();
+    httpsClient = createHttpsClient(tlsCtx);
+    httpsClient.setFollowRedirects(false);
+    httpsClient.start();
+  }
+
+  @AfterEach
+  public void after() throws Exception {
+    client.stop();
+    httpsClient.stop();
+  }
+
+  @Override
+  protected void configure(HttpClientTestOptions.Builder optionsBuilder) {
+    optionsBuilder.disableTestRedirects().setUserAgent(USER_AGENT);
+  }
+
+  @Override
+  public Request buildRequest(String method, URI uri, Map<String, String> headers)
+      throws Exception {
+    HttpClient theClient = uri.getScheme().equalsIgnoreCase("https") ? httpsClient : client;
+    Request request =
+        theClient
+            .newRequest(uri)
+            .method(method)
+            .agent(USER_AGENT)
+            .timeout(5000L, TimeUnit.MILLISECONDS);
+    headers.forEach(request::header);
+    return request;
+  }
+
+  @Override
+  public int sendRequest(Request httpRequest, String method, URI uri, Map<String, String> headers)
+      throws ExecutionException, InterruptedException, TimeoutException {
+    return httpRequest.send().getStatus();
+  }
+
+  @Override
+  public void sendRequestWithCallback(
+      Request request,
+      String method,
+      URI uri,
+      Map<String, String> headers,
+      HttpClientResult httpClientResult)
+      throws Exception {
+    JettyClientListener jcl = new JettyClientListener();
+    request.onRequestFailure(jcl);
+    request.onResponseFailure(jcl);
+    headers.forEach(request::header);
+    request.send(
+        result -> {
+          if (jcl.failure != null) {
+            httpClientResult.complete(jcl.failure);
+            return;
+          }
+          httpClientResult.complete(result.getResponse().getStatus());
+        });
+  }
+
+  private static class JettyClientListener
+      implements Request.FailureListener, Response.FailureListener {
+    private volatile Throwable failure;
+
+    @Override
+    public void onFailure(Request requestF, Throwable failure) {
+      this.failure = failure;
+    }
+
+    @Override
+    public void onFailure(Response responseF, Throwable failure) {
+      this.failure = failure;
+    }
+  }
+
+  protected abstract HttpClient createStandardClient();
+
+  protected abstract HttpClient createHttpsClient(SslContextFactory sslContextFactory);
+}