ConfigurationReader handles null values as empty (#5829)

This commit is contained in:
jack-berg 2023-09-15 10:48:51 -05:00 committed by GitHub
parent 96c895893c
commit 5d5093636b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 71 additions and 6 deletions

View File

@ -55,7 +55,7 @@ dependencies {
// ... proceed with normal sourcesJar, compileJava, etc
// TODO(jack-berg): update ref to be released version when available
val configurationRef = "0eb96de17c6533f668163873d95bd026bce1d8fb"
val configurationRef = "0508846f82ed54b230fa638e1e7556c52efee25e"
val configurationRepoZip = "https://github.com/open-telemetry/opentelemetry-configuration/archive/$configurationRef.zip"
val buildDirectory = layout.buildDirectory.asFile.get()

View File

@ -5,6 +5,8 @@
package io.opentelemetry.sdk.extension.incubator.fileconfig;
import com.fasterxml.jackson.annotation.JsonSetter;
import com.fasterxml.jackson.annotation.Nulls;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfiguration;
import java.io.InputStream;
@ -13,7 +15,10 @@ import org.snakeyaml.engine.v2.api.LoadSettings;
final class ConfigurationReader {
private static final ObjectMapper MAPPER = new ObjectMapper();
private static final ObjectMapper MAPPER =
new ObjectMapper()
// Create empty object instances for keys which are present but have null values
.setDefaultSetterInfo(JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY));
private ConfigurationReader() {}

View File

@ -11,7 +11,10 @@ import static org.mockito.Mockito.mock;
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Aggregation;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Base2ExponentialBucketHistogram;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Drop;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExplicitBucketHistogram;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LastValue;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Sum;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@ -45,13 +48,12 @@ class AggregationFactoryTest {
Arguments.of(
new Aggregation(), io.opentelemetry.sdk.metrics.Aggregation.defaultAggregation()),
Arguments.of(
new Aggregation().withDrop(new Object()),
new Aggregation().withDrop(new Drop()),
io.opentelemetry.sdk.metrics.Aggregation.drop()),
Arguments.of(
new Aggregation().withSum(new Object()),
io.opentelemetry.sdk.metrics.Aggregation.sum()),
new Aggregation().withSum(new Sum()), io.opentelemetry.sdk.metrics.Aggregation.sum()),
Arguments.of(
new Aggregation().withLastValue(new Object()),
new Aggregation().withLastValue(new LastValue()),
io.opentelemetry.sdk.metrics.Aggregation.lastValue()),
Arguments.of(
new Aggregation()

View File

@ -44,8 +44,10 @@ import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.TraceI
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.TracerProvider;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.View;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Zipkin;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@ -276,4 +278,60 @@ class ConfigurationReaderTest {
assertThat(config).isEqualTo(expected);
}
}
@Test
void nullValuesParsedToEmptyObjects() {
String objectPlaceholderString =
"file_format: \"0.1\"\n"
+ "tracer_provider:\n"
+ " processors:\n"
+ " - batch:\n"
+ " exporter:\n"
+ " console: {}\n"
+ "meter_provider:\n"
+ " views:\n"
+ " - selector:\n"
+ " instrument_type: histogram\n"
+ " stream:\n"
+ " aggregation:\n"
+ " drop: {}\n";
OpenTelemetryConfiguration objectPlaceholderModel =
ConfigurationReader.parse(
new ByteArrayInputStream(objectPlaceholderString.getBytes(StandardCharsets.UTF_8)));
String noOjbectPlaceholderString =
"file_format: \"0.1\"\n"
+ "tracer_provider:\n"
+ " processors:\n"
+ " - batch:\n"
+ " exporter:\n"
+ " console:\n"
+ "meter_provider:\n"
+ " views:\n"
+ " - selector:\n"
+ " instrument_type: histogram\n"
+ " stream:\n"
+ " aggregation:\n"
+ " drop:\n";
OpenTelemetryConfiguration noObjectPlaceholderModel =
ConfigurationReader.parse(
new ByteArrayInputStream(noOjbectPlaceholderString.getBytes(StandardCharsets.UTF_8)));
SpanExporter exporter =
noObjectPlaceholderModel
.getTracerProvider()
.getProcessors()
.get(0)
.getBatch()
.getExporter();
assertThat(exporter.getConsole()).isNotNull();
assertThat(exporter.getOtlp()).isNull();
Aggregation aggregation =
noObjectPlaceholderModel.getMeterProvider().getViews().get(0).getStream().getAggregation();
assertThat(aggregation.getDrop()).isNotNull();
assertThat(aggregation.getSum()).isNull();
assertThat(objectPlaceholderModel).isEqualTo(noObjectPlaceholderModel);
}
}