diff --git a/showcase/gapic-showcase/pom.xml b/showcase/gapic-showcase/pom.xml index 991b131cfb..76c576460f 100644 --- a/showcase/gapic-showcase/pom.xml +++ b/showcase/gapic-showcase/pom.xml @@ -107,7 +107,7 @@ fmt-maven-plugin 2.9 - (IT.*\.java)|(.*Test.java) + (IT.*\.java)|(.*Test.java)|(TestClientInitializer.java) diff --git a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITCrud.java b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITCrud.java new file mode 100644 index 0000000000..1600d860a5 --- /dev/null +++ b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITCrud.java @@ -0,0 +1,186 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.showcase.v1beta1.it; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.common.collect.ImmutableList; +import com.google.protobuf.FieldMask; +import com.google.showcase.v1beta1.CreateUserRequest; +import com.google.showcase.v1beta1.DeleteUserRequest; +import com.google.showcase.v1beta1.IdentityClient; +import com.google.showcase.v1beta1.ListUsersRequest; +import com.google.showcase.v1beta1.ListUsersResponse; +import com.google.showcase.v1beta1.UpdateUserRequest; +import com.google.showcase.v1beta1.User; +import com.google.showcase.v1beta1.it.util.TestClientInitializer; +import java.util.Arrays; +import java.util.List; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class ITCrud { + + private static final User DEFAULT_USER = + User.newBuilder() + .setDisplayName("Jane Doe") + .setEmail("janedoe@example.com") + .setNickname("Doe") + .setHeightFeet(5) + .setAge(25) + .build(); + + private IdentityClient grpcClient; + private IdentityClient httpJsonClient; + + @Before + public void setup() throws Exception { + // Create gRPC IdentityClient + grpcClient = TestClientInitializer.createGrpcIdentityClient(); + // Create HttpJson IdentityClient + httpJsonClient = TestClientInitializer.createHttpJsonIdentityClient(); + + // Ensure an empty state before each run + cleanupData(httpJsonClient); + } + + @After + public void cleanup() { + httpJsonClient.close(); + } + + @Test + public void testHttpJson_Create() { + User userResponse = createDefaultUser(); + + // These properties should be the same + assertThat(userResponse.getDisplayName()).isEqualTo(DEFAULT_USER.getDisplayName()); + assertThat(userResponse.getEmail()).isEqualTo(DEFAULT_USER.getEmail()); + assertThat(userResponse.getNickname()).isEqualTo(DEFAULT_USER.getNickname()); + assertThat(userResponse.getHeightFeet()).isEqualTo(DEFAULT_USER.getHeightFeet()); + assertThat(userResponse.getAge()).isEqualTo(DEFAULT_USER.getAge()); + + // Assert that the server populates these fields + assertThat(userResponse.getName()).isNotEmpty(); + assertThat(userResponse.getCreateTime()).isNotNull(); + assertThat(userResponse.getUpdateTime()).isNotNull(); + assertThat(userResponse.getEnableNotifications()).isNotNull(); + } + + @Test + public void testHttpJson_Read() { + List expectedUsersList = + ImmutableList.of( + createDefaultUser(), + createUser( + DEFAULT_USER + .toBuilder() + .setNickname("John Smith") + .setEmail("johnsmith@example.com") + .build())); + // Assert that only one User exists + IdentityClient.ListUsersPagedResponse listUsersPagedResponse = + httpJsonClient.listUsers(ListUsersRequest.newBuilder().setPageSize(5).build()); + ListUsersResponse listUsersResponse = listUsersPagedResponse.getPage().getResponse(); + assertThat(listUsersResponse.getUsersList().size()).isEqualTo(2); + + // Check that the response from both List (pagination) and Get + // List Users + assertThat(listUsersResponse.getUsersList()).containsExactlyElementsIn(expectedUsersList); + + // Get User + User defaultUser = expectedUsersList.get(0); + User getUserResponse = httpJsonClient.getUser(defaultUser.getName()); + assertThat(getUserResponse).isEqualTo(defaultUser); + } + + @Test + public void testHttpJson_Update() { + User userResponse = createDefaultUser(); + // Update multiple fields in the User. Age + Nickname are not included in the FieldMask + // userResponse's enableNotifications field is populated from the server + User updateUser = + userResponse + .toBuilder() + .setAge(50) + .setNickname("Smith") + .setEmail("janedoe@jane.com") + .setHeightFeet(6.0) + .setEnableNotifications(true) + .build(); + User updateUserResponse = + httpJsonClient.updateUser( + UpdateUserRequest.newBuilder() + .setUser(updateUser) + .setUpdateMask( + FieldMask.newBuilder() + .addAllPaths(Arrays.asList("email", "height_feet", "enable_notifications")) + .build()) + .build()); + + // Assert that only the fields in the FieldMask are updated correctly + assertThat(updateUserResponse).isNotEqualTo(userResponse); + assertThat(updateUserResponse.getAge()).isEqualTo(userResponse.getAge()); + assertThat(updateUserResponse.getNickname()).isEqualTo(userResponse.getNickname()); + + assertThat(updateUserResponse.getEmail()).isEqualTo(updateUser.getEmail()); + assertThat(updateUserResponse.getHeightFeet()).isEqualTo(updateUser.getHeightFeet()); + assertThat(updateUserResponse.getEnableNotifications()) + .isEqualTo(updateUser.getEnableNotifications()); + } + + @Test + public void testHttpJson_Delete() { + User userResponse = createDefaultUser(); + + httpJsonClient.deleteUser( + DeleteUserRequest.newBuilder().setName(userResponse.getName()).build()); + + IdentityClient.ListUsersPagedResponse listUsersPagedResponse = + httpJsonClient.listUsers(ListUsersRequest.newBuilder().setPageSize(5).build()); + assertThat(listUsersPagedResponse.getPage().getResponse().getUsersList().size()).isEqualTo(0); + } + + private void cleanupData(IdentityClient identityClient) { + IdentityClient.ListUsersPagedResponse pagedResponse = + identityClient.listUsers(ListUsersRequest.newBuilder().setPageSize(5).build()); + for (IdentityClient.ListUsersPage listUsersPage : pagedResponse.iteratePages()) { + for (User user : listUsersPage.getResponse().getUsersList()) { + identityClient.deleteUser(user.getName()); + } + } + pagedResponse = httpJsonClient.listUsers(ListUsersRequest.newBuilder().setPageSize(5).build()); + assertThat(pagedResponse.getPage().getResponse().getUsersList().size()).isEqualTo(0); + } + + private User createDefaultUser() { + return createUser(DEFAULT_USER); + } + + /** + * Helper method to create a user with the DEFAULT_USER configs. Server returns a generated name + * (not username) that is used to identify the individual user and each test uses the name for the + * RPC. Server also populates a few additional fields (Create Time, Updated Time, and Enable + * Notifications). + * + * @param user User to be created + * @return newly created user + */ + private User createUser(User user) { + return httpJsonClient.createUser(CreateUserRequest.newBuilder().setUser(user).build()); + } +} diff --git a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/TestClientInitializer.java b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/TestClientInitializer.java index e2248ffb2e..bcd8862236 100644 --- a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/TestClientInitializer.java +++ b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/TestClientInitializer.java @@ -20,34 +20,61 @@ import com.google.api.gax.core.NoCredentialsProvider; import com.google.showcase.v1beta1.EchoClient; import com.google.showcase.v1beta1.EchoSettings; +import com.google.showcase.v1beta1.IdentityClient; +import com.google.showcase.v1beta1.IdentitySettings; import io.grpc.ManagedChannelBuilder; public class TestClientInitializer { - public static EchoClient createGrpcEchoClient() throws Exception { - EchoSettings grpcEchoSettings = - EchoSettings.newBuilder() - .setCredentialsProvider(NoCredentialsProvider.create()) - .setTransportChannelProvider( - EchoSettings.defaultGrpcTransportProviderBuilder() - .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) - .build()) + public static EchoClient createGrpcEchoClient() throws Exception { + EchoSettings grpcEchoSettings = + EchoSettings.newBuilder() + .setCredentialsProvider(NoCredentialsProvider.create()) + .setTransportChannelProvider( + EchoSettings.defaultGrpcTransportProviderBuilder() + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .build()) + .build(); + return EchoClient.create(grpcEchoSettings); + } - .build(); - return EchoClient.create(grpcEchoSettings); - } + public static EchoClient createHttpJsonEchoClient() throws Exception { + EchoSettings httpJsonEchoSettings = + EchoSettings.newHttpJsonBuilder() + .setCredentialsProvider(NoCredentialsProvider.create()) + .setTransportChannelProvider( + EchoSettings.defaultHttpJsonTransportProviderBuilder() + .setHttpTransport( + new NetHttpTransport.Builder().doNotValidateCertificate().build()) + .setEndpoint("http://localhost:7469") + .build()) + .build(); + return EchoClient.create(httpJsonEchoSettings); + } - public static EchoClient createHttpJsonEchoClient() throws Exception{ - EchoSettings httpJsonEchoSettings = - EchoSettings.newHttpJsonBuilder() - .setCredentialsProvider(NoCredentialsProvider.create()) - .setTransportChannelProvider( - EchoSettings.defaultHttpJsonTransportProviderBuilder() - .setHttpTransport( - new NetHttpTransport.Builder().doNotValidateCertificate().build()) - .setEndpoint("http://localhost:7469") - .build()) - .build(); - return EchoClient.create(httpJsonEchoSettings); - } + public static IdentityClient createGrpcIdentityClient() throws Exception { + IdentitySettings grpcIdentitySettings = + IdentitySettings.newHttpJsonBuilder() + .setCredentialsProvider(NoCredentialsProvider.create()) + .setTransportChannelProvider( + IdentitySettings.defaultGrpcTransportProviderBuilder() + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .build()) + .build(); + return IdentityClient.create(grpcIdentitySettings); + } + + public static IdentityClient createHttpJsonIdentityClient() throws Exception { + IdentitySettings httpjsonIdentitySettings = + IdentitySettings.newHttpJsonBuilder() + .setCredentialsProvider(NoCredentialsProvider.create()) + .setTransportChannelProvider( + EchoSettings.defaultHttpJsonTransportProviderBuilder() + .setHttpTransport( + new NetHttpTransport.Builder().doNotValidateCertificate().build()) + .setEndpoint("http://localhost:7469") + .build()) + .build(); + return IdentityClient.create(httpjsonIdentitySettings); + } }