Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/main' into add-option-withpare…
Browse files Browse the repository at this point in the history
…nt-to-annotation-withspan
  • Loading branch information
xiepuhuan committed Jan 29, 2025
2 parents d3e79fd + e9227c3 commit 7d7bed8
Show file tree
Hide file tree
Showing 36 changed files with 1,749 additions and 1,657 deletions.
2 changes: 1 addition & 1 deletion dependencyManagement/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ val DEPENDENCIES = listOf(
"com.uber.nullaway:nullaway:0.12.3",
"commons-beanutils:commons-beanutils:1.10.0",
"commons-cli:commons-cli:1.9.0",
"commons-codec:commons-codec:1.17.2",
"commons-codec:commons-codec:1.18.0",
"commons-collections:commons-collections:3.2.2",
"commons-digester:commons-digester:2.1",
"commons-fileupload:commons-fileupload:1.5",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS;
import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT;

import client.VertxSingleConnection;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpClientTest;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

package client;
package io.opentelemetry.javaagent.instrumentation.vertx.v3_0.client;

import io.opentelemetry.instrumentation.testing.junit.http.SingleConnection;
import io.vertx.core.Vertx;
Expand All @@ -18,7 +18,7 @@
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class VertxSingleConnection implements SingleConnection {
class VertxSingleConnection implements SingleConnection {

private final HttpClient httpClient;
private final String host;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.vertx.v4_0.client;

import static java.util.Collections.emptySet;

import io.opentelemetry.api.common.AttributeKey;
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.HttpClientResult;
import io.opentelemetry.instrumentation.testing.junit.http.HttpClientTestOptions;
import io.vertx.core.Future;
import io.vertx.core.Vertx;
import io.vertx.core.VertxOptions;
import io.vertx.core.http.HttpClient;
import io.vertx.core.http.HttpClientOptions;
import io.vertx.core.http.HttpClientRequest;
import io.vertx.core.http.HttpMethod;
import io.vertx.core.http.RequestOptions;
import java.net.URI;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import org.junit.jupiter.api.extension.RegisterExtension;

class VertxHttpClientTest extends AbstractHttpClientTest<Future<HttpClientRequest>> {

@RegisterExtension
static final InstrumentationExtension testing = HttpClientInstrumentationExtension.forAgent();

private final HttpClient httpClient = buildClient();

private static HttpClient buildClient() {
Vertx vertx = Vertx.vertx(new VertxOptions());
HttpClientOptions clientOptions =
new HttpClientOptions().setConnectTimeout(Math.toIntExact(CONNECTION_TIMEOUT.toMillis()));
return vertx.createHttpClient(clientOptions);
}

@Override
public Future<HttpClientRequest> buildRequest(
String method, URI uri, Map<String, String> headers) {
RequestOptions requestOptions =
new RequestOptions().setMethod(HttpMethod.valueOf(method)).setAbsoluteURI(uri.toString());
headers.forEach(requestOptions::putHeader);
return httpClient.request(requestOptions);
}

private static CompletableFuture<Integer> sendRequest(Future<HttpClientRequest> request) {
CompletableFuture<Integer> future = new CompletableFuture<>();

request
.compose(
req ->
req.send()
.onComplete(
asyncResult -> {
if (asyncResult.succeeded()) {
future.complete(asyncResult.result().statusCode());
} else {
future.completeExceptionally(asyncResult.cause());
}
}))
.onFailure(future::completeExceptionally);

return future;
}

@Override
public int sendRequest(
Future<HttpClientRequest> request, String method, URI uri, Map<String, String> headers)
throws Exception {
// Vertx doesn't seem to provide any synchronous API so bridge through a callback
return sendRequest(request).get(30, TimeUnit.SECONDS);
}

@Override
public void sendRequestWithCallback(
Future<HttpClientRequest> request,
String method,
URI uri,
Map<String, String> headers,
HttpClientResult httpClientResult) {
sendRequest(request)
.whenComplete((status, throwable) -> httpClientResult.complete(() -> status, throwable));
}

@Override
protected void configure(HttpClientTestOptions.Builder optionsBuilder) {
optionsBuilder.disableTestRedirects();
optionsBuilder.disableTestReusedRequest();
optionsBuilder.disableTestHttps();
optionsBuilder.disableTestReadTimeout();
optionsBuilder.setHttpAttributes(VertxHttpClientTest::getHttpAttributes);
optionsBuilder.setExpectedClientSpanNameMapper(VertxHttpClientTest::getExpectedClientSpanName);

optionsBuilder.setSingleConnectionFactory(VertxSingleConnection::new);
}

private static Set<AttributeKey<?>> getHttpAttributes(URI uri) {
String uriString = uri.toString();
// http://localhost:61/ => unopened port, http://192.0.2.1/ => non routable address
if ("http://localhost:61/".equals(uriString) || "http://192.0.2.1/".equals(uriString)) {
return emptySet();
}
return HttpClientTestOptions.DEFAULT_HTTP_ATTRIBUTES;
}

private static String getExpectedClientSpanName(URI uri, String method) {
switch (uri.toString()) {
case "http://localhost:61/": // unopened port
case "http://192.0.2.1/": // non routable address
return "CONNECT";
default:
return HttpClientTestOptions.DEFAULT_EXPECTED_CLIENT_SPAN_NAME_MAPPER.apply(uri, method);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

package client;
package io.opentelemetry.javaagent.instrumentation.vertx.v4_0.client;

import io.opentelemetry.instrumentation.testing.junit.http.SingleConnection;
import io.vertx.core.Future;
Expand All @@ -18,7 +18,7 @@
import java.util.Objects;
import java.util.concurrent.ExecutionException;

public class VertxSingleConnection implements SingleConnection {
class VertxSingleConnection implements SingleConnection {

private final HttpClient httpClient;
private final String host;
Expand All @@ -41,7 +41,7 @@ public int doRequest(String path, Map<String, String> headers)
Future<HttpClientRequest> request = httpClient.request(requestOptions);

HttpClientResponse response =
request.compose(req -> req.send()).toCompletionStage().toCompletableFuture().get();
request.compose(HttpClientRequest::send).toCompletionStage().toCompletableFuture().get();

String responseId = response.getHeader(REQUEST_ID_HEADER);
if (!requestId.equals(responseId)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,11 @@ testing {
suites {
val version35Test by registering(JvmTestSuite::class) {
dependencies {
implementation("org.hsqldb:hsqldb:2.3.4")
// this only exists to make Intellij happy since it doesn't (currently at least) understand our
// inclusion of this artifact inside :testing-common
compileOnly(project.dependencies.project(":testing:armeria-shaded-for-testing", configuration = "shadow"))

implementation("org.hsqldb:hsqldb:2.3.4")
compileOnly("io.vertx:vertx-codegen:$vertxVersion")
implementation("io.vertx:vertx-web:$vertxVersion")
implementation("io.vertx:vertx-rx-java2:$vertxVersion")
Expand All @@ -42,8 +45,11 @@ testing {

val latestDepTest by registering(JvmTestSuite::class) {
dependencies {
implementation("org.hsqldb:hsqldb:2.3.4")
// this only exists to make Intellij happy since it doesn't (currently at least) understand our
// inclusion of this artifact inside :testing-common
compileOnly(project.dependencies.project(":testing:armeria-shaded-for-testing", configuration = "shadow"))

implementation("org.hsqldb:hsqldb:2.3.4")
implementation("io.vertx:vertx-web:latest.release")
implementation("io.vertx:vertx-rx-java2:latest.release")
implementation("io.vertx:vertx-web-client:latest.release")
Expand Down
Loading

0 comments on commit 7d7bed8

Please sign in to comment.