ConfigurationReader handles null values as empty (#5829)
This commit is contained in:
parent
96c895893c
commit
5d5093636b
|
|
@ -55,7 +55,7 @@ dependencies {
|
||||||
// ... proceed with normal sourcesJar, compileJava, etc
|
// ... proceed with normal sourcesJar, compileJava, etc
|
||||||
|
|
||||||
// TODO(jack-berg): update ref to be released version when available
|
// 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 configurationRepoZip = "https://github.com/open-telemetry/opentelemetry-configuration/archive/$configurationRef.zip"
|
||||||
val buildDirectory = layout.buildDirectory.asFile.get()
|
val buildDirectory = layout.buildDirectory.asFile.get()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@
|
||||||
|
|
||||||
package io.opentelemetry.sdk.extension.incubator.fileconfig;
|
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 com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfiguration;
|
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfiguration;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
@ -13,7 +15,10 @@ import org.snakeyaml.engine.v2.api.LoadSettings;
|
||||||
|
|
||||||
final class ConfigurationReader {
|
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() {}
|
private ConfigurationReader() {}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,10 @@ import static org.mockito.Mockito.mock;
|
||||||
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
|
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.Aggregation;
|
||||||
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Base2ExponentialBucketHistogram;
|
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.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.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
@ -45,13 +48,12 @@ class AggregationFactoryTest {
|
||||||
Arguments.of(
|
Arguments.of(
|
||||||
new Aggregation(), io.opentelemetry.sdk.metrics.Aggregation.defaultAggregation()),
|
new Aggregation(), io.opentelemetry.sdk.metrics.Aggregation.defaultAggregation()),
|
||||||
Arguments.of(
|
Arguments.of(
|
||||||
new Aggregation().withDrop(new Object()),
|
new Aggregation().withDrop(new Drop()),
|
||||||
io.opentelemetry.sdk.metrics.Aggregation.drop()),
|
io.opentelemetry.sdk.metrics.Aggregation.drop()),
|
||||||
Arguments.of(
|
Arguments.of(
|
||||||
new Aggregation().withSum(new Object()),
|
new Aggregation().withSum(new Sum()), io.opentelemetry.sdk.metrics.Aggregation.sum()),
|
||||||
io.opentelemetry.sdk.metrics.Aggregation.sum()),
|
|
||||||
Arguments.of(
|
Arguments.of(
|
||||||
new Aggregation().withLastValue(new Object()),
|
new Aggregation().withLastValue(new LastValue()),
|
||||||
io.opentelemetry.sdk.metrics.Aggregation.lastValue()),
|
io.opentelemetry.sdk.metrics.Aggregation.lastValue()),
|
||||||
Arguments.of(
|
Arguments.of(
|
||||||
new Aggregation()
|
new Aggregation()
|
||||||
|
|
|
||||||
|
|
@ -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.TracerProvider;
|
||||||
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.View;
|
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.View;
|
||||||
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Zipkin;
|
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Zipkin;
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -276,4 +278,60 @@ class ConfigurationReaderTest {
|
||||||
assertThat(config).isEqualTo(expected);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue