|
16 | 16 |
|
17 | 17 | package compute.disks; |
18 | 18 |
|
19 | | -import static com.google.common.truth.Truth.assertThat; |
20 | | -import static com.google.common.truth.Truth.assertWithMessage; |
21 | | -import static org.junit.Assert.assertNotNull; |
| 19 | +import static org.junit.Assert.assertEquals; |
| 20 | +import static org.mockito.Mockito.any; |
| 21 | +import static org.mockito.Mockito.mock; |
| 22 | +import static org.mockito.Mockito.mockStatic; |
| 23 | +import static org.mockito.Mockito.times; |
| 24 | +import static org.mockito.Mockito.verify; |
| 25 | +import static org.mockito.Mockito.when; |
22 | 26 |
|
23 | | -import com.google.cloud.compute.v1.Disk; |
| 27 | +import com.google.api.gax.longrunning.OperationFuture; |
| 28 | +import com.google.cloud.compute.v1.AddResourcePoliciesRegionDiskRequest; |
| 29 | +import com.google.cloud.compute.v1.Operation; |
| 30 | +import com.google.cloud.compute.v1.RegionDisksClient; |
| 31 | +import com.google.cloud.compute.v1.ResourcePoliciesClient; |
| 32 | +import com.google.cloud.compute.v1.ResourcePolicy; |
24 | 33 | import compute.disks.consistencygroup.AddDiskToConsistencyGroup; |
25 | 34 | import compute.disks.consistencygroup.CreateDiskConsistencyGroup; |
26 | 35 | import compute.disks.consistencygroup.DeleteDiskConsistencyGroup; |
27 | | -import java.io.IOException; |
28 | | -import java.util.Arrays; |
29 | | -import java.util.List; |
30 | | -import java.util.Optional; |
31 | | -import java.util.UUID; |
32 | | -import java.util.concurrent.ExecutionException; |
33 | | -import java.util.concurrent.TimeUnit; |
34 | | -import java.util.concurrent.TimeoutException; |
35 | | -import org.junit.jupiter.api.AfterAll; |
36 | | -import org.junit.jupiter.api.BeforeAll; |
37 | | -import org.junit.jupiter.api.MethodOrderer; |
38 | | -import org.junit.jupiter.api.Order; |
39 | 36 | import org.junit.jupiter.api.Test; |
40 | | -import org.junit.jupiter.api.TestMethodOrder; |
41 | 37 | import org.junit.jupiter.api.Timeout; |
42 | 38 | import org.junit.runner.RunWith; |
43 | 39 | import org.junit.runners.JUnit4; |
| 40 | +import org.mockito.MockedStatic; |
44 | 41 |
|
45 | 42 | @RunWith(JUnit4.class) |
46 | | -@Timeout(value = 3, unit = TimeUnit.MINUTES) |
47 | | -@TestMethodOrder(MethodOrderer.OrderAnnotation.class) |
| 43 | +@Timeout(value = 20) |
48 | 44 | public class ConsistencyGroupIT { |
49 | | - private static final String PROJECT_ID = System.getenv("GOOGLE_CLOUD_PROJECT"); |
50 | | - private static final String REGION = "us-central1"; |
51 | | - static String randomUUID = UUID.randomUUID().toString().split("-")[0]; |
52 | | - private static final String CONSISTENCY_GROUP_NAME = "test-consistency-group-" + randomUUID; |
53 | | - private static final String DISK_NAME = "test-disk-for-consistency-" + randomUUID; |
54 | | - private static final String DISK_TYPE = String.format("regions/%s/diskTypes/pd-ssd", REGION); |
55 | | - |
56 | | - // Check if the required environment variables are set. |
57 | | - public static void requireEnvVar(String envVarName) { |
58 | | - assertWithMessage(String.format("Missing environment variable '%s' ", envVarName)) |
59 | | - .that(System.getenv(envVarName)).isNotEmpty(); |
60 | | - } |
| 45 | + private static final String PROJECT_ID = "project-id"; |
| 46 | + private static final String REGION = "asia-east1"; |
| 47 | + private static final String CONSISTENCY_GROUP_NAME = "consistency-group"; |
| 48 | + private static final String DISK_NAME = "disk-for-consistency"; |
61 | 49 |
|
62 | | - @BeforeAll |
63 | | - public static void setUp() throws Exception { |
64 | | - requireEnvVar("GOOGLE_CLOUD_PROJECT"); |
65 | | - List<String> replicaZones = Arrays.asList( |
66 | | - String.format("projects/%s/zones/%s-a", PROJECT_ID, REGION), |
67 | | - String.format("projects/%s/zones/%s-b", PROJECT_ID, REGION)); |
| 50 | + @Test |
| 51 | + public void testCreateDiskConsistencyGroupResourcePolicy() throws Exception { |
| 52 | + ResourcePolicy resourcePolicy = |
| 53 | + ResourcePolicy.newBuilder() |
| 54 | + .setName(CONSISTENCY_GROUP_NAME) |
| 55 | + .setRegion(REGION) |
| 56 | + .setDiskConsistencyGroupPolicy( |
| 57 | + ResourcePolicy.newBuilder().getDiskConsistencyGroupPolicy()) |
| 58 | + .build(); |
| 59 | + try (MockedStatic<ResourcePoliciesClient> mockedResourcePoliciesClient = |
| 60 | + mockStatic(ResourcePoliciesClient.class)) { |
| 61 | + Operation operation = mock(Operation.class); |
| 62 | + ResourcePoliciesClient mockClient = mock(ResourcePoliciesClient.class); |
| 63 | + OperationFuture mockFuture = mock(OperationFuture.class); |
68 | 64 |
|
69 | | - RegionalCreateFromSource.createRegionalDisk(PROJECT_ID, REGION, replicaZones, |
70 | | - DISK_NAME, DISK_TYPE, 10, Optional.empty(), Optional.empty()); |
71 | | - } |
| 65 | + mockedResourcePoliciesClient.when(ResourcePoliciesClient::create).thenReturn(mockClient); |
| 66 | + when(mockClient.insertAsync(PROJECT_ID, REGION, resourcePolicy)) |
| 67 | + .thenReturn(mockFuture); |
| 68 | + when(mockFuture.get()).thenReturn(operation); |
| 69 | + when(operation.getStatus()).thenReturn(Operation.Status.DONE); |
72 | 70 |
|
73 | | - @AfterAll |
74 | | - public static void cleanUp() |
75 | | - throws IOException, ExecutionException, InterruptedException, TimeoutException { |
76 | | - // Delete created consistency group |
77 | | - RegionalDelete.deleteRegionalDisk(PROJECT_ID, REGION, DISK_NAME); |
78 | | - DeleteDiskConsistencyGroup.deleteDiskConsistencyGroup( |
79 | | - PROJECT_ID, REGION, CONSISTENCY_GROUP_NAME); |
| 71 | + Operation.Status status = CreateDiskConsistencyGroup.createDiskConsistencyGroup( |
| 72 | + PROJECT_ID, REGION, CONSISTENCY_GROUP_NAME); |
| 73 | + |
| 74 | + verify(mockClient, times(1)) |
| 75 | + .insertAsync(PROJECT_ID, REGION, resourcePolicy); |
| 76 | + verify(mockFuture, times(1)).get(); |
| 77 | + assertEquals(Operation.Status.DONE, status); |
| 78 | + } |
80 | 79 | } |
81 | 80 |
|
82 | 81 | @Test |
83 | | - @Order(1) |
84 | | - public void testCreateDiskConsistencyGroupResourcePolicy() |
85 | | - throws IOException, ExecutionException, InterruptedException { |
86 | | - String consistencyGroupLink = CreateDiskConsistencyGroup.createDiskConsistencyGroup( |
87 | | - PROJECT_ID, REGION, CONSISTENCY_GROUP_NAME); |
88 | | - |
89 | | - // Verify that the consistency group was created |
90 | | - assertNotNull(consistencyGroupLink); |
91 | | - assertThat(consistencyGroupLink.contains(CONSISTENCY_GROUP_NAME)); |
| 82 | + public void testAddRegionalDiskToConsistencyGroup() throws Exception { |
| 83 | + try (MockedStatic<RegionDisksClient> mockedRegionDisksClient = |
| 84 | + mockStatic(RegionDisksClient.class)) { |
| 85 | + Operation operation = mock(Operation.class); |
| 86 | + RegionDisksClient mockClient = mock(RegionDisksClient.class); |
| 87 | + OperationFuture mockFuture = mock(OperationFuture.class); |
| 88 | + |
| 89 | + mockedRegionDisksClient.when(RegionDisksClient::create).thenReturn(mockClient); |
| 90 | + when(mockClient.addResourcePoliciesAsync(any(AddResourcePoliciesRegionDiskRequest.class))) |
| 91 | + .thenReturn(mockFuture); |
| 92 | + when(mockFuture.get()).thenReturn(operation); |
| 93 | + when(operation.getStatus()).thenReturn(Operation.Status.DONE); |
| 94 | + |
| 95 | + Operation.Status status = AddDiskToConsistencyGroup.addDiskToConsistencyGroup( |
| 96 | + PROJECT_ID, REGION, DISK_NAME, CONSISTENCY_GROUP_NAME, REGION); |
| 97 | + |
| 98 | + verify(mockClient, times(1)) |
| 99 | + .addResourcePoliciesAsync(any(AddResourcePoliciesRegionDiskRequest.class)); |
| 100 | + verify(mockFuture, times(1)).get(); |
| 101 | + assertEquals(Operation.Status.DONE, status); |
| 102 | + } |
92 | 103 | } |
93 | 104 |
|
94 | 105 | @Test |
95 | | - @Order(2) |
96 | | - public void testAddRegionalDiskToConsistencyGroup() |
97 | | - throws IOException, ExecutionException, InterruptedException { |
98 | | - Disk disk = AddDiskToConsistencyGroup.addDiskToConsistencyGroup( |
99 | | - PROJECT_ID, REGION, DISK_NAME, CONSISTENCY_GROUP_NAME, REGION); |
100 | | - |
101 | | - // Verify that the disk was added to the consistency group |
102 | | - assertNotNull(disk); |
103 | | - assertThat(disk.getResourcePoliciesList().get(0).contains(CONSISTENCY_GROUP_NAME)); |
| 106 | + public void testDeleteDiskConsistencyGroup() throws Exception { |
| 107 | + try (MockedStatic<ResourcePoliciesClient> mockedResourcePoliciesClient = |
| 108 | + mockStatic(ResourcePoliciesClient.class)) { |
| 109 | + Operation operation = mock(Operation.class); |
| 110 | + ResourcePoliciesClient mockClient = mock(ResourcePoliciesClient.class); |
| 111 | + OperationFuture mockFuture = mock(OperationFuture.class); |
| 112 | + |
| 113 | + mockedResourcePoliciesClient.when(ResourcePoliciesClient::create).thenReturn(mockClient); |
| 114 | + when(mockClient.deleteAsync(PROJECT_ID, REGION, CONSISTENCY_GROUP_NAME)) |
| 115 | + .thenReturn(mockFuture); |
| 116 | + when(mockFuture.get()).thenReturn(operation); |
| 117 | + when(operation.getStatus()).thenReturn(Operation.Status.DONE); |
| 118 | + |
| 119 | + Operation.Status status = DeleteDiskConsistencyGroup.deleteDiskConsistencyGroup( |
| 120 | + PROJECT_ID, REGION, CONSISTENCY_GROUP_NAME); |
| 121 | + |
| 122 | + verify(mockClient, times(1)) |
| 123 | + .deleteAsync(PROJECT_ID, REGION, CONSISTENCY_GROUP_NAME); |
| 124 | + verify(mockFuture, times(1)).get(); |
| 125 | + assertEquals(Operation.Status.DONE, status); |
| 126 | + } |
104 | 127 | } |
105 | 128 | } |
0 commit comments