Skip to content

Commit 474cf47

Browse files
Changed test to use mock client
1 parent e2fa64f commit 474cf47

File tree

4 files changed

+137
-114
lines changed

4 files changed

+137
-114
lines changed

compute/cloud-client/src/main/java/compute/disks/consistencygroup/AddDiskToConsistencyGroup.java

Lines changed: 39 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,10 @@
1717
package compute.disks.consistencygroup;
1818

1919
// [START compute_consistency_group_add_disk]
20+
import com.google.cloud.compute.v1.AddResourcePoliciesDiskRequest;
2021
import com.google.cloud.compute.v1.AddResourcePoliciesRegionDiskRequest;
21-
import com.google.cloud.compute.v1.Disk;
22-
// If your disk has zonal location uncomment these lines
23-
//import com.google.cloud.compute.v1.AddResourcePoliciesDiskRequest;
24-
//import com.google.cloud.compute.v1.DisksAddResourcePoliciesRequest;
25-
//import com.google.cloud.compute.v1.DisksClient;
22+
import com.google.cloud.compute.v1.DisksAddResourcePoliciesRequest;
23+
import com.google.cloud.compute.v1.DisksClient;
2624
import com.google.cloud.compute.v1.Operation;
2725
import com.google.cloud.compute.v1.RegionDisksAddResourcePoliciesRequest;
2826
import com.google.cloud.compute.v1.RegionDisksClient;
@@ -31,7 +29,6 @@
3129
import java.util.concurrent.ExecutionException;
3230

3331
public class AddDiskToConsistencyGroup {
34-
3532
public static void main(String[] args)
3633
throws IOException, ExecutionException, InterruptedException {
3734
// TODO(developer): Replace these variables before running the sample.
@@ -45,49 +42,55 @@ public static void main(String[] args)
4542
String consistencyGroupName = "CONSISTENCY_GROUP";
4643
// The region of the consistency group.
4744
String consistencyGroupLocation = "us-central1";
45+
4846
addDiskToConsistencyGroup(
4947
project, location, diskName, consistencyGroupName, consistencyGroupLocation);
5048
}
5149

5250
// Adds a disk to a Consistency Group.
53-
public static Disk addDiskToConsistencyGroup(
51+
public static Operation.Status addDiskToConsistencyGroup(
5452
String project, String location, String diskName,
5553
String consistencyGroupName, String consistencyGroupLocation)
5654
throws IOException, ExecutionException, InterruptedException {
5755
String consistencyGroupUrl = String.format(
5856
"https://www.googleapis.com/compute/v1/projects/%s/regions/%s/resourcePolicies/%s",
5957
project, consistencyGroupLocation, consistencyGroupName);
60-
// If your disk has zonal location uncomment these lines
61-
// try (DisksClient disksClient = DisksClient.create()) {
62-
// AddResourcePoliciesDiskRequest request =
63-
// AddResourcePoliciesDiskRequest.newBuilder()
64-
// .setDisk(diskName)
65-
// .setDisksAddResourcePoliciesRequestResource(
66-
// DisksAddResourcePoliciesRequest.newBuilder()
67-
// .addAllResourcePolicies(Arrays.asList(consistencyGroupUrl))
68-
// .build())
69-
// .setProject(project)
70-
// .setZone(location)
71-
// .build();
72-
73-
try (RegionDisksClient disksClient = RegionDisksClient.create()) {
74-
AddResourcePoliciesRegionDiskRequest disksRequest =
75-
AddResourcePoliciesRegionDiskRequest.newBuilder()
76-
.setDisk(diskName)
77-
.setRegion(location)
78-
.setProject(project)
79-
.setRegionDisksAddResourcePoliciesRequestResource(
80-
RegionDisksAddResourcePoliciesRequest.newBuilder()
81-
.addAllResourcePolicies(Arrays.asList(consistencyGroupUrl))
82-
.build())
83-
.build();
84-
85-
Operation response = disksClient.addResourcePoliciesAsync(disksRequest).get();
86-
if (response.hasError()) {
87-
return null;
58+
Operation response;
59+
if (Character.isDigit(location.charAt(location.length() - 1))) {
60+
// Initialize client that will be used to send requests. This client only needs to be created
61+
// once, and can be reused for multiple requests.
62+
try (RegionDisksClient disksClient = RegionDisksClient.create()) {
63+
AddResourcePoliciesRegionDiskRequest request =
64+
AddResourcePoliciesRegionDiskRequest.newBuilder()
65+
.setDisk(diskName)
66+
.setRegion(location)
67+
.setProject(project)
68+
.setRegionDisksAddResourcePoliciesRequestResource(
69+
RegionDisksAddResourcePoliciesRequest.newBuilder()
70+
.addAllResourcePolicies(Arrays.asList(consistencyGroupUrl))
71+
.build())
72+
.build();
73+
response = disksClient.addResourcePoliciesAsync(request).get();
74+
}
75+
} else {
76+
try (DisksClient disksClient = DisksClient.create()) {
77+
AddResourcePoliciesDiskRequest request =
78+
AddResourcePoliciesDiskRequest.newBuilder()
79+
.setDisk(diskName)
80+
.setZone(location)
81+
.setProject(project)
82+
.setDisksAddResourcePoliciesRequestResource(
83+
DisksAddResourcePoliciesRequest.newBuilder()
84+
.addAllResourcePolicies(Arrays.asList(consistencyGroupUrl))
85+
.build())
86+
.build();
87+
response = disksClient.addResourcePoliciesAsync(request).get();
8888
}
89-
return disksClient.get(project, location, diskName);
9089
}
90+
if (response.hasError()) {
91+
throw new Error("Error adding disk to consistency group! " + response.getError());
92+
}
93+
return response.getStatus();
9194
}
9295
}
9396
// [END compute_consistency_group_add_disk]

compute/cloud-client/src/main/java/compute/disks/consistencygroup/CreateDiskConsistencyGroup.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ public static void main(String[] args)
3939
}
4040

4141
// Creates a new disk consistency group resource policy in the specified project and region.
42-
// Return a link to the consistency group.
43-
public static String createDiskConsistencyGroup(
42+
public static Operation.Status createDiskConsistencyGroup(
4443
String project, String region, String consistencyGroupName)
4544
throws IOException, ExecutionException, InterruptedException {
4645
// Initialize client that will be used to send requests. This client only needs to be created
@@ -58,10 +57,10 @@ public static String createDiskConsistencyGroup(
5857
regionResourcePoliciesClient.insertAsync(project, region, resourcePolicy).get();
5958

6059
if (response.hasError()) {
61-
return null;
60+
throw new Error("Error creating consistency group! " + response.getError());
6261
}
63-
return regionResourcePoliciesClient.get(project, region, consistencyGroupName).getSelfLink();
62+
return response.getStatus();
6463
}
6564
}
6665
}
67-
// [END compute_consistency_group_create]
66+
// [END compute_consistency_group_create]

compute/cloud-client/src/main/java/compute/disks/consistencygroup/DeleteDiskConsistencyGroup.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,22 +38,20 @@ public static void main(String[] args)
3838
}
3939

4040
// Deletes a disk consistency group resource policy in the specified project and region.
41-
public static void deleteDiskConsistencyGroup(
41+
public static Operation.Status deleteDiskConsistencyGroup(
4242
String project, String region, String consistencyGroupName)
4343
throws IOException, ExecutionException, InterruptedException {
4444
// Initialize client that will be used to send requests. This client only needs to be created
4545
// once, and can be reused for multiple requests.
46-
try (ResourcePoliciesClient regionResourcePoliciesClient = ResourcePoliciesClient.create()) {
47-
Operation response = regionResourcePoliciesClient
46+
try (ResourcePoliciesClient resourcePoliciesClient = ResourcePoliciesClient.create()) {
47+
Operation response = resourcePoliciesClient
4848
.deleteAsync(project, region, consistencyGroupName).get();
4949

5050
if (response.hasError()) {
51-
return;
51+
throw new Error("Error deleting disk! " + response.getError());
5252
}
53-
System.out.println(
54-
"Disk consistency group resource policy deleted successfully: "
55-
+ consistencyGroupName);
53+
return response.getStatus();
5654
}
5755
}
5856
}
59-
// [END compute_consistency_group_delete]
57+
// [END compute_consistency_group_delete]

compute/cloud-client/src/test/java/compute/disks/ConsistencyGroupIT.java

Lines changed: 88 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -16,90 +16,113 @@
1616

1717
package compute.disks;
1818

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;
2226

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;
2433
import compute.disks.consistencygroup.AddDiskToConsistencyGroup;
2534
import compute.disks.consistencygroup.CreateDiskConsistencyGroup;
2635
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;
3936
import org.junit.jupiter.api.Test;
40-
import org.junit.jupiter.api.TestMethodOrder;
4137
import org.junit.jupiter.api.Timeout;
4238
import org.junit.runner.RunWith;
4339
import org.junit.runners.JUnit4;
40+
import org.mockito.MockedStatic;
4441

4542
@RunWith(JUnit4.class)
46-
@Timeout(value = 3, unit = TimeUnit.MINUTES)
47-
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
43+
@Timeout(value = 20)
4844
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";
6149

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);
6864

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);
7270

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+
}
8079
}
8180

8281
@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+
}
92103
}
93104

94105
@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+
}
104127
}
105128
}

0 commit comments

Comments
 (0)