|
35 | 35 | import com.google.bigtable.admin.v2.CopyBackupMetadata; |
36 | 36 | import com.google.bigtable.admin.v2.CreateAuthorizedViewMetadata; |
37 | 37 | import com.google.bigtable.admin.v2.CreateBackupMetadata; |
| 38 | +import com.google.bigtable.admin.v2.CreateSchemaBundleMetadata; |
38 | 39 | import com.google.bigtable.admin.v2.DeleteBackupRequest; |
39 | 40 | import com.google.bigtable.admin.v2.DeleteTableRequest; |
40 | 41 | import com.google.bigtable.admin.v2.DropRowRangeRequest; |
|
46 | 47 | import com.google.bigtable.admin.v2.ModifyColumnFamiliesRequest.Modification; |
47 | 48 | import com.google.bigtable.admin.v2.RestoreSourceType; |
48 | 49 | import com.google.bigtable.admin.v2.RestoreTableMetadata; |
| 50 | +import com.google.bigtable.admin.v2.SchemaBundleName; |
49 | 51 | import com.google.bigtable.admin.v2.Table.ClusterState; |
50 | 52 | import com.google.bigtable.admin.v2.Table.View; |
51 | 53 | import com.google.bigtable.admin.v2.TableName; |
52 | 54 | import com.google.bigtable.admin.v2.UpdateAuthorizedViewMetadata; |
| 55 | +import com.google.bigtable.admin.v2.UpdateSchemaBundleMetadata; |
53 | 56 | import com.google.bigtable.admin.v2.UpdateTableMetadata; |
54 | 57 | import com.google.cloud.Identity; |
55 | 58 | import com.google.cloud.Policy; |
|
58 | 61 | import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminClient.ListAuthorizedViewsPagedResponse; |
59 | 62 | import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminClient.ListBackupsPage; |
60 | 63 | 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; |
61 | 66 | import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminClient.ListTablesPage; |
62 | 67 | import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminClient.ListTablesPagedResponse; |
63 | 68 | import com.google.cloud.bigtable.admin.v2.internal.NameUtil; |
|
67 | 72 | import com.google.cloud.bigtable.admin.v2.models.CopyBackupRequest; |
68 | 73 | import com.google.cloud.bigtable.admin.v2.models.CreateAuthorizedViewRequest; |
69 | 74 | import com.google.cloud.bigtable.admin.v2.models.CreateBackupRequest; |
| 75 | +import com.google.cloud.bigtable.admin.v2.models.CreateSchemaBundleRequest; |
70 | 76 | import com.google.cloud.bigtable.admin.v2.models.CreateTableRequest; |
71 | 77 | import com.google.cloud.bigtable.admin.v2.models.EncryptionInfo; |
72 | 78 | import com.google.cloud.bigtable.admin.v2.models.ModifyColumnFamiliesRequest; |
73 | 79 | import com.google.cloud.bigtable.admin.v2.models.RestoreTableRequest; |
74 | 80 | import com.google.cloud.bigtable.admin.v2.models.RestoredTableResult; |
| 81 | +import com.google.cloud.bigtable.admin.v2.models.SchemaBundle; |
75 | 82 | import com.google.cloud.bigtable.admin.v2.models.SubsetView; |
76 | 83 | import com.google.cloud.bigtable.admin.v2.models.Table; |
77 | 84 | import com.google.cloud.bigtable.admin.v2.models.Type; |
78 | 85 | import com.google.cloud.bigtable.admin.v2.models.UpdateAuthorizedViewRequest; |
79 | 86 | import com.google.cloud.bigtable.admin.v2.models.UpdateBackupRequest; |
| 87 | +import com.google.cloud.bigtable.admin.v2.models.UpdateSchemaBundleRequest; |
80 | 88 | import com.google.cloud.bigtable.admin.v2.stub.EnhancedBigtableTableAdminStub; |
81 | 89 | import com.google.common.collect.ImmutableList; |
82 | 90 | import com.google.common.collect.Lists; |
@@ -122,6 +130,7 @@ public class BigtableTableAdminClientTests { |
122 | 130 | private static final String CLUSTER_ID = "my-cluster"; |
123 | 131 | private static final String BACKUP_ID = "my-backup"; |
124 | 132 | private static final String AUTHORIZED_VIEW_ID = "my-authorized-view"; |
| 133 | + private static final String SCHEMA_BUNDLE_ID = "my-schema-bundle"; |
125 | 134 |
|
126 | 135 | private static final String INSTANCE_NAME = NameUtil.formatInstanceName(PROJECT_ID, INSTANCE_ID); |
127 | 136 | private static final String TABLE_NAME = |
@@ -225,6 +234,35 @@ public class BigtableTableAdminClientTests { |
225 | 234 | private UnaryCallable<com.google.bigtable.admin.v2.DeleteAuthorizedViewRequest, Empty> |
226 | 235 | mockDeleteAuthorizedViewCallable; |
227 | 236 |
|
| 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 | + |
228 | 266 | @Mock |
229 | 267 | private UnaryCallable<com.google.iam.v1.GetIamPolicyRequest, com.google.iam.v1.Policy> |
230 | 268 | mockGetIamPolicyCallable; |
@@ -1291,6 +1329,213 @@ public void testDeleteAuthorizedView() { |
1291 | 1329 | assertThat(wasCalled.get()).isTrue(); |
1292 | 1330 | } |
1293 | 1331 |
|
| 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 | + |
1294 | 1539 | @Test |
1295 | 1540 | public void testGetBackupIamPolicy() { |
1296 | 1541 | // Setup |
|
0 commit comments