From bcd54f960b4cc0a4a72ca242343cf03351732124 Mon Sep 17 00:00:00 2001 From: Ron Gal Date: Thu, 13 Mar 2025 17:09:19 +0000 Subject: [PATCH 01/17] feat(bigtable): Add integration tests for Materialized Views --- .../v2/it/BigtableInstanceAdminClientIT.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java index 93e8f5b790..8b92296a64 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java @@ -22,18 +22,24 @@ import com.google.api.gax.rpc.FailedPreconditionException; import com.google.cloud.Policy; import com.google.cloud.bigtable.admin.v2.BigtableInstanceAdminClient; +import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient; 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.ClusterAutoscalingConfig; import com.google.cloud.bigtable.admin.v2.models.CreateAppProfileRequest; import com.google.cloud.bigtable.admin.v2.models.CreateClusterRequest; 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.Instance; import com.google.cloud.bigtable.admin.v2.models.Instance.Type; +import com.google.cloud.bigtable.admin.v2.models.MaterializedView; import com.google.cloud.bigtable.admin.v2.models.StaticClusterSize; 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.UpdateAppProfileRequest; import com.google.cloud.bigtable.admin.v2.models.UpdateInstanceRequest; +import com.google.cloud.bigtable.admin.v2.models.UpdateMaterializedViewRequest; import com.google.cloud.bigtable.test_helpers.env.EmulatorEnv; import com.google.cloud.bigtable.test_helpers.env.PrefixGenerator; import com.google.cloud.bigtable.test_helpers.env.TestEnvRule; @@ -624,6 +630,36 @@ public void createClusterWithManualScalingTest() { } } + @Test + public void materializedViewTest() { + BigtableTableAdminClient tableAdmin = testEnvRule.env().getTableAdminClient(); + String tableId = + PrefixGenerator.newPrefix("BigtableInstanceAdminClientIT#materializedViewTest"); + Table testTable = tableAdmin.createTable(CreateTableRequest.of(tableId).addFamily("cf1")); + + String testMaterializedView = prefixGenerator.newPrefix(); + + MaterializedView newlyCreatedMaterializedView = + client.createMaterializedView( + CreateMaterializedViewRequest.of(instanceId, testMaterializedView) + .setDeletionProtection(true) + .setQuery("SELECT _key, MAX(cf1['column']) as column FROM `" + tableId + "`")); + + MaterializedView updated = + client.updateMaterializedView( + UpdateMaterializedViewRequest.of(newlyCreatedMaterializedView) + .setDeletionProtection(false)); + + MaterializedView freshMaterializedView = + client.getMaterializedView(instanceId, testMaterializedView); + assertThat(freshMaterializedView.isDeletionProtected()) + .isEqualTo(updated.isDeletionProtected()); + + assertThat(client.listMaterializedViews(instanceId)).contains(freshMaterializedView); + + client.deleteMaterializedView(instanceId, testMaterializedView); + } + // To improve test runtime, piggyback off the instance creation/deletion test's fresh instance. private void basicClusterOperationTestHelper(String targetInstanceId, String targetClusterId) { List clusters = client.listClusters(targetInstanceId); From 07235fee9c1d8684dc4a80ecfc02849991a3949d Mon Sep 17 00:00:00 2001 From: Ron Gal Date: Thu, 13 Mar 2025 17:13:25 +0000 Subject: [PATCH 02/17] feat(bigtable): Add integration tests for Logical Views --- .../v2/it/BigtableInstanceAdminClientIT.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java index 8b92296a64..5b979a2bc0 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java @@ -29,16 +29,19 @@ import com.google.cloud.bigtable.admin.v2.models.CreateAppProfileRequest; import com.google.cloud.bigtable.admin.v2.models.CreateClusterRequest; import com.google.cloud.bigtable.admin.v2.models.CreateInstanceRequest; +import com.google.cloud.bigtable.admin.v2.models.CreateLogicalViewRequest; 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.Instance; import com.google.cloud.bigtable.admin.v2.models.Instance.Type; +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.StaticClusterSize; 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.UpdateAppProfileRequest; import com.google.cloud.bigtable.admin.v2.models.UpdateInstanceRequest; +import com.google.cloud.bigtable.admin.v2.models.UpdateLogicalViewRequest; import com.google.cloud.bigtable.admin.v2.models.UpdateMaterializedViewRequest; import com.google.cloud.bigtable.test_helpers.env.EmulatorEnv; import com.google.cloud.bigtable.test_helpers.env.PrefixGenerator; @@ -660,6 +663,36 @@ public void materializedViewTest() { client.deleteMaterializedView(instanceId, testMaterializedView); } + + @Test + public void logicalViewTest() { + BigtableTableAdminClient tableAdmin = testEnvRule.env().getTableAdminClient(); + String tableId = + PrefixGenerator.newPrefix("BigtableInstanceAdminClientIT#logicalViewTest"); + Table testTable = tableAdmin.createTable(CreateTableRequest.of(tableId).addFamily("cf1")); + + String testLogicalView = prefixGenerator.newPrefix(); + + LogicalView newlyCreatedLogicalView = + client.createLogicalView( + CreateLogicalViewRequest.of(instanceId, testLogicalView) + .setQuery("SELECT _key, MAX(cf1['column']) as column FROM `" + tableId + "`")); + + LogicalView updated = + client.updateLogicalView( + UpdateLogicalViewRequest.of(newlyCreatedLogicalView) + .setQuery("SELECT _key, MAX(cf1['column2']) as column FROM `" + tableId + "`")); + + LogicalView freshLogicalView = + client.getLogicalView(instanceId, testLogicalView); + assertThat(freshLogicalView.getQuery()) + .isEqualTo(updated.getQuery()); + + assertThat(client.listLogicalViews(instanceId)).contains(freshLogicalView); + + client.deleteLogicalView(instanceId, testLogicalView); + } + // To improve test runtime, piggyback off the instance creation/deletion test's fresh instance. private void basicClusterOperationTestHelper(String targetInstanceId, String targetClusterId) { List clusters = client.listClusters(targetInstanceId); From d8471ae9e8d9bf11db914a0891deb8a06595354d Mon Sep 17 00:00:00 2001 From: Ron Gal Date: Thu, 13 Mar 2025 17:17:24 +0000 Subject: [PATCH 03/17] fix formatting --- .../admin/v2/it/BigtableInstanceAdminClientIT.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java index 5b979a2bc0..b05836c7b6 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java @@ -663,12 +663,10 @@ public void materializedViewTest() { client.deleteMaterializedView(instanceId, testMaterializedView); } - @Test public void logicalViewTest() { BigtableTableAdminClient tableAdmin = testEnvRule.env().getTableAdminClient(); - String tableId = - PrefixGenerator.newPrefix("BigtableInstanceAdminClientIT#logicalViewTest"); + String tableId = PrefixGenerator.newPrefix("BigtableInstanceAdminClientIT#logicalViewTest"); Table testTable = tableAdmin.createTable(CreateTableRequest.of(tableId).addFamily("cf1")); String testLogicalView = prefixGenerator.newPrefix(); @@ -683,10 +681,8 @@ public void logicalViewTest() { UpdateLogicalViewRequest.of(newlyCreatedLogicalView) .setQuery("SELECT _key, MAX(cf1['column2']) as column FROM `" + tableId + "`")); - LogicalView freshLogicalView = - client.getLogicalView(instanceId, testLogicalView); - assertThat(freshLogicalView.getQuery()) - .isEqualTo(updated.getQuery()); + LogicalView freshLogicalView = client.getLogicalView(instanceId, testLogicalView); + assertThat(freshLogicalView.getQuery()).isEqualTo(updated.getQuery()); assertThat(client.listLogicalViews(instanceId)).contains(freshLogicalView); From f0f7008a698cb4d13593b099fed1a1ef7e0324b1 Mon Sep 17 00:00:00 2001 From: Ron Gal Date: Tue, 22 Apr 2025 18:36:15 +0000 Subject: [PATCH 04/17] fix tests --- .../admin/v2/it/BigtableInstanceAdminClientIT.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java index b05836c7b6..ed71672552 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java @@ -646,7 +646,10 @@ public void materializedViewTest() { client.createMaterializedView( CreateMaterializedViewRequest.of(instanceId, testMaterializedView) .setDeletionProtection(true) - .setQuery("SELECT _key, MAX(cf1['column']) as column FROM `" + tableId + "`")); + .setQuery( + "SELECT _key, MAX(cf1['column']) as column FROM `" + + tableId + + "` GROUP BY _key")); MaterializedView updated = client.updateMaterializedView( @@ -674,12 +677,12 @@ public void logicalViewTest() { LogicalView newlyCreatedLogicalView = client.createLogicalView( CreateLogicalViewRequest.of(instanceId, testLogicalView) - .setQuery("SELECT _key, MAX(cf1['column']) as column FROM `" + tableId + "`")); + .setQuery("SELECT _key, cf1['column'] as column FROM `" + tableId + "`")); LogicalView updated = client.updateLogicalView( UpdateLogicalViewRequest.of(newlyCreatedLogicalView) - .setQuery("SELECT _key, MAX(cf1['column2']) as column FROM `" + tableId + "`")); + .setQuery("SELECT _key, cf1['column2'] as column FROM `" + tableId + "`")); LogicalView freshLogicalView = client.getLogicalView(instanceId, testLogicalView); assertThat(freshLogicalView.getQuery()).isEqualTo(updated.getQuery()); From 8f526d66f83448a9ebe39ea68641c8780818501b Mon Sep 17 00:00:00 2001 From: Ron Gal Date: Wed, 23 Apr 2025 18:41:18 +0000 Subject: [PATCH 05/17] fixed according to PR comments --- .../v2/it/BigtableInstanceAdminClientIT.java | 68 ------- .../admin/v2/it/BigtableLogicalViewIT.java | 187 +++++++++++++++++ .../v2/it/BigtableMaterializedViewIT.java | 192 ++++++++++++++++++ 3 files changed, 379 insertions(+), 68 deletions(-) create mode 100644 google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java create mode 100644 google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableMaterializedViewIT.java diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java index ed71672552..93e8f5b790 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java @@ -22,27 +22,18 @@ import com.google.api.gax.rpc.FailedPreconditionException; import com.google.cloud.Policy; import com.google.cloud.bigtable.admin.v2.BigtableInstanceAdminClient; -import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient; 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.ClusterAutoscalingConfig; import com.google.cloud.bigtable.admin.v2.models.CreateAppProfileRequest; import com.google.cloud.bigtable.admin.v2.models.CreateClusterRequest; import com.google.cloud.bigtable.admin.v2.models.CreateInstanceRequest; -import com.google.cloud.bigtable.admin.v2.models.CreateLogicalViewRequest; -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.Instance; import com.google.cloud.bigtable.admin.v2.models.Instance.Type; -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.StaticClusterSize; 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.UpdateAppProfileRequest; import com.google.cloud.bigtable.admin.v2.models.UpdateInstanceRequest; -import com.google.cloud.bigtable.admin.v2.models.UpdateLogicalViewRequest; -import com.google.cloud.bigtable.admin.v2.models.UpdateMaterializedViewRequest; import com.google.cloud.bigtable.test_helpers.env.EmulatorEnv; import com.google.cloud.bigtable.test_helpers.env.PrefixGenerator; import com.google.cloud.bigtable.test_helpers.env.TestEnvRule; @@ -633,65 +624,6 @@ public void createClusterWithManualScalingTest() { } } - @Test - public void materializedViewTest() { - BigtableTableAdminClient tableAdmin = testEnvRule.env().getTableAdminClient(); - String tableId = - PrefixGenerator.newPrefix("BigtableInstanceAdminClientIT#materializedViewTest"); - Table testTable = tableAdmin.createTable(CreateTableRequest.of(tableId).addFamily("cf1")); - - String testMaterializedView = prefixGenerator.newPrefix(); - - MaterializedView newlyCreatedMaterializedView = - client.createMaterializedView( - CreateMaterializedViewRequest.of(instanceId, testMaterializedView) - .setDeletionProtection(true) - .setQuery( - "SELECT _key, MAX(cf1['column']) as column FROM `" - + tableId - + "` GROUP BY _key")); - - MaterializedView updated = - client.updateMaterializedView( - UpdateMaterializedViewRequest.of(newlyCreatedMaterializedView) - .setDeletionProtection(false)); - - MaterializedView freshMaterializedView = - client.getMaterializedView(instanceId, testMaterializedView); - assertThat(freshMaterializedView.isDeletionProtected()) - .isEqualTo(updated.isDeletionProtected()); - - assertThat(client.listMaterializedViews(instanceId)).contains(freshMaterializedView); - - client.deleteMaterializedView(instanceId, testMaterializedView); - } - - @Test - public void logicalViewTest() { - BigtableTableAdminClient tableAdmin = testEnvRule.env().getTableAdminClient(); - String tableId = PrefixGenerator.newPrefix("BigtableInstanceAdminClientIT#logicalViewTest"); - Table testTable = tableAdmin.createTable(CreateTableRequest.of(tableId).addFamily("cf1")); - - String testLogicalView = prefixGenerator.newPrefix(); - - LogicalView newlyCreatedLogicalView = - client.createLogicalView( - CreateLogicalViewRequest.of(instanceId, testLogicalView) - .setQuery("SELECT _key, cf1['column'] as column FROM `" + tableId + "`")); - - LogicalView updated = - client.updateLogicalView( - UpdateLogicalViewRequest.of(newlyCreatedLogicalView) - .setQuery("SELECT _key, cf1['column2'] as column FROM `" + tableId + "`")); - - LogicalView freshLogicalView = client.getLogicalView(instanceId, testLogicalView); - assertThat(freshLogicalView.getQuery()).isEqualTo(updated.getQuery()); - - assertThat(client.listLogicalViews(instanceId)).contains(freshLogicalView); - - client.deleteLogicalView(instanceId, testLogicalView); - } - // To improve test runtime, piggyback off the instance creation/deletion test's fresh instance. private void basicClusterOperationTestHelper(String targetInstanceId, String targetClusterId) { List clusters = client.listClusters(targetInstanceId); diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java new file mode 100644 index 0000000000..f740aa4d2f --- /dev/null +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java @@ -0,0 +1,187 @@ +/* + * Copyright 2024 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 + * + * https://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.bigtable.admin.v2.it; + +import static com.google.common.truth.Truth.assertWithMessage; +import static com.google.common.truth.TruthJUnit.assume; +import static org.junit.Assert.fail; + +import com.google.api.gax.rpc.FailedPreconditionException; +import com.google.api.gax.rpc.NotFoundException; +import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient; +import com.google.cloud.bigtable.admin.v2.models.CreateLogicalViewRequest; +import com.google.cloud.bigtable.admin.v2.models.CreateTableRequest; +import com.google.cloud.bigtable.admin.v2.models.LogicalView; +import com.google.cloud.bigtable.admin.v2.models.Table; +import com.google.cloud.bigtable.admin.v2.models.UpdateLogicalViewRequest; +import com.google.cloud.bigtable.test_helpers.env.EmulatorEnv; +import com.google.cloud.bigtable.test_helpers.env.PrefixGenerator; +import com.google.cloud.bigtable.test_helpers.env.TestEnvRule; +import io.grpc.StatusRuntimeException; +import java.util.List; +import java.util.logging.Logger; +import org.junit.BeforeClass; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class BigtableLogicalViewIT { + @ClassRule public static final TestEnvRule testEnvRule = new TestEnvRule(); + @Rule public final PrefixGenerator prefixGenerator = new PrefixGenerator(); + private static final Logger LOGGER = Logger.getLogger(BigtableLogicalViewIT.class.getName()); + private static final int[] BACKOFF_DURATION = {2, 4, 8, 16, 32, 64, 128, 256, 512, 1024}; + + private static BigtableInstanceAdminClient client; + private static Table testTable; + + private String instanceId = testEnvRule.env().getInstanceId(); + + // TODO: Update this test once emulator supports InstanceAdmin operation + // https://github.com/googleapis/google-cloud-go/issues/1069 + @BeforeClass + public static void validatePlatform() { + assume() + .withMessage("BigtableInstanceAdminClient doesn't support on Emulator") + .that(testEnvRule.env()) + .isNotInstanceOf(EmulatorEnv.class); + } + + @Before + public void setUp() throws InterruptedException { + client = testEnvRule.env().getInstanceAdminClient(); + testTable = createTestTable(testEnvRule.env().getTableAdminClient()); + } + + @Test + public void createLogicalViewAndGetLogicalViewTest() { + String logicalViewId = prefixGenerator.newPrefix(); + + CreateLogicalViewRequest request = + CreateLogicalViewRequest.of(instanceId, logicalViewId).setDeletionProtection(false); + try { + LogicalView response = client.createLogicalView(request); + assertWithMessage("Got wrong logical view Id in CreateLogicalView") + .that(response.getId()) + .isEqualTo(logicalViewId); + assertWithMessage("Got wrong deletion protection in CreateLogicalView") + .that(response.isDeletionProtected()) + .isFalse(); + assertWithMessage("Got wrong query in CreateLogicalView") + .that(response.getQuery()) + .isEqualTo(request.getQuery()); + + response = client.getLogicalView(instanceId, logicalViewId); + assertWithMessage("Got wrong logical view Id in getLogicalView") + .that(response.getId()) + .isEqualTo(logicalViewId); + assertWithMessage("Got wrong deletion protection in getLogicalView") + .that(response.isDeletionProtected()) + .isFalse(); + assertWithMessage("Got wrong query in getLogicalView") + .that(response.getQuery()) + .isEqualTo(request.getQuery()); + } finally { + client.deleteLogicalView(instanceId, logicalViewId); + } + } + + @Test + public void listLogicalViewsTest() { + String logicalViewId = prefixGenerator.newPrefix(); + + try { + client.createLogicalView(createLogicalViewRequest(logicalViewId)); + + List response = client.listLogicalViews(instanceId); + // Concurrent tests running may cause flakiness. Use containsAtLeast instead of + // containsExactly. + assertWithMessage("Got wrong logical view Ids in listLogicalViews") + .that(response) + .containsAtLeast(client.getLogicalView(instanceId, logicalViewId).getId()); + } finally { + client.deleteLogicalView(instanceId, logicalViewId); + } + } + + @Test + public void updateLogicalViewAndDeleteLogicalViewTest() throws InterruptedException { + String logicalViewId = prefixGenerator.newPrefix(); + + // Create a deletion-protected logical view. + CreateLogicalViewRequest request = + createLogicalViewRequest(logicalViewId).setDeletionProtection(true); + + LogicalView response = client.createLogicalView(request); + assertWithMessage("Got wrong deletion protection in CreateLogicalView") + .that(response.isDeletionProtected()) + .isTrue(); + + // We should not be able to delete the logical view. + try { + client.deleteLogicalView(instanceId, logicalViewId); + fail("A delete-protected logical view should not have been able to be deleted"); + } catch (FailedPreconditionException e) { + assertWithMessage("Incorrect exception type") + .that(e.getCause()) + .isInstanceOf(StatusRuntimeException.class); + } + + // Update the deletion protection bit of the logical view. + UpdateLogicalViewRequest updateRequest = + UpdateLogicalViewRequest.of(instanceId, logicalViewId).setDeletionProtection(false); + response = client.updateLogicalView(updateRequest); + assertWithMessage("Got wrong deletion protection in UpdateLogicalView") + .that(response.isDeletionProtected()) + .isFalse(); + + // Now we should be able to successfully delete the LogicalView. + client.deleteLogicalView(instanceId, logicalViewId); + try { + for (int i = 0; i < BACKOFF_DURATION.length; i++) { + client.getLogicalView(instanceId, logicalViewId); + + LOGGER.info( + "Wait for " + + BACKOFF_DURATION[i] + + " seconds for deleting logical view " + + logicalViewId); + Thread.sleep(BACKOFF_DURATION[i] * 1000); + } + fail("LogicalView was not deleted."); + } catch (NotFoundException e) { + assertWithMessage("Incorrect exception type") + .that(e.getCause()) + .isInstanceOf(StatusRuntimeException.class); + } + } + + private CreateLogicalViewRequest createLogicalViewRequest(String logicalViewId) { + return CreateLogicalViewRequest.of(instanceId, logicalViewId) + .setQuery("SELECT _key, cf1['column'] as column FROM `" + tableId + "`"); + } + + private static Table createTestTable(BigtableTableAdminClient tableAdmin) + throws InterruptedException { + String tableId = PrefixGenerator.newPrefix("BigtableLogicalViewIT#createTestTable"); + Table testTable = tableAdmin.createTable(CreateTableRequest.of(tableId).addFamily("cf1")); + + return testTable; + } +} 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 new file mode 100644 index 0000000000..025c52c17c --- /dev/null +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableMaterializedViewIT.java @@ -0,0 +1,192 @@ +/* + * Copyright 2024 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 + * + * https://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.bigtable.admin.v2.it; + +import static com.google.common.truth.Truth.assertWithMessage; +import static com.google.common.truth.TruthJUnit.assume; +import static org.junit.Assert.fail; + +import com.google.api.gax.rpc.FailedPreconditionException; +import com.google.api.gax.rpc.NotFoundException; +import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient; +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.Table; +import com.google.cloud.bigtable.admin.v2.models.UpdateMaterializedViewRequest; +import com.google.cloud.bigtable.test_helpers.env.EmulatorEnv; +import com.google.cloud.bigtable.test_helpers.env.PrefixGenerator; +import com.google.cloud.bigtable.test_helpers.env.TestEnvRule; +import io.grpc.StatusRuntimeException; +import java.util.List; +import java.util.logging.Logger; +import org.junit.BeforeClass; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class BigtableMaterializedViewIT { + @ClassRule public static final TestEnvRule testEnvRule = new TestEnvRule(); + @Rule public final PrefixGenerator prefixGenerator = new PrefixGenerator(); + private static final Logger LOGGER = Logger.getLogger(BigtableMaterializedViewIT.class.getName()); + private static final int[] BACKOFF_DURATION = {2, 4, 8, 16, 32, 64, 128, 256, 512, 1024}; + + private static BigtableInstanceAdminClient client; + private static Table testTable; + + private String instanceId = testEnvRule.env().getInstanceId(); + + // TODO: Update this test once emulator supports InstanceAdmin operation + // https://github.com/googleapis/google-cloud-go/issues/1069 + @BeforeClass + public static void validatePlatform() { + assume() + .withMessage("BigtableInstanceAdminClient doesn't support on Emulator") + .that(testEnvRule.env()) + .isNotInstanceOf(EmulatorEnv.class); + } + + @Before + public void setUp() throws InterruptedException { + client = testEnvRule.env().getInstanceAdminClient(); + testTable = createTestTable(testEnvRule.env().getTableAdminClient()); + } + + @Test + public void createMaterializedViewAndGetMaterializedViewTest() { + String materializedViewId = prefixGenerator.newPrefix(); + + CreateMaterializedViewRequest request = + CreateMaterializedViewRequest.of(instanceId, materializedViewId) + .setDeletionProtection(false); + try { + MaterializedView response = client.createMaterializedView(request); + assertWithMessage("Got wrong materialized view Id in CreateMaterializedView") + .that(response.getId()) + .isEqualTo(materializedViewId); + assertWithMessage("Got wrong deletion protection in CreateMaterializedView") + .that(response.isDeletionProtected()) + .isFalse(); + assertWithMessage("Got wrong deletion protection in CreateMaterializedView") + .that(response.getQuery()) + .isEqualTo(request.getQuery()); + + response = client.getMaterializedView(instanceId, materializedViewId); + assertWithMessage("Got wrong materialized view Id in getMaterializedView") + .that(response.getId()) + .isEqualTo(materializedViewId); + assertWithMessage("Got wrong deletion protection in getMaterializedView") + .that(response.isDeletionProtected()) + .isFalse(); + assertWithMessage("Got wrong deletion protection in getMaterializedView") + .that(response.getQuery()) + .isEqualTo(request.getQuery()); + } finally { + client.deleteMaterializedView(instanceId, materializedViewId); + } + } + + @Test + public void listMaterializedViewsTest() { + String materializedViewId = prefixGenerator.newPrefix(); + + try { + client.createMaterializedView(createMaterializedViewRequest(materializedViewId)); + + List response = client.listMaterializedViews(instanceId); + // Concurrent tests running may cause flakiness. Use containsAtLeast instead of + // containsExactly. + assertWithMessage("Got wrong materialized view Ids in listMaterializedViews") + .that(response) + .containsAtLeast(client.getMaterializedView(instanceId, materializedViewId).getId()); + } finally { + client.deleteMaterializedView(instanceId, materializedViewId); + } + } + + @Test + public void updateMaterializedViewAndDeleteMaterializedViewTest() throws InterruptedException { + String materializedViewId = prefixGenerator.newPrefix(); + + // Create a deletion-protected materialized view. + CreateMaterializedViewRequest request = + createMaterializedViewRequest(materializedViewId).setDeletionProtection(true); + + MaterializedView response = client.createMaterializedView(request); + assertWithMessage("Got wrong deletion protection in CreateMaterializedView") + .that(response.isDeletionProtected()) + .isTrue(); + + // We should not be able to delete the materialized view. + try { + client.deleteMaterializedView(instanceId, materializedViewId); + fail("A delete-protected materialized view should not have been able to be deleted"); + } catch (FailedPreconditionException e) { + assertWithMessage("Incorrect exception type") + .that(e.getCause()) + .isInstanceOf(StatusRuntimeException.class); + } + + // Update the deletion protection bit of the materialized view. + UpdateMaterializedViewRequest updateRequest = + UpdateMaterializedViewRequest.of(instanceId, materializedViewId) + .setDeletionProtection(false); + response = client.updateMaterializedView(updateRequest); + assertWithMessage("Got wrong deletion protection in UpdateMaterializedView") + .that(response.isDeletionProtected()) + .isFalse(); + + // Now we should be able to successfully delete the MaterializedView. + client.deleteMaterializedView(instanceId, materializedViewId); + try { + for (int i = 0; i < BACKOFF_DURATION.length; i++) { + client.getMaterializedView(instanceId, materializedViewId); + + LOGGER.info( + "Wait for " + + BACKOFF_DURATION[i] + + " seconds for deleting materialized view " + + materializedViewId); + Thread.sleep(BACKOFF_DURATION[i] * 1000); + } + fail("MaterializedView was not deleted."); + } catch (NotFoundException e) { + assertWithMessage("Incorrect exception type") + .that(e.getCause()) + .isInstanceOf(StatusRuntimeException.class); + } + } + + private CreateMaterializedViewRequest createMaterializedViewRequest(String materializedViewId) { + return CreateMaterializedViewRequest.of(instanceId, materializedViewId) + .setQuery( + "SELECT _key, MAX(cf1['column']) as column FROM `" + + testTable.getId() + + "` GROUP BY _key"); + } + + private static Table createTestTable(BigtableTableAdminClient tableAdmin) + throws InterruptedException { + String tableId = PrefixGenerator.newPrefix("BigtableMaterializedViewIT#createTestTable"); + Table testTable = tableAdmin.createTable(CreateTableRequest.of(tableId).addFamily("cf1")); + + return testTable; + } +} From d932873af73a0c7520fbd7f2dbd261b462d632a6 Mon Sep 17 00:00:00 2001 From: Ron Gal Date: Wed, 23 Apr 2025 18:43:57 +0000 Subject: [PATCH 06/17] remove deletion protection from LVs --- .../admin/v2/it/BigtableLogicalViewIT.java | 38 ++++--------------- 1 file changed, 8 insertions(+), 30 deletions(-) diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java index f740aa4d2f..7aa79eae28 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java @@ -20,7 +20,6 @@ import static com.google.common.truth.TruthJUnit.assume; import static org.junit.Assert.fail; -import com.google.api.gax.rpc.FailedPreconditionException; import com.google.api.gax.rpc.NotFoundException; import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient; import com.google.cloud.bigtable.admin.v2.models.CreateLogicalViewRequest; @@ -73,16 +72,12 @@ public void setUp() throws InterruptedException { public void createLogicalViewAndGetLogicalViewTest() { String logicalViewId = prefixGenerator.newPrefix(); - CreateLogicalViewRequest request = - CreateLogicalViewRequest.of(instanceId, logicalViewId).setDeletionProtection(false); + CreateLogicalViewRequest request = CreateLogicalViewRequest.of(instanceId, logicalViewId); try { LogicalView response = client.createLogicalView(request); assertWithMessage("Got wrong logical view Id in CreateLogicalView") .that(response.getId()) .isEqualTo(logicalViewId); - assertWithMessage("Got wrong deletion protection in CreateLogicalView") - .that(response.isDeletionProtected()) - .isFalse(); assertWithMessage("Got wrong query in CreateLogicalView") .that(response.getQuery()) .isEqualTo(request.getQuery()); @@ -91,9 +86,6 @@ public void createLogicalViewAndGetLogicalViewTest() { assertWithMessage("Got wrong logical view Id in getLogicalView") .that(response.getId()) .isEqualTo(logicalViewId); - assertWithMessage("Got wrong deletion protection in getLogicalView") - .that(response.isDeletionProtected()) - .isFalse(); assertWithMessage("Got wrong query in getLogicalView") .that(response.getQuery()) .isEqualTo(request.getQuery()); @@ -124,32 +116,18 @@ public void listLogicalViewsTest() { public void updateLogicalViewAndDeleteLogicalViewTest() throws InterruptedException { String logicalViewId = prefixGenerator.newPrefix(); - // Create a deletion-protected logical view. - CreateLogicalViewRequest request = - createLogicalViewRequest(logicalViewId).setDeletionProtection(true); + // Create a logical view. + CreateLogicalViewRequest request = createLogicalViewRequest(logicalViewId); LogicalView response = client.createLogicalView(request); - assertWithMessage("Got wrong deletion protection in CreateLogicalView") - .that(response.isDeletionProtected()) - .isTrue(); - // We should not be able to delete the logical view. - try { - client.deleteLogicalView(instanceId, logicalViewId); - fail("A delete-protected logical view should not have been able to be deleted"); - } catch (FailedPreconditionException e) { - assertWithMessage("Incorrect exception type") - .that(e.getCause()) - .isInstanceOf(StatusRuntimeException.class); - } - - // Update the deletion protection bit of the logical view. + // Update the query of the logical view. UpdateLogicalViewRequest updateRequest = - UpdateLogicalViewRequest.of(instanceId, logicalViewId).setDeletionProtection(false); + UpdateLogicalViewRequest.of(instanceId, logicalViewId).setQuery("SELECT 1 AS value"); response = client.updateLogicalView(updateRequest); - assertWithMessage("Got wrong deletion protection in UpdateLogicalView") - .that(response.isDeletionProtected()) - .isFalse(); + assertWithMessage("Got wrong query in UpdateLogicalView") + .that(response.getQuery()) + .isEqualTo(updateRequest.getQuery()); // Now we should be able to successfully delete the LogicalView. client.deleteLogicalView(instanceId, logicalViewId); From b088e20a61618ad2dfd94d3fc938409df7025937 Mon Sep 17 00:00:00 2001 From: Ron Gal Date: Wed, 23 Apr 2025 18:48:21 +0000 Subject: [PATCH 07/17] fix build --- .../cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java | 2 ++ .../cloud/bigtable/admin/v2/it/BigtableMaterializedViewIT.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java index 7aa79eae28..bc5137628e 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java @@ -21,6 +21,7 @@ import static org.junit.Assert.fail; 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.CreateLogicalViewRequest; import com.google.cloud.bigtable.admin.v2.models.CreateTableRequest; @@ -33,6 +34,7 @@ import io.grpc.StatusRuntimeException; import java.util.List; import java.util.logging.Logger; +import org.junit.Before; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Rule; 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 025c52c17c..e5bdff7579 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 @@ -22,6 +22,7 @@ import com.google.api.gax.rpc.FailedPreconditionException; 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.CreateMaterializedViewRequest; import com.google.cloud.bigtable.admin.v2.models.CreateTableRequest; @@ -34,6 +35,7 @@ import io.grpc.StatusRuntimeException; import java.util.List; import java.util.logging.Logger; +import org.junit.Before; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Rule; From 13223276758f06980fc1658491e5cbd17b13ad4d Mon Sep 17 00:00:00 2001 From: Ron Gal Date: Wed, 23 Apr 2025 18:59:23 +0000 Subject: [PATCH 08/17] fix build --- .../bigtable/admin/v2/it/BigtableLogicalViewIT.java | 11 ++++++----- .../admin/v2/it/BigtableMaterializedViewIT.java | 4 ++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java index bc5137628e..83465c4cce 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java @@ -101,14 +101,14 @@ public void listLogicalViewsTest() { String logicalViewId = prefixGenerator.newPrefix(); try { - client.createLogicalView(createLogicalViewRequest(logicalViewId)); + LogicalView logicalView = client.createLogicalView(createLogicalViewRequest(logicalViewId)); List response = client.listLogicalViews(instanceId); // Concurrent tests running may cause flakiness. Use containsAtLeast instead of // containsExactly. assertWithMessage("Got wrong logical view Ids in listLogicalViews") .that(response) - .containsAtLeast(client.getLogicalView(instanceId, logicalViewId).getId()); + .containsAtLeast(logicalView); } finally { client.deleteLogicalView(instanceId, logicalViewId); } @@ -124,12 +124,13 @@ public void updateLogicalViewAndDeleteLogicalViewTest() throws InterruptedExcept LogicalView response = client.createLogicalView(request); // Update the query of the logical view. + String query = "SELECT 1 AS value"; UpdateLogicalViewRequest updateRequest = - UpdateLogicalViewRequest.of(instanceId, logicalViewId).setQuery("SELECT 1 AS value"); + UpdateLogicalViewRequest.of(instanceId, logicalViewId).setQuery(query); response = client.updateLogicalView(updateRequest); assertWithMessage("Got wrong query in UpdateLogicalView") .that(response.getQuery()) - .isEqualTo(updateRequest.getQuery()); + .isEqualTo(query); // Now we should be able to successfully delete the LogicalView. client.deleteLogicalView(instanceId, logicalViewId); @@ -154,7 +155,7 @@ public void updateLogicalViewAndDeleteLogicalViewTest() throws InterruptedExcept private CreateLogicalViewRequest createLogicalViewRequest(String logicalViewId) { return CreateLogicalViewRequest.of(instanceId, logicalViewId) - .setQuery("SELECT _key, cf1['column'] as column FROM `" + tableId + "`"); + .setQuery("SELECT _key, cf1['column'] as column FROM `" + testTable.getId() + "`"); } private static Table createTestTable(BigtableTableAdminClient tableAdmin) 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 e5bdff7579..d38aa32a17 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 @@ -110,14 +110,14 @@ public void listMaterializedViewsTest() { String materializedViewId = prefixGenerator.newPrefix(); try { - client.createMaterializedView(createMaterializedViewRequest(materializedViewId)); + MaterializedView materializedView = client.createMaterializedView(createMaterializedViewRequest(materializedViewId)); List response = client.listMaterializedViews(instanceId); // Concurrent tests running may cause flakiness. Use containsAtLeast instead of // containsExactly. assertWithMessage("Got wrong materialized view Ids in listMaterializedViews") .that(response) - .containsAtLeast(client.getMaterializedView(instanceId, materializedViewId).getId()); + .containsAtLeast(materializedView); } finally { client.deleteMaterializedView(instanceId, materializedViewId); } From 6acbb5c531017caee7735f3eedd8bd098783c5f0 Mon Sep 17 00:00:00 2001 From: Ron Gal Date: Wed, 23 Apr 2025 19:01:58 +0000 Subject: [PATCH 09/17] fix build --- .../v2/it/BigtableInstanceAdminClientIT.java | 68 +++++++++++++++++++ .../admin/v2/it/BigtableLogicalViewIT.java | 11 +-- .../v2/it/BigtableMaterializedViewIT.java | 19 +++--- 3 files changed, 86 insertions(+), 12 deletions(-) diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java index 93e8f5b790..b832fce905 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java @@ -22,18 +22,27 @@ import com.google.api.gax.rpc.FailedPreconditionException; import com.google.cloud.Policy; import com.google.cloud.bigtable.admin.v2.BigtableInstanceAdminClient; +import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient; 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.ClusterAutoscalingConfig; import com.google.cloud.bigtable.admin.v2.models.CreateAppProfileRequest; import com.google.cloud.bigtable.admin.v2.models.CreateClusterRequest; import com.google.cloud.bigtable.admin.v2.models.CreateInstanceRequest; +import com.google.cloud.bigtable.admin.v2.models.CreateLogicalViewRequest; +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.Instance; import com.google.cloud.bigtable.admin.v2.models.Instance.Type; +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.StaticClusterSize; 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.UpdateAppProfileRequest; import com.google.cloud.bigtable.admin.v2.models.UpdateInstanceRequest; +import com.google.cloud.bigtable.admin.v2.models.UpdateLogicalViewRequest; +import com.google.cloud.bigtable.admin.v2.models.UpdateMaterializedViewRequest; import com.google.cloud.bigtable.test_helpers.env.EmulatorEnv; import com.google.cloud.bigtable.test_helpers.env.PrefixGenerator; import com.google.cloud.bigtable.test_helpers.env.TestEnvRule; @@ -624,6 +633,65 @@ public void createClusterWithManualScalingTest() { } } + @Test + public void materializedViewCRUDTest() { + BigtableTableAdminClient tableAdmin = testEnvRule.env().getTableAdminClient(); + String tableId = + PrefixGenerator.newPrefix("BigtableInstanceAdminClientIT#materializedViewTest"); + Table testTable = tableAdmin.createTable(CreateTableRequest.of(tableId).addFamily("cf1")); + + String testMaterializedView = prefixGenerator.newPrefix(); + + MaterializedView newlyCreatedMaterializedView = + client.createMaterializedView( + CreateMaterializedViewRequest.of(instanceId, testMaterializedView) + .setDeletionProtection(true) + .setQuery( + "SELECT _key, MAX(cf1['column']) as column FROM `" + + tableId + + "` GROUP BY _key")); + + MaterializedView updated = + client.updateMaterializedView( + UpdateMaterializedViewRequest.of(newlyCreatedMaterializedView) + .setDeletionProtection(false)); + + MaterializedView freshMaterializedView = + client.getMaterializedView(instanceId, testMaterializedView); + assertThat(freshMaterializedView.isDeletionProtected()) + .isEqualTo(updated.isDeletionProtected()); + + assertThat(client.listMaterializedViews(instanceId)).contains(freshMaterializedView); + + client.deleteMaterializedView(instanceId, testMaterializedView); + } + + @Test + public void logicalViewCRUDTest() { + BigtableTableAdminClient tableAdmin = testEnvRule.env().getTableAdminClient(); + String tableId = PrefixGenerator.newPrefix("BigtableInstanceAdminClientIT#logicalViewTest"); + Table testTable = tableAdmin.createTable(CreateTableRequest.of(tableId).addFamily("cf1")); + + String testLogicalView = prefixGenerator.newPrefix(); + + LogicalView newlyCreatedLogicalView = + client.createLogicalView( + CreateLogicalViewRequest.of(instanceId, testLogicalView) + .setQuery("SELECT _key, cf1['column'] as column FROM `" + tableId + "`")); + + LogicalView updated = + client.updateLogicalView( + UpdateLogicalViewRequest.of(newlyCreatedLogicalView) + .setQuery("SELECT _key, cf1['column2'] as column FROM `" + tableId + "`")); + + LogicalView freshLogicalView = client.getLogicalView(instanceId, testLogicalView); + assertThat(freshLogicalView.getQuery()).isEqualTo(updated.getQuery()); + + assertThat(client.listLogicalViews(instanceId)).contains(freshLogicalView); + + client.deleteLogicalView(instanceId, testLogicalView); + } + // To improve test runtime, piggyback off the instance creation/deletion test's fresh instance. private void basicClusterOperationTestHelper(String targetInstanceId, String targetClusterId) { List clusters = client.listClusters(targetInstanceId); diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java index 83465c4cce..cec43e8d88 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java @@ -82,7 +82,7 @@ public void createLogicalViewAndGetLogicalViewTest() { .isEqualTo(logicalViewId); assertWithMessage("Got wrong query in CreateLogicalView") .that(response.getQuery()) - .isEqualTo(request.getQuery()); + .isEqualTo(getQuery); response = client.getLogicalView(instanceId, logicalViewId); assertWithMessage("Got wrong logical view Id in getLogicalView") @@ -90,7 +90,7 @@ public void createLogicalViewAndGetLogicalViewTest() { .isEqualTo(logicalViewId); assertWithMessage("Got wrong query in getLogicalView") .that(response.getQuery()) - .isEqualTo(request.getQuery()); + .isEqualTo(getQuery); } finally { client.deleteLogicalView(instanceId, logicalViewId); } @@ -154,8 +154,11 @@ public void updateLogicalViewAndDeleteLogicalViewTest() throws InterruptedExcept } private CreateLogicalViewRequest createLogicalViewRequest(String logicalViewId) { - return CreateLogicalViewRequest.of(instanceId, logicalViewId) - .setQuery("SELECT _key, cf1['column'] as column FROM `" + testTable.getId() + "`"); + return CreateLogicalViewRequest.of(instanceId, logicalViewId).setQuery(getQuery()); + } + + private String getQuery() { + return "SELECT _key, cf1['column'] as column FROM `" + testTable.getId() + "`"; } private static Table createTestTable(BigtableTableAdminClient tableAdmin) 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 d38aa32a17..457371fb26 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 @@ -88,7 +88,7 @@ public void createMaterializedViewAndGetMaterializedViewTest() { .isFalse(); assertWithMessage("Got wrong deletion protection in CreateMaterializedView") .that(response.getQuery()) - .isEqualTo(request.getQuery()); + .isEqualTo(getQuery); response = client.getMaterializedView(instanceId, materializedViewId); assertWithMessage("Got wrong materialized view Id in getMaterializedView") @@ -99,7 +99,7 @@ public void createMaterializedViewAndGetMaterializedViewTest() { .isFalse(); assertWithMessage("Got wrong deletion protection in getMaterializedView") .that(response.getQuery()) - .isEqualTo(request.getQuery()); + .isEqualTo(getQuery); } finally { client.deleteMaterializedView(instanceId, materializedViewId); } @@ -110,7 +110,8 @@ public void listMaterializedViewsTest() { String materializedViewId = prefixGenerator.newPrefix(); try { - MaterializedView materializedView = client.createMaterializedView(createMaterializedViewRequest(materializedViewId)); + MaterializedView materializedView = + client.createMaterializedView(createMaterializedViewRequest(materializedViewId)); List response = client.listMaterializedViews(instanceId); // Concurrent tests running may cause flakiness. Use containsAtLeast instead of @@ -177,11 +178,13 @@ public void updateMaterializedViewAndDeleteMaterializedViewTest() throws Interru } private CreateMaterializedViewRequest createMaterializedViewRequest(String materializedViewId) { - return CreateMaterializedViewRequest.of(instanceId, materializedViewId) - .setQuery( - "SELECT _key, MAX(cf1['column']) as column FROM `" - + testTable.getId() - + "` GROUP BY _key"); + return CreateMaterializedViewRequest.of(instanceId, materializedViewId).setQuery(getQuery()); + } + + private String getQuery() { + return "SELECT _key, MAX(cf1['column']) as column FROM `" + + testTable.getId() + + "` GROUP BY _key"; } private static Table createTestTable(BigtableTableAdminClient tableAdmin) From 50110c86afee877574f51e704d344238a3714445 Mon Sep 17 00:00:00 2001 From: Ron Gal Date: Wed, 23 Apr 2025 19:04:46 +0000 Subject: [PATCH 10/17] fix build --- .../cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java | 2 +- .../cloud/bigtable/admin/v2/it/BigtableMaterializedViewIT.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java index cec43e8d88..473d90c622 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2025 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. 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 457371fb26..2e79f7a448 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 @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2025 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From e04ad27b7cb003081f27c924e973ee5f57a859aa Mon Sep 17 00:00:00 2001 From: Ron Gal Date: Wed, 23 Apr 2025 19:10:38 +0000 Subject: [PATCH 11/17] fix build again --- .../cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java | 6 +++--- .../bigtable/admin/v2/it/BigtableMaterializedViewIT.java | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java index 473d90c622..8235e5e87c 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java @@ -82,7 +82,7 @@ public void createLogicalViewAndGetLogicalViewTest() { .isEqualTo(logicalViewId); assertWithMessage("Got wrong query in CreateLogicalView") .that(response.getQuery()) - .isEqualTo(getQuery); + .isEqualTo(getQuery()); response = client.getLogicalView(instanceId, logicalViewId); assertWithMessage("Got wrong logical view Id in getLogicalView") @@ -90,7 +90,7 @@ public void createLogicalViewAndGetLogicalViewTest() { .isEqualTo(logicalViewId); assertWithMessage("Got wrong query in getLogicalView") .that(response.getQuery()) - .isEqualTo(getQuery); + .isEqualTo(getQuery()); } finally { client.deleteLogicalView(instanceId, logicalViewId); } @@ -103,7 +103,7 @@ public void listLogicalViewsTest() { try { LogicalView logicalView = client.createLogicalView(createLogicalViewRequest(logicalViewId)); - List response = client.listLogicalViews(instanceId); + List response = client.listLogicalViews(instanceId); // Concurrent tests running may cause flakiness. Use containsAtLeast instead of // containsExactly. assertWithMessage("Got wrong logical view Ids in listLogicalViews") 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 2e79f7a448..5873fc511a 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 @@ -88,7 +88,7 @@ public void createMaterializedViewAndGetMaterializedViewTest() { .isFalse(); assertWithMessage("Got wrong deletion protection in CreateMaterializedView") .that(response.getQuery()) - .isEqualTo(getQuery); + .isEqualTo(getQuery()); response = client.getMaterializedView(instanceId, materializedViewId); assertWithMessage("Got wrong materialized view Id in getMaterializedView") @@ -99,7 +99,7 @@ public void createMaterializedViewAndGetMaterializedViewTest() { .isFalse(); assertWithMessage("Got wrong deletion protection in getMaterializedView") .that(response.getQuery()) - .isEqualTo(getQuery); + .isEqualTo(getQuery()); } finally { client.deleteMaterializedView(instanceId, materializedViewId); } @@ -113,7 +113,7 @@ public void listMaterializedViewsTest() { MaterializedView materializedView = client.createMaterializedView(createMaterializedViewRequest(materializedViewId)); - List response = client.listMaterializedViews(instanceId); + List response = client.listMaterializedViews(instanceId); // Concurrent tests running may cause flakiness. Use containsAtLeast instead of // containsExactly. assertWithMessage("Got wrong materialized view Ids in listMaterializedViews") From 7873196495799129218b1ae39aba1bb4068197e2 Mon Sep 17 00:00:00 2001 From: Ron Gal Date: Wed, 23 Apr 2025 19:12:13 +0000 Subject: [PATCH 12/17] revert file --- .../v2/it/BigtableInstanceAdminClientIT.java | 68 ------------------- 1 file changed, 68 deletions(-) diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java index b832fce905..93e8f5b790 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableInstanceAdminClientIT.java @@ -22,27 +22,18 @@ import com.google.api.gax.rpc.FailedPreconditionException; import com.google.cloud.Policy; import com.google.cloud.bigtable.admin.v2.BigtableInstanceAdminClient; -import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient; 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.ClusterAutoscalingConfig; import com.google.cloud.bigtable.admin.v2.models.CreateAppProfileRequest; import com.google.cloud.bigtable.admin.v2.models.CreateClusterRequest; import com.google.cloud.bigtable.admin.v2.models.CreateInstanceRequest; -import com.google.cloud.bigtable.admin.v2.models.CreateLogicalViewRequest; -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.Instance; import com.google.cloud.bigtable.admin.v2.models.Instance.Type; -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.StaticClusterSize; 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.UpdateAppProfileRequest; import com.google.cloud.bigtable.admin.v2.models.UpdateInstanceRequest; -import com.google.cloud.bigtable.admin.v2.models.UpdateLogicalViewRequest; -import com.google.cloud.bigtable.admin.v2.models.UpdateMaterializedViewRequest; import com.google.cloud.bigtable.test_helpers.env.EmulatorEnv; import com.google.cloud.bigtable.test_helpers.env.PrefixGenerator; import com.google.cloud.bigtable.test_helpers.env.TestEnvRule; @@ -633,65 +624,6 @@ public void createClusterWithManualScalingTest() { } } - @Test - public void materializedViewCRUDTest() { - BigtableTableAdminClient tableAdmin = testEnvRule.env().getTableAdminClient(); - String tableId = - PrefixGenerator.newPrefix("BigtableInstanceAdminClientIT#materializedViewTest"); - Table testTable = tableAdmin.createTable(CreateTableRequest.of(tableId).addFamily("cf1")); - - String testMaterializedView = prefixGenerator.newPrefix(); - - MaterializedView newlyCreatedMaterializedView = - client.createMaterializedView( - CreateMaterializedViewRequest.of(instanceId, testMaterializedView) - .setDeletionProtection(true) - .setQuery( - "SELECT _key, MAX(cf1['column']) as column FROM `" - + tableId - + "` GROUP BY _key")); - - MaterializedView updated = - client.updateMaterializedView( - UpdateMaterializedViewRequest.of(newlyCreatedMaterializedView) - .setDeletionProtection(false)); - - MaterializedView freshMaterializedView = - client.getMaterializedView(instanceId, testMaterializedView); - assertThat(freshMaterializedView.isDeletionProtected()) - .isEqualTo(updated.isDeletionProtected()); - - assertThat(client.listMaterializedViews(instanceId)).contains(freshMaterializedView); - - client.deleteMaterializedView(instanceId, testMaterializedView); - } - - @Test - public void logicalViewCRUDTest() { - BigtableTableAdminClient tableAdmin = testEnvRule.env().getTableAdminClient(); - String tableId = PrefixGenerator.newPrefix("BigtableInstanceAdminClientIT#logicalViewTest"); - Table testTable = tableAdmin.createTable(CreateTableRequest.of(tableId).addFamily("cf1")); - - String testLogicalView = prefixGenerator.newPrefix(); - - LogicalView newlyCreatedLogicalView = - client.createLogicalView( - CreateLogicalViewRequest.of(instanceId, testLogicalView) - .setQuery("SELECT _key, cf1['column'] as column FROM `" + tableId + "`")); - - LogicalView updated = - client.updateLogicalView( - UpdateLogicalViewRequest.of(newlyCreatedLogicalView) - .setQuery("SELECT _key, cf1['column2'] as column FROM `" + tableId + "`")); - - LogicalView freshLogicalView = client.getLogicalView(instanceId, testLogicalView); - assertThat(freshLogicalView.getQuery()).isEqualTo(updated.getQuery()); - - assertThat(client.listLogicalViews(instanceId)).contains(freshLogicalView); - - client.deleteLogicalView(instanceId, testLogicalView); - } - // To improve test runtime, piggyback off the instance creation/deletion test's fresh instance. private void basicClusterOperationTestHelper(String targetInstanceId, String targetClusterId) { List clusters = client.listClusters(targetInstanceId); From 19bffc7b9e21b3a3ef2599c28d44a8d20edbf13a Mon Sep 17 00:00:00 2001 From: Ron Gal Date: Wed, 23 Apr 2025 19:18:41 +0000 Subject: [PATCH 13/17] fix build again --- .../cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java | 4 +--- .../bigtable/admin/v2/it/BigtableMaterializedViewIT.java | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java index 8235e5e87c..7078d42447 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java @@ -104,11 +104,9 @@ public void listLogicalViewsTest() { LogicalView logicalView = client.createLogicalView(createLogicalViewRequest(logicalViewId)); List response = client.listLogicalViews(instanceId); - // Concurrent tests running may cause flakiness. Use containsAtLeast instead of - // containsExactly. assertWithMessage("Got wrong logical view Ids in listLogicalViews") .that(response) - .containsAtLeast(logicalView); + .contains(logicalView); } finally { client.deleteLogicalView(instanceId, logicalViewId); } 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 5873fc511a..d660115380 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 @@ -114,11 +114,9 @@ public void listMaterializedViewsTest() { client.createMaterializedView(createMaterializedViewRequest(materializedViewId)); List response = client.listMaterializedViews(instanceId); - // Concurrent tests running may cause flakiness. Use containsAtLeast instead of - // containsExactly. assertWithMessage("Got wrong materialized view Ids in listMaterializedViews") .that(response) - .containsAtLeast(materializedView); + .contains(materializedView); } finally { client.deleteMaterializedView(instanceId, materializedViewId); } From 02ce21e301ad53ab0fcb0ac58b5d929c1d571260 Mon Sep 17 00:00:00 2001 From: Ron Gal Date: Wed, 23 Apr 2025 20:24:56 +0000 Subject: [PATCH 14/17] fix tests --- .../cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java | 4 ++-- .../bigtable/admin/v2/it/BigtableMaterializedViewIT.java | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java index 7078d42447..8f177e600c 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java @@ -74,7 +74,7 @@ public void setUp() throws InterruptedException { public void createLogicalViewAndGetLogicalViewTest() { String logicalViewId = prefixGenerator.newPrefix(); - CreateLogicalViewRequest request = CreateLogicalViewRequest.of(instanceId, logicalViewId); + CreateLogicalViewRequest request = CreateLogicalViewRequest.of(instanceId, logicalViewId).setQuery(getQuery()); try { LogicalView response = client.createLogicalView(request); assertWithMessage("Got wrong logical view Id in CreateLogicalView") @@ -124,7 +124,7 @@ public void updateLogicalViewAndDeleteLogicalViewTest() throws InterruptedExcept // Update the query of the logical view. String query = "SELECT 1 AS value"; UpdateLogicalViewRequest updateRequest = - UpdateLogicalViewRequest.of(instanceId, logicalViewId).setQuery(query); + UpdateLogicalViewRequest.of(response).setQuery(query); response = client.updateLogicalView(updateRequest); assertWithMessage("Got wrong query in UpdateLogicalView") .that(response.getQuery()) 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 d660115380..d38c5f6217 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 @@ -77,6 +77,7 @@ public void createMaterializedViewAndGetMaterializedViewTest() { CreateMaterializedViewRequest request = CreateMaterializedViewRequest.of(instanceId, materializedViewId) + .setQuery(getQuery()) .setDeletionProtection(false); try { MaterializedView response = client.createMaterializedView(request); @@ -147,7 +148,7 @@ public void updateMaterializedViewAndDeleteMaterializedViewTest() throws Interru // Update the deletion protection bit of the materialized view. UpdateMaterializedViewRequest updateRequest = - UpdateMaterializedViewRequest.of(instanceId, materializedViewId) + UpdateMaterializedViewRequest.of(response) .setDeletionProtection(false); response = client.updateMaterializedView(updateRequest); assertWithMessage("Got wrong deletion protection in UpdateMaterializedView") From d376eb5de5cbbc4a5b550044d5d9b83e73a50c1b Mon Sep 17 00:00:00 2001 From: Ron Gal Date: Wed, 23 Apr 2025 20:25:10 +0000 Subject: [PATCH 15/17] fix tests --- .../cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java | 6 +++--- .../bigtable/admin/v2/it/BigtableMaterializedViewIT.java | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java index 8f177e600c..b80c314dd9 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java @@ -74,7 +74,8 @@ public void setUp() throws InterruptedException { public void createLogicalViewAndGetLogicalViewTest() { String logicalViewId = prefixGenerator.newPrefix(); - CreateLogicalViewRequest request = CreateLogicalViewRequest.of(instanceId, logicalViewId).setQuery(getQuery()); + CreateLogicalViewRequest request = + CreateLogicalViewRequest.of(instanceId, logicalViewId).setQuery(getQuery()); try { LogicalView response = client.createLogicalView(request); assertWithMessage("Got wrong logical view Id in CreateLogicalView") @@ -123,8 +124,7 @@ public void updateLogicalViewAndDeleteLogicalViewTest() throws InterruptedExcept // Update the query of the logical view. String query = "SELECT 1 AS value"; - UpdateLogicalViewRequest updateRequest = - UpdateLogicalViewRequest.of(response).setQuery(query); + UpdateLogicalViewRequest updateRequest = UpdateLogicalViewRequest.of(response).setQuery(query); response = client.updateLogicalView(updateRequest); assertWithMessage("Got wrong query in UpdateLogicalView") .that(response.getQuery()) 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 d38c5f6217..9103fbd1e5 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 @@ -148,8 +148,7 @@ public void updateMaterializedViewAndDeleteMaterializedViewTest() throws Interru // Update the deletion protection bit of the materialized view. UpdateMaterializedViewRequest updateRequest = - UpdateMaterializedViewRequest.of(response) - .setDeletionProtection(false); + UpdateMaterializedViewRequest.of(response).setDeletionProtection(false); response = client.updateMaterializedView(updateRequest); assertWithMessage("Got wrong deletion protection in UpdateMaterializedView") .that(response.isDeletionProtected()) From 21faf24570e8ccb0bd14ef96d506288ef3f4d3ae Mon Sep 17 00:00:00 2001 From: Ron Gal Date: Thu, 24 Apr 2025 14:09:46 +0000 Subject: [PATCH 16/17] fix lv names --- .../cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java index b80c314dd9..1dc9997438 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java @@ -72,7 +72,7 @@ public void setUp() throws InterruptedException { @Test public void createLogicalViewAndGetLogicalViewTest() { - String logicalViewId = prefixGenerator.newPrefix(); + String logicalViewId = "createLogicalViewAndGetLogicalViewTest#logical-view"; CreateLogicalViewRequest request = CreateLogicalViewRequest.of(instanceId, logicalViewId).setQuery(getQuery()); @@ -99,7 +99,7 @@ public void createLogicalViewAndGetLogicalViewTest() { @Test public void listLogicalViewsTest() { - String logicalViewId = prefixGenerator.newPrefix(); + String logicalViewId = "listLogicalViewsTest#logical-view"; try { LogicalView logicalView = client.createLogicalView(createLogicalViewRequest(logicalViewId)); @@ -115,7 +115,7 @@ public void listLogicalViewsTest() { @Test public void updateLogicalViewAndDeleteLogicalViewTest() throws InterruptedException { - String logicalViewId = prefixGenerator.newPrefix(); + String logicalViewId = "updateLogicalViewAndDeleteLogicalViewTest#logical-view"; // Create a logical view. CreateLogicalViewRequest request = createLogicalViewRequest(logicalViewId); From 653c16eb453a0e51d8fc6ccd788e35cff6609661 Mon Sep 17 00:00:00 2001 From: Ron Gal Date: Thu, 24 Apr 2025 14:55:44 +0000 Subject: [PATCH 17/17] fix view names --- .../cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java index 1dc9997438..90a7c342d2 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableLogicalViewIT.java @@ -72,7 +72,7 @@ public void setUp() throws InterruptedException { @Test public void createLogicalViewAndGetLogicalViewTest() { - String logicalViewId = "createLogicalViewAndGetLogicalViewTest#logical-view"; + String logicalViewId = "createLogicalViewAndGetLogicalViewTest-logical-view"; CreateLogicalViewRequest request = CreateLogicalViewRequest.of(instanceId, logicalViewId).setQuery(getQuery()); @@ -99,7 +99,7 @@ public void createLogicalViewAndGetLogicalViewTest() { @Test public void listLogicalViewsTest() { - String logicalViewId = "listLogicalViewsTest#logical-view"; + String logicalViewId = "listLogicalViewsTest-logical-view"; try { LogicalView logicalView = client.createLogicalView(createLogicalViewRequest(logicalViewId)); @@ -115,7 +115,7 @@ public void listLogicalViewsTest() { @Test public void updateLogicalViewAndDeleteLogicalViewTest() throws InterruptedException { - String logicalViewId = "updateLogicalViewAndDeleteLogicalViewTest#logical-view"; + String logicalViewId = "updateLogicalViewAndDeleteLogicalViewTest-logical-view"; // Create a logical view. CreateLogicalViewRequest request = createLogicalViewRequest(logicalViewId);