Avoid using mutable addSpanProcessor when trivial to change (#2365)

* Run go mod tidy on the master

* Fixes

Co-authored-by: Anuraag Agrawal <aanuraag@amazon.co.jp>
This commit is contained in:
Bogdan Drutu 2020-12-20 19:22:36 -08:00 committed by GitHub
parent 8dfdce3fe9
commit 95163d71fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 148 additions and 117 deletions

View File

@ -25,6 +25,7 @@ import io.opentelemetry.sdk.metrics.data.MetricData.Point;
import io.opentelemetry.sdk.metrics.export.IntervalMetricReader;
import io.opentelemetry.sdk.metrics.export.MetricExporter;
import io.opentelemetry.sdk.testing.exporter.InMemoryMetricExporter;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
import java.io.IOException;
import java.util.Collections;
@ -267,6 +268,10 @@ public class OtlpPipelineStressTest {
// .setMaxExportBatchSize(1024)
// .setScheduleDelayMillis(1000)
.build();
OpenTelemetrySdk.getGlobalTracerManagement().addSpanProcessor(spanProcessor);
GlobalOpenTelemetry.set(
OpenTelemetrySdk.builder()
.setTracerProvider(SdkTracerProvider.builder().addSpanProcessor(spanProcessor).build())
.build());
}
}

View File

@ -13,6 +13,7 @@ import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.context.ContextStorage;
import io.opentelemetry.context.Scope;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
@ -29,7 +30,11 @@ class JfrSpanProcessorTest {
static {
ContextStorage.addWrapper(JfrContextStorageWrapper::new);
OpenTelemetrySdk.getGlobalTracerManagement().addSpanProcessor(new JfrSpanProcessor());
GlobalOpenTelemetry.set(
OpenTelemetrySdk.builder()
.setTracerProvider(
SdkTracerProvider.builder().addSpanProcessor(new JfrSpanProcessor()).build())
.build());
}
/** Simple test to validate JFR events for Span and Scope. */

View File

@ -17,7 +17,6 @@ import io.opentelemetry.sdk.trace.data.SpanData;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link TracezDataAggregator}. */
@ -25,17 +24,12 @@ public final class TracezDataAggregatorTest {
private static final String SPAN_NAME_ONE = "one";
private static final String SPAN_NAME_TWO = "two";
private final TestClock testClock = TestClock.create();
private final SdkTracerProvider sdkTracerProvider =
SdkTracerProvider.builder().setClock(testClock).build();
private final Tracer tracer = sdkTracerProvider.get("TracezDataAggregatorTest");
private final TracezSpanProcessor spanProcessor = TracezSpanProcessor.builder().build();
private final SdkTracerProvider sdkTracerProvider =
SdkTracerProvider.builder().setClock(testClock).addSpanProcessor(spanProcessor).build();
private final Tracer tracer = sdkTracerProvider.get("TracezDataAggregatorTest");
private final TracezDataAggregator dataAggregator = new TracezDataAggregator(spanProcessor);
@BeforeEach
void setup() {
sdkTracerProvider.addSpanProcessor(spanProcessor);
}
@Test
void getSpanNames_noSpans() {
assertThat(dataAggregator.getSpanNames()).isEmpty();

View File

@ -21,7 +21,6 @@ import java.net.URI;
import java.net.URISyntaxException;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
@ -38,18 +37,13 @@ class TracezZPageHandlerTest {
private static final String LATENCY_SPAN = "LatencySpan";
private static final String ERROR_SPAN = "ErrorSpan";
private final TestClock testClock = TestClock.create();
private final SdkTracerProvider sdkTracerProvider =
SdkTracerProvider.builder().setClock(testClock).build();
private final Tracer tracer = sdkTracerProvider.get("TracezZPageHandlerTest");
private final TracezSpanProcessor spanProcessor = TracezSpanProcessor.builder().build();
private final SdkTracerProvider sdkTracerProvider =
SdkTracerProvider.builder().setClock(testClock).addSpanProcessor(spanProcessor).build();
private final Tracer tracer = sdkTracerProvider.get("TracezZPageHandlerTest");
private final TracezDataAggregator dataAggregator = new TracezDataAggregator(spanProcessor);
private final Map<String, String> emptyQueryMap = ImmutableMap.of();
@BeforeEach
void setup() {
sdkTracerProvider.addSpanProcessor(spanProcessor);
}
@Test
void summaryTable_emitRowForEachSpan() {
OutputStream output = new ByteArrayOutputStream();

View File

@ -72,8 +72,10 @@ public class SpanPipelineBenchmark {
TraceConfig.getDefault().toBuilder().setSampler(Sampler.alwaysOn()).build();
SdkTracerProvider tracerProvider =
SdkTracerProvider.builder().setTraceConfig(alwaysOn).build();
tracerProvider.addSpanProcessor(getSpanProcessor(address));
SdkTracerProvider.builder()
.setTraceConfig(alwaysOn)
.addSpanProcessor(getSpanProcessor(address))
.build();
Tracer tracerSdk = tracerProvider.get("PipelineBenchmarkTracer");
sdkSpanBuilder = (SdkSpanBuilder) tracerSdk.spanBuilder("PipelineBenchmarkSpan");

View File

@ -26,6 +26,8 @@ import io.opentelemetry.sdk.trace.IdGenerator;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.SpanProcessor;
import io.opentelemetry.sdk.trace.config.TraceConfig;
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
import io.opentelemetry.sdk.trace.export.SpanExporter;
import io.opentelemetry.sdk.trace.samplers.Sampler;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@ -153,11 +155,8 @@ class OpenTelemetrySdkTest {
OpenTelemetrySdk.builder()
.setTracerProvider(
SdkTracerProvider.builder()
// TODO: Add support to configure SpanProcessor the builder.
// .addSpanProcessor(SimpleSpanProcessor.builder(
// mock(SpanExporter.class)).build())
// .addSpanProcessor(SimpleSpanProcessor.builder(
// mock(SpanExporter.class)).build())
.addSpanProcessor(SimpleSpanProcessor.builder(mock(SpanExporter.class)).build())
.addSpanProcessor(SimpleSpanProcessor.builder(mock(SpanExporter.class)).build())
.setClock(mock(Clock.class))
.setIdGenerator(mock(IdGenerator.class))
.setResource(mock(Resource.class))
@ -175,8 +174,7 @@ class OpenTelemetrySdkTest {
OpenTelemetrySdk.builder()
.setTracerProvider(
SdkTracerProvider.builder()
// TODO: Add support to configure SpanProcessor the builder.
// .addSpanProcessor(SimpleSpanProcessor.builder(mock(SpanExporter.class)).build())
.addSpanProcessor(SimpleSpanProcessor.builder(mock(SpanExporter.class)).build())
.build())
.setPropagators(ContextPropagators.create(mock(TextMapPropagator.class)))
.build();
@ -189,8 +187,7 @@ class OpenTelemetrySdkTest {
OpenTelemetrySdk.builder()
.setTracerProvider(
SdkTracerProvider.builder()
// TODO: Add support to configure SpanProcessor the builder.
// .addSpanProcessor(SimpleSpanProcessor.builder(mock(SpanExporter.class)).build())
.addSpanProcessor(SimpleSpanProcessor.builder(mock(SpanExporter.class)).build())
.setTraceConfig(
TraceConfig.getDefault().toBuilder().setSampler(mock(Sampler.class)).build())
.build())
@ -200,8 +197,7 @@ class OpenTelemetrySdkTest {
OpenTelemetrySdk.builder()
.setTracerProvider(
SdkTracerProvider.builder()
// TODO: Add support to configure SpanProcessor the builder.
// .addSpanProcessor(SimpleSpanProcessor.builder(mock(SpanExporter.class)).build())
.addSpanProcessor(SimpleSpanProcessor.builder(mock(SpanExporter.class)).build())
.setTraceConfig(
TraceConfig.getDefault().toBuilder().setSampler(mock(Sampler.class)).build())
.setIdGenerator(mock(IdGenerator.class))

View File

@ -27,7 +27,7 @@ final class TracerSharedState {
private volatile boolean isStopped = false;
@GuardedBy("lock")
private final List<SpanProcessor> registeredSpanProcessors = new ArrayList<>();
private final List<SpanProcessor> registeredSpanProcessors;
TracerSharedState(
Clock clock,
@ -39,7 +39,8 @@ final class TracerSharedState {
this.idGenerator = idGenerator;
this.resource = resource;
this.activeTraceConfig = traceConfig;
spanProcessors.forEach(this::addSpanProcessor);
this.registeredSpanProcessors = new ArrayList<>(spanProcessors);
activeSpanProcessor = SpanProcessor.composite(registeredSpanProcessors);
}
Clock getClock() {

View File

@ -58,14 +58,16 @@ class SdkSpanBuilderTest {
TraceState.getDefault());
private final SpanProcessor mockedSpanProcessor = Mockito.mock(SpanProcessor.class);
private final SdkTracerProvider tracerSdkFactory = SdkTracerProvider.builder().build();
private final SdkTracer sdkTracer = (SdkTracer) tracerSdkFactory.get("SpanBuilderSdkTest");
private SdkTracerProvider tracerSdkFactory;
private SdkTracer sdkTracer;
@BeforeEach
public void setUp() {
tracerSdkFactory = SdkTracerProvider.builder().addSpanProcessor(mockedSpanProcessor).build();
sdkTracer = (SdkTracer) tracerSdkFactory.get("SpanBuilderSdkTest");
Mockito.when(mockedSpanProcessor.isStartRequired()).thenReturn(true);
Mockito.when(mockedSpanProcessor.isEndRequired()).thenReturn(true);
tracerSdkFactory.addSpanProcessor(mockedSpanProcessor);
}
@Test

View File

@ -32,13 +32,13 @@ import org.mockito.quality.Strictness;
@MockitoSettings(strictness = Strictness.LENIENT)
class SdkTracerProviderTest {
@Mock private SpanProcessor spanProcessor;
private final SdkTracerProvider tracerFactory = SdkTracerProvider.builder().build();
private SdkTracerProvider tracerFactory;
@BeforeEach
void setUp() {
tracerFactory = SdkTracerProvider.builder().addSpanProcessor(spanProcessor).build();
when(spanProcessor.forceFlush()).thenReturn(CompletableResultCode.ofSuccess());
when(spanProcessor.shutdown()).thenReturn(CompletableResultCode.ofSuccess());
tracerFactory.addSpanProcessor(spanProcessor);
}
@Test

View File

@ -63,8 +63,8 @@ class SdkTracerTest {
@Test
void stressTest() {
CountingSpanProcessor spanProcessor = new CountingSpanProcessor();
SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder().build();
sdkTracerProvider.addSpanProcessor(spanProcessor);
SdkTracerProvider sdkTracerProvider =
SdkTracerProvider.builder().addSpanProcessor(spanProcessor).build();
SdkTracer tracer =
(SdkTracer)
sdkTracerProvider.get(INSTRUMENTATION_LIBRARY_NAME, INSTRUMENTATION_LIBRARY_VERSION);
@ -86,8 +86,8 @@ class SdkTracerTest {
void stressTest_withBatchSpanProcessor() {
CountingSpanExporter countingSpanExporter = new CountingSpanExporter();
SpanProcessor spanProcessor = BatchSpanProcessor.builder(countingSpanExporter).build();
SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder().build();
sdkTracerProvider.addSpanProcessor(spanProcessor);
SdkTracerProvider sdkTracerProvider =
SdkTracerProvider.builder().addSpanProcessor(spanProcessor).build();
SdkTracer tracer =
(SdkTracer)
sdkTracerProvider.get(INSTRUMENTATION_LIBRARY_NAME, INSTRUMENTATION_LIBRARY_VERSION);

View File

@ -42,14 +42,15 @@ class BatchSpanProcessorTest {
private static final String SPAN_NAME_1 = "MySpanName/1";
private static final String SPAN_NAME_2 = "MySpanName/2";
private static final long MAX_SCHEDULE_DELAY_MILLIS = 500;
private final SdkTracerProvider tracerSdkFactory = SdkTracerProvider.builder().build();
private final Tracer tracer = tracerSdkFactory.get("BatchSpanProcessorTest");
private SdkTracerProvider sdkTracerProvider;
private final BlockingSpanExporter blockingSpanExporter = new BlockingSpanExporter();
@Mock private SpanExporter mockServiceHandler;
@AfterEach
void cleanup() {
tracerSdkFactory.shutdown();
if (sdkTracerProvider != null) {
sdkTracerProvider.shutdown();
}
}
// TODO(bdrutu): Fix this when Sampler return RECORD_ONLY option.
@ -63,15 +64,17 @@ class BatchSpanProcessorTest {
*/
private ReadableSpan createSampledEndedSpan(String spanName) {
Tracer tracer = sdkTracerProvider.get(getClass().getName());
Span span =
TestUtils.startSpanWithSampler(tracerSdkFactory, tracer, spanName, Sampler.alwaysOn())
TestUtils.startSpanWithSampler(sdkTracerProvider, tracer, spanName, Sampler.alwaysOn())
.startSpan();
span.end();
return (ReadableSpan) span;
}
private void createNotSampledEndedSpan(String spanName) {
TestUtils.startSpanWithSampler(tracerSdkFactory, tracer, spanName, Sampler.alwaysOff())
Tracer tracer = sdkTracerProvider.get(getClass().getName());
TestUtils.startSpanWithSampler(sdkTracerProvider, tracer, spanName, Sampler.alwaysOff())
.startSpan()
.end();
}
@ -124,10 +127,13 @@ class BatchSpanProcessorTest {
void exportDifferentSampledSpans() {
WaitingSpanExporter waitingSpanExporter =
new WaitingSpanExporter(2, CompletableResultCode.ofSuccess());
tracerSdkFactory.addSpanProcessor(
sdkTracerProvider =
SdkTracerProvider.builder()
.addSpanProcessor(
BatchSpanProcessor.builder(waitingSpanExporter)
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
.build());
.build())
.build();
ReadableSpan span1 = createSampledEndedSpan(SPAN_NAME_1);
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_2);
@ -138,15 +144,17 @@ class BatchSpanProcessorTest {
@Test
void exportMoreSpansThanTheBufferSize() {
CompletableSpanExporter spanExporter = new CompletableSpanExporter();
BatchSpanProcessor batchSpanProcessor =
sdkTracerProvider =
SdkTracerProvider.builder()
.addSpanProcessor(
BatchSpanProcessor.builder(spanExporter)
.setMaxQueueSize(6)
.setMaxExportBatchSize(2)
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
.build())
.build();
tracerSdkFactory.addSpanProcessor(batchSpanProcessor);
ReadableSpan span1 = createSampledEndedSpan(SPAN_NAME_1);
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_1);
ReadableSpan span3 = createSampledEndedSpan(SPAN_NAME_1);
@ -182,7 +190,7 @@ class BatchSpanProcessorTest {
.setScheduleDelayMillis(10_000) // 10s
.build();
tracerSdkFactory.addSpanProcessor(batchSpanProcessor);
sdkTracerProvider = SdkTracerProvider.builder().addSpanProcessor(batchSpanProcessor).build();
for (int i = 0; i < 100; i++) {
createSampledEndedSpan("notExported");
}
@ -202,11 +210,15 @@ class BatchSpanProcessorTest {
new WaitingSpanExporter(2, CompletableResultCode.ofSuccess());
WaitingSpanExporter waitingSpanExporter2 =
new WaitingSpanExporter(2, CompletableResultCode.ofSuccess());
tracerSdkFactory.addSpanProcessor(
sdkTracerProvider =
SdkTracerProvider.builder()
.addSpanProcessor(
BatchSpanProcessor.builder(
SpanExporter.composite(Arrays.asList(waitingSpanExporter, waitingSpanExporter2)))
SpanExporter.composite(
Arrays.asList(waitingSpanExporter, waitingSpanExporter2)))
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
.build());
.build())
.build();
ReadableSpan span1 = createSampledEndedSpan(SPAN_NAME_1);
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_2);
@ -221,14 +233,17 @@ class BatchSpanProcessorTest {
final int maxQueuedSpans = 8;
WaitingSpanExporter waitingSpanExporter =
new WaitingSpanExporter(maxQueuedSpans, CompletableResultCode.ofSuccess());
BatchSpanProcessor batchSpanProcessor =
sdkTracerProvider =
SdkTracerProvider.builder()
.addSpanProcessor(
BatchSpanProcessor.builder(
SpanExporter.composite(Arrays.asList(blockingSpanExporter, waitingSpanExporter)))
SpanExporter.composite(
Arrays.asList(blockingSpanExporter, waitingSpanExporter)))
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
.setMaxQueueSize(maxQueuedSpans)
.setMaxExportBatchSize(maxQueuedSpans / 2)
.build())
.build();
tracerSdkFactory.addSpanProcessor(batchSpanProcessor);
List<SpanData> spansToExport = new ArrayList<>(maxQueuedSpans + 1);
// Wait to block the worker thread in the BatchSampledSpansProcessor. This ensures that no items
@ -286,11 +301,15 @@ class BatchSpanProcessorTest {
doThrow(new IllegalArgumentException("No export for you."))
.when(mockServiceHandler)
.export(ArgumentMatchers.anyList());
tracerSdkFactory.addSpanProcessor(
sdkTracerProvider =
SdkTracerProvider.builder()
.addSpanProcessor(
BatchSpanProcessor.builder(
SpanExporter.composite(Arrays.asList(mockServiceHandler, waitingSpanExporter)))
SpanExporter.composite(
Arrays.asList(mockServiceHandler, waitingSpanExporter)))
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
.build());
.build())
.build();
ReadableSpan span1 = createSampledEndedSpan(SPAN_NAME_1);
List<SpanData> exported = waitingSpanExporter.waitForExport();
assertThat(exported).containsExactly(span1.toSpanData());
@ -332,15 +351,16 @@ class BatchSpanProcessorTest {
};
int exporterTimeoutMillis = 100;
BatchSpanProcessor batchSpanProcessor =
sdkTracerProvider =
SdkTracerProvider.builder()
.addSpanProcessor(
BatchSpanProcessor.builder(waitingSpanExporter)
.setExporterTimeoutMillis(exporterTimeoutMillis)
.setScheduleDelayMillis(1)
.setMaxQueueSize(1)
.build())
.build();
tracerSdkFactory.addSpanProcessor(batchSpanProcessor);
ReadableSpan span = createSampledEndedSpan(SPAN_NAME_1);
List<SpanData> exported = waitingSpanExporter.waitForExport();
assertThat(exported).containsExactly(span.toSpanData());
@ -354,11 +374,13 @@ class BatchSpanProcessorTest {
void exportNotSampledSpans() {
WaitingSpanExporter waitingSpanExporter =
new WaitingSpanExporter(1, CompletableResultCode.ofSuccess());
BatchSpanProcessor batchSpanProcessor =
sdkTracerProvider =
SdkTracerProvider.builder()
.addSpanProcessor(
BatchSpanProcessor.builder(waitingSpanExporter)
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
.build())
.build();
tracerSdkFactory.addSpanProcessor(batchSpanProcessor);
createNotSampledEndedSpan(SPAN_NAME_1);
createNotSampledEndedSpan(SPAN_NAME_2);
@ -377,7 +399,7 @@ class BatchSpanProcessorTest {
void exportNotSampledSpans_recordingEvents() {
// TODO(bdrutu): Fix this when Sampler return RECORD_ONLY option.
/*
tracerSdkFactory.addSpanProcessor(
sdkTracerProvider.addSpanProcessor(
BatchSpanProcessor.builder(waitingSpanExporter)
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
.reportOnlySampled(false)
@ -393,7 +415,7 @@ class BatchSpanProcessorTest {
void exportNotSampledSpans_reportOnlySampled() {
// TODO(bdrutu): Fix this when Sampler return RECORD_ONLY option.
/*
tracerSdkFactory.addSpanProcessor(
sdkTracerProvider.addSpanProcessor(
BatchSpanProcessor.builder(waitingSpanExporter)
.reportOnlySampled(true)
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
@ -413,13 +435,18 @@ class BatchSpanProcessorTest {
new WaitingSpanExporter(1, CompletableResultCode.ofSuccess());
// Set the export delay to large value, in order to confirm the #flush() below works
tracerSdkFactory.addSpanProcessor(
BatchSpanProcessor.builder(waitingSpanExporter).setScheduleDelayMillis(10_000).build());
sdkTracerProvider =
SdkTracerProvider.builder()
.addSpanProcessor(
BatchSpanProcessor.builder(waitingSpanExporter)
.setScheduleDelayMillis(10_000)
.build())
.build();
ReadableSpan span2 = createSampledEndedSpan(SPAN_NAME_2);
// Force a shutdown, which forces processing of all remaining spans.
tracerSdkFactory.shutdown();
sdkTracerProvider.shutdown();
List<SpanData> exported = waitingSpanExporter.getExported();
assertThat(exported).containsExactly(span2.toSpanData());

View File

@ -47,8 +47,6 @@ class SimpleSpanProcessorTest {
@Mock private ReadableSpan readableSpan;
@Mock private ReadWriteSpan readWriteSpan;
@Mock private SpanExporter spanExporter;
private final SdkTracerProvider tracerSdkFactory = SdkTracerProvider.builder().build();
private final Tracer tracer = tracerSdkFactory.get("SimpleSpanProcessor");
private static final SpanContext SAMPLED_SPAN_CONTEXT =
SpanContext.create(
TraceId.getInvalid(),
@ -129,16 +127,20 @@ class SimpleSpanProcessorTest {
void tracerSdk_NotSampled_Span() {
WaitingSpanExporter waitingSpanExporter =
new WaitingSpanExporter(1, CompletableResultCode.ofSuccess());
tracerSdkFactory.addSpanProcessor(
SdkTracerProvider sdkTracerProvider =
SdkTracerProvider.builder()
.addSpanProcessor(
BatchSpanProcessor.builder(waitingSpanExporter)
.setScheduleDelayMillis(MAX_SCHEDULE_DELAY_MILLIS)
.build());
.build())
.build();
TestUtils.startSpanWithSampler(tracerSdkFactory, tracer, SPAN_NAME, Sampler.alwaysOff())
try {
Tracer tracer = sdkTracerProvider.get(getClass().getName());
TestUtils.startSpanWithSampler(sdkTracerProvider, tracer, SPAN_NAME, Sampler.alwaysOff())
.startSpan()
.end();
TestUtils.startSpanWithSampler(tracerSdkFactory, tracer, SPAN_NAME, Sampler.alwaysOff())
TestUtils.startSpanWithSampler(sdkTracerProvider, tracer, SPAN_NAME, Sampler.alwaysOff())
.startSpan()
.end();
@ -153,6 +155,9 @@ class SimpleSpanProcessorTest {
// Need to check this because otherwise the variable span1 is unused, other option is to not
// have a span1 variable.
assertThat(exported).containsExactly(((ReadableSpan) span).toSpanData());
} finally {
sdkTracerProvider.shutdown();
}
}
@Test