Skip to content

Commit

Permalink
Convert jetty-httpclient Groovy tests to Java (#9072)
Browse files Browse the repository at this point in the history
  • Loading branch information
pg-yang authored Jul 31, 2023
1 parent b501d9c commit 976dfb2
Show file tree
Hide file tree
Showing 7 changed files with 182 additions and 204 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -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);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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")
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -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);
}

0 comments on commit 976dfb2

Please sign in to comment.