Skip to content

Commit

Permalink
chore: refactors tests
Browse files Browse the repository at this point in the history
Separates PITR database tests into 2 files for clarity.
  • Loading branch information
thiagotnunes committed Sep 29, 2020
1 parent a4aea2b commit e20cf0e
Show file tree
Hide file tree
Showing 2 changed files with 145 additions and 66 deletions.
@@ -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<Database> 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;
}
}
Expand Up @@ -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;
Expand All @@ -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();
Expand All @@ -80,15 +77,15 @@ 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);
assertThat(database.getEarliestVersionTime()).isNotNull();
}

@Test
public void inUpdatedDatabaseReturnsTheVersionRetentionPeriodSetThroughListDatabases() {
public void returnsTheVersionRetentionPeriodSetThroughListDatabases() {
final Page<Database> page = dbAdminClient.listDatabases(instanceId);

for (Database database : page.iterateAll()) {
Expand All @@ -101,7 +98,7 @@ public void inUpdatedDatabaseReturnsTheVersionRetentionPeriodSetThroughListDatab
}

@Test
public void inUpdatedDatabaseReturnsTheVersionRetentionPeriodSetThroughGetDatabaseDdl() {
public void returnsTheVersionRetentionPeriodSetThroughGetDatabaseDdl() {
final List<String> ddls = dbAdminClient.getDatabaseDdl(instanceId, databaseId);

boolean hasVersionRetentionPeriodStatement = false;
Expand All @@ -116,7 +113,7 @@ public void inUpdatedDatabaseReturnsTheVersionRetentionPeriodSetThroughGetDataba
}

@Test
public void inUpdatedDatabaseReturnsTheVersionRetentionPeriodSetThroughInformationSchema() {
public void returnsTheVersionRetentionPeriodSetThroughInformationSchema() {
final ResultSet rs =
dbClient
.singleUse()
Expand All @@ -135,7 +132,7 @@ public void inUpdatedDatabaseReturnsTheVersionRetentionPeriodSetThroughInformati
}

@Test
public void inUpdateDatabaseReturnsAnErrorWhenAnInvalidRetentionPeriodIsGiven() {
public void returnsAnErrorWhenAnInvalidRetentionPeriodIsGiven() {
try {
dbAdminClient
.updateDatabaseDdl(
Expand All @@ -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,
Expand Down

0 comments on commit e20cf0e

Please sign in to comment.