General attribute limits configuration factory (#5779)

This commit is contained in:
jack-berg 2023-08-30 14:31:05 -05:00 committed by GitHub
parent 68d7ab5763
commit da7927883c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 357 additions and 209 deletions

View File

@ -6,6 +6,7 @@
package io.opentelemetry.sdk.extension.incubator.fileconfig; package io.opentelemetry.sdk.extension.incubator.fileconfig;
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper; import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.AttributeLimits;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordLimits; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordLimits;
import io.opentelemetry.sdk.logs.LogLimits; import io.opentelemetry.sdk.logs.LogLimits;
import io.opentelemetry.sdk.logs.LogLimitsBuilder; import io.opentelemetry.sdk.logs.LogLimitsBuilder;
@ -13,7 +14,7 @@ import java.io.Closeable;
import java.util.List; import java.util.List;
import javax.annotation.Nullable; import javax.annotation.Nullable;
final class LogLimitsFactory implements Factory<LogRecordLimits, LogLimits> { final class LogLimitsFactory implements Factory<LogRecordLimitsAndAttributeLimits, LogLimits> {
private static final LogLimitsFactory INSTANCE = new LogLimitsFactory(); private static final LogLimitsFactory INSTANCE = new LogLimitsFactory();
@ -25,18 +26,34 @@ final class LogLimitsFactory implements Factory<LogRecordLimits, LogLimits> {
@Override @Override
public LogLimits create( public LogLimits create(
@Nullable LogRecordLimits model, SpiHelper spiHelper, List<Closeable> closeables) { @Nullable LogRecordLimitsAndAttributeLimits model,
SpiHelper spiHelper,
List<Closeable> closeables) {
if (model == null) { if (model == null) {
return LogLimits.getDefault(); return LogLimits.getDefault();
} }
LogLimitsBuilder builder = LogLimits.builder(); LogLimitsBuilder builder = LogLimits.builder();
if (model.getAttributeCountLimit() != null) {
builder.setMaxNumberOfAttributes(model.getAttributeCountLimit()); AttributeLimits attributeLimitsModel = model.getAttributeLimits();
if (attributeLimitsModel != null) {
if (attributeLimitsModel.getAttributeCountLimit() != null) {
builder.setMaxNumberOfAttributes(attributeLimitsModel.getAttributeCountLimit());
}
if (attributeLimitsModel.getAttributeValueLengthLimit() != null) {
builder.setMaxAttributeValueLength(attributeLimitsModel.getAttributeValueLengthLimit());
}
} }
if (model.getAttributeValueLengthLimit() != null) {
builder.setMaxAttributeValueLength(model.getAttributeValueLengthLimit()); LogRecordLimits logRecordLimitsModel = model.getLogRecordLimits();
if (logRecordLimitsModel != null) {
if (logRecordLimitsModel.getAttributeCountLimit() != null) {
builder.setMaxNumberOfAttributes(logRecordLimitsModel.getAttributeCountLimit());
}
if (logRecordLimitsModel.getAttributeValueLengthLimit() != null) {
builder.setMaxAttributeValueLength(logRecordLimitsModel.getAttributeValueLengthLimit());
}
} }
return builder.build(); return builder.build();
} }
} }

View File

@ -0,0 +1,26 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.sdk.extension.incubator.fileconfig;
import com.google.auto.value.AutoValue;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.AttributeLimits;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordLimits;
import javax.annotation.Nullable;
@AutoValue
abstract class LogRecordLimitsAndAttributeLimits {
static LogRecordLimitsAndAttributeLimits create(
@Nullable AttributeLimits attributeLimits, @Nullable LogRecordLimits spanLimits) {
return new AutoValue_LogRecordLimitsAndAttributeLimits(attributeLimits, spanLimits);
}
@Nullable
abstract AttributeLimits getAttributeLimits();
@Nullable
abstract LogRecordLimits getLogRecordLimits();
}

View File

@ -0,0 +1,26 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.sdk.extension.incubator.fileconfig;
import com.google.auto.value.AutoValue;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.AttributeLimits;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LoggerProvider;
import javax.annotation.Nullable;
@AutoValue
abstract class LoggerProviderAndAttributeLimits {
static LoggerProviderAndAttributeLimits create(
@Nullable AttributeLimits attributeLimits, @Nullable LoggerProvider loggerProvider) {
return new AutoValue_LoggerProviderAndAttributeLimits(attributeLimits, loggerProvider);
}
@Nullable
abstract AttributeLimits getAttributeLimits();
@Nullable
abstract LoggerProvider getLoggerProvider();
}

View File

@ -15,7 +15,8 @@ import java.io.Closeable;
import java.util.List; import java.util.List;
import javax.annotation.Nullable; import javax.annotation.Nullable;
final class LoggerProviderFactory implements Factory<LoggerProvider, SdkLoggerProviderBuilder> { final class LoggerProviderFactory
implements Factory<LoggerProviderAndAttributeLimits, SdkLoggerProviderBuilder> {
private static final LoggerProviderFactory INSTANCE = new LoggerProviderFactory(); private static final LoggerProviderFactory INSTANCE = new LoggerProviderFactory();
@ -27,18 +28,28 @@ final class LoggerProviderFactory implements Factory<LoggerProvider, SdkLoggerPr
@Override @Override
public SdkLoggerProviderBuilder create( public SdkLoggerProviderBuilder create(
@Nullable LoggerProvider model, SpiHelper spiHelper, List<Closeable> closeables) { @Nullable LoggerProviderAndAttributeLimits model,
SpiHelper spiHelper,
List<Closeable> closeables) {
SdkLoggerProviderBuilder builder = SdkLoggerProvider.builder();
if (model == null) { if (model == null) {
return SdkLoggerProvider.builder(); return builder;
}
LoggerProvider loggerProviderModel = model.getLoggerProvider();
if (loggerProviderModel == null) {
return builder;
} }
SdkLoggerProviderBuilder builder = SdkLoggerProvider.builder();
LogLimits logLimits = LogLimits logLimits =
LogLimitsFactory.getInstance().create(model.getLimits(), spiHelper, closeables); LogLimitsFactory.getInstance()
.create(
LogRecordLimitsAndAttributeLimits.create(
model.getAttributeLimits(), loggerProviderModel.getLimits()),
spiHelper,
closeables);
builder.setLogLimits(() -> logLimits); builder.setLogLimits(() -> logLimits);
List<LogRecordProcessor> processors = model.getProcessors(); List<LogRecordProcessor> processors = loggerProviderModel.getProcessors();
if (processors != null) { if (processors != null) {
processors.forEach( processors.forEach(
processor -> processor ->

View File

@ -31,16 +31,15 @@ final class OpenTelemetryConfigurationFactory
@Override @Override
public OpenTelemetrySdk create( public OpenTelemetrySdk create(
@Nullable OpenTelemetryConfiguration model, SpiHelper spiHelper, List<Closeable> closeables) { @Nullable OpenTelemetryConfiguration model, SpiHelper spiHelper, List<Closeable> closeables) {
OpenTelemetrySdkBuilder builder = OpenTelemetrySdk.builder();
if (model == null) { if (model == null) {
return FileConfigUtil.addAndReturn(closeables, OpenTelemetrySdk.builder().build()); return FileConfigUtil.addAndReturn(closeables, builder.build());
} }
if (!"0.1".equals(model.getFileFormat())) { if (!"0.1".equals(model.getFileFormat())) {
throw new ConfigurationException("Unsupported file format. Supported formats include: 0.1"); throw new ConfigurationException("Unsupported file format. Supported formats include: 0.1");
} }
OpenTelemetrySdkBuilder builder = OpenTelemetrySdk.builder();
if (Objects.equals(Boolean.TRUE, model.getDisabled())) { if (Objects.equals(Boolean.TRUE, model.getDisabled())) {
return builder.build(); return builder.build();
} }
@ -56,7 +55,11 @@ final class OpenTelemetryConfigurationFactory
FileConfigUtil.addAndReturn( FileConfigUtil.addAndReturn(
closeables, closeables,
LoggerProviderFactory.getInstance() LoggerProviderFactory.getInstance()
.create(model.getLoggerProvider(), spiHelper, closeables) .create(
LoggerProviderAndAttributeLimits.create(
model.getAttributeLimits(), model.getLoggerProvider()),
spiHelper,
closeables)
.setResource(resource) .setResource(resource)
.build())); .build()));
} }
@ -66,7 +69,11 @@ final class OpenTelemetryConfigurationFactory
FileConfigUtil.addAndReturn( FileConfigUtil.addAndReturn(
closeables, closeables,
TracerProviderFactory.getInstance() TracerProviderFactory.getInstance()
.create(model.getTracerProvider(), spiHelper, closeables) .create(
TracerProviderAndAttributeLimits.create(
model.getAttributeLimits(), model.getTracerProvider()),
spiHelper,
closeables)
.setResource(resource) .setResource(resource)
.build())); .build()));
} }
@ -81,8 +88,6 @@ final class OpenTelemetryConfigurationFactory
.build())); .build()));
} }
// TODO(jack-berg): add support for general attribute limits
return FileConfigUtil.addAndReturn(closeables, builder.build()); return FileConfigUtil.addAndReturn(closeables, builder.build());
} }
} }

View File

@ -0,0 +1,26 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.sdk.extension.incubator.fileconfig;
import com.google.auto.value.AutoValue;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.AttributeLimits;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanLimits;
import javax.annotation.Nullable;
@AutoValue
abstract class SpanLimitsAndAttributeLimits {
static SpanLimitsAndAttributeLimits create(
@Nullable AttributeLimits attributeLimits, @Nullable SpanLimits spanLimits) {
return new AutoValue_SpanLimitsAndAttributeLimits(attributeLimits, spanLimits);
}
@Nullable
abstract AttributeLimits getAttributeLimits();
@Nullable
abstract SpanLimits getSpanLimits();
}

View File

@ -6,6 +6,7 @@
package io.opentelemetry.sdk.extension.incubator.fileconfig; package io.opentelemetry.sdk.extension.incubator.fileconfig;
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper; import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.AttributeLimits;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanLimits; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanLimits;
import io.opentelemetry.sdk.trace.SpanLimitsBuilder; import io.opentelemetry.sdk.trace.SpanLimitsBuilder;
import java.io.Closeable; import java.io.Closeable;
@ -13,7 +14,7 @@ import java.util.List;
import javax.annotation.Nullable; import javax.annotation.Nullable;
final class SpanLimitsFactory final class SpanLimitsFactory
implements Factory<SpanLimits, io.opentelemetry.sdk.trace.SpanLimits> { implements Factory<SpanLimitsAndAttributeLimits, io.opentelemetry.sdk.trace.SpanLimits> {
private static final SpanLimitsFactory INSTANCE = new SpanLimitsFactory(); private static final SpanLimitsFactory INSTANCE = new SpanLimitsFactory();
@ -25,29 +26,45 @@ final class SpanLimitsFactory
@Override @Override
public io.opentelemetry.sdk.trace.SpanLimits create( public io.opentelemetry.sdk.trace.SpanLimits create(
@Nullable SpanLimits model, SpiHelper spiHelper, List<Closeable> closeables) { @Nullable SpanLimitsAndAttributeLimits model,
SpiHelper spiHelper,
List<Closeable> closeables) {
if (model == null) { if (model == null) {
return io.opentelemetry.sdk.trace.SpanLimits.getDefault(); return io.opentelemetry.sdk.trace.SpanLimits.getDefault();
} }
SpanLimitsBuilder builder = io.opentelemetry.sdk.trace.SpanLimits.builder(); SpanLimitsBuilder builder = io.opentelemetry.sdk.trace.SpanLimits.builder();
if (model.getAttributeCountLimit() != null) {
builder.setMaxNumberOfAttributes(model.getAttributeCountLimit()); AttributeLimits attributeLimitsModel = model.getAttributeLimits();
if (attributeLimitsModel != null) {
if (attributeLimitsModel.getAttributeCountLimit() != null) {
builder.setMaxNumberOfAttributes(attributeLimitsModel.getAttributeCountLimit());
}
if (attributeLimitsModel.getAttributeValueLengthLimit() != null) {
builder.setMaxAttributeValueLength(attributeLimitsModel.getAttributeValueLengthLimit());
}
} }
if (model.getAttributeValueLengthLimit() != null) {
builder.setMaxAttributeValueLength(model.getAttributeValueLengthLimit()); SpanLimits spanLimitsModel = model.getSpanLimits();
} if (spanLimitsModel != null) {
if (model.getEventCountLimit() != null) { if (spanLimitsModel.getAttributeCountLimit() != null) {
builder.setMaxNumberOfEvents(model.getEventCountLimit()); builder.setMaxNumberOfAttributes(spanLimitsModel.getAttributeCountLimit());
} }
if (model.getLinkCountLimit() != null) { if (spanLimitsModel.getAttributeValueLengthLimit() != null) {
builder.setMaxNumberOfLinks(model.getLinkCountLimit()); builder.setMaxAttributeValueLength(spanLimitsModel.getAttributeValueLengthLimit());
} }
if (model.getEventAttributeCountLimit() != null) { if (spanLimitsModel.getEventCountLimit() != null) {
builder.setMaxNumberOfAttributesPerEvent(model.getEventAttributeCountLimit()); builder.setMaxNumberOfEvents(spanLimitsModel.getEventCountLimit());
} }
if (model.getLinkAttributeCountLimit() != null) { if (spanLimitsModel.getLinkCountLimit() != null) {
builder.setMaxNumberOfAttributesPerLink(model.getLinkAttributeCountLimit()); builder.setMaxNumberOfLinks(spanLimitsModel.getLinkCountLimit());
}
if (spanLimitsModel.getEventAttributeCountLimit() != null) {
builder.setMaxNumberOfAttributesPerEvent(spanLimitsModel.getEventAttributeCountLimit());
}
if (spanLimitsModel.getLinkAttributeCountLimit() != null) {
builder.setMaxNumberOfAttributesPerLink(spanLimitsModel.getLinkAttributeCountLimit());
}
} }
return builder.build(); return builder.build();

View File

@ -0,0 +1,26 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.sdk.extension.incubator.fileconfig;
import com.google.auto.value.AutoValue;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.AttributeLimits;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.TracerProvider;
import javax.annotation.Nullable;
@AutoValue
abstract class TracerProviderAndAttributeLimits {
static TracerProviderAndAttributeLimits create(
@Nullable AttributeLimits attributeLimits, @Nullable TracerProvider tracerProvider) {
return new AutoValue_TracerProviderAndAttributeLimits(attributeLimits, tracerProvider);
}
@Nullable
abstract AttributeLimits getAttributeLimits();
@Nullable
abstract TracerProvider getTracerProvider();
}

View File

@ -16,7 +16,8 @@ import java.io.Closeable;
import java.util.List; import java.util.List;
import javax.annotation.Nullable; import javax.annotation.Nullable;
final class TracerProviderFactory implements Factory<TracerProvider, SdkTracerProviderBuilder> { final class TracerProviderFactory
implements Factory<TracerProviderAndAttributeLimits, SdkTracerProviderBuilder> {
private static final TracerProviderFactory INSTANCE = new TracerProviderFactory(); private static final TracerProviderFactory INSTANCE = new TracerProviderFactory();
@ -28,22 +29,33 @@ final class TracerProviderFactory implements Factory<TracerProvider, SdkTracerPr
@Override @Override
public SdkTracerProviderBuilder create( public SdkTracerProviderBuilder create(
@Nullable TracerProvider model, SpiHelper spiHelper, List<Closeable> closeables) { @Nullable TracerProviderAndAttributeLimits model,
SpiHelper spiHelper,
List<Closeable> closeables) {
SdkTracerProviderBuilder builder = SdkTracerProvider.builder();
if (model == null) { if (model == null) {
return SdkTracerProvider.builder(); return builder;
}
TracerProvider tracerProviderModel = model.getTracerProvider();
if (tracerProviderModel == null) {
return builder;
} }
SdkTracerProviderBuilder builder = SdkTracerProvider.builder();
SpanLimits spanLimits = SpanLimits spanLimits =
SpanLimitsFactory.getInstance().create(model.getLimits(), spiHelper, closeables); SpanLimitsFactory.getInstance()
.create(
SpanLimitsAndAttributeLimits.create(
model.getAttributeLimits(), tracerProviderModel.getLimits()),
spiHelper,
closeables);
builder.setSpanLimits(spanLimits); builder.setSpanLimits(spanLimits);
Sampler sampler = Sampler sampler =
SamplerFactory.getInstance().create(model.getSampler(), spiHelper, closeables); SamplerFactory.getInstance()
.create(tracerProviderModel.getSampler(), spiHelper, closeables);
builder.setSampler(sampler); builder.setSampler(sampler);
List<SpanProcessor> processors = model.getProcessors(); List<SpanProcessor> processors = tracerProviderModel.getProcessors();
if (processors != null) { if (processors != null) {
processors.forEach( processors.forEach(
processor -> processor ->

View File

@ -9,40 +9,43 @@ import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.asser
import static org.mockito.Mockito.mock; 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.AttributeLimits;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordLimits; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordLimits;
import io.opentelemetry.sdk.logs.LogLimits; import io.opentelemetry.sdk.logs.LogLimits;
import java.util.Collections; import java.util.Collections;
import org.junit.jupiter.api.Test; import java.util.stream.Stream;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
class LogLimitsFactoryTest { class LogLimitsFactoryTest {
@Test @ParameterizedTest
void create_Null() { @MethodSource("createArguments")
void create(LogRecordLimitsAndAttributeLimits model, LogLimits expectedLogLimits) {
assertThat( assertThat(
LogLimitsFactory.getInstance() LogLimitsFactory.getInstance()
.create(null, mock(SpiHelper.class), Collections.emptyList())) .create(model, mock(SpiHelper.class), Collections.emptyList()))
.isEqualTo(LogLimits.getDefault()); .isEqualTo(expectedLogLimits);
} }
@Test private static Stream<Arguments> createArguments() {
void create_Defaults() { return Stream.of(
assertThat( Arguments.of(null, LogLimits.builder().build()),
LogLimitsFactory.getInstance() Arguments.of(
.create(new LogRecordLimits(), mock(SpiHelper.class), Collections.emptyList())) LogRecordLimitsAndAttributeLimits.create(null, null), LogLimits.builder().build()),
.isEqualTo(LogLimits.getDefault()); Arguments.of(
} LogRecordLimitsAndAttributeLimits.create(new AttributeLimits(), new LogRecordLimits()),
LogLimits.builder().build()),
@Test Arguments.of(
void create() { LogRecordLimitsAndAttributeLimits.create(
assertThat( new AttributeLimits().withAttributeValueLengthLimit(1).withAttributeCountLimit(2),
LogLimitsFactory.getInstance() new LogRecordLimits()),
.create( LogLimits.builder().setMaxAttributeValueLength(1).setMaxNumberOfAttributes(2).build()),
new LogRecordLimits() Arguments.of(
.withAttributeCountLimit(1) LogRecordLimitsAndAttributeLimits.create(
.withAttributeValueLengthLimit(2), new AttributeLimits().withAttributeValueLengthLimit(1).withAttributeCountLimit(2),
mock(SpiHelper.class), new LogRecordLimits().withAttributeValueLengthLimit(3).withAttributeCountLimit(4)),
Collections.emptyList())) LogLimits.builder().setMaxAttributeValueLength(3).setMaxNumberOfAttributes(4).build()));
.isEqualTo(
LogLimits.builder().setMaxNumberOfAttributes(1).setMaxAttributeValueLength(2).build());
} }
} }

View File

@ -10,6 +10,7 @@ import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.asser
import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporter; import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporter;
import io.opentelemetry.internal.testing.CleanupExtension; import io.opentelemetry.internal.testing.CleanupExtension;
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper; import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.AttributeLimits;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchLogRecordProcessor; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchLogRecordProcessor;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordExporter; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordExporter;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordLimits; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordLimits;
@ -22,8 +23,11 @@ import java.io.Closeable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import org.junit.jupiter.api.Test; import java.util.stream.Stream;
import org.junit.jupiter.api.extension.RegisterExtension; import org.junit.jupiter.api.extension.RegisterExtension;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
class LoggerProviderFactoryTest { class LoggerProviderFactoryTest {
@ -32,57 +36,32 @@ class LoggerProviderFactoryTest {
private final SpiHelper spiHelper = private final SpiHelper spiHelper =
SpiHelper.create(LoggerProviderFactoryTest.class.getClassLoader()); SpiHelper.create(LoggerProviderFactoryTest.class.getClassLoader());
@Test @ParameterizedTest
void create_Null() { @MethodSource("createArguments")
void create(LoggerProviderAndAttributeLimits model, SdkLoggerProvider expectedProvider) {
List<Closeable> closeables = new ArrayList<>(); List<Closeable> closeables = new ArrayList<>();
SdkLoggerProvider expectedProvider = SdkLoggerProvider.builder().build();
cleanup.addCloseable(expectedProvider); cleanup.addCloseable(expectedProvider);
SdkLoggerProvider provider = SdkLoggerProvider provider =
LoggerProviderFactory.getInstance().create(null, spiHelper, closeables).build(); LoggerProviderFactory.getInstance().create(model, spiHelper, closeables).build();
cleanup.addCloseable(provider); cleanup.addCloseable(provider);
cleanup.addCloseables(closeables); cleanup.addCloseables(closeables);
assertThat(provider.toString()).isEqualTo(expectedProvider.toString()); assertThat(provider.toString()).isEqualTo(expectedProvider.toString());
} }
@Test private static Stream<Arguments> createArguments() {
void create_Defaults() { return Stream.of(
List<Closeable> closeables = new ArrayList<>(); Arguments.of(null, SdkLoggerProvider.builder().build()),
SdkLoggerProvider expectedProvider = SdkLoggerProvider.builder().build(); Arguments.of(
cleanup.addCloseable(expectedProvider); LoggerProviderAndAttributeLimits.create(null, null),
SdkLoggerProvider.builder().build()),
SdkLoggerProvider provider = Arguments.of(
LoggerProviderFactory.getInstance() LoggerProviderAndAttributeLimits.create(new AttributeLimits(), new LoggerProvider()),
.create(new LoggerProvider(), spiHelper, closeables) SdkLoggerProvider.builder().build()),
.build(); Arguments.of(
cleanup.addCloseable(provider); LoggerProviderAndAttributeLimits.create(
cleanup.addCloseables(closeables); new AttributeLimits(),
assertThat(provider.toString()).isEqualTo(expectedProvider.toString());
}
@Test
void create_Configured() {
List<Closeable> closeables = new ArrayList<>();
SdkLoggerProvider expectedProvider =
SdkLoggerProvider.builder()
.setLogLimits(
() ->
LogLimits.builder()
.setMaxNumberOfAttributes(1)
.setMaxAttributeValueLength(2)
.build())
.addLogRecordProcessor(
io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor.builder(
OtlpGrpcLogRecordExporter.getDefault())
.build())
.build();
cleanup.addCloseable(expectedProvider);
SdkLoggerProvider provider =
LoggerProviderFactory.getInstance()
.create(
new LoggerProvider() new LoggerProvider()
.withLimits( .withLimits(
new LogRecordLimits() new LogRecordLimits()
@ -94,13 +73,18 @@ class LoggerProviderFactoryTest {
.withBatch( .withBatch(
new BatchLogRecordProcessor() new BatchLogRecordProcessor()
.withExporter( .withExporter(
new LogRecordExporter().withOtlp(new Otlp()))))), new LogRecordExporter().withOtlp(new Otlp())))))),
spiHelper, SdkLoggerProvider.builder()
closeables) .setLogLimits(
.build(); () ->
cleanup.addCloseable(provider); LogLimits.builder()
cleanup.addCloseables(closeables); .setMaxNumberOfAttributes(1)
.setMaxAttributeValueLength(2)
assertThat(provider.toString()).isEqualTo(expectedProvider.toString()); .build())
.addLogRecordProcessor(
io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor.builder(
OtlpGrpcLogRecordExporter.getDefault())
.build())
.build()));
} }
} }

View File

@ -9,50 +9,61 @@ import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.asser
import static org.mockito.Mockito.mock; 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.AttributeLimits;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanLimits; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanLimits;
import java.util.Collections; import java.util.Collections;
import org.junit.jupiter.api.Test; import java.util.stream.Stream;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
class SpanLimitsFactoryTest { class SpanLimitsFactoryTest {
@Test @ParameterizedTest
void create_Null() { @MethodSource("createArguments")
void create(
SpanLimitsAndAttributeLimits model,
io.opentelemetry.sdk.trace.SpanLimits expectedSpanLimits) {
assertThat( assertThat(
SpanLimitsFactory.getInstance() SpanLimitsFactory.getInstance()
.create(null, mock(SpiHelper.class), Collections.emptyList())) .create(model, mock(SpiHelper.class), Collections.emptyList()))
.isEqualTo(io.opentelemetry.sdk.trace.SpanLimits.getDefault()); .isEqualTo(expectedSpanLimits);
} }
@Test private static Stream<Arguments> createArguments() {
void create_Defaults() { return Stream.of(
assertThat( Arguments.of(null, io.opentelemetry.sdk.trace.SpanLimits.getDefault()),
SpanLimitsFactory.getInstance() Arguments.of(
.create(new SpanLimits(), mock(SpiHelper.class), Collections.emptyList())) SpanLimitsAndAttributeLimits.create(null, null),
.isEqualTo(io.opentelemetry.sdk.trace.SpanLimits.getDefault()); io.opentelemetry.sdk.trace.SpanLimits.getDefault()),
} Arguments.of(
SpanLimitsAndAttributeLimits.create(new AttributeLimits(), new SpanLimits()),
@Test io.opentelemetry.sdk.trace.SpanLimits.getDefault()),
void create() { Arguments.of(
assertThat( SpanLimitsAndAttributeLimits.create(
SpanLimitsFactory.getInstance() new AttributeLimits().withAttributeCountLimit(1).withAttributeValueLengthLimit(2),
.create( new SpanLimits()),
new SpanLimits()
.withAttributeCountLimit(1)
.withAttributeValueLengthLimit(2)
.withEventCountLimit(3)
.withLinkCountLimit(4)
.withEventAttributeCountLimit(5)
.withLinkAttributeCountLimit(6),
mock(SpiHelper.class),
Collections.emptyList()))
.isEqualTo(
io.opentelemetry.sdk.trace.SpanLimits.builder() io.opentelemetry.sdk.trace.SpanLimits.builder()
.setMaxNumberOfAttributes(1) .setMaxNumberOfAttributes(1)
.setMaxAttributeValueLength(2) .setMaxAttributeValueLength(2)
.setMaxNumberOfEvents(3) .build()),
.setMaxNumberOfLinks(4) Arguments.of(
.setMaxNumberOfAttributesPerEvent(5) SpanLimitsAndAttributeLimits.create(
.setMaxNumberOfAttributesPerLink(6) new AttributeLimits().withAttributeCountLimit(1).withAttributeValueLengthLimit(2),
.build()); new SpanLimits()
.withAttributeCountLimit(3)
.withAttributeValueLengthLimit(4)
.withEventCountLimit(5)
.withLinkCountLimit(6)
.withEventAttributeCountLimit(7)
.withLinkAttributeCountLimit(8)),
io.opentelemetry.sdk.trace.SpanLimits.builder()
.setMaxNumberOfAttributes(3)
.setMaxAttributeValueLength(4)
.setMaxNumberOfEvents(5)
.setMaxNumberOfLinks(6)
.setMaxNumberOfAttributesPerEvent(7)
.setMaxNumberOfAttributesPerLink(8)
.build()));
} }
} }

View File

@ -12,6 +12,7 @@ import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter;
import io.opentelemetry.internal.testing.CleanupExtension; import io.opentelemetry.internal.testing.CleanupExtension;
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper; import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.AlwaysOn; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.AlwaysOn;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.AttributeLimits;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchSpanProcessor; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchSpanProcessor;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Otlp; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Otlp;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Sampler; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.Sampler;
@ -24,8 +25,11 @@ import java.io.Closeable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import org.junit.jupiter.api.Test; import java.util.stream.Stream;
import org.junit.jupiter.api.extension.RegisterExtension; import org.junit.jupiter.api.extension.RegisterExtension;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
class TracerProviderFactoryTest { class TracerProviderFactoryTest {
@ -34,61 +38,32 @@ class TracerProviderFactoryTest {
private final SpiHelper spiHelper = private final SpiHelper spiHelper =
SpiHelper.create(TracerProviderFactoryTest.class.getClassLoader()); SpiHelper.create(TracerProviderFactoryTest.class.getClassLoader());
@Test @ParameterizedTest
void create_Null() { @MethodSource("createArguments")
void create(TracerProviderAndAttributeLimits model, SdkTracerProvider expectedProvider) {
List<Closeable> closeables = new ArrayList<>(); List<Closeable> closeables = new ArrayList<>();
SdkTracerProvider expectedProvider = SdkTracerProvider.builder().build();
cleanup.addCloseable(expectedProvider); cleanup.addCloseable(expectedProvider);
SdkTracerProvider provider = SdkTracerProvider provider =
TracerProviderFactory.getInstance().create(null, spiHelper, closeables).build(); TracerProviderFactory.getInstance().create(model, spiHelper, closeables).build();
cleanup.addCloseable(provider); cleanup.addCloseable(provider);
cleanup.addCloseables(closeables); cleanup.addCloseables(closeables);
assertThat(provider.toString()).isEqualTo(expectedProvider.toString()); assertThat(provider.toString()).isEqualTo(expectedProvider.toString());
} }
@Test private static Stream<Arguments> createArguments() {
void create_Defaults() { return Stream.of(
List<Closeable> closeables = new ArrayList<>(); Arguments.of(null, SdkTracerProvider.builder().build()),
SdkTracerProvider expectedProvider = SdkTracerProvider.builder().build(); Arguments.of(
cleanup.addCloseable(expectedProvider); TracerProviderAndAttributeLimits.create(null, null),
SdkTracerProvider.builder().build()),
SdkTracerProvider provider = Arguments.of(
TracerProviderFactory.getInstance() TracerProviderAndAttributeLimits.create(new AttributeLimits(), new TracerProvider()),
.create(new TracerProvider(), spiHelper, closeables) SdkTracerProvider.builder().build()),
.build(); Arguments.of(
cleanup.addCloseable(provider); TracerProviderAndAttributeLimits.create(
cleanup.addCloseables(closeables); new AttributeLimits(),
assertThat(provider.toString()).isEqualTo(expectedProvider.toString());
}
@Test
void create_Configured() {
List<Closeable> closeables = new ArrayList<>();
SdkTracerProvider expectedProvider =
SdkTracerProvider.builder()
.setSpanLimits(
SpanLimits.builder()
.setMaxNumberOfAttributes(1)
.setMaxAttributeValueLength(2)
.setMaxNumberOfEvents(3)
.setMaxNumberOfLinks(4)
.setMaxNumberOfAttributesPerEvent(5)
.setMaxNumberOfAttributesPerLink(6)
.build())
.setSampler(alwaysOn())
.addSpanProcessor(
io.opentelemetry.sdk.trace.export.BatchSpanProcessor.builder(
OtlpGrpcSpanExporter.getDefault())
.build())
.build();
cleanup.addCloseable(expectedProvider);
SdkTracerProvider provider =
TracerProviderFactory.getInstance()
.create(
new TracerProvider() new TracerProvider()
.withLimits( .withLimits(
new io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model new io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model
@ -105,13 +80,22 @@ class TracerProviderFactoryTest {
new SpanProcessor() new SpanProcessor()
.withBatch( .withBatch(
new BatchSpanProcessor() new BatchSpanProcessor()
.withExporter(new SpanExporter().withOtlp(new Otlp()))))), .withExporter(new SpanExporter().withOtlp(new Otlp())))))),
spiHelper, SdkTracerProvider.builder()
closeables) .setSpanLimits(
.build(); SpanLimits.builder()
cleanup.addCloseable(provider); .setMaxNumberOfAttributes(1)
cleanup.addCloseables(closeables); .setMaxAttributeValueLength(2)
.setMaxNumberOfEvents(3)
assertThat(provider.toString()).isEqualTo(expectedProvider.toString()); .setMaxNumberOfLinks(4)
.setMaxNumberOfAttributesPerEvent(5)
.setMaxNumberOfAttributesPerLink(6)
.build())
.setSampler(alwaysOn())
.addSpanProcessor(
io.opentelemetry.sdk.trace.export.BatchSpanProcessor.builder(
OtlpGrpcSpanExporter.getDefault())
.build())
.build()));
} }
} }