Skip to content

Commit f8a99e0

Browse files
authored
test: delete stale test databases (GoogleCloudPlatform#4133)
* test: delete stale test databases * test: actually delete databases * fix: fix NPE * fix: only remove stale databases once * fix: reuse baseDbId * fix: also delete stale restored databases * test: force logging of non-deleted db * fix: log non-deleted databases * fix: show age in hours * fix: drop dbs with length at least 20 * fix: drop dbs with length at least 20 * fix: delete all restored db's that have a long name * fix: use different patterns for sample and restored * fix: remove deleted check as it is no longer needed
1 parent 1b944ab commit f8a99e0

File tree

2 files changed

+44
-15
lines changed

2 files changed

+44
-15
lines changed

spanner/cloud-client/src/test/java/com/example/spanner/SpannerSampleIT.java

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818

1919
import static com.google.common.truth.Truth.assertThat;
2020

21+
import com.google.cloud.Timestamp;
2122
import com.google.cloud.spanner.BackupId;
23+
import com.google.cloud.spanner.Database;
2224
import com.google.cloud.spanner.DatabaseAdminClient;
2325
import com.google.cloud.spanner.DatabaseId;
2426
import com.google.cloud.spanner.ErrorCode;
@@ -44,10 +46,11 @@
4446
@RunWith(JUnit4.class)
4547
@SuppressWarnings("checkstyle:abbreviationaswordinname")
4648
public class SpannerSampleIT {
49+
private static final int DBID_LENGTH = 20;
4750
// The instance needs to exist for tests to pass.
4851
private static final String instanceId = System.getProperty("spanner.test.instance");
49-
private static final String databaseId =
50-
formatForTest(System.getProperty("spanner.sample.database"));
52+
private static final String baseDbId = System.getProperty("spanner.sample.database");
53+
private static final String databaseId = formatForTest(baseDbId);
5154
static Spanner spanner;
5255
static DatabaseId dbId;
5356
static DatabaseAdminClient dbClient;
@@ -70,9 +73,28 @@ public static void setUp() throws Exception {
7073
spanner = options.getService();
7174
dbClient = spanner.getDatabaseAdminClient();
7275
dbId = DatabaseId.of(options.getProjectId(), instanceId, databaseId);
73-
dbClient.dropDatabase(dbId.getInstanceId().getInstance(), dbId.getDatabase());
74-
dbClient.dropDatabase(
75-
dbId.getInstanceId().getInstance(), SpannerSample.createRestoredSampleDbId(dbId));
76+
// Delete stale test databases that have been created earlier by this test, but not deleted.
77+
deleteStaleTestDatabases(instanceId, baseDbId);
78+
}
79+
80+
static void deleteStaleTestDatabases(String instanceId, String baseDbId) {
81+
Timestamp now = Timestamp.now();
82+
Pattern samplePattern = getTestDbIdPattern(baseDbId);
83+
Pattern restoredPattern = getTestDbIdPattern("restored");
84+
for (Database db : dbClient.listDatabases(instanceId).iterateAll()) {
85+
if (TimeUnit.HOURS.convert(now.getSeconds() - db.getCreateTime().getSeconds(),
86+
TimeUnit.SECONDS) > 24) {
87+
if (db.getId().getDatabase().length() >= DBID_LENGTH) {
88+
if (samplePattern.matcher(toComparableId(baseDbId, db.getId().getDatabase())).matches()) {
89+
db.drop();
90+
}
91+
if (restoredPattern.matcher(toComparableId("restored", db.getId().getDatabase()))
92+
.matches()) {
93+
db.drop();
94+
}
95+
}
96+
}
97+
}
7698
}
7799

78100
@AfterClass
@@ -400,8 +422,21 @@ public void run() {
400422
private static int countOccurrences(String input, String search) {
401423
return input.split(search).length - 1;
402424
}
425+
426+
private static String toComparableId(String baseId, String existingId) {
427+
String zeroUuid = "00000000-0000-0000-0000-0000-00000000";
428+
int shouldBeLength = (baseId + "-" + zeroUuid).length();
429+
int missingLength = shouldBeLength - existingId.length();
430+
return existingId + zeroUuid.substring(zeroUuid.length() - missingLength);
431+
}
403432

404-
private static String formatForTest(String name) {
405-
return name + "-" + UUID.randomUUID().toString().substring(0, 20);
433+
private static Pattern getTestDbIdPattern(String baseDbId) {
434+
return Pattern.compile(
435+
baseDbId + "-[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{8}",
436+
Pattern.CASE_INSENSITIVE);
437+
}
438+
439+
static String formatForTest(String name) {
440+
return name + "-" + UUID.randomUUID().toString().substring(0, DBID_LENGTH);
406441
}
407442
}

spanner/cloud-client/src/test/java/com/example/spanner/SpannerStandaloneExamplesIT.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
import java.math.BigDecimal;
3535
import java.util.Collections;
3636
import java.util.Iterator;
37-
import java.util.UUID;
3837
import java.util.concurrent.ExecutionException;
3938
import org.junit.AfterClass;
4039
import org.junit.Before;
@@ -49,8 +48,8 @@
4948
public class SpannerStandaloneExamplesIT {
5049
// The instance needs to exist for tests to pass.
5150
private static String instanceId = System.getProperty("spanner.test.instance");
52-
private static String databaseId =
53-
formatForTest(System.getProperty("spanner.sample.database", "mysample"));
51+
private static String baseDatabaseId = System.getProperty("spanner.sample.database", "mysample");
52+
private static String databaseId = SpannerSampleIT.formatForTest(baseDatabaseId);
5453
private static DatabaseId dbId;
5554
private static DatabaseAdminClient dbClient;
5655
private static Spanner spanner;
@@ -79,7 +78,6 @@ public static void createTestDatabase() throws Exception {
7978
}
8079
}
8180
dbId = DatabaseId.of(options.getProjectId(), instanceId, databaseId);
82-
dbClient.dropDatabase(dbId.getInstanceId().getInstance(), dbId.getDatabase());
8381
dbClient
8482
.createDatabase(
8583
instanceId,
@@ -191,8 +189,4 @@ public void queryWithNumericParameter_shouldReturnResults() {
191189
runExample(() -> QueryWithNumericParameterSample.queryWithNumericParameter(client));
192190
assertThat(out).contains("4 35000");
193191
}
194-
195-
static String formatForTest(String name) {
196-
return name + "-" + UUID.randomUUID().toString().substring(0, 20);
197-
}
198192
}

0 commit comments

Comments
 (0)