
io.opentelemetry.instrumentation.testing.LibraryTestRunner Maven / Gradle / Ivy
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.instrumentation.testing;
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.common.CompletableResultCode;
import io.opentelemetry.sdk.metrics.data.MetricData;
import io.opentelemetry.sdk.testing.exporter.InMemorySpanExporter;
import io.opentelemetry.sdk.trace.ReadWriteSpan;
import io.opentelemetry.sdk.trace.ReadableSpan;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.SpanProcessor;
import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
import java.util.Collections;
import java.util.List;
/**
* An implementation of {@link InstrumentationTestRunner} that initializes OpenTelemetry SDK and
* uses in-memory exporter to collect traces and metrics.
*/
public final class LibraryTestRunner implements InstrumentationTestRunner {
protected static final InMemorySpanExporter testExporter;
private static boolean forceFlushCalled;
private static final LibraryTestRunner INSTANCE = new LibraryTestRunner();
static {
testExporter = InMemorySpanExporter.create();
OpenTelemetrySdk.builder()
.setTracerProvider(
SdkTracerProvider.builder()
.addSpanProcessor(new FlushTrackingSpanProcessor())
.addSpanProcessor(SimpleSpanProcessor.create(testExporter))
.build())
.setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
.buildAndRegisterGlobal();
}
public static InstrumentationTestRunner instance() {
return INSTANCE;
}
@Override
public void beforeTestClass() {}
@Override
public void afterTestClass() {}
@Override
public void clearAllExportedData() {
testExporter.reset();
forceFlushCalled = false;
}
@Override
public List getExportedSpans() {
return testExporter.getFinishedSpanItems();
}
@Override
public List getExportedMetrics() {
// no metrics support yet
return Collections.emptyList();
}
@Override
public boolean forceFlushCalled() {
return forceFlushCalled;
}
private LibraryTestRunner() {}
private static class FlushTrackingSpanProcessor implements SpanProcessor {
@Override
public void onStart(Context parentContext, ReadWriteSpan span) {}
@Override
public boolean isStartRequired() {
return false;
}
@Override
public void onEnd(ReadableSpan span) {}
@Override
public boolean isEndRequired() {
return false;
}
@Override
public CompletableResultCode forceFlush() {
forceFlushCalled = true;
return CompletableResultCode.ofSuccess();
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy