diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-otlp.txt b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-otlp.txt index df26146497..6cfcc87ed8 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-otlp.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-otlp.txt @@ -1,2 +1,13 @@ Comparing source compatibility of against -No changes. \ No newline at end of file +*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder setSslContext(javax.net.ssl.SSLContext, javax.net.ssl.X509TrustManager) +*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporterBuilder (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporterBuilder setSslContext(javax.net.ssl.SSLContext, javax.net.ssl.X509TrustManager) +*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder setSslContext(javax.net.ssl.SSLContext, javax.net.ssl.X509TrustManager) +*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder setSslContext(javax.net.ssl.SSLContext, javax.net.ssl.X509TrustManager) diff --git a/exporters/common/src/main/java/io/opentelemetry/exporter/internal/grpc/GrpcExporterBuilder.java b/exporters/common/src/main/java/io/opentelemetry/exporter/internal/grpc/GrpcExporterBuilder.java index 7cdc67832a..c16fee957e 100644 --- a/exporters/common/src/main/java/io/opentelemetry/exporter/internal/grpc/GrpcExporterBuilder.java +++ b/exporters/common/src/main/java/io/opentelemetry/exporter/internal/grpc/GrpcExporterBuilder.java @@ -111,6 +111,12 @@ public class GrpcExporterBuilder { return this; } + public GrpcExporterBuilder setSslContext( + SSLContext sslContext, X509TrustManager trustManager) { + tlsConfigHelper.setSslContext(sslContext, trustManager); + return this; + } + public GrpcExporterBuilder addHeader(String key, String value) { headers.put(key, value); return this; diff --git a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/http/metrics/OtlpHttpMetricExporterBuilder.java b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/http/metrics/OtlpHttpMetricExporterBuilder.java index b5c6b47e9a..feb722de25 100644 --- a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/http/metrics/OtlpHttpMetricExporterBuilder.java +++ b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/http/metrics/OtlpHttpMetricExporterBuilder.java @@ -18,6 +18,8 @@ import io.opentelemetry.sdk.metrics.export.DefaultAggregationSelector; import io.opentelemetry.sdk.metrics.export.MetricExporter; import java.time.Duration; import java.util.concurrent.TimeUnit; +import javax.net.ssl.SSLContext; +import javax.net.ssl.X509TrustManager; /** * Builder utility for {@link OtlpHttpMetricExporter}. @@ -112,6 +114,16 @@ public final class OtlpHttpMetricExporterBuilder { return this; } + /** + * Sets the "bring-your-own" SSLContext for use with TLS. Users should call this _or_ set raw + * certificate bytes, but not both. + */ + public OtlpHttpMetricExporterBuilder setSslContext( + SSLContext sslContext, X509TrustManager trustManager) { + delegate.setSslContext(sslContext, trustManager); + return this; + } + /** * Set the {@link AggregationTemporalitySelector} used for {@link * MetricExporter#getAggregationTemporality(InstrumentType)}. diff --git a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/http/trace/OtlpHttpSpanExporterBuilder.java b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/http/trace/OtlpHttpSpanExporterBuilder.java index d49de644da..cec4161871 100644 --- a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/http/trace/OtlpHttpSpanExporterBuilder.java +++ b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/http/trace/OtlpHttpSpanExporterBuilder.java @@ -15,6 +15,8 @@ import io.opentelemetry.exporter.internal.otlp.OtlpUserAgent; import io.opentelemetry.exporter.internal.otlp.traces.TraceRequestMarshaler; import java.time.Duration; import java.util.concurrent.TimeUnit; +import javax.net.ssl.SSLContext; +import javax.net.ssl.X509TrustManager; /** * Builder utility for {@link OtlpHttpSpanExporter}. @@ -100,6 +102,16 @@ public final class OtlpHttpSpanExporterBuilder { return this; } + /** + * Sets the "bring-your-own" SSLContext for use with TLS. Users should call this _or_ set raw + * certificate bytes, but not both. + */ + public OtlpHttpSpanExporterBuilder setSslContext( + SSLContext sslContext, X509TrustManager trustManager) { + delegate.setSslContext(sslContext, trustManager); + return this; + } + /** * Sets the {@link MeterProvider} to use to collect metrics related to export. If not set, uses * {@link GlobalOpenTelemetry#getMeterProvider()}. diff --git a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/metrics/OtlpGrpcMetricExporterBuilder.java b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/metrics/OtlpGrpcMetricExporterBuilder.java index db1a192d25..c89547785d 100644 --- a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/metrics/OtlpGrpcMetricExporterBuilder.java +++ b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/metrics/OtlpGrpcMetricExporterBuilder.java @@ -21,6 +21,8 @@ import io.opentelemetry.sdk.metrics.export.MetricExporter; import java.net.URI; import java.time.Duration; import java.util.concurrent.TimeUnit; +import javax.net.ssl.SSLContext; +import javax.net.ssl.X509TrustManager; /** * Builder utility for this exporter. @@ -144,6 +146,16 @@ public final class OtlpGrpcMetricExporterBuilder { return this; } + /** + * Sets the "bring-your-own" SSLContext for use with TLS. Users should call this _or_ set raw + * certificate bytes, but not both. + */ + public OtlpGrpcMetricExporterBuilder setSslContext( + SSLContext sslContext, X509TrustManager trustManager) { + delegate.setSslContext(sslContext, trustManager); + return this; + } + /** * Add header to request. Optional. Applicable only if {@link * OtlpGrpcMetricExporterBuilder#setChannel(ManagedChannel)} is not used to set channel. diff --git a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/trace/OtlpGrpcSpanExporterBuilder.java b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/trace/OtlpGrpcSpanExporterBuilder.java index 5c1f287005..6ab89195bd 100644 --- a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/trace/OtlpGrpcSpanExporterBuilder.java +++ b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/trace/OtlpGrpcSpanExporterBuilder.java @@ -18,6 +18,8 @@ import io.opentelemetry.exporter.internal.otlp.traces.TraceRequestMarshaler; import java.net.URI; import java.time.Duration; import java.util.concurrent.TimeUnit; +import javax.net.ssl.SSLContext; +import javax.net.ssl.X509TrustManager; /** Builder utility for this exporter. */ public final class OtlpGrpcSpanExporterBuilder { @@ -128,6 +130,16 @@ public final class OtlpGrpcSpanExporterBuilder { return this; } + /** + * Sets the "bring-your-own" SSLContext for use with TLS. Users should call this _or_ set raw + * certificate bytes, but not both. + */ + public OtlpGrpcSpanExporterBuilder setSslContext( + SSLContext sslContext, X509TrustManager trustManager) { + delegate.setSslContext(sslContext, trustManager); + return this; + } + /** * Add header to request. Optional. Applicable only if {@link * OtlpGrpcSpanExporterBuilder#setChannel(ManagedChannel)} is not called. diff --git a/exporters/otlp/all/src/test/java/io/opentelemetry/exporter/otlp/http/metrics/OtlpHttpMetricExporterTest.java b/exporters/otlp/all/src/test/java/io/opentelemetry/exporter/otlp/http/metrics/OtlpHttpMetricExporterTest.java index 67035a4e90..845f8aac59 100644 --- a/exporters/otlp/all/src/test/java/io/opentelemetry/exporter/otlp/http/metrics/OtlpHttpMetricExporterTest.java +++ b/exporters/otlp/all/src/test/java/io/opentelemetry/exporter/otlp/http/metrics/OtlpHttpMetricExporterTest.java @@ -28,6 +28,8 @@ import io.opentelemetry.sdk.metrics.export.DefaultAggregationSelector; import java.time.Duration; import java.util.List; import java.util.concurrent.TimeUnit; +import javax.net.ssl.SSLContext; +import javax.net.ssl.X509TrustManager; import org.junit.jupiter.api.Test; class OtlpHttpMetricExporterTest @@ -127,6 +129,13 @@ class OtlpHttpMetricExporterTest return this; } + @Override + public TelemetryExporterBuilder setSslContext( + SSLContext sslContext, X509TrustManager trustManager) { + builder.setSslContext(sslContext, trustManager); + return this; + } + @Override public TelemetryExporterBuilder setClientTls( byte[] privateKeyPem, byte[] certificatePem) { diff --git a/exporters/otlp/all/src/test/java/io/opentelemetry/exporter/otlp/http/trace/OtlpHttpSpanExporterTest.java b/exporters/otlp/all/src/test/java/io/opentelemetry/exporter/otlp/http/trace/OtlpHttpSpanExporterTest.java index 164e88138b..086af77df8 100644 --- a/exporters/otlp/all/src/test/java/io/opentelemetry/exporter/otlp/http/trace/OtlpHttpSpanExporterTest.java +++ b/exporters/otlp/all/src/test/java/io/opentelemetry/exporter/otlp/http/trace/OtlpHttpSpanExporterTest.java @@ -19,6 +19,8 @@ import io.opentelemetry.sdk.trace.data.SpanData; import java.time.Duration; import java.util.List; import java.util.concurrent.TimeUnit; +import javax.net.ssl.SSLContext; +import javax.net.ssl.X509TrustManager; class OtlpHttpSpanExporterTest extends AbstractHttpTelemetryExporterTest { @@ -72,6 +74,13 @@ class OtlpHttpSpanExporterTest extends AbstractHttpTelemetryExporterTest setSslContext( + SSLContext sslContext, X509TrustManager trustManager) { + builder.setSslContext(sslContext, trustManager); + return this; + } + @Override public TelemetryExporterBuilder setClientTls( byte[] privateKeyPem, byte[] certificatePem) { diff --git a/exporters/otlp/logs/src/main/java/io/opentelemetry/exporter/otlp/http/logs/OtlpHttpLogRecordExporterBuilder.java b/exporters/otlp/logs/src/main/java/io/opentelemetry/exporter/otlp/http/logs/OtlpHttpLogRecordExporterBuilder.java index 44f0e2c353..7e12c6c19b 100644 --- a/exporters/otlp/logs/src/main/java/io/opentelemetry/exporter/otlp/http/logs/OtlpHttpLogRecordExporterBuilder.java +++ b/exporters/otlp/logs/src/main/java/io/opentelemetry/exporter/otlp/http/logs/OtlpHttpLogRecordExporterBuilder.java @@ -15,6 +15,8 @@ import io.opentelemetry.exporter.internal.otlp.OtlpUserAgent; import io.opentelemetry.exporter.internal.otlp.logs.LogsRequestMarshaler; import java.time.Duration; import java.util.concurrent.TimeUnit; +import javax.net.ssl.SSLContext; +import javax.net.ssl.X509TrustManager; /** Builder utility for {@link OtlpHttpLogRecordExporter}. */ public final class OtlpHttpLogRecordExporterBuilder { @@ -97,6 +99,16 @@ public final class OtlpHttpLogRecordExporterBuilder { return this; } + /** + * Sets the "bring-your-own" SSLContext. Users should call this _or_ set raw certificate bytes, + * but not both. + */ + public OtlpHttpLogRecordExporterBuilder setSslSocketFactory( + SSLContext sslContext, X509TrustManager trustManager) { + delegate.setSslContext(sslContext, trustManager); + return this; + } + /** * Sets the {@link MeterProvider} to use to collect metrics related to export. If not set, uses * {@link GlobalOpenTelemetry#getMeterProvider()}. diff --git a/exporters/otlp/logs/src/main/java/io/opentelemetry/exporter/otlp/logs/OtlpGrpcLogRecordExporterBuilder.java b/exporters/otlp/logs/src/main/java/io/opentelemetry/exporter/otlp/logs/OtlpGrpcLogRecordExporterBuilder.java index 9e54fed5bc..6af234c505 100644 --- a/exporters/otlp/logs/src/main/java/io/opentelemetry/exporter/otlp/logs/OtlpGrpcLogRecordExporterBuilder.java +++ b/exporters/otlp/logs/src/main/java/io/opentelemetry/exporter/otlp/logs/OtlpGrpcLogRecordExporterBuilder.java @@ -18,6 +18,8 @@ import io.opentelemetry.exporter.internal.otlp.logs.LogsRequestMarshaler; import java.net.URI; import java.time.Duration; import java.util.concurrent.TimeUnit; +import javax.net.ssl.SSLContext; +import javax.net.ssl.X509TrustManager; /** Builder for {@link OtlpGrpcLogRecordExporter}. */ public final class OtlpGrpcLogRecordExporterBuilder { @@ -129,6 +131,16 @@ public final class OtlpGrpcLogRecordExporterBuilder { return this; } + /** + * Sets the "bring-your-own" SSLContext for use with TLS. Users should call this _or_ set raw + * certificate bytes, but not both. + */ + public OtlpGrpcLogRecordExporterBuilder setSslContext( + SSLContext sslContext, X509TrustManager trustManager) { + delegate.setSslContext(sslContext, trustManager); + return this; + } + /** * Add header to request. Optional. Applicable only if {@link * OtlpGrpcLogRecordExporterBuilder#setChannel(ManagedChannel)} is not used to set channel. diff --git a/exporters/otlp/logs/src/test/java/io/opentelemetry/exporter/otlp/http/logs/OtlpHttpLogRecordExporterTest.java b/exporters/otlp/logs/src/test/java/io/opentelemetry/exporter/otlp/http/logs/OtlpHttpLogRecordExporterTest.java index 59fbb279ec..a0df3f9d11 100644 --- a/exporters/otlp/logs/src/test/java/io/opentelemetry/exporter/otlp/http/logs/OtlpHttpLogRecordExporterTest.java +++ b/exporters/otlp/logs/src/test/java/io/opentelemetry/exporter/otlp/http/logs/OtlpHttpLogRecordExporterTest.java @@ -19,6 +19,8 @@ import io.opentelemetry.sdk.logs.data.LogRecordData; import java.time.Duration; import java.util.List; import java.util.concurrent.TimeUnit; +import javax.net.ssl.SSLContext; +import javax.net.ssl.X509TrustManager; class OtlpHttpLogRecordExporterTest extends AbstractHttpTelemetryExporterTest { @@ -73,6 +75,13 @@ class OtlpHttpLogRecordExporterTest return this; } + @Override + public TelemetryExporterBuilder setSslContext( + SSLContext ssLContext, X509TrustManager trustManager) { + builder.setSslSocketFactory(ssLContext, trustManager); + return this; + } + @Override public TelemetryExporterBuilder setClientTls( byte[] privateKeyPem, byte[] certificatePem) { diff --git a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/AbstractGrpcTelemetryExporterTest.java b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/AbstractGrpcTelemetryExporterTest.java index 6b45c8a0f9..8ec592c2b0 100644 --- a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/AbstractGrpcTelemetryExporterTest.java +++ b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/AbstractGrpcTelemetryExporterTest.java @@ -23,6 +23,7 @@ import com.linecorp.armeria.server.logging.LoggingService; import com.linecorp.armeria.testing.junit5.server.SelfSignedCertificateExtension; import com.linecorp.armeria.testing.junit5.server.ServerExtension; import io.github.netmikey.logunit.api.LogCapturer; +import io.opentelemetry.exporter.internal.TlsUtil; import io.opentelemetry.exporter.internal.grpc.OkHttpGrpcExporter; import io.opentelemetry.exporter.internal.grpc.UpstreamGrpcExporter; import io.opentelemetry.exporter.internal.marshal.Marshaler; @@ -54,6 +55,11 @@ import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.Nullable; +import javax.net.ssl.KeyManager; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509KeyManager; +import javax.net.ssl.X509TrustManager; import org.assertj.core.api.iterable.ThrowingExtractor; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; @@ -318,6 +324,31 @@ public abstract class AbstractGrpcTelemetryExporterTest { } } + @Test + void tlsViaSslContext() throws Exception { + X509TrustManager trustManager = TlsUtil.trustManager(certificate.certificate().getEncoded()); + + X509KeyManager keyManager = + TlsUtil.keyManager( + certificate.privateKey().getEncoded(), certificate.certificate().getEncoded()); + + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init(new KeyManager[] {keyManager}, new TrustManager[] {trustManager}, null); + + TelemetryExporter exporter = + exporterBuilder() + .setSslContext(sslContext, trustManager) + .setEndpoint(server.httpsUri().toString()) + .build(); + try { + CompletableResultCode result = + exporter.export(Collections.singletonList(generateFakeTelemetry())); + assertThat(result.join(10, TimeUnit.SECONDS).isSuccess()).isTrue(); + } finally { + exporter.shutdown(); + } + } + @Test @SuppressLogger(OkHttpGrpcExporter.class) @SuppressLogger(UpstreamGrpcExporter.class) diff --git a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/AbstractHttpTelemetryExporterTest.java b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/AbstractHttpTelemetryExporterTest.java index e9022ce06e..78e26c047d 100644 --- a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/AbstractHttpTelemetryExporterTest.java +++ b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/AbstractHttpTelemetryExporterTest.java @@ -26,6 +26,7 @@ import com.linecorp.armeria.server.logging.LoggingService; import com.linecorp.armeria.testing.junit5.server.SelfSignedCertificateExtension; import com.linecorp.armeria.testing.junit5.server.ServerExtension; import io.github.netmikey.logunit.api.LogCapturer; +import io.opentelemetry.exporter.internal.TlsUtil; import io.opentelemetry.exporter.internal.grpc.UpstreamGrpcExporter; import io.opentelemetry.exporter.internal.marshal.Marshaler; import io.opentelemetry.exporter.internal.okhttp.OkHttpExporter; @@ -56,6 +57,11 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; +import javax.net.ssl.KeyManager; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509KeyManager; +import javax.net.ssl.X509TrustManager; import okio.Buffer; import okio.GzipSource; import okio.Okio; @@ -377,6 +383,31 @@ public abstract class AbstractHttpTelemetryExporterTest { } } + @Test + void tlsViaSslContext() throws Exception { + X509TrustManager trustManager = TlsUtil.trustManager(certificate.certificate().getEncoded()); + + X509KeyManager keyManager = + TlsUtil.keyManager( + certificate.privateKey().getEncoded(), certificate.certificate().getEncoded()); + + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init(new KeyManager[] {keyManager}, new TrustManager[] {trustManager}, null); + + TelemetryExporter exporter = + exporterBuilder() + .setEndpoint(server.httpsUri() + path) + .setSslContext(sslContext, trustManager) + .build(); + try { + CompletableResultCode result = + exporter.export(Collections.singletonList(generateFakeTelemetry())); + assertThat(result.join(10, TimeUnit.SECONDS).isSuccess()).isTrue(); + } finally { + exporter.shutdown(); + } + } + @Test @SuppressLogger(OkHttpExporter.class) void tls_untrusted() { @@ -464,9 +495,11 @@ public abstract class AbstractHttpTelemetryExporterTest { @Test @SuppressLogger(OkHttpExporter.class) void doubleShutdown() { + int logsSizeBefore = logs.getEvents().size(); TelemetryExporter exporter = exporterBuilder().setEndpoint(server.httpUri() + path).build(); assertThat(exporter.shutdown().join(10, TimeUnit.SECONDS).isSuccess()).isTrue(); - assertThat(logs.getEvents()).isEmpty(); + assertThat(logs.getEvents()).hasSize(logsSizeBefore); + logs.assertDoesNotContain("Calling shutdown() multiple times."); assertThat(exporter.shutdown().join(10, TimeUnit.SECONDS).isSuccess()).isTrue(); logs.assertContains("Calling shutdown() multiple times."); } diff --git a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcLogRecordExporterBuilderWrapper.java b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcLogRecordExporterBuilderWrapper.java index afa09e6659..f206006350 100644 --- a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcLogRecordExporterBuilderWrapper.java +++ b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcLogRecordExporterBuilderWrapper.java @@ -13,6 +13,8 @@ import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporterBuilder; import io.opentelemetry.sdk.logs.data.LogRecordData; import java.time.Duration; import java.util.concurrent.TimeUnit; +import javax.net.ssl.SSLContext; +import javax.net.ssl.X509TrustManager; final class GrpcLogRecordExporterBuilderWrapper implements TelemetryExporterBuilder { private final OtlpGrpcLogRecordExporterBuilder builder; @@ -69,6 +71,13 @@ final class GrpcLogRecordExporterBuilderWrapper implements TelemetryExporterBuil return this; } + @Override + public TelemetryExporterBuilder setSslContext( + SSLContext sslContext, X509TrustManager trustManager) { + builder.setSslContext(sslContext, trustManager); + return this; + } + @Override public TelemetryExporterBuilder setRetryPolicy(RetryPolicy retryPolicy) { RetryUtil.setRetryPolicyOnDelegate(builder, retryPolicy); diff --git a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcMetricExporterBuilderWrapper.java b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcMetricExporterBuilderWrapper.java index 041f730e8b..ccdcb30a68 100644 --- a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcMetricExporterBuilderWrapper.java +++ b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcMetricExporterBuilderWrapper.java @@ -13,6 +13,8 @@ import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder; import io.opentelemetry.sdk.metrics.data.MetricData; import java.time.Duration; import java.util.concurrent.TimeUnit; +import javax.net.ssl.SSLContext; +import javax.net.ssl.X509TrustManager; final class GrpcMetricExporterBuilderWrapper implements TelemetryExporterBuilder { private final OtlpGrpcMetricExporterBuilder builder; @@ -69,6 +71,13 @@ final class GrpcMetricExporterBuilderWrapper implements TelemetryExporterBuilder return this; } + @Override + public TelemetryExporterBuilder setSslContext( + SSLContext sslContext, X509TrustManager trustManager) { + builder.setSslContext(sslContext, trustManager); + return this; + } + @Override public TelemetryExporterBuilder setRetryPolicy(RetryPolicy retryPolicy) { RetryUtil.setRetryPolicyOnDelegate(builder, retryPolicy); diff --git a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcSpanExporterBuilderWrapper.java b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcSpanExporterBuilderWrapper.java index cd804155be..d45c13a61a 100644 --- a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcSpanExporterBuilderWrapper.java +++ b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcSpanExporterBuilderWrapper.java @@ -13,6 +13,8 @@ import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder; import io.opentelemetry.sdk.trace.data.SpanData; import java.time.Duration; import java.util.concurrent.TimeUnit; +import javax.net.ssl.SSLContext; +import javax.net.ssl.X509TrustManager; /** Wrapper of {@link OtlpGrpcSpanExporterBuilder} for use in integration tests. */ final class GrpcSpanExporterBuilderWrapper implements TelemetryExporterBuilder { @@ -70,6 +72,13 @@ final class GrpcSpanExporterBuilderWrapper implements TelemetryExporterBuilder setSslContext( + SSLContext sslContext, X509TrustManager trustManager) { + builder.setSslContext(sslContext, trustManager); + return this; + } + @Override public TelemetryExporterBuilder setRetryPolicy(RetryPolicy retryPolicy) { RetryUtil.setRetryPolicyOnDelegate(builder, retryPolicy); diff --git a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/ManagedChannelTelemetryExporterBuilder.java b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/ManagedChannelTelemetryExporterBuilder.java index b88d788be7..7267298e87 100644 --- a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/ManagedChannelTelemetryExporterBuilder.java +++ b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/ManagedChannelTelemetryExporterBuilder.java @@ -164,6 +164,13 @@ public final class ManagedChannelTelemetryExporterBuilder }; } + @Override + public TelemetryExporterBuilder setSslContext( + SSLContext sslContext, X509TrustManager trustManager) { + tlsConfigHelper.setSslContext(sslContext, trustManager); + return this; + } + /** * Configure the channel builder to trust the certificates. The {@code byte[]} should contain an * X.509 certificate collection in PEM format. diff --git a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/TelemetryExporterBuilder.java b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/TelemetryExporterBuilder.java index 59fa30765d..30e0aa66dd 100644 --- a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/TelemetryExporterBuilder.java +++ b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/TelemetryExporterBuilder.java @@ -16,6 +16,8 @@ import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.trace.data.SpanData; import java.time.Duration; import java.util.concurrent.TimeUnit; +import javax.net.ssl.SSLContext; +import javax.net.ssl.X509TrustManager; public interface TelemetryExporterBuilder { @@ -47,6 +49,8 @@ public interface TelemetryExporterBuilder { TelemetryExporterBuilder setClientTls(byte[] privateKeyPem, byte[] certificatePem); + TelemetryExporterBuilder setSslContext(SSLContext sslContext, X509TrustManager trustManager); + TelemetryExporterBuilder setRetryPolicy(RetryPolicy retryPolicy); TelemetryExporterBuilder setChannel(ManagedChannel channel);