Skip to content

Commit c8f7f64

Browse files
committed
test(spanner): reset tracing framework in tests to prevent state leakage
Several tests configure OpenTelemetry tracing globally during execution. Without explicit teardown, this configuration persists across tests in the same test run and causes subsequent tests that expect the default tracing behavior to fail or behave inconsistently. This change ensures that all tests enabling a custom tracing framework cleanly restore the default tracing state when they finish. Teardown routines are guarded so that unrelated errors during cleanup cannot bypass the reset, and tests defensively clear any preexisting state before enabling custom tracing.
1 parent b3ce1c9 commit c8f7f64

16 files changed

Lines changed: 74 additions & 5 deletions

‎java-spanner/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerOptions.java‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2691,7 +2691,9 @@ public static void enableOpenCensusTraces() {
26912691
+ " OpenTelemetry traces")
26922692
@VisibleForTesting
26932693
static void resetActiveTracingFramework() {
2694-
activeTracingFramework = null;
2694+
synchronized (lock) {
2695+
activeTracingFramework = null;
2696+
}
26952697
}
26962698

26972699
public static TracingFramework getActiveTracingFramework() {

‎java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchClientImplTest.java‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import java.time.Duration;
4040
import java.util.Collections;
4141
import java.util.Map;
42+
import org.junit.AfterClass;
4243
import org.junit.Before;
4344
import org.junit.BeforeClass;
4445
import org.junit.Test;
@@ -71,6 +72,11 @@ public static void setupOpenTelemetry() {
7172
SpannerOptions.enableOpenTelemetryTraces();
7273
}
7374

75+
@AfterClass
76+
public static void resetOpenTelemetry() {
77+
SpannerOptions.resetActiveTracingFramework();
78+
}
79+
7480
@SuppressWarnings("unchecked")
7581
@Before
7682
public void setUp() {

‎java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java‎

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ public SpannerOptions spannerOptionsWithEndToEndTracing(SpannerOptions options)
203203
.setTracerProvider(sdkTracerProvider)
204204
.setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
205205
.build();
206+
SpannerOptions.resetActiveTracingFramework();
206207
SpannerOptions.enableOpenTelemetryTraces();
207208
return options.toBuilder()
208209
.setOpenTelemetry(openTelemetry)
@@ -217,8 +218,12 @@ RemoteSpannerHelper createTestHelper(SpannerOptions options, InstanceId instance
217218

218219
@Override
219220
protected void after() {
220-
cleanUpInstance();
221-
this.config.tearDown();
221+
try {
222+
cleanUpInstance();
223+
this.config.tearDown();
224+
} finally {
225+
SpannerOptions.resetActiveTracingFramework();
226+
}
222227
}
223228

224229
private void initializeInstance(InstanceId instanceId) throws Exception {

‎java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MultiplexedSessionsBenchmark.java‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ public static class BenchmarkState {
8686

8787
@Setup(Level.Iteration)
8888
public void setup() throws Exception {
89+
SpannerOptions.resetActiveTracingFramework();
8990
SpannerOptions.enableOpenTelemetryMetrics();
9091
SpannerOptions.enableOpenTelemetryTraces();
9192
SpannerOptions options =
@@ -109,7 +110,11 @@ public void setup() throws Exception {
109110

110111
@TearDown(Level.Iteration)
111112
public void teardown() throws Exception {
112-
spanner.close();
113+
try {
114+
spanner.close();
115+
} finally {
116+
SpannerOptions.resetActiveTracingFramework();
117+
}
113118
}
114119
}
115120

‎java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenCensusApiTracerTest.java‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import java.util.concurrent.ExecutionException;
5050
import java.util.stream.Collectors;
5151
import org.junit.After;
52+
import org.junit.AfterClass;
5253
import org.junit.Assume;
5354
import org.junit.BeforeClass;
5455
import org.junit.Ignore;
@@ -97,6 +98,11 @@ public static void setupOpenTelemetry() throws Exception {
9798
field.set(null, failOnOverkillTraceComponent);
9899
}
99100

101+
@AfterClass
102+
public static void resetTracing() {
103+
SpannerOptions.resetActiveTracingFramework();
104+
}
105+
100106
@BeforeClass
101107
public static void setupResults() {
102108
RandomResultSetGenerator generator = new RandomResultSetGenerator(1);

‎java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryApiTracerTest.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ public static void setupResults() {
103103

104104
@AfterClass
105105
public static void closeOpenTelemetry() {
106+
SpannerOptions.resetActiveTracingFramework();
106107
if (openTelemetry != null) {
107108
openTelemetry.close();
108109
}

‎java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetrySpanTest.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ public static void startStaticServer() throws Exception {
205205

206206
@AfterClass
207207
public static void stopServer() throws InterruptedException {
208+
SpannerOptions.resetActiveTracingFramework();
208209
if (server != null) {
209210
server.shutdown();
210211
server.awaitTermination();

‎java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResumableStreamIteratorTest.java‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
import java.util.function.LongSupplier;
7575
import org.jspecify.annotations.Nullable;
7676
import org.junit.After;
77+
import org.junit.AfterClass;
7778
import org.junit.Before;
7879
import org.junit.Test;
7980
import org.junit.runner.RunWith;
@@ -190,6 +191,11 @@ public void tearDown() {
190191
SpannerOptions.resetActiveTracingFramework();
191192
}
192193

194+
@AfterClass
195+
public static void resetTracing() {
196+
SpannerOptions.resetActiveTracingFramework();
197+
}
198+
193199
private void initWithLimit(int maxBufferSize) {
194200
initWithLimitAndRetrySettings(
195201
maxBufferSize,

‎java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionImplTest.java‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
import java.util.concurrent.atomic.AtomicBoolean;
7575
import java.util.concurrent.atomic.AtomicInteger;
7676
import javax.annotation.Nullable;
77+
import org.junit.AfterClass;
7778
import org.junit.Before;
7879
import org.junit.BeforeClass;
7980
import org.junit.Test;
@@ -100,6 +101,11 @@ public static void setupOpenTelemetry() {
100101
SpannerOptions.enableOpenTelemetryTraces();
101102
}
102103

104+
@AfterClass
105+
public static void resetOpenTelemetry() {
106+
SpannerOptions.resetActiveTracingFramework();
107+
}
108+
103109
@SuppressWarnings("unchecked")
104110
@Before
105111
public void setUp() {

‎java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpanTest.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ public static void startStaticServer() throws Exception {
161161

162162
@AfterClass
163163
public static void stopServer() throws InterruptedException {
164+
SpannerOptions.resetActiveTracingFramework();
164165
if (server != null) {
165166
server.shutdown();
166167
server.awaitTermination();

0 commit comments

Comments
 (0)