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