Skip to content

Commit e78b267

Browse files
authored
chore: Shutdown and awaitTermination for showcase clients (#1669)
* chore: Properly shutdown and awaitTermination for showcase clients * chore: Update showcase tests * chore: Increase the initial unary timeout value * chore: Await Termination after close() * chore: Run showcase tests one by one * chore: Update to use the constant values * fix: Implement awaitTermination for ManagedHttpJsonChannel * fix: ManagedHttpJsonChannel's executor is not static * chore: Update ManagedHttpJsonChannel logic * chore: Update LRO retry values * chore: Create and Destroy clients once per test * chore: Address code smell * chore: Update LRO retry values * chore: Use TTL for LROs * chore: Use LRO defaults for initial callable * chore: Run showcase tests one by one * chore: Empty commit
1 parent 14bc86b commit e78b267

12 files changed

+247
-176
lines changed

showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITBidiStreaming.java

+12-10
Original file line numberDiff line numberDiff line change
@@ -29,20 +29,27 @@
2929
import java.util.ArrayList;
3030
import java.util.Arrays;
3131
import java.util.List;
32-
import org.junit.After;
33-
import org.junit.Before;
32+
import java.util.concurrent.TimeUnit;
33+
import org.junit.AfterClass;
34+
import org.junit.BeforeClass;
3435
import org.junit.Test;
3536

3637
public class ITBidiStreaming {
3738

38-
private EchoClient grpcClient;
39+
private static EchoClient grpcClient;
3940

40-
@Before
41-
public void setUp() throws Exception {
41+
@BeforeClass
42+
public static void createClients() throws Exception {
4243
// Create gRPC Echo Client
4344
grpcClient = TestClientInitializer.createGrpcEchoClient();
4445
}
4546

47+
@AfterClass
48+
public static void destroyClients() throws Exception {
49+
grpcClient.close();
50+
grpcClient.awaitTermination(TestClientInitializer.AWAIT_TERMINATION_SECONDS, TimeUnit.SECONDS);
51+
}
52+
4653
// The current implementation of BIDI streaming on Echo showcase server is that it would echo the
4754
// request content back on every request, so this test verifies that the response content is
4855
// exactly the same as request content.
@@ -97,9 +104,4 @@ public SettableApiFuture<List<String>> getFuture() {
97104
return future;
98105
}
99106
}
100-
101-
@After
102-
public void tearDown() throws Exception {
103-
grpcClient.close();
104-
}
105107
}

showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITClientSideStreaming.java

+9-7
Original file line numberDiff line numberDiff line change
@@ -31,23 +31,25 @@
3131
import java.util.ArrayList;
3232
import java.util.List;
3333
import java.util.concurrent.ExecutionException;
34-
import org.junit.After;
35-
import org.junit.Before;
34+
import java.util.concurrent.TimeUnit;
35+
import org.junit.AfterClass;
36+
import org.junit.BeforeClass;
3637
import org.junit.Test;
3738

3839
public class ITClientSideStreaming {
3940

40-
private EchoClient grpcClient;
41+
private static EchoClient grpcClient;
4142

42-
@Before
43-
public void createClients() throws Exception {
43+
@BeforeClass
44+
public static void createClients() throws Exception {
4445
// Create gRPC Echo Client
4546
grpcClient = TestClientInitializer.createGrpcEchoClient();
4647
}
4748

48-
@After
49-
public void destroyClient() {
49+
@AfterClass
50+
public static void destroyClients() throws InterruptedException {
5051
grpcClient.close();
52+
grpcClient.awaitTermination(TestClientInitializer.AWAIT_TERMINATION_SECONDS, TimeUnit.SECONDS);
5153
}
5254

5355
@Test

showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITCommonServiceMixins.java

+17-5
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@
2626
import com.google.showcase.v1beta1.it.util.TestClientInitializer;
2727
import java.util.ArrayList;
2828
import java.util.List;
29-
import org.junit.Before;
29+
import java.util.concurrent.TimeUnit;
30+
import org.junit.AfterClass;
31+
import org.junit.BeforeClass;
3032
import org.junit.Test;
3133

3234
public class ITCommonServiceMixins {
@@ -51,18 +53,28 @@ public class ITCommonServiceMixins {
5153
.setName("projects/showcase/locations/us-west")
5254
.setDisplayName("us-west")
5355
.build());
54-
private EchoClient grpcClient;
55-
private EchoClient httpjsonClient;
56+
private static EchoClient grpcClient;
57+
private static EchoClient httpjsonClient;
5658

57-
@Before
58-
public void createClients() throws Exception {
59+
@BeforeClass
60+
public static void createClients() throws Exception {
5961
// Create gRPC Echo Client
6062
grpcClient = TestClientInitializer.createGrpcEchoClient();
6163

6264
// Create HttpJson Echo Client
6365
httpjsonClient = TestClientInitializer.createHttpJsonEchoClient();
6466
}
6567

68+
@AfterClass
69+
public static void destroyClients() throws InterruptedException {
70+
grpcClient.close();
71+
httpjsonClient.close();
72+
73+
grpcClient.awaitTermination(TestClientInitializer.AWAIT_TERMINATION_SECONDS, TimeUnit.SECONDS);
74+
httpjsonClient.awaitTermination(
75+
TestClientInitializer.AWAIT_TERMINATION_SECONDS, TimeUnit.SECONDS);
76+
}
77+
6678
@Test
6779
public void testGrpc_getLocation() {
6880
GetLocationRequest request =

showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITCrud.java

+34-30
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,10 @@
2929
import com.google.showcase.v1beta1.it.util.TestClientInitializer;
3030
import java.util.Arrays;
3131
import java.util.List;
32-
import org.junit.After;
32+
import java.util.concurrent.TimeUnit;
33+
import org.junit.AfterClass;
3334
import org.junit.Before;
35+
import org.junit.BeforeClass;
3436
import org.junit.Test;
3537

3638
public class ITCrud {
@@ -44,24 +46,38 @@ public class ITCrud {
4446
.setAge(25)
4547
.build();
4648

47-
private IdentityClient grpcClient;
48-
private IdentityClient httpJsonClient;
49+
private static IdentityClient grpcClient;
50+
private static IdentityClient httpjsonClient;
4951

50-
@Before
51-
public void setup() throws Exception {
52+
@BeforeClass
53+
public static void createClients() throws Exception {
5254
// Create gRPC IdentityClient
5355
grpcClient = TestClientInitializer.createGrpcIdentityClient();
5456
// Create HttpJson IdentityClient
55-
httpJsonClient = TestClientInitializer.createHttpJsonIdentityClient();
56-
57-
// Ensure an empty state before each run
58-
cleanupData(httpJsonClient);
57+
httpjsonClient = TestClientInitializer.createHttpJsonIdentityClient();
5958
}
6059

61-
@After
62-
public void cleanup() {
60+
@AfterClass
61+
public static void destroyClients() throws InterruptedException {
6362
grpcClient.close();
64-
httpJsonClient.close();
63+
httpjsonClient.close();
64+
65+
grpcClient.awaitTermination(TestClientInitializer.AWAIT_TERMINATION_SECONDS, TimeUnit.SECONDS);
66+
httpjsonClient.awaitTermination(
67+
TestClientInitializer.AWAIT_TERMINATION_SECONDS, TimeUnit.SECONDS);
68+
}
69+
70+
@Before
71+
public void cleanupData() {
72+
IdentityClient.ListUsersPagedResponse pagedResponse =
73+
grpcClient.listUsers(ListUsersRequest.newBuilder().setPageSize(5).build());
74+
for (IdentityClient.ListUsersPage listUsersPage : pagedResponse.iteratePages()) {
75+
for (User user : listUsersPage.getResponse().getUsersList()) {
76+
grpcClient.deleteUser(user.getName());
77+
}
78+
}
79+
pagedResponse = httpjsonClient.listUsers(ListUsersRequest.newBuilder().setPageSize(5).build());
80+
assertThat(pagedResponse.getPage().getResponse().getUsersList().size()).isEqualTo(0);
6581
}
6682

6783
@Test
@@ -95,7 +111,7 @@ public void testHttpJson_Read() {
95111
.build()));
96112
// Assert that only one User exists
97113
IdentityClient.ListUsersPagedResponse listUsersPagedResponse =
98-
httpJsonClient.listUsers(ListUsersRequest.newBuilder().setPageSize(5).build());
114+
httpjsonClient.listUsers(ListUsersRequest.newBuilder().setPageSize(5).build());
99115
ListUsersResponse listUsersResponse = listUsersPagedResponse.getPage().getResponse();
100116
assertThat(listUsersResponse.getUsersList().size()).isEqualTo(2);
101117

@@ -105,7 +121,7 @@ public void testHttpJson_Read() {
105121

106122
// Get User
107123
User defaultUser = expectedUsersList.get(0);
108-
User getUserResponse = httpJsonClient.getUser(defaultUser.getName());
124+
User getUserResponse = httpjsonClient.getUser(defaultUser.getName());
109125
assertThat(getUserResponse).isEqualTo(defaultUser);
110126
}
111127

@@ -124,7 +140,7 @@ public void testHttpJson_Update() {
124140
.setEnableNotifications(true)
125141
.build();
126142
User updateUserResponse =
127-
httpJsonClient.updateUser(
143+
httpjsonClient.updateUser(
128144
UpdateUserRequest.newBuilder()
129145
.setUser(updateUser)
130146
.setUpdateMask(
@@ -148,26 +164,14 @@ public void testHttpJson_Update() {
148164
public void testHttpJson_Delete() {
149165
User userResponse = createDefaultUser();
150166

151-
httpJsonClient.deleteUser(
167+
httpjsonClient.deleteUser(
152168
DeleteUserRequest.newBuilder().setName(userResponse.getName()).build());
153169

154170
IdentityClient.ListUsersPagedResponse listUsersPagedResponse =
155-
httpJsonClient.listUsers(ListUsersRequest.newBuilder().setPageSize(5).build());
171+
httpjsonClient.listUsers(ListUsersRequest.newBuilder().setPageSize(5).build());
156172
assertThat(listUsersPagedResponse.getPage().getResponse().getUsersList().size()).isEqualTo(0);
157173
}
158174

159-
private void cleanupData(IdentityClient identityClient) {
160-
IdentityClient.ListUsersPagedResponse pagedResponse =
161-
identityClient.listUsers(ListUsersRequest.newBuilder().setPageSize(5).build());
162-
for (IdentityClient.ListUsersPage listUsersPage : pagedResponse.iteratePages()) {
163-
for (User user : listUsersPage.getResponse().getUsersList()) {
164-
identityClient.deleteUser(user.getName());
165-
}
166-
}
167-
pagedResponse = httpJsonClient.listUsers(ListUsersRequest.newBuilder().setPageSize(5).build());
168-
assertThat(pagedResponse.getPage().getResponse().getUsersList().size()).isEqualTo(0);
169-
}
170-
171175
private User createDefaultUser() {
172176
return createUser(DEFAULT_USER);
173177
}
@@ -182,6 +186,6 @@ private User createDefaultUser() {
182186
* @return newly created user
183187
*/
184188
private User createUser(User user) {
185-
return httpJsonClient.createUser(CreateUserRequest.newBuilder().setUser(user).build());
189+
return httpjsonClient.createUser(CreateUserRequest.newBuilder().setUser(user).build());
186190
}
187191
}

showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITHttpAnnotation.java

+27-21
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,19 @@
2828
import com.google.showcase.v1beta1.ComplianceSuite;
2929
import com.google.showcase.v1beta1.RepeatRequest;
3030
import com.google.showcase.v1beta1.RepeatResponse;
31+
import com.google.showcase.v1beta1.it.util.TestClientInitializer;
3132
import java.io.IOException;
3233
import java.io.InputStreamReader;
3334
import java.security.GeneralSecurityException;
3435
import java.util.List;
3536
import java.util.Map;
37+
import java.util.Objects;
3638
import java.util.Optional;
39+
import java.util.concurrent.TimeUnit;
3740
import java.util.function.Function;
3841
import java.util.stream.Collectors;
39-
import org.junit.After;
40-
import org.junit.Before;
42+
import org.junit.AfterClass;
43+
import org.junit.BeforeClass;
4144
import org.junit.Test;
4245
import org.junit.runner.RunWith;
4346
import org.junit.runners.Parameterized;
@@ -62,19 +65,20 @@ public static String[] data() {
6265
@Parameterized.Parameter(0)
6366
public String groupName;
6467

65-
private ComplianceSuite complianceSuite;
66-
private ComplianceClient complianceClient;
67-
private Map<String, Function<RepeatRequest, RepeatResponse>> validComplianceRpcMap;
68+
private static ComplianceClient httpjsonClient;
69+
private static ComplianceSuite complianceSuite;
70+
private static Map<String, Function<RepeatRequest, RepeatResponse>> validComplianceRpcMap;
6871

69-
@Before
70-
public void createClient() throws IOException, GeneralSecurityException {
72+
@BeforeClass
73+
public static void createClients() throws IOException, GeneralSecurityException {
7174
ComplianceSuite.Builder builder = ComplianceSuite.newBuilder();
7275
JsonFormat.parser()
7376
.merge(
7477
new InputStreamReader(
75-
ITHttpAnnotation.class
76-
.getClassLoader()
77-
.getResourceAsStream("compliance_suite.json")),
78+
Objects.requireNonNull(
79+
ITHttpAnnotation.class
80+
.getClassLoader()
81+
.getResourceAsStream("compliance_suite.json"))),
7882
builder);
7983
complianceSuite = builder.build();
8084

@@ -88,30 +92,32 @@ public void createClient() throws IOException, GeneralSecurityException {
8892
.setEndpoint("http://localhost:7469")
8993
.build())
9094
.build();
91-
complianceClient = ComplianceClient.create(httpjsonComplianceSettings);
95+
httpjsonClient = ComplianceClient.create(httpjsonComplianceSettings);
9296

9397
// Mapping of Compliance Suite file RPC Names to ComplianceClient methods
9498
validComplianceRpcMap =
9599
ImmutableMap.of(
96100
"Compliance.RepeatDataBody",
97-
complianceClient::repeatDataBody,
101+
httpjsonClient::repeatDataBody,
98102
"Compliance.RepeatDataBodyInfo",
99-
complianceClient::repeatDataBodyInfo,
103+
httpjsonClient::repeatDataBodyInfo,
100104
"Compliance.RepeatDataQuery",
101-
complianceClient::repeatDataQuery,
105+
httpjsonClient::repeatDataQuery,
102106
"Compliance.RepeatDataSimplePath",
103-
complianceClient::repeatDataSimplePath,
107+
httpjsonClient::repeatDataSimplePath,
104108
"Compliance.RepeatDataBodyPut",
105-
complianceClient::repeatDataBodyPut,
109+
httpjsonClient::repeatDataBodyPut,
106110
"Compliance.RepeatDataBodyPatch",
107-
complianceClient::repeatDataBodyPatch,
111+
httpjsonClient::repeatDataBodyPatch,
108112
"Compliance.RepeatDataPathResource",
109-
complianceClient::repeatDataPathResource);
113+
httpjsonClient::repeatDataPathResource);
110114
}
111115

112-
@After
113-
public void destroyClient() {
114-
complianceClient.close();
116+
@AfterClass
117+
public static void destroyClients() throws InterruptedException {
118+
httpjsonClient.close();
119+
httpjsonClient.awaitTermination(
120+
TestClientInitializer.AWAIT_TERMINATION_SECONDS, TimeUnit.SECONDS);
115121
}
116122

117123
// Verify that the input's info is the same as the response's info

0 commit comments

Comments
 (0)