1818import static org .mockito .Mockito .verify ;
1919import static org .mockito .Mockito .when ;
2020
21+ import io .github .netmikey .logunit .api .LogCapturer ;
2122import io .opentelemetry .api .internal .GuardedBy ;
2223import io .opentelemetry .api .trace .Span ;
2324import io .opentelemetry .api .trace .Tracer ;
4243import org .junit .jupiter .api .Test ;
4344import org .junit .jupiter .api .Timeout ;
4445import org .junit .jupiter .api .extension .ExtendWith ;
46+ import org .junit .jupiter .api .extension .RegisterExtension ;
4547import org .mockito .ArgumentMatchers ;
4648import org .mockito .Mock ;
4749import org .mockito .junit .jupiter .MockitoExtension ;
4850import org .mockito .junit .jupiter .MockitoSettings ;
4951import org .mockito .quality .Strictness ;
52+ import org .slf4j .event .Level ;
5053
5154@ SuppressWarnings ("PreferJavaTimeOverload" )
5255@ ExtendWith (MockitoExtension .class )
@@ -62,9 +65,13 @@ class BatchSpanProcessorTest {
6265 @ Mock private Sampler mockSampler ;
6366 @ Mock private SpanExporter mockSpanExporter ;
6467
68+ @ RegisterExtension
69+ LogCapturer logs = LogCapturer .create ().captureForType (BatchSpanProcessor .class );
70+
6571 @ BeforeEach
6672 void setUp () {
6773 when (mockSpanExporter .shutdown ()).thenReturn (CompletableResultCode .ofSuccess ());
74+ when (mockSpanExporter .export (anyList ())).thenReturn (CompletableResultCode .ofSuccess ());
6875 }
6976
7077 @ AfterEach
@@ -232,6 +239,32 @@ void exportMoreSpansThanTheBufferSize() {
232239 span6 .toSpanData ()));
233240 }
234241
242+ @ Test
243+ void droppedSpanIsLogged () {
244+ sdkTracerProvider =
245+ SdkTracerProvider .builder ()
246+ .addSpanProcessor (
247+ BatchSpanProcessor .builder (mockSpanExporter )
248+ .setMaxQueueSize (1 )
249+ .setMaxExportBatchSize (1_000 )
250+ .setScheduleDelay (Duration .ofDays (1 ))
251+ .build ())
252+ .build ();
253+
254+ // Fill the queue with the first span, then drop 2 more.
255+ createEndedSpan (SPAN_NAME_1 );
256+ createEndedSpan (SPAN_NAME_2 );
257+ createEndedSpan (SPAN_NAME_2 );
258+
259+ // Force export to trigger the drop count log.
260+ sdkTracerProvider .forceFlush ().join (10 , TimeUnit .SECONDS );
261+
262+ logs .assertContains (
263+ loggingEvent -> loggingEvent .getLevel ().equals (Level .WARN ),
264+ "BatchSpanProcessor dropped 2 span(s) since the last export"
265+ + " because the queue is full (maxQueueSize=1)" );
266+ }
267+
235268 @ Test
236269 void forceExport () {
237270 WaitingSpanExporter waitingSpanExporter =
0 commit comments