diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableMaterializedViewIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableMaterializedViewIT.java index c12d9332b2ed..b339ad1d6407 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableMaterializedViewIT.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableMaterializedViewIT.java @@ -24,11 +24,9 @@ import com.google.api.gax.rpc.NotFoundException; import com.google.cloud.bigtable.admin.v2.BigtableInstanceAdminClient; import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient; -import com.google.cloud.bigtable.admin.v2.models.CreateInstanceRequest; import com.google.cloud.bigtable.admin.v2.models.CreateMaterializedViewRequest; import com.google.cloud.bigtable.admin.v2.models.CreateTableRequest; import com.google.cloud.bigtable.admin.v2.models.MaterializedView; -import com.google.cloud.bigtable.admin.v2.models.StorageType; import com.google.cloud.bigtable.admin.v2.models.Table; import com.google.cloud.bigtable.admin.v2.models.UpdateMaterializedViewRequest; import com.google.cloud.bigtable.test_helpers.env.EmulatorEnv; @@ -38,7 +36,6 @@ import java.io.IOException; import java.util.List; import java.util.logging.Logger; -import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; import org.junit.ClassRule; @@ -55,9 +52,8 @@ public class BigtableMaterializedViewIT { private static final int[] BACKOFF_DURATION = {2, 4, 8, 16, 32, 64, 128, 256, 512, 1024}; private BigtableInstanceAdminClient client; - private BigtableTableAdminClient tableAdminClient; private Table testTable; - private String instanceId = ""; + private String instanceId = testEnvRule.env().getInstanceId(); // TODO: Update this test once emulator supports InstanceAdmin operation // https://github.com/googleapis/google-cloud-go/issues/1069 @@ -72,23 +68,7 @@ public static void validatePlatform() throws IOException { @Before public void setUp() throws InterruptedException, IOException { client = testEnvRule.env().getInstanceAdminClient(); - - instanceId = new PrefixGenerator().newPrefix(); - client.createInstance( - CreateInstanceRequest.of(instanceId) - .setDisplayName("BigtableMaterializedViewIT") - .addCluster( - instanceId + "-c1", testEnvRule.env().getPrimaryZone(), 1, StorageType.SSD)); - tableAdminClient = testEnvRule.env().getTableAdminClientForInstance(instanceId); - - testTable = createTestTable(tableAdminClient); - } - - @After - public void deleteInstance() { - if (!instanceId.isEmpty()) { - client.deleteInstance(instanceId); - } + testTable = createTestTable(testEnvRule.env().getTableAdminClient()); } @Test diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/test_helpers/env/TestEnvRule.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/test_helpers/env/TestEnvRule.java index 86fc88adff57..0f3d5e3ef304 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/test_helpers/env/TestEnvRule.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/test_helpers/env/TestEnvRule.java @@ -24,8 +24,12 @@ import com.google.cloud.bigtable.admin.v2.models.AppProfile; import com.google.cloud.bigtable.admin.v2.models.Cluster; import com.google.cloud.bigtable.admin.v2.models.Instance; +import com.google.cloud.bigtable.admin.v2.models.LogicalView; +import com.google.cloud.bigtable.admin.v2.models.MaterializedView; import com.google.cloud.bigtable.admin.v2.models.Table; import com.google.cloud.bigtable.admin.v2.models.UpdateAuthorizedViewRequest; +import com.google.cloud.bigtable.admin.v2.models.UpdateLogicalViewRequest; +import com.google.cloud.bigtable.admin.v2.models.UpdateMaterializedViewRequest; import com.google.cloud.bigtable.admin.v2.models.UpdateTableRequest; import com.google.common.collect.ImmutableSet; import java.io.IOException; @@ -161,8 +165,6 @@ void cleanUpStale() throws ExecutionException, InterruptedException, IOException /** * Clean up AppProfile that were dynamically created in the default instance that have been * orphaned. - * - * @param stalePrefix */ private void cleanupStaleTables(String stalePrefix) { LOGGER.info("Start cleaning up stale tables with stalePrefix=" + stalePrefix); @@ -213,8 +215,6 @@ private void prepTableForDelete(String tableId) { /** * Clean up AppProfile that were dynamically created in the default instance that have been * orphaned. - * - * @param stalePrefix */ private void cleanUpStaleAppProfile(String stalePrefix) { for (AppProfile appProfile : @@ -239,8 +239,6 @@ private void cleanUpStaleAppProfile(String stalePrefix) { /** * Clean up clusters that were dynamically created in the default instance that have been * orphaned. - * - * @param stalePrefix */ private void cleanUpStaleClusters(String stalePrefix) throws ExecutionException, InterruptedException { @@ -264,11 +262,36 @@ private void cleanUpStaleClusters(String stalePrefix) } } - /** - * Clean up dynamically created (non-default) instances that have been orphaned. - * - * @param stalePrefix - */ + private void prepInstanceForDelete(String instanceId) { + if (env() instanceof EmulatorEnv) { + return; + } + // Unprotected MaterializedViews. + for (MaterializedView materializedView : + env().getInstanceAdminClient().listMaterializedViews(instanceId)) { + try { + env() + .getInstanceAdminClient() + .updateMaterializedView( + UpdateMaterializedViewRequest.of(instanceId, materializedView.getId()) + .setDeletionProtection(false)); + } catch (NotFoundException ignored) { + } + } + // Unprotected LogicalViews. + for (LogicalView logicalView : env().getInstanceAdminClient().listLogicalViews(instanceId)) { + try { + env() + .getInstanceAdminClient() + .updateLogicalView( + UpdateLogicalViewRequest.of(instanceId, logicalView.getId()) + .setDeletionProtection(false)); + } catch (NotFoundException ignored) { + } + } + } + + /** Clean up dynamically created (non-default) instances that have been orphaned. */ private void cleanUpStaleInstances(String stalePrefix) throws IOException, ExecutionException, InterruptedException { for (Instance instance : env().getInstanceAdminClient().listInstances()) { @@ -279,6 +302,7 @@ private void cleanUpStaleInstances(String stalePrefix) if (isNewerThanStale) { continue; } + prepInstanceForDelete(instance.getId()); try { deleteInstance(instance.getId()); } catch (NotFoundException ignored) {