diff --git a/google-cloud-spanner/pom.xml b/google-cloud-spanner/pom.xml index 361f4bc9ff0..d2b25b04504 100644 --- a/google-cloud-spanner/pom.xml +++ b/google-cloud-spanner/pom.xml @@ -369,6 +369,20 @@ test + + + net.bytebuddy + byte-buddy + 1.17.7 + test + + + net.bytebuddy + byte-buddy-agent + 1.17.7 + test + + com.google.api.grpc diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractAsyncTransactionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractAsyncTransactionTest.java index 4abe06b1028..94c8cb3f251 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractAsyncTransactionTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractAsyncTransactionTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static com.google.cloud.spanner.MockSpannerTestUtil.EMPTY_KEY_VALUE_RESULTSET; import static com.google.cloud.spanner.MockSpannerTestUtil.INVALID_UPDATE_STATEMENT; import static com.google.cloud.spanner.MockSpannerTestUtil.READ_MULTIPLE_KEY_VALUE_RESULTSET; @@ -56,6 +57,7 @@ public abstract class AbstractAsyncTransactionTest { @BeforeClass public static void setup() throws Exception { + disableDefaultMtlsProvider(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); mockSpanner.putStatementResult( diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractMockServerTest.java index 76d13e73869..15d308777e8 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractMockServerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractMockServerTest.java @@ -16,6 +16,8 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; + import com.google.api.gax.grpc.testing.LocalChannelProvider; import com.google.cloud.NoCredentials; import com.google.cloud.spanner.admin.database.v1.MockDatabaseAdminImpl; @@ -31,7 +33,6 @@ import io.grpc.Server; import io.grpc.inprocess.InProcessServerBuilder; import io.grpc.stub.StreamObserver; -import java.io.IOException; import java.util.concurrent.atomic.AtomicBoolean; import org.junit.After; import org.junit.AfterClass; @@ -49,7 +50,8 @@ abstract class AbstractMockServerTest { protected Spanner spanner; @BeforeClass - public static void startMockServer() throws IOException { + public static void startMockServer() throws Exception { + disableDefaultMtlsProvider(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockInstanceAdmin = new MockInstanceAdminImpl(); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractNettyMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractNettyMockServerTest.java index a763f98cf0f..e51c842fee4 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractNettyMockServerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractNettyMockServerTest.java @@ -16,6 +16,8 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; + import com.google.api.gax.grpc.testing.LocalChannelProvider; import com.google.cloud.NoCredentials; import io.grpc.ForwardingServerCall; @@ -26,7 +28,6 @@ import io.grpc.ServerCallHandler; import io.grpc.ServerInterceptor; import io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder; -import java.io.IOException; import java.net.InetSocketAddress; import java.util.Random; import java.util.concurrent.ExecutorService; @@ -52,7 +53,8 @@ abstract class AbstractNettyMockServerTest { protected Spanner spanner; @BeforeClass - public static void startMockServer() throws IOException { + public static void startMockServer() throws Exception { + disableDefaultMtlsProvider(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BackendExhaustedTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BackendExhaustedTest.java index d9bc779587f..76cc20cb4de 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BackendExhaustedTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BackendExhaustedTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static com.google.common.truth.Truth.assertThat; import com.google.api.gax.grpc.testing.LocalChannelProvider; @@ -32,7 +33,6 @@ import io.grpc.Server; import io.grpc.Status; import io.grpc.inprocess.InProcessServerBuilder; -import java.io.IOException; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; @@ -89,7 +89,8 @@ public class BackendExhaustedTest { private DatabaseClientImpl client; @BeforeClass - public static void startStaticServer() throws IOException { + public static void startStaticServer() throws Exception { + disableDefaultMtlsProvider(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult(StatementResult.update(UPDATE_STATEMENT, UPDATE_COUNT)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchCreateSessionsSlowTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchCreateSessionsSlowTest.java index 72d04d94614..2807523f40b 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchCreateSessionsSlowTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchCreateSessionsSlowTest.java @@ -15,6 +15,7 @@ */ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static com.google.cloud.spanner.MockSpannerTestUtil.READ_ONE_KEY_VALUE_RESULTSET; import static com.google.cloud.spanner.MockSpannerTestUtil.READ_ONE_KEY_VALUE_STATEMENT; import static com.google.cloud.spanner.MockSpannerTestUtil.SELECT1; @@ -32,7 +33,6 @@ import com.google.common.util.concurrent.MoreExecutors; import io.grpc.Server; import io.grpc.inprocess.InProcessServerBuilder; -import java.io.IOException; import java.time.Duration; import java.util.ArrayList; import java.util.List; @@ -59,7 +59,8 @@ public class BatchCreateSessionsSlowTest { private Spanner spanner; @BeforeClass - public static void startStaticServer() throws IOException { + public static void startStaticServer() throws Exception { + disableDefaultMtlsProvider(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult( diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchCreateSessionsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchCreateSessionsTest.java index 8d359428c77..4ff06755494 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchCreateSessionsTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchCreateSessionsTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; @@ -33,7 +34,6 @@ import io.grpc.Server; import io.grpc.Status; import io.grpc.inprocess.InProcessServerBuilder; -import java.io.IOException; import java.util.concurrent.TimeUnit; import org.junit.AfterClass; import org.junit.Before; @@ -78,7 +78,8 @@ public class BatchCreateSessionsTest { private static LocalChannelProvider channelProvider; @BeforeClass - public static void startStaticServer() throws IOException { + public static void startStaticServer() throws Exception { + disableDefaultMtlsProvider(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult(StatementResult.query(SELECT1AND2, SELECT1_RESULTSET)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ChannelUsageTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ChannelUsageTest.java index 30e06719181..a06eeb91662 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ChannelUsageTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ChannelUsageTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static io.grpc.Grpc.TRANSPORT_ATTR_REMOTE_ADDR; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -40,7 +41,6 @@ import io.grpc.ServerCallHandler; import io.grpc.ServerInterceptor; import io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder; -import java.io.IOException; import java.net.InetSocketAddress; import java.time.Duration; import java.util.Arrays; @@ -113,7 +113,8 @@ public static Collection data() { private static Level originalLogLevel; @BeforeClass - public static void startServer() throws IOException { + public static void startServer() throws Exception { + disableDefaultMtlsProvider(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult(StatementResult.query(SELECT1, SELECT1_RESULTSET)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java index fa95c551838..9ca5c17330a 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static com.google.cloud.spanner.MockSpannerTestUtil.READ_COLUMN_NAMES; import static com.google.cloud.spanner.MockSpannerTestUtil.READ_ONE_KEY_VALUE_RESULTSET; import static com.google.cloud.spanner.MockSpannerTestUtil.READ_ONE_KEY_VALUE_STATEMENT; @@ -113,7 +114,6 @@ import io.grpc.protobuf.lite.ProtoLiteUtils; import io.opencensus.trace.Tracing; import io.opentelemetry.api.OpenTelemetry; -import java.io.IOException; import java.nio.charset.StandardCharsets; import java.time.Duration; import java.time.Instant; @@ -209,7 +209,8 @@ public class DatabaseClientImplTest { private static ExecutorService executor; @BeforeClass - public static void startStaticServer() throws IOException { + public static void startStaticServer() throws Exception { + disableDefaultMtlsProvider(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult(StatementResult.update(UPDATE_STATEMENT, UPDATE_COUNT)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplWithDefaultRWTransactionOptionsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplWithDefaultRWTransactionOptionsTest.java index 6be28413faf..f3199ae3683 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplWithDefaultRWTransactionOptionsTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplWithDefaultRWTransactionOptionsTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static com.google.cloud.spanner.MockSpannerTestUtil.INVALID_SELECT_STATEMENT; import static com.google.cloud.spanner.MockSpannerTestUtil.SELECT1; import static com.google.cloud.spanner.MockSpannerTestUtil.SELECT1_RESULTSET; @@ -41,7 +42,6 @@ import io.grpc.Server; import io.grpc.Status; import io.grpc.inprocess.InProcessServerBuilder; -import java.io.IOException; import java.util.Collections; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -83,7 +83,8 @@ public class DatabaseClientImplWithDefaultRWTransactionOptionsTest { private DatabaseClient clientWithSerOptimisticOption; @BeforeClass - public static void startStaticServer() throws IOException { + public static void startStaticServer() throws Exception { + disableDefaultMtlsProvider(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult(StatementResult.update(UPDATE_STATEMENT, UPDATE_COUNT)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DisableDefaultMtlsProvider.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DisableDefaultMtlsProvider.java new file mode 100644 index 00000000000..bf287da5d42 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DisableDefaultMtlsProvider.java @@ -0,0 +1,73 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner; + +import static net.bytebuddy.agent.builder.AgentBuilder.RedefinitionStrategy.RETRANSFORMATION; +import static net.bytebuddy.implementation.bytecode.assign.Assigner.Typing.DYNAMIC; +import static net.bytebuddy.matcher.ElementMatchers.is; +import static net.bytebuddy.matcher.ElementMatchers.named; +import static net.bytebuddy.matcher.ElementMatchers.none; + +import com.google.auth.mtls.DefaultMtlsProviderFactory; +import java.lang.instrument.Instrumentation; +import java.lang.instrument.UnmodifiableClassException; +import net.bytebuddy.agent.ByteBuddyAgent; +import net.bytebuddy.agent.builder.AgentBuilder; +import net.bytebuddy.asm.Advice; + +/** Temporary fix for https://github.com/googleapis/sdk-platform-java/issues/3911. */ +public class DisableDefaultMtlsProvider { + static class DisableMtlsCheck { + @Advice.OnMethodEnter(skipOn = Advice.OnDefaultValue.class) + public static boolean before() { + // Skip original method execution + return false; + } + + @Advice.OnMethodExit + public static void after( + @Advice.Return(readOnly = false, typing = DYNAMIC) Object returnValue) { + returnValue = null; + } + } + + static void premain(String agentArgs, Instrumentation inst) { + new AgentBuilder.Default() + .disableClassFormatChanges() + .with(RETRANSFORMATION) + .ignore(none()) + .type(is(DefaultMtlsProviderFactory.class)) + .transform( + (builder, typeDescription, classLoader, module, protectionDomain) -> + builder.visit(Advice.to(DisableMtlsCheck.class).on(named("create")))) + .installOn(inst); + } + + private static boolean initialized = false; + + public static void disableDefaultMtlsProvider() throws UnmodifiableClassException { + synchronized (DisableDefaultMtlsProvider.class) { + if (initialized) { + return; + } + Instrumentation instrumentation = ByteBuddyAgent.install(); + premain("", instrumentation); + instrumentation.retransformClasses(DefaultMtlsProviderFactory.class); + initialized = true; + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InlineBeginTransactionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InlineBeginTransactionTest.java index 6a4f832633a..dae77037957 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InlineBeginTransactionTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InlineBeginTransactionTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static com.google.cloud.spanner.SpannerApiFutures.get; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; @@ -56,7 +57,6 @@ import io.grpc.Server; import io.grpc.Status; import io.grpc.inprocess.InProcessServerBuilder; -import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -140,7 +140,8 @@ public class InlineBeginTransactionTest { protected Spanner spanner; @BeforeClass - public static void startStaticServer() throws IOException { + public static void startStaticServer() throws Exception { + disableDefaultMtlsProvider(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult(StatementResult.update(UPDATE_STATEMENT, UPDATE_COUNT)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetrySpanTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetrySpanTest.java index 90e66526f14..732709a7310 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetrySpanTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetrySpanTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThrows; @@ -174,6 +175,7 @@ public static void setupOpenTelemetry() { @BeforeClass public static void startStaticServer() throws Exception { + disableDefaultMtlsProvider(); // Incorporating OpenCensus tracer to ensure that OpenTraces traces are utilized if enabled, // regardless of the presence of OpenCensus tracer. java.lang.reflect.Field field = Tracing.class.getDeclaredField("traceComponent"); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/PgNumericTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/PgNumericTest.java index 40591d17fe8..a3266d0505c 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/PgNumericTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/PgNumericTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -83,6 +84,7 @@ public class PgNumericTest { @BeforeClass public static void beforeClass() throws Exception { + disableDefaultMtlsProvider(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadAsyncTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadAsyncTest.java index f793bb0ee60..3704b118906 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadAsyncTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadAsyncTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static com.google.cloud.spanner.MockSpannerTestUtil.*; import static com.google.cloud.spanner.SpannerApiFutures.get; import static com.google.common.truth.Truth.assertThat; @@ -69,6 +70,7 @@ public class ReadAsyncTest { @BeforeClass public static void setup() throws Exception { + disableDefaultMtlsProvider(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.putStatementResult( StatementResult.query(READ_ONE_KEY_VALUE_STATEMENT, READ_ONE_KEY_VALUE_RESULTSET)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadWriteTransactionWithInlineBeginTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadWriteTransactionWithInlineBeginTest.java index aa268382b34..3078cab0cbe 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadWriteTransactionWithInlineBeginTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadWriteTransactionWithInlineBeginTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; @@ -38,7 +39,6 @@ import io.grpc.Server; import io.grpc.Status; import io.grpc.inprocess.InProcessServerBuilder; -import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -101,7 +101,8 @@ public class ReadWriteTransactionWithInlineBeginTest { private DatabaseClient client; @BeforeClass - public static void startStaticServer() throws IOException { + public static void startStaticServer() throws Exception { + disableDefaultMtlsProvider(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult(StatementResult.update(UPDATE_STATEMENT, UPDATE_COUNT)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RetryOnInvalidatedSessionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RetryOnInvalidatedSessionTest.java index 5496ad531bf..6a0f16c02b1 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RetryOnInvalidatedSessionTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RetryOnInvalidatedSessionTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static com.google.cloud.spanner.SpannerApiFutures.get; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertThrows; @@ -45,7 +46,6 @@ import com.google.spanner.v1.TypeCode; import io.grpc.Server; import io.grpc.inprocess.InProcessServerBuilder; -import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -162,7 +162,8 @@ public static Collection data() { private static ExecutorService executor; @BeforeClass - public static void startStaticServer() throws IOException { + public static void startStaticServer() throws Exception { + disableDefaultMtlsProvider(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult( diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolLeakTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolLeakTest.java index 8ccea443dc1..080091e6615 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolLeakTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolLeakTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; @@ -38,7 +39,6 @@ import io.grpc.Server; import io.grpc.StatusRuntimeException; import io.grpc.inprocess.InProcessServerBuilder; -import java.io.IOException; import java.util.concurrent.ScheduledThreadPoolExecutor; import org.junit.After; import org.junit.AfterClass; @@ -62,7 +62,8 @@ public class SessionPoolLeakTest { private SessionPool pool; @BeforeClass - public static void startStaticServer() throws IOException { + public static void startStaticServer() throws Exception { + disableDefaultMtlsProvider(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. String uniqueName = InProcessServerBuilder.generateName(); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpanTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpanTest.java index 5e9825c9659..38aa31ad0b1 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpanTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpanTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; @@ -121,6 +122,7 @@ public static void startStaticServer() throws Exception { "This test is only supported on JDK11 and lower", JavaVersionUtil.getJavaMajorVersion() < 12); + disableDefaultMtlsProvider(); // Use a little reflection to set the test tracer. // This is not possible in Java 12 and later. java.lang.reflect.Field field = Tracing.class.getDeclaredField("traceComponent"); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerGaxRetryTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerGaxRetryTest.java index d132a0805df..ac04addaf67 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerGaxRetryTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerGaxRetryTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; @@ -40,7 +41,6 @@ import io.grpc.StatusRuntimeException; import io.grpc.inprocess.InProcessServerBuilder; import io.grpc.protobuf.ProtoUtils; -import java.io.IOException; import java.time.Duration; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -111,7 +111,8 @@ public class SpannerGaxRetryTest { private DatabaseClient clientWithTimeout; @BeforeClass - public static void startStaticServer() throws IOException { + public static void startStaticServer() throws Exception { + disableDefaultMtlsProvider(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult(StatementResult.query(SELECT1AND2, SELECT1_RESULTSET)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerThreadsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerThreadsTest.java index 662b7742b5f..0d11bf6ccb7 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerThreadsTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerThreadsTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; @@ -36,7 +37,6 @@ import com.google.spanner.v1.StructType.Field; import io.grpc.*; import io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder; -import java.io.IOException; import java.net.InetSocketAddress; import java.util.*; import java.util.concurrent.TimeUnit; @@ -88,12 +88,13 @@ public class SpannerThreadsTest { private static InetSocketAddress address; @BeforeClass - public static void startServer() throws IOException { + public static void startServer() throws Exception { assumeTrue( "Skip tests when emulator is enabled as this test interferes with the check whether the" + " emulator is running", System.getenv("SPANNER_EMULATOR_HOST") == null); + disableDefaultMtlsProvider(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult(StatementResult.query(SELECT1AND2, SELECT1_RESULTSET)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/StandardBenchmarkMockServer.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/StandardBenchmarkMockServer.java index 4fce617a15e..2940adbacef 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/StandardBenchmarkMockServer.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/StandardBenchmarkMockServer.java @@ -16,6 +16,8 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; + import com.google.api.gax.grpc.testing.LocalChannelProvider; import com.google.api.gax.rpc.TransportChannelProvider; import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; @@ -31,7 +33,6 @@ import io.grpc.Server; import io.grpc.Status; import io.grpc.inprocess.InProcessServerBuilder; -import java.io.IOException; /** Standard mock server used for benchmarking. */ class StandardBenchmarkMockServer { @@ -83,7 +84,8 @@ class StandardBenchmarkMockServer { private Server server; private LocalChannelProvider channelProvider; - TransportChannelProvider start() throws IOException { + TransportChannelProvider start() throws Exception { + disableDefaultMtlsProvider(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult(StatementResult.update(UPDATE_STATEMENT, UPDATE_COUNT)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionChannelHintTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionChannelHintTest.java index 14658210f44..b68ef4667d5 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionChannelHintTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionChannelHintTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static com.google.cloud.spanner.MockSpannerTestUtil.READ_COLUMN_NAMES; import static com.google.cloud.spanner.MockSpannerTestUtil.READ_ONE_KEY_VALUE_RESULTSET; import static com.google.cloud.spanner.MockSpannerTestUtil.READ_ONE_KEY_VALUE_STATEMENT; @@ -43,7 +44,6 @@ import io.grpc.ServerCallHandler; import io.grpc.ServerInterceptor; import io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder; -import java.io.IOException; import java.net.InetSocketAddress; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -101,7 +101,8 @@ public class TransactionChannelHintTest { private static Level originalLogLevel; @BeforeClass - public static void startServer() throws IOException { + public static void startServer() throws Exception { + disableDefaultMtlsProvider(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult(StatementResult.query(SELECT1, SELECT1_RESULTSET)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionManagerAbortedTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionManagerAbortedTest.java index a437b41ddb4..fdf44f0b228 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionManagerAbortedTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionManagerAbortedTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; @@ -35,7 +36,6 @@ import com.google.spanner.v1.TypeCode; import io.grpc.Server; import io.grpc.inprocess.InProcessServerBuilder; -import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.concurrent.ScheduledThreadPoolExecutor; @@ -127,7 +127,8 @@ public class TransactionManagerAbortedTest { private static Spanner spanner; @BeforeClass - public static void startStaticServer() throws IOException { + public static void startStaticServer() throws Exception { + disableDefaultMtlsProvider(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. mockSpanner.putStatementResult( diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractMockServerTest.java index 201651cfd57..363491f809c 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractMockServerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractMockServerTest.java @@ -16,6 +16,8 @@ package com.google.cloud.spanner.connection; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; + import com.google.cloud.spanner.Dialect; import com.google.cloud.spanner.ForceCloseSpannerFunction; import com.google.cloud.spanner.MockSpannerServiceImpl; @@ -156,7 +158,8 @@ public abstract class AbstractMockServerTest { private static boolean clientStreamParentHandlers; @BeforeClass - public static void startStaticServer() throws IOException { + public static void startStaticServer() throws Exception { + disableDefaultMtlsProvider(); startStaticServer(createServerInterceptor()); } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/LocalConnectionCheckerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/LocalConnectionCheckerTest.java index daf42b55af4..487ac3c0180 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/LocalConnectionCheckerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/LocalConnectionCheckerTest.java @@ -15,6 +15,7 @@ */ package com.google.cloud.spanner.connection; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static com.google.cloud.spanner.MockSpannerTestUtil.SELECT1; import static com.google.cloud.spanner.MockSpannerTestUtil.SELECT1_RESULTSET; import static org.junit.Assert.assertEquals; @@ -39,6 +40,7 @@ public class LocalConnectionCheckerTest { @BeforeClass public static void beforeClass() throws Exception { + disableDefaultMtlsProvider(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions. diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpcTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpcTest.java index e46f61a8ce7..ee90f99d260 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpcTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpcTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner.spi.v1; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static com.google.common.truth.Truth.assertThat; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; @@ -83,7 +84,6 @@ import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.trace.SdkTracerProvider; import io.opentelemetry.sdk.trace.samplers.Sampler; -import java.io.IOException; import java.net.InetSocketAddress; import java.time.Duration; import java.util.HashMap; @@ -166,7 +166,8 @@ public static Object[] data() { } @Before - public void startServer() throws IOException { + public void startServer() throws Exception { + disableDefaultMtlsProvider(); // Enable OpenTelemetry tracing. SpannerOptionsHelper.resetActiveTracingFramework(); SpannerOptions.enableOpenTelemetryTraces(); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GfeLatencyTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GfeLatencyTest.java index f2d8a07538c..5067eb09ff9 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GfeLatencyTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GfeLatencyTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner.spi.v1; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -48,7 +49,6 @@ import io.opencensus.stats.ViewData; import io.opencensus.tags.TagKey; import io.opencensus.tags.TagValue; -import java.io.IOException; import java.net.InetSocketAddress; import java.util.List; import java.util.Map; @@ -132,7 +132,8 @@ public class GfeLatencyTest { Statement.of("UPDATE FOO SET BAR=1 WHERE BAZ=2"); @BeforeClass - public static void startServer() throws IOException { + public static void startServer() throws Exception { + disableDefaultMtlsProvider(); //noinspection deprecation SpannerRpcViews.registerGfeLatencyAndHeaderMissingCountViews(); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/SpannerRpcMetricsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/SpannerRpcMetricsTest.java index 049ce0d1960..89c874fe204 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/SpannerRpcMetricsTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/SpannerRpcMetricsTest.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner.spi.v1; +import static com.google.cloud.spanner.DisableDefaultMtlsProvider.disableDefaultMtlsProvider; import static org.junit.Assert.assertEquals; import com.google.cloud.NoCredentials; @@ -42,7 +43,6 @@ import io.opentelemetry.sdk.metrics.SdkMeterProvider; import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.testing.exporter.InMemoryMetricReader; -import java.io.IOException; import java.net.InetSocketAddress; import java.util.Collection; import java.util.HashMap; @@ -111,7 +111,8 @@ public class SpannerRpcMetricsTest { private static InMemoryMetricReader inMemoryMetricReaderInjected; @BeforeClass - public static void startServer() throws IOException { + public static void startServer() throws Exception { + disableDefaultMtlsProvider(); SpannerOptions.enableOpenTelemetryMetrics(); mockSpanner = new MockSpannerServiceImpl(); mockSpanner.setAbortProbability(0.0D); // We don't want any unpredictable aborted transactions.