Remove usage of updateTraceConfig in tests. (#2402)
* Remove usage of updateTraceConfig in tests. * Clean
This commit is contained in:
parent
bf3c50cd02
commit
9f675da85a
|
|
@ -36,12 +36,11 @@ public class SpanBenchmark {
|
|||
|
||||
@Setup(Level.Trial)
|
||||
public final void setup() {
|
||||
SdkTracerProvider tracerProvider =
|
||||
SdkTracerProvider.builder().setResource(serviceResource).build();
|
||||
|
||||
TraceConfig alwaysOn =
|
||||
tracerProvider.getActiveTraceConfig().toBuilder().setSampler(Sampler.alwaysOn()).build();
|
||||
tracerProvider.updateActiveTraceConfig(alwaysOn);
|
||||
TraceConfig.getDefault().toBuilder().setSampler(Sampler.alwaysOn()).build();
|
||||
SdkTracerProvider tracerProvider =
|
||||
SdkTracerProvider.builder().setResource(serviceResource).setTraceConfig(alwaysOn).build();
|
||||
|
||||
Tracer tracerSdk = tracerProvider.get("benchmarkTracer");
|
||||
sdkSpanBuilder =
|
||||
|
|
|
|||
|
|
@ -7,18 +7,16 @@ package io.opentelemetry.sdk.trace.config;
|
|||
|
||||
import com.google.auto.value.AutoValue;
|
||||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.sdk.trace.SdkTracerManagement;
|
||||
import io.opentelemetry.sdk.trace.samplers.Sampler;
|
||||
import javax.annotation.concurrent.Immutable;
|
||||
|
||||
/**
|
||||
* Class that holds global trace parameters.
|
||||
*
|
||||
* <p>Note: To update the TraceConfig associated with a {@link SdkTracerManagement}, you should use
|
||||
* the {@link #toBuilder()} method on the TraceConfig currently assigned to the provider, make the
|
||||
* changes desired to the {@link TraceConfigBuilder} instance, then use the {@link
|
||||
* SdkTracerManagement#updateActiveTraceConfig(TraceConfig)} with the resulting TraceConfig
|
||||
* instance.
|
||||
* <p>Note: To allow dynamic updates of {@link TraceConfig} you should register a {@link
|
||||
* java.util.function.Supplier} with {@link
|
||||
* io.opentelemetry.sdk.trace.SdkTracerProviderBuilder#setTraceConfig(java.util.function.Supplier)}
|
||||
* which supplies dynamic configs when queried.
|
||||
*
|
||||
* <p>Configuration options for {@link TraceConfig} can be read from system properties, environment
|
||||
* variables, or {@link java.util.Properties} objects.
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import io.opentelemetry.api.trace.StatusCode;
|
|||
import io.opentelemetry.api.trace.TraceFlags;
|
||||
import io.opentelemetry.api.trace.TraceId;
|
||||
import io.opentelemetry.api.trace.TraceState;
|
||||
import io.opentelemetry.api.trace.TracerProvider;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.sdk.trace.config.TraceConfig;
|
||||
|
|
@ -37,7 +38,6 @@ import io.opentelemetry.sdk.trace.samplers.Sampler;
|
|||
import io.opentelemetry.sdk.trace.samplers.SamplingResult;
|
||||
import java.time.Instant;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import javax.annotation.Nullable;
|
||||
|
|
@ -58,12 +58,12 @@ class SdkSpanBuilderTest {
|
|||
TraceState.getDefault());
|
||||
private final SpanProcessor mockedSpanProcessor = Mockito.mock(SpanProcessor.class);
|
||||
|
||||
private SdkTracerProvider tracerSdkFactory;
|
||||
private SdkTracer sdkTracer;
|
||||
|
||||
@BeforeEach
|
||||
public void setUp() {
|
||||
tracerSdkFactory = SdkTracerProvider.builder().addSpanProcessor(mockedSpanProcessor).build();
|
||||
SdkTracerProvider tracerSdkFactory =
|
||||
SdkTracerProvider.builder().addSpanProcessor(mockedSpanProcessor).build();
|
||||
sdkTracer = (SdkTracer) tracerSdkFactory.get("SpanBuilderSdkTest");
|
||||
|
||||
Mockito.when(mockedSpanProcessor.isStartRequired()).thenReturn(true);
|
||||
|
|
@ -101,12 +101,10 @@ class SdkSpanBuilderTest {
|
|||
void truncateLink() {
|
||||
final int maxNumberOfLinks = 8;
|
||||
TraceConfig traceConfig =
|
||||
tracerSdkFactory.getActiveTraceConfig().toBuilder()
|
||||
.setMaxNumberOfLinks(maxNumberOfLinks)
|
||||
.build();
|
||||
tracerSdkFactory.updateActiveTraceConfig(traceConfig);
|
||||
TraceConfig.getDefault().toBuilder().setMaxNumberOfLinks(maxNumberOfLinks).build();
|
||||
TracerProvider tracerProvider = SdkTracerProvider.builder().setTraceConfig(traceConfig).build();
|
||||
// Verify methods do not crash.
|
||||
SpanBuilder spanBuilder = sdkTracer.spanBuilder(SPAN_NAME);
|
||||
SpanBuilder spanBuilder = tracerProvider.get("test").spanBuilder(SPAN_NAME);
|
||||
for (int i = 0; i < 2 * maxNumberOfLinks; i++) {
|
||||
spanBuilder.addLink(sampledSpanContext);
|
||||
}
|
||||
|
|
@ -121,18 +119,16 @@ class SdkSpanBuilderTest {
|
|||
}
|
||||
} finally {
|
||||
span.end();
|
||||
tracerSdkFactory.updateActiveTraceConfig(TraceConfig.getDefault());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void truncateLinkAttributes() {
|
||||
TraceConfig traceConfig =
|
||||
tracerSdkFactory.getActiveTraceConfig().toBuilder()
|
||||
.setMaxNumberOfAttributesPerLink(1)
|
||||
.build();
|
||||
tracerSdkFactory.updateActiveTraceConfig(traceConfig);
|
||||
SpanBuilder spanBuilder = sdkTracer.spanBuilder(SPAN_NAME);
|
||||
TraceConfig.getDefault().toBuilder().setMaxNumberOfAttributesPerLink(1).build();
|
||||
TracerProvider tracerProvider = SdkTracerProvider.builder().setTraceConfig(traceConfig).build();
|
||||
// Verify methods do not crash.
|
||||
SpanBuilder spanBuilder = tracerProvider.get("test").spanBuilder(SPAN_NAME);
|
||||
Attributes attributes =
|
||||
Attributes.of(
|
||||
stringKey("key0"), "str",
|
||||
|
|
@ -146,7 +142,6 @@ class SdkSpanBuilderTest {
|
|||
Link.create(sampledSpanContext, Attributes.of(stringKey("key0"), "str"), 3));
|
||||
} finally {
|
||||
span.end();
|
||||
tracerSdkFactory.updateActiveTraceConfig(TraceConfig.getDefault());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -356,11 +351,10 @@ class SdkSpanBuilderTest {
|
|||
void droppingAttributes() {
|
||||
final int maxNumberOfAttrs = 8;
|
||||
TraceConfig traceConfig =
|
||||
tracerSdkFactory.getActiveTraceConfig().toBuilder()
|
||||
.setMaxNumberOfAttributes(maxNumberOfAttrs)
|
||||
.build();
|
||||
tracerSdkFactory.updateActiveTraceConfig(traceConfig);
|
||||
SpanBuilder spanBuilder = sdkTracer.spanBuilder(SPAN_NAME);
|
||||
TraceConfig.getDefault().toBuilder().setMaxNumberOfAttributes(maxNumberOfAttrs).build();
|
||||
TracerProvider tracerProvider = SdkTracerProvider.builder().setTraceConfig(traceConfig).build();
|
||||
// Verify methods do not crash.
|
||||
SpanBuilder spanBuilder = tracerProvider.get("test").spanBuilder(SPAN_NAME);
|
||||
for (int i = 0; i < 2 * maxNumberOfAttrs; i++) {
|
||||
spanBuilder.setAttribute("key" + i, i);
|
||||
}
|
||||
|
|
@ -373,18 +367,16 @@ class SdkSpanBuilderTest {
|
|||
}
|
||||
} finally {
|
||||
span.end();
|
||||
tracerSdkFactory.updateActiveTraceConfig(TraceConfig.getDefault());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void tooLargeAttributeValuesAreTruncated() {
|
||||
TraceConfig traceConfig =
|
||||
tracerSdkFactory.getActiveTraceConfig().toBuilder()
|
||||
.setMaxLengthOfAttributeValues(10)
|
||||
.build();
|
||||
tracerSdkFactory.updateActiveTraceConfig(traceConfig);
|
||||
SpanBuilder spanBuilder = sdkTracer.spanBuilder(SPAN_NAME);
|
||||
TraceConfig.getDefault().toBuilder().setMaxLengthOfAttributeValues(10).build();
|
||||
TracerProvider tracerProvider = SdkTracerProvider.builder().setTraceConfig(traceConfig).build();
|
||||
// Verify methods do not crash.
|
||||
SpanBuilder spanBuilder = tracerProvider.get("test").spanBuilder(SPAN_NAME);
|
||||
spanBuilder.setAttribute("builderStringNull", null);
|
||||
spanBuilder.setAttribute("builderStringSmall", "small");
|
||||
spanBuilder.setAttribute("builderStringLarge", "very large string that we have to cut");
|
||||
|
|
@ -422,18 +414,16 @@ class SdkSpanBuilderTest {
|
|||
.isEqualTo(Arrays.asList("small", null, "very large"));
|
||||
} finally {
|
||||
span.end();
|
||||
tracerSdkFactory.updateActiveTraceConfig(TraceConfig.getDefault());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void addAttributes_OnlyViaSampler() {
|
||||
TraceConfig traceConfig =
|
||||
tracerSdkFactory.getActiveTraceConfig().toBuilder()
|
||||
.setSampler(Sampler.traceIdRatioBased(1))
|
||||
.build();
|
||||
tracerSdkFactory.updateActiveTraceConfig(traceConfig);
|
||||
SpanBuilder spanBuilder = sdkTracer.spanBuilder(SPAN_NAME);
|
||||
TraceConfig.getDefault().toBuilder().setSampler(Sampler.traceIdRatioBased(1)).build();
|
||||
TracerProvider tracerProvider = SdkTracerProvider.builder().setTraceConfig(traceConfig).build();
|
||||
// Verify methods do not crash.
|
||||
SpanBuilder spanBuilder = tracerProvider.get("test").spanBuilder(SPAN_NAME);
|
||||
RecordEventsReadableSpan span = (RecordEventsReadableSpan) spanBuilder.startSpan();
|
||||
try {
|
||||
assertThat(span.toSpanData().getAttributes().size()).isEqualTo(1);
|
||||
|
|
@ -443,7 +433,6 @@ class SdkSpanBuilderTest {
|
|||
.isEqualTo(1);
|
||||
} finally {
|
||||
span.end();
|
||||
tracerSdkFactory.updateActiveTraceConfig(TraceConfig.getDefault());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -483,7 +472,12 @@ class SdkSpanBuilderTest {
|
|||
@Test
|
||||
void sampler() {
|
||||
Span span =
|
||||
TestUtils.startSpanWithSampler(tracerSdkFactory, sdkTracer, SPAN_NAME, Sampler.alwaysOff())
|
||||
SdkTracerProvider.builder()
|
||||
.setTraceConfig(
|
||||
TraceConfig.getDefault().toBuilder().setSampler(Sampler.alwaysOff()).build())
|
||||
.build()
|
||||
.get("test")
|
||||
.spanBuilder(SPAN_NAME)
|
||||
.startSpan();
|
||||
try {
|
||||
assertThat(span.getSpanContext().isSampled()).isFalse();
|
||||
|
|
@ -498,38 +492,43 @@ class SdkSpanBuilderTest {
|
|||
AttributeKey<String> samplerAttributeKey = stringKey(samplerAttributeName);
|
||||
RecordEventsReadableSpan span =
|
||||
(RecordEventsReadableSpan)
|
||||
TestUtils.startSpanWithSampler(
|
||||
tracerSdkFactory,
|
||||
sdkTracer,
|
||||
SPAN_NAME,
|
||||
new Sampler() {
|
||||
@Override
|
||||
public SamplingResult shouldSample(
|
||||
@Nullable Context parentContext,
|
||||
String traceId,
|
||||
String name,
|
||||
Kind spanKind,
|
||||
Attributes attributes,
|
||||
List<Link> parentLinks) {
|
||||
return new SamplingResult() {
|
||||
@Override
|
||||
public Decision getDecision() {
|
||||
return Decision.RECORD_AND_SAMPLE;
|
||||
}
|
||||
SdkTracerProvider.builder()
|
||||
.setTraceConfig(
|
||||
TraceConfig.getDefault().toBuilder()
|
||||
.setSampler(
|
||||
new Sampler() {
|
||||
@Override
|
||||
public SamplingResult shouldSample(
|
||||
@Nullable Context parentContext,
|
||||
String traceId,
|
||||
String name,
|
||||
Kind spanKind,
|
||||
Attributes attributes,
|
||||
List<Link> parentLinks) {
|
||||
return new SamplingResult() {
|
||||
@Override
|
||||
public Decision getDecision() {
|
||||
return Decision.RECORD_AND_SAMPLE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Attributes getAttributes() {
|
||||
return Attributes.of(samplerAttributeKey, "bar");
|
||||
}
|
||||
};
|
||||
}
|
||||
@Override
|
||||
public Attributes getAttributes() {
|
||||
return Attributes.of(samplerAttributeKey, "bar");
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "test sampler";
|
||||
}
|
||||
},
|
||||
Collections.singletonMap(samplerAttributeKey.getKey(), "none"))
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "test sampler";
|
||||
}
|
||||
})
|
||||
.build())
|
||||
.addSpanProcessor(mockedSpanProcessor)
|
||||
.build()
|
||||
.get("test")
|
||||
.spanBuilder(SPAN_NAME)
|
||||
.setAttribute(samplerAttributeKey, "none")
|
||||
.startSpan();
|
||||
try {
|
||||
assertThat(span.getSpanContext().isSampled()).isTrue();
|
||||
|
|
@ -546,43 +545,50 @@ class SdkSpanBuilderTest {
|
|||
AttributeKey<String> samplerAttributeKey = stringKey(samplerAttributeName);
|
||||
RecordEventsReadableSpan span =
|
||||
(RecordEventsReadableSpan)
|
||||
TestUtils.startSpanWithSampler(
|
||||
tracerSdkFactory,
|
||||
sdkTracer,
|
||||
SPAN_NAME,
|
||||
new Sampler() {
|
||||
@Override
|
||||
public SamplingResult shouldSample(
|
||||
Context parentContext,
|
||||
String traceId,
|
||||
String name,
|
||||
Kind spanKind,
|
||||
Attributes attributes,
|
||||
List<Link> parentLinks) {
|
||||
return new SamplingResult() {
|
||||
@Override
|
||||
public Decision getDecision() {
|
||||
return Decision.RECORD_AND_SAMPLE;
|
||||
}
|
||||
SdkTracerProvider.builder()
|
||||
.setTraceConfig(
|
||||
TraceConfig.getDefault().toBuilder()
|
||||
.setSampler(
|
||||
new Sampler() {
|
||||
@Override
|
||||
public SamplingResult shouldSample(
|
||||
Context parentContext,
|
||||
String traceId,
|
||||
String name,
|
||||
Kind spanKind,
|
||||
Attributes attributes,
|
||||
List<Link> parentLinks) {
|
||||
return new SamplingResult() {
|
||||
@Override
|
||||
public Decision getDecision() {
|
||||
return Decision.RECORD_AND_SAMPLE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Attributes getAttributes() {
|
||||
return Attributes.empty();
|
||||
}
|
||||
@Override
|
||||
public Attributes getAttributes() {
|
||||
return Attributes.empty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TraceState getUpdatedTraceState(TraceState parentTraceState) {
|
||||
return parentTraceState.toBuilder().set("newkey", "newValue").build();
|
||||
}
|
||||
};
|
||||
}
|
||||
@Override
|
||||
public TraceState getUpdatedTraceState(
|
||||
TraceState parentTraceState) {
|
||||
return parentTraceState.toBuilder()
|
||||
.set("newkey", "newValue")
|
||||
.build();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "test sampler";
|
||||
}
|
||||
},
|
||||
Collections.singletonMap(samplerAttributeKey.getKey(), "none"))
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "test sampler";
|
||||
}
|
||||
})
|
||||
.build())
|
||||
.build()
|
||||
.get("test")
|
||||
.spanBuilder(SPAN_NAME)
|
||||
.setAttribute(samplerAttributeKey, "none")
|
||||
.startSpan();
|
||||
try {
|
||||
assertThat(span.getSpanContext().isSampled()).isTrue();
|
||||
|
|
@ -594,12 +600,16 @@ class SdkSpanBuilderTest {
|
|||
}
|
||||
}
|
||||
|
||||
// TODO(anuraaga): Is this test correct? It's not sampled
|
||||
@Test
|
||||
void sampledViaParentLinks() {
|
||||
Span span =
|
||||
TestUtils.startSpanWithSampler(
|
||||
tracerSdkFactory, sdkTracer, SPAN_NAME, Sampler.traceIdRatioBased(0.0))
|
||||
.addLink(sampledSpanContext)
|
||||
SdkTracerProvider.builder()
|
||||
.setTraceConfig(
|
||||
TraceConfig.getDefault().toBuilder().setSampler(Sampler.alwaysOff()).build())
|
||||
.build()
|
||||
.get("test")
|
||||
.spanBuilder(SPAN_NAME)
|
||||
.startSpan();
|
||||
try {
|
||||
assertThat(span.getSpanContext().isSampled()).isFalse();
|
||||
|
|
|
|||
|
|
@ -9,17 +9,11 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey;
|
|||
|
||||
import io.opentelemetry.api.common.Attributes;
|
||||
import io.opentelemetry.api.trace.Span.Kind;
|
||||
import io.opentelemetry.api.trace.SpanBuilder;
|
||||
import io.opentelemetry.api.trace.SpanId;
|
||||
import io.opentelemetry.api.trace.TraceId;
|
||||
import io.opentelemetry.api.trace.Tracer;
|
||||
import io.opentelemetry.sdk.testing.trace.TestSpanData;
|
||||
import io.opentelemetry.sdk.trace.config.TraceConfig;
|
||||
import io.opentelemetry.sdk.trace.data.SpanData;
|
||||
import io.opentelemetry.sdk.trace.data.SpanData.Status;
|
||||
import io.opentelemetry.sdk.trace.samplers.Sampler;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
|
|
@ -57,41 +51,4 @@ public final class TestUtils {
|
|||
.setTotalRecordedEvents(0)
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a very basic SpanData instance, suitable for testing. It has the bare minimum viable
|
||||
* data.
|
||||
*
|
||||
* @return A SpanData instance.
|
||||
*/
|
||||
public static SpanBuilder startSpanWithSampler(
|
||||
SdkTracerManagement sdkTracerManagement, Tracer tracer, String spanName, Sampler sampler) {
|
||||
return startSpanWithSampler(
|
||||
sdkTracerManagement, tracer, spanName, sampler, Collections.emptyMap());
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a very basic SpanData instance, suitable for testing. It has the bare minimum viable
|
||||
* data.
|
||||
*
|
||||
* @return A SpanData instance.
|
||||
*/
|
||||
public static SpanBuilder startSpanWithSampler(
|
||||
SdkTracerManagement sdkTracerManagement,
|
||||
Tracer tracer,
|
||||
String spanName,
|
||||
Sampler sampler,
|
||||
Map<String, String> attributes) {
|
||||
TraceConfig originalConfig = sdkTracerManagement.getActiveTraceConfig();
|
||||
sdkTracerManagement.updateActiveTraceConfig(
|
||||
originalConfig.toBuilder().setSampler(sampler).build());
|
||||
try {
|
||||
SpanBuilder builder = tracer.spanBuilder(spanName);
|
||||
attributes.forEach(builder::setAttribute);
|
||||
|
||||
return builder;
|
||||
} finally {
|
||||
sdkTracerManagement.updateActiveTraceConfig(originalConfig);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ import io.opentelemetry.api.trace.Tracer;
|
|||
import io.opentelemetry.sdk.common.CompletableResultCode;
|
||||
import io.opentelemetry.sdk.trace.ReadableSpan;
|
||||
import io.opentelemetry.sdk.trace.SdkTracerProvider;
|
||||
import io.opentelemetry.sdk.trace.TestUtils;
|
||||
import io.opentelemetry.sdk.trace.config.TraceConfig;
|
||||
import io.opentelemetry.sdk.trace.data.SpanData;
|
||||
import io.opentelemetry.sdk.trace.samplers.Sampler;
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -26,6 +26,7 @@ import java.util.Properties;
|
|||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.annotation.concurrent.GuardedBy;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
|
|
@ -63,22 +64,13 @@ class BatchSpanProcessorTest {
|
|||
}
|
||||
*/
|
||||
|
||||
private ReadableSpan createSampledEndedSpan(String spanName) {
|
||||
private ReadableSpan createEndedSpan(String spanName) {
|
||||
Tracer tracer = sdkTracerProvider.get(getClass().getName());
|
||||
Span span =
|
||||
TestUtils.startSpanWithSampler(sdkTracerProvider, tracer, spanName, Sampler.alwaysOn())
|
||||
.startSpan();
|
||||
Span span = tracer.spanBuilder(spanName).startSpan();
|
||||
span.end();
|
||||
return (ReadableSpan) span;
|
||||
}
|
||||
|
||||
private void createNotSampledEndedSpan(String spanName) {
|
||||
Tracer tracer = sdkTracerProvider.get(getClass().getName());
|
||||
TestUtils.startSpanWithSampler(sdkTracerProvider, tracer, spanName, Sampler.alwaysOff())
|
||||
.startSpan()
|
||||
.end();
|
||||
}
|
||||
|
||||
@Test
|
||||
void configTest() {
|
||||
Properties options = new Properties();
|
||||
|
|
@ -135,8 +127,8 @@ class BatchSpanProcessorTest {
|
|||
.build())
|
||||
.build();
|
||||
|
||||
ReadableSpan span1 = createSampledEndedSpan(SPAN_NAME_1);
|
||||
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_2);
|
||||
ReadableSpan span1 = createEndedSpan(SPAN_NAME_1);
|
||||
ReadableSpan span2 = createEndedSpan(SPAN_NAME_2);
|
||||
List<SpanData> exported = waitingSpanExporter.waitForExport();
|
||||
assertThat(exported).containsExactly(span1.toSpanData(), span2.toSpanData());
|
||||
}
|
||||
|
|
@ -155,12 +147,12 @@ class BatchSpanProcessorTest {
|
|||
.build())
|
||||
.build();
|
||||
|
||||
ReadableSpan span1 = createSampledEndedSpan(SPAN_NAME_1);
|
||||
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_1);
|
||||
ReadableSpan span3 = createSampledEndedSpan(SPAN_NAME_1);
|
||||
ReadableSpan span4 = createSampledEndedSpan(SPAN_NAME_1);
|
||||
ReadableSpan span5 = createSampledEndedSpan(SPAN_NAME_1);
|
||||
ReadableSpan span6 = createSampledEndedSpan(SPAN_NAME_1);
|
||||
ReadableSpan span1 = createEndedSpan(SPAN_NAME_1);
|
||||
ReadableSpan span2 = createEndedSpan(SPAN_NAME_1);
|
||||
ReadableSpan span3 = createEndedSpan(SPAN_NAME_1);
|
||||
ReadableSpan span4 = createEndedSpan(SPAN_NAME_1);
|
||||
ReadableSpan span5 = createEndedSpan(SPAN_NAME_1);
|
||||
ReadableSpan span6 = createEndedSpan(SPAN_NAME_1);
|
||||
|
||||
spanExporter.succeed();
|
||||
|
||||
|
|
@ -192,7 +184,7 @@ class BatchSpanProcessorTest {
|
|||
|
||||
sdkTracerProvider = SdkTracerProvider.builder().addSpanProcessor(batchSpanProcessor).build();
|
||||
for (int i = 0; i < 100; i++) {
|
||||
createSampledEndedSpan("notExported");
|
||||
createEndedSpan("notExported");
|
||||
}
|
||||
List<SpanData> exported = waitingSpanExporter.waitForExport();
|
||||
assertThat(exported).isNotNull();
|
||||
|
|
@ -220,8 +212,8 @@ class BatchSpanProcessorTest {
|
|||
.build())
|
||||
.build();
|
||||
|
||||
ReadableSpan span1 = createSampledEndedSpan(SPAN_NAME_1);
|
||||
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_2);
|
||||
ReadableSpan span1 = createEndedSpan(SPAN_NAME_1);
|
||||
ReadableSpan span2 = createEndedSpan(SPAN_NAME_2);
|
||||
List<SpanData> exported1 = waitingSpanExporter.waitForExport();
|
||||
List<SpanData> exported2 = waitingSpanExporter2.waitForExport();
|
||||
assertThat(exported1).containsExactly(span1.toSpanData(), span2.toSpanData());
|
||||
|
|
@ -249,19 +241,19 @@ class BatchSpanProcessorTest {
|
|||
// Wait to block the worker thread in the BatchSampledSpansProcessor. This ensures that no items
|
||||
// can be removed from the queue. Need to add a span to trigger the export otherwise the
|
||||
// pipeline is never called.
|
||||
spansToExport.add(createSampledEndedSpan("blocking_span").toSpanData());
|
||||
spansToExport.add(createEndedSpan("blocking_span").toSpanData());
|
||||
blockingSpanExporter.waitUntilIsBlocked();
|
||||
|
||||
for (int i = 0; i < maxQueuedSpans; i++) {
|
||||
// First export maxQueuedSpans, the worker thread is blocked so all items should be queued.
|
||||
spansToExport.add(createSampledEndedSpan("span_1_" + i).toSpanData());
|
||||
spansToExport.add(createEndedSpan("span_1_" + i).toSpanData());
|
||||
}
|
||||
|
||||
// TODO: assertThat(spanExporter.getReferencedSpans()).isEqualTo(maxQueuedSpans);
|
||||
|
||||
// Now we should start dropping.
|
||||
for (int i = 0; i < 7; i++) {
|
||||
createSampledEndedSpan("span_2_" + i);
|
||||
createEndedSpan("span_2_" + i);
|
||||
// TODO: assertThat(getDroppedSpans()).isEqualTo(i + 1);
|
||||
}
|
||||
|
||||
|
|
@ -284,7 +276,7 @@ class BatchSpanProcessorTest {
|
|||
// TODO: assertThat(getPushedSpans()).isAtLeast((long) maxQueuedSpans - maxBatchSize);
|
||||
|
||||
for (int i = 0; i < maxQueuedSpans; i++) {
|
||||
spansToExport.add(createSampledEndedSpan("span_3_" + i).toSpanData());
|
||||
spansToExport.add(createEndedSpan("span_3_" + i).toSpanData());
|
||||
// No more dropped spans.
|
||||
// TODO: assertThat(getDroppedSpans()).isEqualTo(7);
|
||||
}
|
||||
|
|
@ -310,12 +302,12 @@ class BatchSpanProcessorTest {
|
|||
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
|
||||
.build())
|
||||
.build();
|
||||
ReadableSpan span1 = createSampledEndedSpan(SPAN_NAME_1);
|
||||
ReadableSpan span1 = createEndedSpan(SPAN_NAME_1);
|
||||
List<SpanData> exported = waitingSpanExporter.waitForExport();
|
||||
assertThat(exported).containsExactly(span1.toSpanData());
|
||||
waitingSpanExporter.reset();
|
||||
// Continue to export after the exception was received.
|
||||
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_2);
|
||||
ReadableSpan span2 = createEndedSpan(SPAN_NAME_2);
|
||||
exported = waitingSpanExporter.waitForExport();
|
||||
assertThat(exported).containsExactly(span2.toSpanData());
|
||||
}
|
||||
|
|
@ -361,7 +353,7 @@ class BatchSpanProcessorTest {
|
|||
.build())
|
||||
.build();
|
||||
|
||||
ReadableSpan span = createSampledEndedSpan(SPAN_NAME_1);
|
||||
ReadableSpan span = createEndedSpan(SPAN_NAME_1);
|
||||
List<SpanData> exported = waitingSpanExporter.waitForExport();
|
||||
assertThat(exported).containsExactly(span.toSpanData());
|
||||
|
||||
|
|
@ -374,17 +366,22 @@ class BatchSpanProcessorTest {
|
|||
void exportNotSampledSpans() {
|
||||
WaitingSpanExporter waitingSpanExporter =
|
||||
new WaitingSpanExporter(1, CompletableResultCode.ofSuccess());
|
||||
AtomicReference<TraceConfig> traceConfig =
|
||||
new AtomicReference<>(
|
||||
TraceConfig.getDefault().toBuilder().setSampler(Sampler.alwaysOff()).build());
|
||||
sdkTracerProvider =
|
||||
SdkTracerProvider.builder()
|
||||
.addSpanProcessor(
|
||||
BatchSpanProcessor.builder(waitingSpanExporter)
|
||||
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
|
||||
.build())
|
||||
.setTraceConfig(traceConfig::get)
|
||||
.build();
|
||||
|
||||
createNotSampledEndedSpan(SPAN_NAME_1);
|
||||
createNotSampledEndedSpan(SPAN_NAME_2);
|
||||
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_2);
|
||||
sdkTracerProvider.get("test").spanBuilder(SPAN_NAME_1).startSpan().end();
|
||||
sdkTracerProvider.get("test").spanBuilder(SPAN_NAME_2).startSpan().end();
|
||||
traceConfig.set(traceConfig.get().toBuilder().setSampler(Sampler.alwaysOn()).build());
|
||||
ReadableSpan span2 = createEndedSpan(SPAN_NAME_2);
|
||||
// Spans are recorded and exported in the same order as they are ended, we test that a non
|
||||
// sampled span is not exported by creating and ending a sampled span after a non sampled span
|
||||
// and checking that the first exported span is the sampled span (the non sampled did not get
|
||||
|
|
@ -443,7 +440,7 @@ class BatchSpanProcessorTest {
|
|||
.build())
|
||||
.build();
|
||||
|
||||
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_2);
|
||||
ReadableSpan span2 = createEndedSpan(SPAN_NAME_2);
|
||||
|
||||
// Force a shutdown, which forces processing of all remaining spans.
|
||||
sdkTracerProvider.shutdown();
|
||||
|
|
|
|||
|
|
@ -26,12 +26,14 @@ import io.opentelemetry.sdk.trace.ReadableSpan;
|
|||
import io.opentelemetry.sdk.trace.SdkTracerProvider;
|
||||
import io.opentelemetry.sdk.trace.SpanProcessor;
|
||||
import io.opentelemetry.sdk.trace.TestUtils;
|
||||
import io.opentelemetry.sdk.trace.config.TraceConfig;
|
||||
import io.opentelemetry.sdk.trace.data.SpanData;
|
||||
import io.opentelemetry.sdk.trace.export.BatchSpanProcessorTest.WaitingSpanExporter;
|
||||
import io.opentelemetry.sdk.trace.samplers.Sampler;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
|
@ -138,23 +140,24 @@ class SimpleSpanProcessorTest {
|
|||
void tracerSdk_NotSampled_Span() {
|
||||
WaitingSpanExporter waitingSpanExporter =
|
||||
new WaitingSpanExporter(1, CompletableResultCode.ofSuccess());
|
||||
AtomicReference<TraceConfig> traceConfig =
|
||||
new AtomicReference<>(
|
||||
TraceConfig.getDefault().toBuilder().setSampler(Sampler.alwaysOff()).build());
|
||||
SdkTracerProvider sdkTracerProvider =
|
||||
SdkTracerProvider.builder()
|
||||
.addSpanProcessor(
|
||||
BatchSpanProcessor.builder(waitingSpanExporter)
|
||||
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
|
||||
.build())
|
||||
.setTraceConfig(traceConfig::get)
|
||||
.build();
|
||||
|
||||
try {
|
||||
Tracer tracer = sdkTracerProvider.get(getClass().getName());
|
||||
TestUtils.startSpanWithSampler(sdkTracerProvider, tracer, SPAN_NAME, Sampler.alwaysOff())
|
||||
.startSpan()
|
||||
.end();
|
||||
TestUtils.startSpanWithSampler(sdkTracerProvider, tracer, SPAN_NAME, Sampler.alwaysOff())
|
||||
.startSpan()
|
||||
.end();
|
||||
tracer.spanBuilder(SPAN_NAME).startSpan();
|
||||
tracer.spanBuilder(SPAN_NAME).startSpan();
|
||||
|
||||
traceConfig.set(traceConfig.get().toBuilder().setSampler(Sampler.alwaysOn()).build());
|
||||
Span span = tracer.spanBuilder(SPAN_NAME).startSpan();
|
||||
span.end();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue