From fbf4b752773292ad7244602667c954c0cd29884e Mon Sep 17 00:00:00 2001 From: Olav Loite Date: Mon, 1 Jul 2019 19:51:57 +0200 Subject: [PATCH] fix test cases for gax 1.47 --- .../cloud/spanner/DatabaseAdminGaxTest.java | 61 ++------------ .../cloud/spanner/InstanceAdminGaxTest.java | 61 ++------------ .../cloud/spanner/SpannerGaxRetryTest.java | 79 +++---------------- 3 files changed, 22 insertions(+), 179 deletions(-) diff --git a/google-cloud-clients/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminGaxTest.java b/google-cloud-clients/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminGaxTest.java index da18c57c278d..f568509173f6 100644 --- a/google-cloud-clients/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminGaxTest.java +++ b/google-cloud-clients/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminGaxTest.java @@ -21,13 +21,11 @@ import com.google.api.gax.longrunning.OperationFuture; import com.google.api.gax.paging.Page; import com.google.api.gax.retrying.RetrySettings; -import com.google.api.gax.rpc.StatusCode; import com.google.api.gax.rpc.UnaryCallSettings; import com.google.api.gax.rpc.UnaryCallSettings.Builder; import com.google.cloud.NoCredentials; import com.google.cloud.spanner.admin.database.v1.MockDatabaseAdminImpl; import com.google.common.base.Throwables; -import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.protobuf.AbstractMessage; import com.google.protobuf.Any; @@ -183,22 +181,17 @@ public boolean isRetryable() { private static LocalChannelProvider channelProvider; @Parameter(0) - public boolean enableGaxRetries; - - @Parameter(1) public int exceptionAtCall; - @Parameter(2) + @Parameter(1) public ExceptionType exceptionType; - @Parameters(name = "enable GAX retries = {0}, exception at call = {1}, exception type = {2}") + @Parameters(name = "exception at call = {0}, exception type = {1}") public static Collection data() { List params = new ArrayList<>(); - for (boolean enableRetries : new boolean[] {true, false}) { - for (int exceptionAtCall : new int[] {0, 1}) { - for (ExceptionType exceptionType : ExceptionType.values()) { - params.add(new Object[] {enableRetries, exceptionAtCall, exceptionType}); - } + for (int exceptionAtCall : new int[] {0, 1}) { + for (ExceptionType exceptionType : ExceptionType.values()) { + params.add(new Object[] {exceptionAtCall, exceptionType}); } } return params; @@ -272,43 +265,6 @@ public Void apply(Builder input) { .toBuilder() .setRetrySettings(retrySettings) .build()); - if (!enableGaxRetries) { - // Disable retries by removing all retryable codes. - builder - .getDatabaseAdminStubSettingsBuilder() - .applyToAllUnaryMethods( - new ApiFunction, Void>() { - @Override - public Void apply(Builder input) { - input.setRetryableCodes(ImmutableSet.of()); - return null; - } - }); - builder - .getDatabaseAdminStubSettingsBuilder() - .createDatabaseOperationSettings() - .setInitialCallSettings( - builder - .getDatabaseAdminStubSettingsBuilder() - .createDatabaseOperationSettings() - .getInitialCallSettings() - .toBuilder() - .setRetrySettings(retrySettings) - .setRetryableCodes(ImmutableSet.of()) - .build()); - builder - .getDatabaseAdminStubSettingsBuilder() - .updateDatabaseDdlOperationSettings() - .setInitialCallSettings( - builder - .getDatabaseAdminStubSettingsBuilder() - .updateDatabaseDdlOperationSettings() - .getInitialCallSettings() - .toBuilder() - .setRetrySettings(retrySettings) - .setRetryableCodes(ImmutableSet.of()) - .build()); - } spanner = builder.build().getService(); client = spanner.getDatabaseAdminClient(); } @@ -319,12 +275,7 @@ public void tearDown() throws Exception { } private Exception setupException() { - if (exceptionType.isRetryable()) { - if (!enableGaxRetries) { - expectedException.expect( - SpannerMatchers.isSpannerException(exceptionType.getExpectedErrorCodeWithoutGax())); - } - } else { + if (!exceptionType.isRetryable()) { expectedException.expect( SpannerMatchers.isSpannerException(exceptionType.getExpectedErrorCodeWithGax())); } diff --git a/google-cloud-clients/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceAdminGaxTest.java b/google-cloud-clients/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceAdminGaxTest.java index ce318af0624d..32ad85ec339f 100644 --- a/google-cloud-clients/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceAdminGaxTest.java +++ b/google-cloud-clients/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceAdminGaxTest.java @@ -21,13 +21,11 @@ import com.google.api.gax.longrunning.OperationFuture; import com.google.api.gax.paging.Page; import com.google.api.gax.retrying.RetrySettings; -import com.google.api.gax.rpc.StatusCode; import com.google.api.gax.rpc.UnaryCallSettings; import com.google.api.gax.rpc.UnaryCallSettings.Builder; import com.google.cloud.NoCredentials; import com.google.cloud.spanner.admin.instance.v1.MockInstanceAdminImpl; import com.google.common.base.Throwables; -import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.protobuf.AbstractMessage; import com.google.protobuf.Any; @@ -186,22 +184,17 @@ public boolean isRetryable() { private static LocalChannelProvider channelProvider; @Parameter(0) - public boolean enableGaxRetries; - - @Parameter(1) public int exceptionAtCall; - @Parameter(2) + @Parameter(1) public ExceptionType exceptionType; - @Parameters(name = "enable GAX retries = {0}, exception at call = {1}, exception type = {2}") + @Parameters(name = "exception at call = {0}, exception type = {1}") public static Collection data() { List params = new ArrayList<>(); - for (boolean enableRetries : new boolean[] {true, false}) { - for (int exceptionAtCall : new int[] {0, 1}) { - for (ExceptionType exceptionType : ExceptionType.values()) { - params.add(new Object[] {enableRetries, exceptionAtCall, exceptionType}); - } + for (int exceptionAtCall : new int[] {0, 1}) { + for (ExceptionType exceptionType : ExceptionType.values()) { + params.add(new Object[] {exceptionAtCall, exceptionType}); } } return params; @@ -275,43 +268,6 @@ public Void apply(Builder input) { .toBuilder() .setRetrySettings(retrySettings) .build()); - if (!enableGaxRetries) { - // Disable retries by removing all retryable codes. - builder - .getInstanceAdminStubSettingsBuilder() - .applyToAllUnaryMethods( - new ApiFunction, Void>() { - @Override - public Void apply(Builder input) { - input.setRetryableCodes(ImmutableSet.of()); - return null; - } - }); - builder - .getInstanceAdminStubSettingsBuilder() - .createInstanceOperationSettings() - .setInitialCallSettings( - builder - .getInstanceAdminStubSettingsBuilder() - .createInstanceOperationSettings() - .getInitialCallSettings() - .toBuilder() - .setRetrySettings(retrySettings) - .setRetryableCodes(ImmutableSet.of()) - .build()); - builder - .getInstanceAdminStubSettingsBuilder() - .updateInstanceOperationSettings() - .setInitialCallSettings( - builder - .getInstanceAdminStubSettingsBuilder() - .updateInstanceOperationSettings() - .getInitialCallSettings() - .toBuilder() - .setRetrySettings(retrySettings) - .setRetryableCodes(ImmutableSet.of()) - .build()); - } spanner = builder.build().getService(); client = spanner.getInstanceAdminClient(); } @@ -322,12 +278,7 @@ public void tearDown() throws Exception { } private Exception setupException() { - if (exceptionType.isRetryable()) { - if (!enableGaxRetries) { - expectedException.expect( - SpannerMatchers.isSpannerException(exceptionType.getExpectedErrorCodeWithoutGax())); - } - } else { + if (!exceptionType.isRetryable()) { expectedException.expect( SpannerMatchers.isSpannerException(exceptionType.getExpectedErrorCodeWithGax())); } diff --git a/google-cloud-clients/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerGaxRetryTest.java b/google-cloud-clients/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerGaxRetryTest.java index 668ddfd6a0c8..44b33c5a4574 100644 --- a/google-cloud-clients/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerGaxRetryTest.java +++ b/google-cloud-clients/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerGaxRetryTest.java @@ -24,7 +24,6 @@ import com.google.api.gax.core.NoCredentialsProvider; import com.google.api.gax.grpc.testing.LocalChannelProvider; import com.google.api.gax.retrying.RetrySettings; -import com.google.api.gax.rpc.StatusCode; import com.google.api.gax.rpc.UnaryCallSettings; import com.google.api.gax.rpc.UnaryCallSettings.Builder; import com.google.cloud.NoCredentials; @@ -33,7 +32,6 @@ import com.google.cloud.spanner.TransactionRunner.TransactionCallable; import com.google.cloud.spanner.v1.SpannerClient; import com.google.cloud.spanner.v1.SpannerSettings; -import com.google.common.collect.ImmutableSet; import com.google.protobuf.ListValue; import com.google.spanner.v1.ResultSetMetadata; import com.google.spanner.v1.StructType; @@ -43,26 +41,22 @@ import io.grpc.StatusRuntimeException; import io.grpc.inprocess.InProcessServerBuilder; import java.io.IOException; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; -import java.util.List; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.atomic.AtomicInteger; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; +import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameter; -import org.junit.runners.Parameterized.Parameters; +import org.junit.runners.JUnit4; import org.threeten.bp.Duration; -@RunWith(Parameterized.class) +@RunWith(JUnit4.class) public class SpannerGaxRetryTest { private static final ResultSetMetadata READ_METADATA = ResultSetMetadata.newBuilder() @@ -144,17 +138,6 @@ public class SpannerGaxRetryTest { private static Spanner spanner; private static DatabaseClient client; - @Parameter(0) - public boolean enableGaxRetries; - - @Parameters(name = "enable GAX retries = {0}") - public static Collection data() { - List params = new ArrayList<>(); - params.add(new Object[] {true}); - params.add(new Object[] {false}); - return params; - } - @Rule public ExpectedException expectedException = ExpectedException.none(); @BeforeClass @@ -232,27 +215,6 @@ public Void apply(Builder input) { .executeStreamingSqlSettings() .setRetrySettings(retrySettings); builder.getSpannerStubSettingsBuilder().streamingReadSettings().setRetrySettings(retrySettings); - if (!enableGaxRetries) { - // Disable retries by removing all retryable codes. - builder - .getSpannerStubSettingsBuilder() - .applyToAllUnaryMethods( - new ApiFunction, Void>() { - @Override - public Void apply(Builder input) { - input.setRetryableCodes(ImmutableSet.of()); - return null; - } - }); - builder - .getSpannerStubSettingsBuilder() - .executeStreamingSqlSettings() - .setRetryableCodes(ImmutableSet.of()); - builder - .getSpannerStubSettingsBuilder() - .streamingReadSettings() - .setRetryableCodes(ImmutableSet.of()); - } spanner = builder.build().getService(); client = spanner.getDatabaseClient(DatabaseId.of("[PROJECT]", "[INSTANCE]", "[DATABASE]")); } @@ -297,9 +259,7 @@ public Long run(TransactionContext transaction) throws Exception { @Test public void singleUseTimeout() { - if (enableGaxRetries) { - expectedException.expect(SpannerMatchers.isSpannerException(ErrorCode.DEADLINE_EXCEEDED)); - } + expectedException.expect(SpannerMatchers.isSpannerException(ErrorCode.DEADLINE_EXCEEDED)); mockSpanner.setCreateSessionExecutionTime(ONE_SECOND); try (ResultSet rs = client.singleUse().executeQuery(SELECT1AND2)) { while (rs.next()) {} @@ -308,9 +268,6 @@ public void singleUseTimeout() { @Test public void singleUseUnavailable() { - if (!enableGaxRetries) { - expectedException.expect(SpannerMatchers.isSpannerException(ErrorCode.UNAVAILABLE)); - } mockSpanner.addException(UNAVAILABLE); try (ResultSet rs = client.singleUse().executeQuery(SELECT1AND2)) { while (rs.next()) {} @@ -346,9 +303,7 @@ public void singleUseInternal() { @Test public void singleUseReadOnlyTransactionTimeout() { - if (enableGaxRetries) { - expectedException.expect(SpannerMatchers.isSpannerException(ErrorCode.DEADLINE_EXCEEDED)); - } + expectedException.expect(SpannerMatchers.isSpannerException(ErrorCode.DEADLINE_EXCEEDED)); mockSpanner.setCreateSessionExecutionTime(ONE_SECOND); try (ResultSet rs = client.singleUseReadOnlyTransaction().executeQuery(SELECT1AND2)) { while (rs.next()) {} @@ -357,9 +312,6 @@ public void singleUseReadOnlyTransactionTimeout() { @Test public void singleUseReadOnlyTransactionUnavailable() { - if (!enableGaxRetries) { - expectedException.expect(SpannerMatchers.isSpannerException(ErrorCode.UNAVAILABLE)); - } mockSpanner.addException(UNAVAILABLE); try (ResultSet rs = client.singleUseReadOnlyTransaction().executeQuery(SELECT1AND2)) { while (rs.next()) {} @@ -367,18 +319,17 @@ public void singleUseReadOnlyTransactionUnavailable() { } @Test + @Ignore("enable once gax 1.47 is released") public void singleUseExecuteStreamingSqlTimeout() { - // Streaming calls do not timeout. - mockSpanner.setExecuteStreamingSqlExecutionTime(ONE_SECOND); + expectedException.expect(SpannerMatchers.isSpannerException(ErrorCode.DEADLINE_EXCEEDED)); try (ResultSet rs = client.singleUse().executeQuery(SELECT1AND2)) { + mockSpanner.setExecuteStreamingSqlExecutionTime(ONE_SECOND); while (rs.next()) {} } } @Test public void singleUseExecuteStreamingSqlUnavailable() { - // executeStreamingSql is always retried by the Spanner library, even if gax retries have been - // disabled. try (ResultSet rs = client.singleUse().executeQuery(SELECT1AND2)) { mockSpanner.addException(UNAVAILABLE); while (rs.next()) {} @@ -388,9 +339,7 @@ public void singleUseExecuteStreamingSqlUnavailable() { @Test public void readWriteTransactionTimeout() { warmUpSessionPool(); - if (enableGaxRetries) { - expectedException.expect(SpannerMatchers.isSpannerException(ErrorCode.DEADLINE_EXCEEDED)); - } + expectedException.expect(SpannerMatchers.isSpannerException(ErrorCode.DEADLINE_EXCEEDED)); mockSpanner.setBeginTransactionExecutionTime(ONE_SECOND); TransactionRunner runner = client.readWriteTransaction(); long updateCount = @@ -407,9 +356,6 @@ public Long run(TransactionContext transaction) throws Exception { @Test public void readWriteTransactionUnavailable() { warmUpSessionPool(); - if (!enableGaxRetries) { - expectedException.expect(SpannerMatchers.isSpannerException(ErrorCode.UNAVAILABLE)); - } mockSpanner.addException(UNAVAILABLE); TransactionRunner runner = client.readWriteTransaction(); long updateCount = @@ -492,9 +438,7 @@ public Long run(TransactionContext transaction) throws Exception { @Test public void transactionManagerTimeout() { warmUpSessionPool(); - if (enableGaxRetries) { - expectedException.expect(SpannerMatchers.isSpannerException(ErrorCode.DEADLINE_EXCEEDED)); - } + expectedException.expect(SpannerMatchers.isSpannerException(ErrorCode.DEADLINE_EXCEEDED)); mockSpanner.setBeginTransactionExecutionTime(ONE_SECOND); try (TransactionManager txManager = client.transactionManager()) { TransactionContext tx = txManager.begin(); @@ -514,9 +458,6 @@ public void transactionManagerTimeout() { @Test public void transactionManagerUnavailable() { warmUpSessionPool(); - if (!enableGaxRetries) { - expectedException.expect(SpannerMatchers.isSpannerException(ErrorCode.UNAVAILABLE)); - } mockSpanner.addException(UNAVAILABLE); try (TransactionManager txManager = client.transactionManager()) { TransactionContext tx = txManager.begin();