|
45 | 45 | import com.google.bigtable.admin.v2.ListBackupsRequest; |
46 | 46 | import com.google.bigtable.admin.v2.ListTablesRequest; |
47 | 47 | import com.google.bigtable.admin.v2.ModifyColumnFamiliesRequest.Modification; |
| 48 | +import com.google.bigtable.admin.v2.OptimizeRestoredTableMetadata; |
48 | 49 | import com.google.bigtable.admin.v2.RestoreSourceType; |
49 | 50 | import com.google.bigtable.admin.v2.RestoreTableMetadata; |
50 | 51 | import com.google.bigtable.admin.v2.SchemaBundleName; |
|
76 | 77 | import com.google.cloud.bigtable.admin.v2.models.CreateTableRequest; |
77 | 78 | import com.google.cloud.bigtable.admin.v2.models.EncryptionInfo; |
78 | 79 | import com.google.cloud.bigtable.admin.v2.models.ModifyColumnFamiliesRequest; |
| 80 | +import com.google.cloud.bigtable.admin.v2.models.OptimizeRestoredTableOperationToken; |
79 | 81 | import com.google.cloud.bigtable.admin.v2.models.RestoreTableRequest; |
80 | 82 | import com.google.cloud.bigtable.admin.v2.models.RestoredTableResult; |
81 | 83 | import com.google.cloud.bigtable.admin.v2.models.SchemaBundle; |
@@ -285,6 +287,10 @@ public class BigtableTableAdminClientTests { |
285 | 287 | com.google.iam.v1.TestIamPermissionsRequest, com.google.iam.v1.TestIamPermissionsResponse> |
286 | 288 | mockTestIamPermissionsCallable; |
287 | 289 |
|
| 290 | + @Mock |
| 291 | + private OperationCallable<Void, Empty, OptimizeRestoredTableMetadata> |
| 292 | + mockOptimizeRestoredTableCallable; |
| 293 | + |
288 | 294 | @Before |
289 | 295 | public void setUp() { |
290 | 296 | adminClient = BigtableTableAdminClient.create(PROJECT_ID, INSTANCE_ID, mockStub); |
@@ -1682,6 +1688,59 @@ public void testWaitForConsistencyWithToken() { |
1682 | 1688 | assertThat(wasCalled.get()).isTrue(); |
1683 | 1689 | } |
1684 | 1690 |
|
| 1691 | + @Test |
| 1692 | + public void testAwaitOptimizeRestoredTable() throws Exception { |
| 1693 | + // Setup |
| 1694 | + Mockito.when(mockStub.awaitOptimizeRestoredTableCallable()) |
| 1695 | + .thenReturn(mockOptimizeRestoredTableCallable); |
| 1696 | + |
| 1697 | + String optimizeToken = "my-optimization-token"; |
| 1698 | + |
| 1699 | + // 1. Mock the Token |
| 1700 | + OptimizeRestoredTableOperationToken mockToken = |
| 1701 | + Mockito.mock(OptimizeRestoredTableOperationToken.class); |
| 1702 | + Mockito.when(mockToken.getOperationName()).thenReturn(optimizeToken); |
| 1703 | + |
| 1704 | + // 2. Mock the Result (wrapping the token) |
| 1705 | + RestoredTableResult mockResult = Mockito.mock(RestoredTableResult.class); |
| 1706 | + Mockito.when(mockResult.getOptimizeRestoredTableOperationToken()).thenReturn(mockToken); |
| 1707 | + |
| 1708 | + // 3. Mock the Input Future (returning the result) |
| 1709 | + ApiFuture<RestoredTableResult> mockRestoreFuture = Mockito.mock(ApiFuture.class); |
| 1710 | + Mockito.when(mockRestoreFuture.get()).thenReturn(mockResult); |
| 1711 | + |
| 1712 | + // 4. Mock the Stub's behavior (resuming the Optimize Op) |
| 1713 | + OperationFuture<Empty, OptimizeRestoredTableMetadata> mockOptimizeOp = |
| 1714 | + Mockito.mock(OperationFuture.class); |
| 1715 | + Mockito.when(mockOptimizeRestoredTableCallable.resumeFutureCall(optimizeToken)) |
| 1716 | + .thenReturn(mockOptimizeOp); |
| 1717 | + |
| 1718 | + // Execute |
| 1719 | + ApiFuture<Empty> result = adminClient.awaitOptimizeRestoredTable(mockRestoreFuture); |
| 1720 | + |
| 1721 | + // Verify |
| 1722 | + assertThat(result).isEqualTo(mockOptimizeOp); |
| 1723 | + Mockito.verify(mockOptimizeRestoredTableCallable).resumeFutureCall(optimizeToken); |
| 1724 | + } |
| 1725 | + |
| 1726 | + @Test |
| 1727 | + public void testAwaitOptimizeRestoredTable_NoOp() throws Exception { |
| 1728 | + // Setup: Result with NO optimization token (null or empty) |
| 1729 | + RestoredTableResult mockResult = Mockito.mock(RestoredTableResult.class); |
| 1730 | + Mockito.when(mockResult.getOptimizeRestoredTableOperationToken()).thenReturn(null); |
| 1731 | + |
| 1732 | + // Mock the Input Future |
| 1733 | + ApiFuture<RestoredTableResult> mockRestoreFuture = Mockito.mock(ApiFuture.class); |
| 1734 | + Mockito.when(mockRestoreFuture.get()).thenReturn(mockResult); |
| 1735 | + |
| 1736 | + // Execute |
| 1737 | + ApiFuture<Empty> result = adminClient.awaitOptimizeRestoredTable(mockRestoreFuture); |
| 1738 | + |
| 1739 | + // Verify: Returns immediate success (Empty) without calling the stub |
| 1740 | + assertThat(result.get()).isEqualTo(Empty.getDefaultInstance()); |
| 1741 | + Mockito.verifyNoInteractions(mockStub); |
| 1742 | + } |
| 1743 | + |
1685 | 1744 | private <ReqT, RespT, MetaT> void mockOperationResult( |
1686 | 1745 | OperationCallable<ReqT, RespT, MetaT> callable, |
1687 | 1746 | ReqT request, |
|
0 commit comments