From e20cf0e8bc02c3ca5742e66d132ad40988efe2fc Mon Sep 17 00:00:00 2001 From: Thiago Nunes Date: Wed, 23 Sep 2020 09:18:47 +1000 Subject: [PATCH] chore: refactors tests Separates PITR database tests into 2 files for clarity. --- .../spanner/it/ITPitrCreateDatabaseTest.java | 136 ++++++++++++++++++ ...est.java => ITPitrUpdateDatabaseTest.java} | 75 ++-------- 2 files changed, 145 insertions(+), 66 deletions(-) create mode 100644 google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITPitrCreateDatabaseTest.java rename google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/{ITPitrDatabaseTest.java => ITPitrUpdateDatabaseTest.java} (70%) diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITPitrCreateDatabaseTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITPitrCreateDatabaseTest.java new file mode 100644 index 00000000000..11676e891bb --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITPitrCreateDatabaseTest.java @@ -0,0 +1,136 @@ +/* + * Copyright 2020 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.it; + +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.fail; + +import com.google.cloud.spanner.Database; +import com.google.cloud.spanner.DatabaseAdminClient; +import com.google.cloud.spanner.DatabaseId; +import com.google.cloud.spanner.DatabaseNotFoundException; +import com.google.cloud.spanner.ErrorCode; +import com.google.cloud.spanner.IntegrationTestEnv; +import com.google.cloud.spanner.ParallelIntegrationTest; +import com.google.cloud.spanner.SpannerException; +import com.google.cloud.spanner.testing.RemoteSpannerHelper; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.TimeUnit; +import org.junit.After; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.threeten.bp.Duration; + +@Category(ParallelIntegrationTest.class) +@RunWith(JUnit4.class) +public class ITPitrCreateDatabaseTest { + + private static final Duration OPERATION_TIMEOUT = Duration.ofMinutes(2); + private static final String VERSION_RETENTION_PERIOD = "7d"; + + @ClassRule public static IntegrationTestEnv env = new IntegrationTestEnv(); + private RemoteSpannerHelper testHelper; + private DatabaseAdminClient dbAdminClient; + private List databasesToDrop; + + @Before + public void setUp() { + testHelper = env.getTestHelper(); + dbAdminClient = testHelper.getClient().getDatabaseAdminClient(); + databasesToDrop = new ArrayList<>(); + } + + @After + public void tearDown() { + for (Database database : databasesToDrop) { + final DatabaseId id = database.getId(); + dbAdminClient.dropDatabase(id.getInstanceId().getInstance(), id.getDatabase()); + } + } + + @Test + public void returnsTheVersionRetentionPeriodSetThroughCreateDatabase() throws Exception { + final String instanceId = testHelper.getInstanceId().getInstance(); + final String databaseId = testHelper.getUniqueDatabaseId(); + final String extraStatement = + "ALTER DATABASE " + + databaseId + + " SET OPTIONS (version_retention_period = '" + + VERSION_RETENTION_PERIOD + + "')"; + + final Database database = createDatabase(instanceId, databaseId, extraStatement); + + assertThat(database.getVersionRetentionPeriod()).isEqualTo(VERSION_RETENTION_PERIOD); + assertThat(database.getEarliestVersionTime()).isNotNull(); + } + + @Test + public void returnsTheVersionRetentionPeriodSetThroughGetDatabase() throws Exception { + final String instanceId = testHelper.getInstanceId().getInstance(); + final String databaseId = testHelper.getUniqueDatabaseId(); + final String extraStatement = + "ALTER DATABASE " + + databaseId + + " SET OPTIONS (version_retention_period = '" + + VERSION_RETENTION_PERIOD + + "')"; + + createDatabase(instanceId, databaseId, extraStatement); + final Database database = dbAdminClient.getDatabase(instanceId, databaseId); + + assertThat(database.getVersionRetentionPeriod()).isEqualTo(VERSION_RETENTION_PERIOD); + assertThat(database.getEarliestVersionTime()).isNotNull(); + } + + @Test(expected = DatabaseNotFoundException.class) + public void returnsAnErrorWhenAnInvalidVersionRetentionPeriodIsGiven() { + final String instanceId = testHelper.getInstanceId().getInstance(); + final String databaseId = testHelper.getUniqueDatabaseId(); + final String extraStatement = + "ALTER DATABASE " + databaseId + " SET OPTIONS (version_retention_period = '0d')"; + + try { + createDatabase(instanceId, databaseId, extraStatement); + fail("Expected invalid argument error when setting invalid version retention period"); + } catch (Exception e) { + SpannerException spannerException = (SpannerException) e.getCause(); + assertThat(spannerException.getErrorCode()).isEqualTo(ErrorCode.INVALID_ARGUMENT); + } + + // Expects a database not found exception + dbAdminClient.getDatabase(instanceId, databaseId); + } + + private Database createDatabase( + final String instanceId, final String databaseId, final String extraStatement) + throws Exception { + final Database database = + dbAdminClient + .createDatabase(instanceId, databaseId, Collections.singletonList(extraStatement)) + .get(OPERATION_TIMEOUT.toNanos(), TimeUnit.NANOSECONDS); + databasesToDrop.add(database); + + return database; + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITPitrDatabaseTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITPitrUpdateDatabaseTest.java similarity index 70% rename from google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITPitrDatabaseTest.java rename to google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITPitrUpdateDatabaseTest.java index ffb0447a676..a651ea89bf6 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITPitrDatabaseTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITPitrUpdateDatabaseTest.java @@ -24,7 +24,6 @@ import com.google.cloud.spanner.DatabaseAdminClient; import com.google.cloud.spanner.DatabaseClient; import com.google.cloud.spanner.DatabaseId; -import com.google.cloud.spanner.DatabaseNotFoundException; import com.google.cloud.spanner.ErrorCode; import com.google.cloud.spanner.IntegrationTestEnv; import com.google.cloud.spanner.ParallelIntegrationTest; @@ -46,23 +45,21 @@ @Category(ParallelIntegrationTest.class) @RunWith(JUnit4.class) -public class ITPitrDatabaseTest { +public class ITPitrUpdateDatabaseTest { - private static final Duration OPERATION_TIMEOUT = Duration.ofMinutes(1); + private static final Duration OPERATION_TIMEOUT = Duration.ofMinutes(2); private static final String VERSION_RETENTION_PERIOD = "7d"; @ClassRule public static IntegrationTestEnv env = new IntegrationTestEnv(); - private static RemoteSpannerHelper testHelper; private static DatabaseAdminClient dbAdminClient; private static DatabaseClient dbClient; - private static String projectId; private static String instanceId; private static String databaseId; @BeforeClass public static void setUp() throws Exception { - testHelper = env.getTestHelper(); - projectId = testHelper.getOptions().getProjectId(); + final RemoteSpannerHelper testHelper = env.getTestHelper(); + final String projectId = testHelper.getOptions().getProjectId(); instanceId = testHelper.getInstanceId().getInstance(); databaseId = testHelper.getUniqueDatabaseId(); dbAdminClient = testHelper.getClient().getDatabaseAdminClient(); @@ -80,7 +77,7 @@ public static void tearDown() { } @Test - public void inUpdatedDatabaseReturnsTheVersionRetentionPeriodSetThroughGetDatabase() { + public void returnsTheVersionRetentionPeriodSetThroughGetDatabase() { final Database database = dbAdminClient.getDatabase(instanceId, databaseId); assertThat(database.getVersionRetentionPeriod()).isEqualTo(VERSION_RETENTION_PERIOD); @@ -88,7 +85,7 @@ public void inUpdatedDatabaseReturnsTheVersionRetentionPeriodSetThroughGetDataba } @Test - public void inUpdatedDatabaseReturnsTheVersionRetentionPeriodSetThroughListDatabases() { + public void returnsTheVersionRetentionPeriodSetThroughListDatabases() { final Page page = dbAdminClient.listDatabases(instanceId); for (Database database : page.iterateAll()) { @@ -101,7 +98,7 @@ public void inUpdatedDatabaseReturnsTheVersionRetentionPeriodSetThroughListDatab } @Test - public void inUpdatedDatabaseReturnsTheVersionRetentionPeriodSetThroughGetDatabaseDdl() { + public void returnsTheVersionRetentionPeriodSetThroughGetDatabaseDdl() { final List ddls = dbAdminClient.getDatabaseDdl(instanceId, databaseId); boolean hasVersionRetentionPeriodStatement = false; @@ -116,7 +113,7 @@ public void inUpdatedDatabaseReturnsTheVersionRetentionPeriodSetThroughGetDataba } @Test - public void inUpdatedDatabaseReturnsTheVersionRetentionPeriodSetThroughInformationSchema() { + public void returnsTheVersionRetentionPeriodSetThroughInformationSchema() { final ResultSet rs = dbClient .singleUse() @@ -135,7 +132,7 @@ public void inUpdatedDatabaseReturnsTheVersionRetentionPeriodSetThroughInformati } @Test - public void inUpdateDatabaseReturnsAnErrorWhenAnInvalidRetentionPeriodIsGiven() { + public void returnsAnErrorWhenAnInvalidRetentionPeriodIsGiven() { try { dbAdminClient .updateDatabaseDdl( @@ -159,60 +156,6 @@ public void inUpdateDatabaseReturnsAnErrorWhenAnInvalidRetentionPeriodIsGiven() assertThat(database.getEarliestVersionTime()).isNotNull(); } - @Test - public void inNewDatabaseReturnsTheVersionRetentionPeriodSetThroughCreateDatabase() - throws Exception { - final String instanceId = testHelper.getInstanceId().getInstance(); - final String newDatabaseId = testHelper.getUniqueDatabaseId(); - final String versionRetentionPeriodStatement = - "ALTER DATABASE " - + newDatabaseId - + " SET OPTIONS (version_retention_period = '" - + VERSION_RETENTION_PERIOD - + "')"; - - try { - final Database database = - createDatabase( - dbAdminClient, - instanceId, - newDatabaseId, - Collections.singletonList(versionRetentionPeriodStatement)); - - assertThat(database.getVersionRetentionPeriod()).isEqualTo(VERSION_RETENTION_PERIOD); - assertThat(database.getEarliestVersionTime()).isNotNull(); - } finally { - dbAdminClient.dropDatabase(instanceId, newDatabaseId); - } - } - - @Test - public void inNewDatabaseReturnsAnErrorWhenAnInvalidVersionRetentionPeriodIsGiven() { - final String instanceId = testHelper.getInstanceId().getInstance(); - final String newDatabaseId = testHelper.getUniqueDatabaseId(); - final String versionRetentionPeriodStatement = - "ALTER DATABASE " + newDatabaseId + " SET OPTIONS (version_retention_period = '0d')"; - - try { - createDatabase( - dbAdminClient, - instanceId, - newDatabaseId, - Collections.singletonList(versionRetentionPeriodStatement)); - fail("Expected invalid argument error when setting invalid version retention period"); - } catch (Exception e) { - SpannerException spannerException = (SpannerException) e.getCause(); - assertThat(spannerException.getErrorCode()).isEqualTo(ErrorCode.INVALID_ARGUMENT); - } - - try { - dbAdminClient.getDatabase(instanceId, newDatabaseId); - fail("Expected database not found error"); - } catch (DatabaseNotFoundException e) { - // Success case - } - } - private static Database createDatabase( final DatabaseAdminClient dbAdminClient, final String instanceId,