Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,16 @@
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
import io.opentelemetry.sdk.resources.Resource;
import java.util.Objects;
import java.util.logging.Logger;
import java.util.regex.Pattern;

final class OpenTelemetryConfigurationFactory
implements Factory<OpenTelemetryConfigurationModel, ExtendedOpenTelemetrySdk> {

private static final Logger logger =
Logger.getLogger(OpenTelemetryConfigurationFactory.class.getName());
private static final Pattern SUPPORTED_FILE_FORMATS = Pattern.compile("^(0.4)|(1.0(-rc.\\d*)?)$");
private static final String EXPECTED_FILE_FORMAT = "1.0-rc.3";

private static final OpenTelemetryConfigurationFactory INSTANCE =
new OpenTelemetryConfigurationFactory();
Expand All @@ -47,8 +51,14 @@ public ExtendedOpenTelemetrySdk create(
throw new DeclarativeConfigException(
"Unsupported file format '" + fileFormat + "'. Supported formats include 0.4, 1.0*");
}
// TODO(jack-berg): log warning if version is not exact match, which may result in unexpected
// behavior for experimental properties.
if (!EXPECTED_FILE_FORMAT.equals(fileFormat)) {
logger.warning(
"Configuration file_format '"
+ fileFormat
+ "' does not exactly match expected version '"
+ EXPECTED_FILE_FORMAT
+ "'. This may result in unexpected behavior for experimental properties.");
}

if (Objects.equals(true, model.getDisabled())) {
return (ExtendedOpenTelemetrySdk) builder.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import static org.assertj.core.api.Assertions.assertThatCode;
import static org.assertj.core.api.Assertions.assertThatThrownBy;

import io.github.netmikey.logunit.api.LogCapturer;
import io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator;
import io.opentelemetry.api.incubator.config.DeclarativeConfigException;
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
Expand Down Expand Up @@ -72,11 +73,17 @@
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import org.slf4j.event.Level;

class OpenTelemetryConfigurationFactoryTest {

@RegisterExtension CleanupExtension cleanup = new CleanupExtension();

@RegisterExtension
LogCapturer logCapturer =
LogCapturer.create()
.captureForLogger(OpenTelemetryConfigurationFactory.class.getName(), Level.WARN);

private final DeclarativeConfigContext context =
new DeclarativeConfigContext(
SpiHelper.create(OpenTelemetryConfigurationFactoryTest.class.getClassLoader()));
Expand Down Expand Up @@ -110,6 +117,7 @@ private static Stream<Arguments> fileFormatArgs() {
Arguments.of("1.0-rc.a", false),
Arguments.of("1.0.0", false),
Arguments.of("1.0.3", false),
Arguments.of("1.0.0-rc.3", false),
// Valid file formats
Arguments.of("0.4", true),
Arguments.of("1.0-rc.1", true),
Expand All @@ -118,6 +126,31 @@ private static Stream<Arguments> fileFormatArgs() {
Arguments.of("1.0", true));
}

@Test
void create_FileFormatVersionMismatch_LogsWarning() {
OpenTelemetryConfigurationModel model =
new OpenTelemetryConfigurationModel().withFileFormat("1.0-rc.2");

ExtendedOpenTelemetrySdk sdk =
OpenTelemetryConfigurationFactory.getInstance().create(model, context);
cleanup.addCloseable(sdk);

logCapturer.assertContains(
"Configuration file_format '1.0-rc.2' does not exactly match expected version '1.0-rc.3'");
}

@Test
void create_FileFormatExactMatch_NoWarning() {
OpenTelemetryConfigurationModel model =
new OpenTelemetryConfigurationModel().withFileFormat("1.0-rc.3");

ExtendedOpenTelemetrySdk sdk =
OpenTelemetryConfigurationFactory.getInstance().create(model, context);
cleanup.addCloseable(sdk);

assertThat(logCapturer.size()).isEqualTo(0);
}

@Test
void create_Defaults() {
List<Closeable> closeables = new ArrayList<>();
Expand Down
Loading