diff --git a/instrumentation/okhttp/okhttp-3.0/javaagent/build.gradle.kts b/instrumentation/okhttp/okhttp-3.0/javaagent/build.gradle.kts index db0f92fafc..8b903da615 100644 --- a/instrumentation/okhttp/okhttp-3.0/javaagent/build.gradle.kts +++ b/instrumentation/okhttp/okhttp-3.0/javaagent/build.gradle.kts @@ -20,3 +20,27 @@ dependencies { testImplementation(project(":instrumentation:okhttp:okhttp-3.0:testing")) } + +val testLatestDeps = findProperty("testLatestDeps") as Boolean + +testing { + suites { + val http2Test by registering(JvmTestSuite::class) { + dependencies { + if (testLatestDeps) { + implementation("com.squareup.okhttp3:okhttp:+") + compileOnly("com.google.android:annotations:4.1.1.4") + } else { + implementation("com.squareup.okhttp3:okhttp:3.11.0") + } + implementation(project(":instrumentation:okhttp:okhttp-3.0:testing")) + } + } + } +} + +tasks { + check { + dependsOn(testing.suites) + } +} diff --git a/instrumentation/okhttp/okhttp-3.0/javaagent/src/http2Test/java/io/opentelemetry/javaagent/instrumentation/okhttp/v3_0/OkHttp3Http2Test.java b/instrumentation/okhttp/okhttp-3.0/javaagent/src/http2Test/java/io/opentelemetry/javaagent/instrumentation/okhttp/v3_0/OkHttp3Http2Test.java new file mode 100644 index 0000000000..7d4f29b543 --- /dev/null +++ b/instrumentation/okhttp/okhttp-3.0/javaagent/src/http2Test/java/io/opentelemetry/javaagent/instrumentation/okhttp/v3_0/OkHttp3Http2Test.java @@ -0,0 +1,38 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.okhttp.v3_0; + +import static java.util.Collections.singletonList; + +import io.opentelemetry.instrumentation.okhttp.v3_0.AbstractOkHttp3Test; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpClientInstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.http.HttpClientTestOptions; +import okhttp3.Call; +import okhttp3.OkHttpClient; +import okhttp3.Protocol; +import org.junit.jupiter.api.extension.RegisterExtension; + +class OkHttp3Http2Test extends AbstractOkHttp3Test { + + @RegisterExtension + static final InstrumentationExtension testing = HttpClientInstrumentationExtension.forAgent(); + + @Override + public Call.Factory createCallFactory(OkHttpClient.Builder clientBuilder) { + clientBuilder.protocols(singletonList(Protocol.H2_PRIOR_KNOWLEDGE)); + return clientBuilder.build(); + } + + @Override + protected void configure(HttpClientTestOptions.Builder optionsBuilder) { + super.configure(optionsBuilder); + + // https does not work with H2_PRIOR_KNOWLEDGE + optionsBuilder.disableTestHttps(); + optionsBuilder.setHttpProtocolVersion(uri -> "2"); + } +} diff --git a/instrumentation/okhttp/okhttp-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/okhttp/v3_0/OkHttp3Test.java b/instrumentation/okhttp/okhttp-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/okhttp/v3_0/OkHttp3Test.java index 37653b1c07..f7c4d0face 100644 --- a/instrumentation/okhttp/okhttp-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/okhttp/v3_0/OkHttp3Test.java +++ b/instrumentation/okhttp/okhttp-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/okhttp/v3_0/OkHttp3Test.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.okhttp.v3_0; +import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.instrumentation.okhttp.v3_0.AbstractOkHttp3Test; @@ -13,16 +14,18 @@ import io.opentelemetry.instrumentation.testing.junit.http.HttpClientInstrumenta import java.util.concurrent.TimeUnit; import okhttp3.Call; import okhttp3.OkHttpClient; +import okhttp3.Protocol; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; -public class OkHttp3Test extends AbstractOkHttp3Test { +class OkHttp3Test extends AbstractOkHttp3Test { @RegisterExtension static final InstrumentationExtension testing = HttpClientInstrumentationExtension.forAgent(); @Override public Call.Factory createCallFactory(OkHttpClient.Builder clientBuilder) { + clientBuilder.protocols(singletonList(Protocol.HTTP_1_1)); return clientBuilder.build(); } diff --git a/instrumentation/okhttp/okhttp-3.0/library/build.gradle.kts b/instrumentation/okhttp/okhttp-3.0/library/build.gradle.kts index 4d262a4cf4..c241f44fb8 100644 --- a/instrumentation/okhttp/okhttp-3.0/library/build.gradle.kts +++ b/instrumentation/okhttp/okhttp-3.0/library/build.gradle.kts @@ -9,3 +9,28 @@ dependencies { testImplementation(project(":instrumentation:okhttp:okhttp-3.0:testing")) } + +val testLatestDeps = findProperty("testLatestDeps") as Boolean + +testing { + suites { + val http2Test by registering(JvmTestSuite::class) { + dependencies { + implementation(project()) + if (testLatestDeps) { + implementation("com.squareup.okhttp3:okhttp:+") + compileOnly("com.google.android:annotations:4.1.1.4") + } else { + implementation("com.squareup.okhttp3:okhttp:3.11.0") + } + implementation(project(":instrumentation:okhttp:okhttp-3.0:testing")) + } + } + } +} + +tasks { + check { + dependsOn(testing.suites) + } +} diff --git a/instrumentation/okhttp/okhttp-3.0/library/src/http2Test/java/io/opentelemetry/instrumentation/okhttp/v3_0/OkHttp3Http2Test.java b/instrumentation/okhttp/okhttp-3.0/library/src/http2Test/java/io/opentelemetry/instrumentation/okhttp/v3_0/OkHttp3Http2Test.java new file mode 100644 index 0000000000..1ce2679d81 --- /dev/null +++ b/instrumentation/okhttp/okhttp-3.0/library/src/http2Test/java/io/opentelemetry/instrumentation/okhttp/v3_0/OkHttp3Http2Test.java @@ -0,0 +1,42 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.okhttp.v3_0; + +import static java.util.Collections.singletonList; + +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 okhttp3.Call; +import okhttp3.OkHttpClient; +import okhttp3.Protocol; +import org.junit.jupiter.api.extension.RegisterExtension; + +class OkHttp3Http2Test extends AbstractOkHttp3Test { + + @RegisterExtension + static final InstrumentationExtension testing = HttpClientInstrumentationExtension.forLibrary(); + + @Override + public Call.Factory createCallFactory(OkHttpClient.Builder clientBuilder) { + clientBuilder.protocols(singletonList(Protocol.H2_PRIOR_KNOWLEDGE)); + return OkHttpTelemetry.builder(testing.getOpenTelemetry()) + .setCapturedRequestHeaders(singletonList(AbstractHttpClientTest.TEST_REQUEST_HEADER)) + .setCapturedResponseHeaders(singletonList(AbstractHttpClientTest.TEST_RESPONSE_HEADER)) + .build() + .newCallFactory(clientBuilder.build()); + } + + @Override + protected void configure(HttpClientTestOptions.Builder optionsBuilder) { + super.configure(optionsBuilder); + + // https does not work with H2_PRIOR_KNOWLEDGE + optionsBuilder.disableTestHttps(); + optionsBuilder.setHttpProtocolVersion(uri -> "2"); + } +} diff --git a/instrumentation/okhttp/okhttp-3.0/library/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/internal/OkHttpAttributesGetter.java b/instrumentation/okhttp/okhttp-3.0/library/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/internal/OkHttpAttributesGetter.java index 6db3e41251..b6b9aab4a5 100644 --- a/instrumentation/okhttp/okhttp-3.0/library/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/internal/OkHttpAttributesGetter.java +++ b/instrumentation/okhttp/okhttp-3.0/library/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/internal/OkHttpAttributesGetter.java @@ -58,6 +58,10 @@ public enum OkHttpAttributesGetter implements HttpClientAttributesGetter