diff --git a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/main/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/utils/TempDirs.java b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/main/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/utils/TempDirs.java index 98f9f3dec899..5de37e7e3593 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/main/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/utils/TempDirs.java +++ b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/main/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/utils/TempDirs.java @@ -17,6 +17,8 @@ public class TempDirs { private static final List CANDIDATE_USERNAME_ENVIRONMENT_VARIABLES = Collections.unmodifiableList(Arrays.asList("USER", "LOGNAME", "USERNAME")); + public static final String UNABLE_TO_CREATE_DIRECTORY = "Unable to create directory: "; + @Nullable public static File getApplicationInsightsTempDir(ClientLogger logger, String message) { File tempDir = new File(System.getProperty("java.io.tmpdir")); @@ -51,7 +53,7 @@ public static File getSubDir(File parent, String name) { File dir = new File(parent, name); if (!dir.exists() && !dir.mkdirs()) { - throw new IllegalArgumentException("Unable to create directory: " + dir); + throw new IllegalArgumentException(UNABLE_TO_CREATE_DIRECTORY + dir); } if (!dir.canRead()) { throw new IllegalArgumentException("Missing read permission to subdirectory: " + dir); diff --git a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/AppConfigurationExporterIntegrationTest.java b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/AppConfigurationExporterIntegrationTest.java index 8777993699c9..8d835922c07c 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/AppConfigurationExporterIntegrationTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/AppConfigurationExporterIntegrationTest.java @@ -18,10 +18,10 @@ import com.azure.data.appconfiguration.ConfigurationClientBuilder; import com.azure.data.appconfiguration.models.ConfigurationSetting; import com.azure.monitor.opentelemetry.autoconfigure.implementation.utils.TestUtils; -import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.context.Scope; +import io.opentelemetry.sdk.OpenTelemetrySdk; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import reactor.core.publisher.Mono; @@ -30,6 +30,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.util.Optional; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.zip.GZIPInputStream; @@ -53,7 +54,12 @@ public void setConfigurationTest() throws InterruptedException { CountDownLatch exporterCountDown = new CountDownLatch(1); ValidationPolicy validationPolicy = new ValidationPolicy(exporterCountDown, "set-config-exporter-testing"); - OpenTelemetry openTelemetry = TestUtils.createOpenTelemetrySdk(getHttpPipeline(validationPolicy)); + Optional optionalOpenTelemetry + = TestUtils.createOpenTelemetrySdk(getHttpPipeline(validationPolicy)); + if (!optionalOpenTelemetry.isPresent()) { + return; + } + OpenTelemetrySdk openTelemetry = optionalOpenTelemetry.get(); Tracer tracer = openTelemetry.getTracer("Sample"); @@ -78,7 +84,12 @@ public void testDisableTracing() throws InterruptedException { CountDownLatch exporterCountDown = new CountDownLatch(1); ValidationPolicy validationPolicy = new ValidationPolicy(exporterCountDown, "disable-config-exporter-testing"); - OpenTelemetry openTelemetry = TestUtils.createOpenTelemetrySdk(getHttpPipeline(validationPolicy)); + Optional optionalOpenTelemetry + = TestUtils.createOpenTelemetrySdk(getHttpPipeline(validationPolicy)); + if (!optionalOpenTelemetry.isPresent()) { + return; + } + OpenTelemetrySdk openTelemetry = optionalOpenTelemetry.get(); Tracer tracer = openTelemetry.getTracer("Sample"); diff --git a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/AzureMonitorExportersEndToEndTest.java b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/AzureMonitorExportersEndToEndTest.java index e08a7814955a..1d58a4e17078 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/AzureMonitorExportersEndToEndTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/AzureMonitorExportersEndToEndTest.java @@ -32,6 +32,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.concurrent.CountDownLatch; import static java.util.concurrent.TimeUnit.SECONDS; @@ -53,7 +54,12 @@ public void testBuildTraceExporter() throws Exception { CountDownLatch countDownLatch = new CountDownLatch(numberOfSpans); CustomValidationPolicy customValidationPolicy = new CustomValidationPolicy(countDownLatch); HttpPipeline httpPipeline = getHttpPipeline(customValidationPolicy); - OpenTelemetry openTelemetry = TestUtils.createOpenTelemetrySdk(httpPipeline, getConfiguration()); + Optional optionalOpenTelemetry + = TestUtils.createOpenTelemetrySdk(httpPipeline, getConfiguration()); + if (!optionalOpenTelemetry.isPresent()) { + return; + } + OpenTelemetrySdk openTelemetry = optionalOpenTelemetry.get(); // generate spans for (int i = 0; i < numberOfSpans; i++) { @@ -96,8 +102,12 @@ public void testBuildMetricExporter() throws Exception { // create the OpenTelemetry SDK CountDownLatch countDownLatch = new CountDownLatch(1); CustomValidationPolicy customValidationPolicy = new CustomValidationPolicy(countDownLatch); - OpenTelemetrySdk openTelemetry + Optional optionalOpenTelemetry = TestUtils.createOpenTelemetrySdk(getHttpPipeline(customValidationPolicy), getConfiguration()); + if (!optionalOpenTelemetry.isPresent()) { + return; + } + OpenTelemetrySdk openTelemetry = optionalOpenTelemetry.get(); // generate a metric generateMetric(openTelemetry); @@ -118,8 +128,12 @@ public void testBuildLogExporter() throws Exception { // create the OpenTelemetry SDK CountDownLatch countDownLatch = new CountDownLatch(1); CustomValidationPolicy customValidationPolicy = new CustomValidationPolicy(countDownLatch); - OpenTelemetry openTelemetry + Optional optionalOpenTelemetry = TestUtils.createOpenTelemetrySdk(getHttpPipeline(customValidationPolicy), getConfiguration()); + if (!optionalOpenTelemetry.isPresent()) { + return; + } + OpenTelemetrySdk openTelemetry = optionalOpenTelemetry.get(); // generate a log generateLog(openTelemetry); @@ -145,8 +159,12 @@ public void testBuildLogExporterWithCustomEvent() throws Exception { // create the OpenTelemetry SDK CountDownLatch countDownLatch = new CountDownLatch(1); CustomValidationPolicy customValidationPolicy = new CustomValidationPolicy(countDownLatch); - OpenTelemetry openTelemetry + Optional optionalOpenTelemetry = TestUtils.createOpenTelemetrySdk(getHttpPipeline(customValidationPolicy), getConfiguration()); + if (!optionalOpenTelemetry.isPresent()) { + return; + } + OpenTelemetrySdk openTelemetry = optionalOpenTelemetry.get(); // generate a log generateEvent(openTelemetry); @@ -172,8 +190,12 @@ public void testBuildTraceMetricLogExportersConsecutively() throws Exception { // create the OpenTelemetry SDK CountDownLatch countDownLatch = new CountDownLatch(3); CustomValidationPolicy customValidationPolicy = new CustomValidationPolicy(countDownLatch); - OpenTelemetrySdk openTelemetry + Optional optionalOpenTelemetry = TestUtils.createOpenTelemetrySdk(getHttpPipeline(customValidationPolicy), getConfiguration()); + if (!optionalOpenTelemetry.isPresent()) { + return; + } + OpenTelemetrySdk openTelemetry = optionalOpenTelemetry.get(); // generate telemetry generateSpan(openTelemetry); diff --git a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/AzureMonitorStatsbeatTest.java b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/AzureMonitorStatsbeatTest.java index 99e30dae6be5..306d66b19e48 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/AzureMonitorStatsbeatTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/AzureMonitorStatsbeatTest.java @@ -31,6 +31,7 @@ import java.net.URL; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; @@ -51,9 +52,13 @@ public void testStatsbeat() throws Exception { // create the OpenTelemetry SDK CountDownLatch countDownLatch = new CountDownLatch(1); CustomValidationPolicy customValidationPolicy = new CustomValidationPolicy(countDownLatch); - OpenTelemetrySdk openTelemetry + Optional optionalOpenTelemetry = TestUtils.createOpenTelemetrySdk(getHttpPipeline(customValidationPolicy, HttpClient.createDefault()), getStatsbeatConfiguration(), STATSBEAT_CONNECTION_STRING); + if (!optionalOpenTelemetry.isPresent()) { + return; + } + OpenTelemetrySdk openTelemetry = optionalOpenTelemetry.get(); // generate a metric generateMetric(openTelemetry); @@ -93,10 +98,13 @@ private void verifyStatsbeatShutdownOrnNot(String fakeBody, boolean shutdown) th // create OpenTelemetrySdk CountDownLatch countDownLatch = new CountDownLatch(1); CustomValidationPolicy customValidationPolicy = new CustomValidationPolicy(countDownLatch); - OpenTelemetrySdk openTelemetrySdk + Optional optionalOpenTelemetry = TestUtils.createOpenTelemetrySdk(getHttpPipeline(customValidationPolicy, mockedHttpClient), getStatsbeatConfiguration(), STATSBEAT_CONNECTION_STRING); - + if (!optionalOpenTelemetry.isPresent()) { + return; + } + OpenTelemetrySdk openTelemetrySdk = optionalOpenTelemetry.get(); generateMetric(openTelemetrySdk); // close to flush diff --git a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/EventHubsExporterIntegrationTest.java b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/EventHubsExporterIntegrationTest.java index 0a8dc551f418..504d7233a2db 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/EventHubsExporterIntegrationTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/EventHubsExporterIntegrationTest.java @@ -30,10 +30,10 @@ import com.azure.monitor.opentelemetry.autoconfigure.implementation.utils.TestUtils; import com.azure.storage.blob.BlobContainerAsyncClient; import com.azure.storage.blob.BlobContainerClientBuilder; -import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.context.Scope; +import io.opentelemetry.sdk.OpenTelemetrySdk; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import reactor.core.publisher.Mono; @@ -42,6 +42,7 @@ import java.nio.charset.StandardCharsets; import java.time.Duration; import java.util.List; +import java.util.Optional; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -107,7 +108,13 @@ private void checkTelemetry(HttpPipelineCallContext context) { } }; - OpenTelemetry otel = TestUtils.createOpenTelemetrySdk(getHttpPipeline(validationPolicy)); + Optional optionalOpenTelemetry + = TestUtils.createOpenTelemetrySdk(getHttpPipeline(validationPolicy)); + if (!optionalOpenTelemetry.isPresent()) { + return; + } + OpenTelemetrySdk otel = optionalOpenTelemetry.get(); + Tracer tracer = otel.getTracer("Sample"); try (EventHubProducerAsyncClient producer = new EventHubClientBuilder().credential(credential) @@ -156,7 +163,13 @@ public void processorTest() throws InterruptedException { }); return next.process(); }; - Tracer tracer = TestUtils.createOpenTelemetrySdk(getHttpPipeline(validationPolicy)).getTracer("Sample"); + Optional optionalOpenTelemetry + = TestUtils.createOpenTelemetrySdk(getHttpPipeline(validationPolicy)); + if (!optionalOpenTelemetry.isPresent()) { + return; + } + OpenTelemetrySdk openTelemetrySdk = optionalOpenTelemetry.get(); + Tracer tracer = openTelemetrySdk.getTracer("Sample"); CountDownLatch partitionOwned = new CountDownLatch(1); CountDownLatch eventCountDown = new CountDownLatch(1); diff --git a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/utils/TestUtils.java b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/utils/TestUtils.java index 4d4b15a638aa..1f37b34294f6 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/utils/TestUtils.java +++ b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/utils/TestUtils.java @@ -20,6 +20,7 @@ import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdkBuilder; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException; import io.opentelemetry.sdk.resources.Resource; import java.io.IOException; @@ -28,6 +29,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; public final class TestUtils { @@ -76,25 +78,34 @@ public static TelemetryItem createMetricTelemetry(String name, int value, String return telemetry; } - public static OpenTelemetrySdk createOpenTelemetrySdk(HttpPipeline httpPipeline) { + public static Optional createOpenTelemetrySdk(HttpPipeline httpPipeline) { return createOpenTelemetrySdk(httpPipeline, Collections.emptyMap()); } - public static OpenTelemetrySdk createOpenTelemetrySdk(HttpPipeline httpPipeline, + public static Optional createOpenTelemetrySdk(HttpPipeline httpPipeline, Map configuration) { return createOpenTelemetrySdk(httpPipeline, configuration, TRACE_CONNECTION_STRING); } - public static OpenTelemetrySdk createOpenTelemetrySdk(HttpPipeline httpPipeline, Map configuration, - String connectionString) { + public static Optional createOpenTelemetrySdk(HttpPipeline httpPipeline, + Map configuration, String connectionString) { AutoConfiguredOpenTelemetrySdkBuilder sdkBuilder = AutoConfiguredOpenTelemetrySdk.builder(); AzureMonitorAutoConfigureOptions exporterOptions = new AzureMonitorAutoConfigureOptions().connectionString(connectionString).pipeline(httpPipeline); AzureMonitorAutoConfigure.customize(sdkBuilder, exporterOptions); - return sdkBuilder.addPropertiesSupplier(() -> configuration).build().getOpenTelemetrySdk(); + try { + return Optional.of(sdkBuilder.addPropertiesSupplier(() -> configuration).build().getOpenTelemetrySdk()); + } catch (ConfigurationException e) { + if (e.getCause() instanceof IllegalArgumentException + && e.getCause().getMessage() != null + && e.getCause().getMessage().startsWith(TempDirs.UNABLE_TO_CREATE_DIRECTORY)) { + return Optional.empty(); + } + throw e; + } } // azure-json doesn't deserialize subtypes yet, so need to convert the abstract MonitorDomain to RemoteDependencyData