Skip to content
This repository was archived by the owner on May 8, 2026. It is now read-only.

Commit 7cf812a

Browse files
committed
add tests
1 parent 4783b5e commit 7cf812a

1 file changed

Lines changed: 245 additions & 0 deletions

File tree

google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTests.java

Lines changed: 245 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import com.google.bigtable.admin.v2.CopyBackupMetadata;
3636
import com.google.bigtable.admin.v2.CreateAuthorizedViewMetadata;
3737
import com.google.bigtable.admin.v2.CreateBackupMetadata;
38+
import com.google.bigtable.admin.v2.CreateSchemaBundleMetadata;
3839
import com.google.bigtable.admin.v2.DeleteBackupRequest;
3940
import com.google.bigtable.admin.v2.DeleteTableRequest;
4041
import com.google.bigtable.admin.v2.DropRowRangeRequest;
@@ -46,10 +47,12 @@
4647
import com.google.bigtable.admin.v2.ModifyColumnFamiliesRequest.Modification;
4748
import com.google.bigtable.admin.v2.RestoreSourceType;
4849
import com.google.bigtable.admin.v2.RestoreTableMetadata;
50+
import com.google.bigtable.admin.v2.SchemaBundleName;
4951
import com.google.bigtable.admin.v2.Table.ClusterState;
5052
import com.google.bigtable.admin.v2.Table.View;
5153
import com.google.bigtable.admin.v2.TableName;
5254
import com.google.bigtable.admin.v2.UpdateAuthorizedViewMetadata;
55+
import com.google.bigtable.admin.v2.UpdateSchemaBundleMetadata;
5356
import com.google.bigtable.admin.v2.UpdateTableMetadata;
5457
import com.google.cloud.Identity;
5558
import com.google.cloud.Policy;
@@ -58,6 +61,8 @@
5861
import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminClient.ListAuthorizedViewsPagedResponse;
5962
import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminClient.ListBackupsPage;
6063
import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminClient.ListBackupsPagedResponse;
64+
import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminClient.ListSchemaBundlesPage;
65+
import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminClient.ListSchemaBundlesPagedResponse;
6166
import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminClient.ListTablesPage;
6267
import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminClient.ListTablesPagedResponse;
6368
import com.google.cloud.bigtable.admin.v2.internal.NameUtil;
@@ -67,16 +72,19 @@
6772
import com.google.cloud.bigtable.admin.v2.models.CopyBackupRequest;
6873
import com.google.cloud.bigtable.admin.v2.models.CreateAuthorizedViewRequest;
6974
import com.google.cloud.bigtable.admin.v2.models.CreateBackupRequest;
75+
import com.google.cloud.bigtable.admin.v2.models.CreateSchemaBundleRequest;
7076
import com.google.cloud.bigtable.admin.v2.models.CreateTableRequest;
7177
import com.google.cloud.bigtable.admin.v2.models.EncryptionInfo;
7278
import com.google.cloud.bigtable.admin.v2.models.ModifyColumnFamiliesRequest;
7379
import com.google.cloud.bigtable.admin.v2.models.RestoreTableRequest;
7480
import com.google.cloud.bigtable.admin.v2.models.RestoredTableResult;
81+
import com.google.cloud.bigtable.admin.v2.models.SchemaBundle;
7582
import com.google.cloud.bigtable.admin.v2.models.SubsetView;
7683
import com.google.cloud.bigtable.admin.v2.models.Table;
7784
import com.google.cloud.bigtable.admin.v2.models.Type;
7885
import com.google.cloud.bigtable.admin.v2.models.UpdateAuthorizedViewRequest;
7986
import com.google.cloud.bigtable.admin.v2.models.UpdateBackupRequest;
87+
import com.google.cloud.bigtable.admin.v2.models.UpdateSchemaBundleRequest;
8088
import com.google.cloud.bigtable.admin.v2.stub.EnhancedBigtableTableAdminStub;
8189
import com.google.common.collect.ImmutableList;
8290
import com.google.common.collect.Lists;
@@ -122,6 +130,7 @@ public class BigtableTableAdminClientTests {
122130
private static final String CLUSTER_ID = "my-cluster";
123131
private static final String BACKUP_ID = "my-backup";
124132
private static final String AUTHORIZED_VIEW_ID = "my-authorized-view";
133+
private static final String SCHEMA_BUNDLE_ID = "my-schema-bundle";
125134

126135
private static final String INSTANCE_NAME = NameUtil.formatInstanceName(PROJECT_ID, INSTANCE_ID);
127136
private static final String TABLE_NAME =
@@ -225,6 +234,35 @@ public class BigtableTableAdminClientTests {
225234
private UnaryCallable<com.google.bigtable.admin.v2.DeleteAuthorizedViewRequest, Empty>
226235
mockDeleteAuthorizedViewCallable;
227236

237+
@Mock
238+
private OperationCallable<
239+
com.google.bigtable.admin.v2.CreateSchemaBundleRequest,
240+
com.google.bigtable.admin.v2.SchemaBundle,
241+
CreateSchemaBundleMetadata>
242+
mockCreateSchemaBundleOperationCallable;
243+
244+
@Mock
245+
private OperationCallable<
246+
com.google.bigtable.admin.v2.UpdateSchemaBundleRequest,
247+
com.google.bigtable.admin.v2.SchemaBundle,
248+
UpdateSchemaBundleMetadata>
249+
mockUpdateSchemaBundleOperationCallable;
250+
251+
@Mock
252+
private UnaryCallable<
253+
com.google.bigtable.admin.v2.GetSchemaBundleRequest,
254+
com.google.bigtable.admin.v2.SchemaBundle>
255+
mockGetSchemaBundleCallable;
256+
257+
@Mock
258+
private UnaryCallable<
259+
com.google.bigtable.admin.v2.ListSchemaBundlesRequest, ListSchemaBundlesPagedResponse>
260+
mockListSchemaBundlesCallable;
261+
262+
@Mock
263+
private UnaryCallable<com.google.bigtable.admin.v2.DeleteSchemaBundleRequest, Empty>
264+
mockDeleteSchemaBundleCallable;
265+
228266
@Mock
229267
private UnaryCallable<com.google.iam.v1.GetIamPolicyRequest, com.google.iam.v1.Policy>
230268
mockGetIamPolicyCallable;
@@ -1291,6 +1329,213 @@ public void testDeleteAuthorizedView() {
12911329
assertThat(wasCalled.get()).isTrue();
12921330
}
12931331

1332+
@Test
1333+
public void testCreateSchemaBundle() {
1334+
// Setup
1335+
Mockito.when(mockStub.createSchemaBundleOperationCallable())
1336+
.thenReturn(mockCreateSchemaBundleOperationCallable);
1337+
1338+
com.google.bigtable.admin.v2.CreateSchemaBundleRequest expectedRequest =
1339+
com.google.bigtable.admin.v2.CreateSchemaBundleRequest.newBuilder()
1340+
.setParent(NameUtil.formatTableName(PROJECT_ID, INSTANCE_ID, TABLE_ID))
1341+
.setSchemaBundleId(SCHEMA_BUNDLE_ID)
1342+
.setSchemaBundle(
1343+
com.google.bigtable.admin.v2.SchemaBundle.newBuilder()
1344+
.setProtoSchema(
1345+
com.google.bigtable.admin.v2.ProtoSchema.newBuilder()
1346+
.setProtoDescriptors(ByteString.copyFromUtf8("schema"))))
1347+
.build();
1348+
1349+
com.google.bigtable.admin.v2.SchemaBundle expectedResponse =
1350+
com.google.bigtable.admin.v2.SchemaBundle.newBuilder()
1351+
.setName(
1352+
NameUtil.formatSchemaBundleName(
1353+
PROJECT_ID, INSTANCE_ID, TABLE_ID, SCHEMA_BUNDLE_ID))
1354+
.setProtoSchema(
1355+
com.google.bigtable.admin.v2.ProtoSchema.newBuilder()
1356+
.setProtoDescriptors(ByteString.copyFromUtf8("schema")))
1357+
.build();
1358+
1359+
mockOperationResult(
1360+
mockCreateSchemaBundleOperationCallable,
1361+
expectedRequest,
1362+
expectedResponse,
1363+
CreateSchemaBundleMetadata.newBuilder()
1364+
.setName(expectedRequest.getSchemaBundle().getName())
1365+
.build());
1366+
1367+
CreateSchemaBundleRequest req =
1368+
CreateSchemaBundleRequest.of(TABLE_ID, SCHEMA_BUNDLE_ID).setProtoSchema("file.pb");
1369+
1370+
// Execute
1371+
SchemaBundle actualResult = adminClient.createSchemaBundle(req);
1372+
1373+
// Verify
1374+
assertThat(actualResult).isEqualTo(SchemaBundle.fromProto(expectedResponse));
1375+
}
1376+
1377+
@Test
1378+
public void testUpdateSchemaBundle() {
1379+
// Setup
1380+
Mockito.when(mockStub.updateSchemaBundleOperationCallable())
1381+
.thenReturn(mockUpdateSchemaBundleOperationCallable);
1382+
1383+
com.google.bigtable.admin.v2.UpdateSchemaBundleRequest expectedRequest =
1384+
com.google.bigtable.admin.v2.UpdateSchemaBundleRequest.newBuilder()
1385+
.setSchemaBundle(
1386+
com.google.bigtable.admin.v2.SchemaBundle.newBuilder()
1387+
.setName(
1388+
NameUtil.formatSchemaBundleName(
1389+
PROJECT_ID, INSTANCE_ID, TABLE_ID, SCHEMA_BUNDLE_ID))
1390+
.setProtoSchema(
1391+
com.google.bigtable.admin.v2.ProtoSchema.newBuilder()
1392+
.setProtoDescriptors(ByteString.copyFromUtf8("schema")))
1393+
.build())
1394+
.setUpdateMask(FieldMask.newBuilder().addPaths("proto_schema"))
1395+
.build();
1396+
1397+
com.google.bigtable.admin.v2.SchemaBundle expectedResponse =
1398+
com.google.bigtable.admin.v2.SchemaBundle.newBuilder()
1399+
.setName(
1400+
NameUtil.formatSchemaBundleName(
1401+
PROJECT_ID, INSTANCE_ID, TABLE_ID, SCHEMA_BUNDLE_ID))
1402+
.setProtoSchema(
1403+
com.google.bigtable.admin.v2.ProtoSchema.newBuilder()
1404+
.setProtoDescriptors(ByteString.copyFromUtf8("schema")))
1405+
.build();
1406+
1407+
mockOperationResult(
1408+
mockUpdateSchemaBundleOperationCallable,
1409+
expectedRequest,
1410+
expectedResponse,
1411+
UpdateSchemaBundleMetadata.newBuilder()
1412+
.setName(expectedRequest.getSchemaBundle().getName())
1413+
.build());
1414+
1415+
UpdateSchemaBundleRequest req =
1416+
UpdateSchemaBundleRequest.of(TABLE_ID, SCHEMA_BUNDLE_ID).setProtoSchema("updated_file.pb");
1417+
1418+
// Execute
1419+
SchemaBundle actualResult = adminClient.updateSchemaBundle(req);
1420+
1421+
// Verify
1422+
assertThat(actualResult).isEqualTo(SchemaBundle.fromProto(expectedResponse));
1423+
}
1424+
1425+
@Test
1426+
public void testGetSchemaBundle() {
1427+
// Setup
1428+
Mockito.when(mockStub.getSchemaBundleCallable()).thenReturn(mockGetSchemaBundleCallable);
1429+
1430+
com.google.bigtable.admin.v2.GetSchemaBundleRequest expectedRequest =
1431+
com.google.bigtable.admin.v2.GetSchemaBundleRequest.newBuilder()
1432+
.setName(
1433+
NameUtil.formatSchemaBundleName(
1434+
PROJECT_ID, INSTANCE_ID, TABLE_ID, SCHEMA_BUNDLE_ID))
1435+
.build();
1436+
1437+
com.google.bigtable.admin.v2.SchemaBundle expectedResponse =
1438+
com.google.bigtable.admin.v2.SchemaBundle.newBuilder()
1439+
.setName(
1440+
NameUtil.formatSchemaBundleName(
1441+
PROJECT_ID, INSTANCE_ID, TABLE_ID, SCHEMA_BUNDLE_ID))
1442+
.setProtoSchema(
1443+
com.google.bigtable.admin.v2.ProtoSchema.newBuilder()
1444+
.setProtoDescriptors(ByteString.copyFromUtf8("schema")))
1445+
.build();
1446+
1447+
Mockito.when(mockGetSchemaBundleCallable.futureCall(expectedRequest))
1448+
.thenReturn(ApiFutures.immediateFuture(expectedResponse));
1449+
1450+
// Execute
1451+
SchemaBundle actualResult = adminClient.getSchemaBundle(TABLE_ID, SCHEMA_BUNDLE_ID);
1452+
1453+
// Verify
1454+
assertThat(actualResult).isEqualTo(SchemaBundle.fromProto(expectedResponse));
1455+
}
1456+
1457+
@Test
1458+
public void testListSchemaBundles() {
1459+
// Setup
1460+
Mockito.when(mockStub.listSchemaBundlesPagedCallable())
1461+
.thenReturn(mockListSchemaBundlesCallable);
1462+
1463+
com.google.bigtable.admin.v2.ListSchemaBundlesRequest expectedRequest =
1464+
com.google.bigtable.admin.v2.ListSchemaBundlesRequest.newBuilder()
1465+
.setParent(NameUtil.formatTableName(PROJECT_ID, INSTANCE_ID, TABLE_ID))
1466+
.build();
1467+
1468+
// 3 SchemaBundles spread across 2 pages
1469+
List<com.google.bigtable.admin.v2.SchemaBundle> expectedProtos = Lists.newArrayList();
1470+
for (int i = 0; i < 3; i++) {
1471+
expectedProtos.add(
1472+
com.google.bigtable.admin.v2.SchemaBundle.newBuilder()
1473+
.setName(
1474+
NameUtil.formatSchemaBundleName(
1475+
PROJECT_ID, INSTANCE_ID, TABLE_ID, SCHEMA_BUNDLE_ID + i))
1476+
.build());
1477+
}
1478+
1479+
// 2 on the first page
1480+
ListSchemaBundlesPage page0 = Mockito.mock(ListSchemaBundlesPage.class);
1481+
Mockito.when(page0.getValues()).thenReturn(expectedProtos.subList(0, 2));
1482+
Mockito.when(page0.hasNextPage()).thenReturn(true);
1483+
1484+
// 1 on the last page
1485+
ListSchemaBundlesPage page1 = Mockito.mock(ListSchemaBundlesPage.class);
1486+
Mockito.when(page1.getValues()).thenReturn(expectedProtos.subList(2, 3));
1487+
1488+
// Link page0 to page1
1489+
Mockito.when(page0.getNextPageAsync()).thenReturn(ApiFutures.immediateFuture(page1));
1490+
1491+
// Link page to the response
1492+
ListSchemaBundlesPagedResponse response0 = Mockito.mock(ListSchemaBundlesPagedResponse.class);
1493+
Mockito.when(response0.getPage()).thenReturn(page0);
1494+
1495+
Mockito.when(mockListSchemaBundlesCallable.futureCall(expectedRequest))
1496+
.thenReturn(ApiFutures.immediateFuture(response0));
1497+
1498+
// Execute
1499+
List<String> actualResults = adminClient.listSchemaBundles(TABLE_ID);
1500+
1501+
// Verify
1502+
List<String> expectedResults = Lists.newArrayList();
1503+
for (com.google.bigtable.admin.v2.SchemaBundle expectedProto : expectedProtos) {
1504+
expectedResults.add(SchemaBundleName.parse(expectedProto.getName()).getSchemaBundle());
1505+
}
1506+
1507+
assertThat(actualResults).containsExactlyElementsIn(expectedResults);
1508+
}
1509+
1510+
@Test
1511+
public void testDeleteSchemaBundle() {
1512+
// Setup
1513+
Mockito.when(mockStub.deleteSchemaBundleCallable()).thenReturn(mockDeleteSchemaBundleCallable);
1514+
1515+
com.google.bigtable.admin.v2.DeleteSchemaBundleRequest expectedRequest =
1516+
com.google.bigtable.admin.v2.DeleteSchemaBundleRequest.newBuilder()
1517+
.setName(
1518+
NameUtil.formatSchemaBundleName(
1519+
PROJECT_ID, INSTANCE_ID, TABLE_ID, SCHEMA_BUNDLE_ID))
1520+
.build();
1521+
1522+
final AtomicBoolean wasCalled = new AtomicBoolean(false);
1523+
1524+
Mockito.when(mockDeleteSchemaBundleCallable.futureCall(expectedRequest))
1525+
.thenAnswer(
1526+
(Answer<ApiFuture<Empty>>)
1527+
invocationOnMock -> {
1528+
wasCalled.set(true);
1529+
return ApiFutures.immediateFuture(Empty.getDefaultInstance());
1530+
});
1531+
1532+
// Execute
1533+
adminClient.deleteSchemaBundle(TABLE_ID, SCHEMA_BUNDLE_ID);
1534+
1535+
// Verify
1536+
assertThat(wasCalled.get()).isTrue();
1537+
}
1538+
12941539
@Test
12951540
public void testGetBackupIamPolicy() {
12961541
// Setup

0 commit comments

Comments
 (0)