Skip to content

Commit e49ad67

Browse files
committed
Fix afterAll test to use mocked ExtensionContext
The afterAll lifecycle callback requires a valid ExtensionContext to determine if cleanup should occur at the top level. The test was previously passing null, causing NPE after the nested class handling logic was added.
1 parent 62add2e commit e49ad67

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

sdk/testing/src/main/java/io/opentelemetry/sdk/testing/junit5/OpenTelemetryExtension.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,8 @@ public void beforeAll(ExtensionContext context) {
196196
@Override
197197
public void afterAll(ExtensionContext context) {
198198
GlobalOpenTelemetry.resetForTest();
199-
openTelemetry.close();
199+
if (context.getParent().isPresent() && !context.getParent().get().getTestClass().isPresent()) {
200+
openTelemetry.close();
201+
}
200202
}
201203
}

sdk/testing/src/test/java/io/opentelemetry/sdk/testing/junit5/OpenTelemetryExtensionTest.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
99
import static org.assertj.core.api.Assertions.assertThatThrownBy;
10+
import static org.mockito.Mockito.spy;
11+
import static org.mockito.Mockito.when;
1012

1113
import io.opentelemetry.api.GlobalOpenTelemetry;
1214
import io.opentelemetry.api.OpenTelemetry;
@@ -27,8 +29,10 @@
2729
import java.util.Map;
2830
import java.util.concurrent.TimeUnit;
2931
import java.util.stream.Collectors;
32+
import java.util.Optional;
3033
import javax.annotation.Nullable;
3134
import org.junit.jupiter.api.Test;
35+
import org.junit.jupiter.api.extension.ExtensionContext;
3236
import org.junit.jupiter.api.extension.RegisterExtension;
3337

3438
class OpenTelemetryExtensionTest {
@@ -219,7 +223,15 @@ public void getLogRecordsAgain() {
219223
void afterAll() {
220224
// Use a different instance of OpenTelemetryExtension to avoid interfering with other tests
221225
OpenTelemetryExtension extension = OpenTelemetryExtension.create();
222-
extension.beforeAll(null);
226+
227+
ExtensionContext parentContext = spy(ExtensionContext.class);
228+
when(parentContext.getTestClass()).thenReturn(Optional.empty());
229+
230+
ExtensionContext context = spy(ExtensionContext.class);
231+
when(context.getParent()).thenReturn(Optional.of(parentContext));
232+
233+
234+
extension.beforeAll(context);
223235

224236
Meter meter = extension.getOpenTelemetry().getMeter("meter");
225237
Tracer tracer = extension.getOpenTelemetry().getTracer("tracer");
@@ -229,7 +241,7 @@ void afterAll() {
229241
assertThat(extension.getMetrics()).isNotEmpty();
230242
assertThat(extension.getSpans()).isNotEmpty();
231243

232-
extension.afterAll(null);
244+
extension.afterAll(context);
233245
assertThat(GlobalOpenTelemetry.get()).extracting("delegate").isSameAs(OpenTelemetry.noop());
234246

235247
meter.counterBuilder("counter").build().add(10);

0 commit comments

Comments
 (0)