From d11ac3db2c36d9165726e39b6e806ba3b5d97cf2 Mon Sep 17 00:00:00 2001 From: summerji Date: Fri, 15 Jan 2021 12:14:40 -0800 Subject: [PATCH 1/2] Add unit test for class header sample code --- .../ServiceClientSampleCodeComposer.java | 2 - .../ServiceClientSampleCodeComposerTest.java | 50 +++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/google/api/generator/gapic/composer/samplecode/ServiceClientSampleCodeComposer.java b/src/main/java/com/google/api/generator/gapic/composer/samplecode/ServiceClientSampleCodeComposer.java index a3adb6486a..f73b492626 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/samplecode/ServiceClientSampleCodeComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/samplecode/ServiceClientSampleCodeComposer.java @@ -57,7 +57,6 @@ public class ServiceClientSampleCodeComposer { public static String composeClassHeaderCredentialsSampleCode( - // TODO(summerji): Add unit tests for composeClassHeaderCredentialsSampleCode. TypeNode clientType, TypeNode settingsType) { // Initialize clientSettings with builder() method. // e.g. EchoSettings echoSettings = @@ -130,7 +129,6 @@ public static String composeClassHeaderCredentialsSampleCode( } public static String composeClassHeaderEndpointSampleCode( - // TODO(summerji): Add unit tests for composeClassHeaderEndpointSampleCode. TypeNode clientType, TypeNode settingsType) { // Initialize client settings with builder() method. // e.g. EchoSettings echoSettings = EchoSettings.newBuilder().setEndpoint("myEndpoint").build(); diff --git a/src/test/java/com/google/api/generator/gapic/composer/samplecode/ServiceClientSampleCodeComposerTest.java b/src/test/java/com/google/api/generator/gapic/composer/samplecode/ServiceClientSampleCodeComposerTest.java index 85bba288e8..d55ce832e9 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/samplecode/ServiceClientSampleCodeComposerTest.java +++ b/src/test/java/com/google/api/generator/gapic/composer/samplecode/ServiceClientSampleCodeComposerTest.java @@ -45,6 +45,56 @@ public class ServiceClientSampleCodeComposerTest { private static final String LRO_PACKAGE_NAME = "com.google.longrunning"; private static final String PROTO_PACKAGE_NAME = "com.google.protobuf"; + // =============================== Class Header Sample Code ===============================// + @Test + public void composeClassHeaderCredentialsSampleCode() { + TypeNode clientType = + TypeNode.withReference( + VaporReference.builder() + .setName("EchoClient") + .setPakkage(SHOWCASE_PACKAGE_NAME) + .build()); + TypeNode settingsType = + TypeNode.withReference( + VaporReference.builder() + .setName("EchoSettings") + .setPakkage(SHOWCASE_PACKAGE_NAME) + .build()); + String results = + ServiceClientSampleCodeComposer.composeClassHeaderCredentialsSampleCode(clientType, settingsType); + String expected = + LineFormatter.lines( + "EchoSettings echoSettings =\n", + " EchoSettings.newBuilder()\n", + " .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))\n", + " .build();\n", + "EchoClient echoClient = EchoClient.create(echoSettings);"); + assertEquals(expected, results); + } + + @Test + public void composeClassHeaderEndpointSampleCode() { + TypeNode clientType = + TypeNode.withReference( + VaporReference.builder() + .setName("EchoClient") + .setPakkage(SHOWCASE_PACKAGE_NAME) + .build()); + TypeNode settingsType = + TypeNode.withReference( + VaporReference.builder() + .setName("EchoSettings") + .setPakkage(SHOWCASE_PACKAGE_NAME) + .build()); + String results = + ServiceClientSampleCodeComposer.composeClassHeaderEndpointSampleCode(clientType, settingsType); + String expected = + LineFormatter.lines( + "EchoSettings echoSettings = EchoSettings.newBuilder().setEndpoint(myEndpoint).build();\n", + "EchoClient echoClient = EchoClient.create(echoSettings);"); + assertEquals(expected, results); + } + // =======================================Unary RPC Method Sample Code=======================// @Test public void validComposeRpcMethodHeaderSampleCode_pureUnaryRpc() { From b95d123f6caccddc340f7220b75bddada8078c9b Mon Sep 17 00:00:00 2001 From: summerji Date: Sun, 17 Jan 2021 00:12:14 -0800 Subject: [PATCH 2/2] Implement class header method sample code --- .../composer/ServiceClientClassComposer.java | 13 +- .../comment/ServiceClientCommentComposer.java | 7 +- .../ServiceClientSampleCodeComposer.java | 25 ++ .../gapic/composer/goldens/EchoClient.golden | 6 + .../composer/goldens/IdentityClient.golden | 9 + .../ServiceClientSampleCodeComposerTest.java | 217 ++++++++++++++++++ .../goldens/asset/AssetServiceClient.java | 12 + .../credentials/IamCredentialsClient.java | 11 + .../goldens/library/LibraryServiceClient.java | 7 + .../goldens/logging/ConfigClient.java | 12 + .../goldens/logging/LoggingClient.java | 7 + .../goldens/logging/MetricsClient.java | 7 + .../goldens/redis/CloudRedisClient.java | 7 + 13 files changed, 335 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/google/api/generator/gapic/composer/ServiceClientClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/ServiceClientClassComposer.java index 29a9c4db1e..45757f71bd 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/ServiceClientClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/ServiceClientClassComposer.java @@ -129,7 +129,8 @@ public GapicClass generate( ClassDefinition classDef = ClassDefinition.builder() - .setHeaderCommentStatements(createClassHeaderComments(service, typeStore)) + .setHeaderCommentStatements( + createClassHeaderComments(service, typeStore, resourceNames, messageTypes)) .setPackageString(pakkage) .setAnnotations(createClassAnnotations(pakkage, typeStore)) .setScope(ScopeNode.PUBLIC) @@ -161,9 +162,15 @@ private static List createClassImplements(TypeStore typeStore) { } private static List createClassHeaderComments( - Service service, TypeStore typeStore) { + Service service, + TypeStore typeStore, + Map resourceNames, + Map messageTypes) { TypeNode clientType = typeStore.get(ClassNames.getServiceClientClassName(service)); TypeNode settingsType = typeStore.get(ClassNames.getServiceSettingsClassName(service)); + String classMethodSampleCode = + ServiceClientSampleCodeComposer.composeClassHeaderMethodSampleCode( + service, clientType, resourceNames, messageTypes); String credentialsSampleCode = ServiceClientSampleCodeComposer.composeClassHeaderCredentialsSampleCode( clientType, settingsType); @@ -171,7 +178,7 @@ private static List createClassHeaderComments( ServiceClientSampleCodeComposer.composeClassHeaderEndpointSampleCode( clientType, settingsType); return ServiceClientCommentComposer.createClassHeaderComments( - service, credentialsSampleCode, endpointSampleCode); + service, classMethodSampleCode, credentialsSampleCode, endpointSampleCode); } private static List createClassMethods( diff --git a/src/main/java/com/google/api/generator/gapic/composer/comment/ServiceClientCommentComposer.java b/src/main/java/com/google/api/generator/gapic/composer/comment/ServiceClientCommentComposer.java index 7275ef7627..004082568a 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/comment/ServiceClientCommentComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/comment/ServiceClientCommentComposer.java @@ -110,7 +110,10 @@ public class ServiceClientCommentComposer { + " operation returned by another API method call."); public static List createClassHeaderComments( - Service service, String credentialsSampleCode, String endpointSampleCode) { + Service service, + String classMethodSampleCode, + String credentialsSampleCode, + String endpointSampleCode) { JavaDocComment.Builder classHeaderJavadocBuilder = JavaDocComment.builder(); if (service.hasDescription()) { classHeaderJavadocBuilder = @@ -122,7 +125,7 @@ public static List createClassHeaderComments( // Service introduction. classHeaderJavadocBuilder.addParagraph(SERVICE_DESCRIPTION_INTRO_STRING); - // TODO(summerji): Add sample code here. + classHeaderJavadocBuilder.addSampleCode(classMethodSampleCode); // API surface description. classHeaderJavadocBuilder.addParagraph( diff --git a/src/main/java/com/google/api/generator/gapic/composer/samplecode/ServiceClientSampleCodeComposer.java b/src/main/java/com/google/api/generator/gapic/composer/samplecode/ServiceClientSampleCodeComposer.java index f73b492626..1951beb93b 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/samplecode/ServiceClientSampleCodeComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/samplecode/ServiceClientSampleCodeComposer.java @@ -44,6 +44,7 @@ import com.google.api.generator.gapic.model.Method.Stream; import com.google.api.generator.gapic.model.MethodArgument; import com.google.api.generator.gapic.model.ResourceName; +import com.google.api.generator.gapic.model.Service; import com.google.api.generator.gapic.utils.JavaStyle; import com.google.common.base.Preconditions; import java.util.ArrayList; @@ -56,6 +57,30 @@ public class ServiceClientSampleCodeComposer { + public static String composeClassHeaderMethodSampleCode( + Service service, + TypeNode clientType, + Map resourceNames, + Map messageTypes) { + // Use the first pure unary RPC method's sample code as showcase, if no such method exists, use + // the first method in the service's methods list. + Method method = + service.methods().stream() + .filter(m -> m.stream() == Stream.NONE && !m.hasLro() && !m.isPaged()) + .findFirst() + .orElse(service.methods().get(0)); + if (method.stream() == Stream.NONE) { + if (method.methodSignatures().isEmpty()) { + return composeRpcDefaultMethodHeaderSampleCode( + method, clientType, resourceNames, messageTypes); + } + return composeRpcMethodHeaderSampleCode( + method, clientType, method.methodSignatures().get(0), resourceNames, messageTypes); + } + return composeStreamCallableMethodHeaderSampleCode( + method, clientType, resourceNames, messageTypes); + } + public static String composeClassHeaderCredentialsSampleCode( TypeNode clientType, TypeNode settingsType) { // Initialize clientSettings with builder() method. diff --git a/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoClient.golden b/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoClient.golden index 9d9e299fa1..caf5f4108e 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoClient.golden +++ b/src/test/java/com/google/api/generator/gapic/composer/goldens/EchoClient.golden @@ -34,6 +34,12 @@ import javax.annotation.Generated; * This class provides the ability to make remote calls to the backing service through method calls * that map to API methods. Sample code to get started: * + *
{@code
+ * try (EchoClient echoClient = EchoClient.create()) {
+ *   EchoResponse response = echoClient.echo();
+ * }
+ * }
+ * *

Note: close() needs to be called on the EchoClient object to clean up resources such as * threads. In the example above, try-with-resources is used, which automatically calls close(). * diff --git a/src/test/java/com/google/api/generator/gapic/composer/goldens/IdentityClient.golden b/src/test/java/com/google/api/generator/gapic/composer/goldens/IdentityClient.golden index e68742165d..ea5a23008b 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/goldens/IdentityClient.golden +++ b/src/test/java/com/google/api/generator/gapic/composer/goldens/IdentityClient.golden @@ -24,6 +24,15 @@ import javax.annotation.Generated; * This class provides the ability to make remote calls to the backing service through method calls * that map to API methods. Sample code to get started: * + *

{@code
+ * try (IdentityClient identityClient = IdentityClient.create()) {
+ *   String parent = UserName.of("[USER]").toString();
+ *   String displayName = "displayName1714148973";
+ *   String email = "email96619420";
+ *   User response = identityClient.createUser(parent, displayName, email);
+ * }
+ * }
+ * *

Note: close() needs to be called on the IdentityClient object to clean up resources such as * threads. In the example above, try-with-resources is used, which automatically calls close(). * diff --git a/src/test/java/com/google/api/generator/gapic/composer/samplecode/ServiceClientSampleCodeComposerTest.java b/src/test/java/com/google/api/generator/gapic/composer/samplecode/ServiceClientSampleCodeComposerTest.java index d55ce832e9..6def6ef8dd 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/samplecode/ServiceClientSampleCodeComposerTest.java +++ b/src/test/java/com/google/api/generator/gapic/composer/samplecode/ServiceClientSampleCodeComposerTest.java @@ -30,14 +30,19 @@ import com.google.api.generator.gapic.model.MethodArgument; import com.google.api.generator.gapic.model.ResourceName; import com.google.api.generator.gapic.model.ResourceReference; +import com.google.api.generator.gapic.model.Service; import com.google.api.generator.gapic.protoparser.Parser; import com.google.api.generator.testutils.LineFormatter; import com.google.protobuf.Descriptors.FileDescriptor; +import com.google.protobuf.Descriptors.ServiceDescriptor; import com.google.showcase.v1beta1.EchoOuterClass; import java.util.Arrays; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Optional; +import java.util.Set; import org.junit.Test; public class ServiceClientSampleCodeComposerTest { @@ -46,6 +51,218 @@ public class ServiceClientSampleCodeComposerTest { private static final String PROTO_PACKAGE_NAME = "com.google.protobuf"; // =============================== Class Header Sample Code ===============================// + @Test + public void composeClassHeaderMethodSampleCode_unaryRpc() { + FileDescriptor echoFileDescriptor = EchoOuterClass.getDescriptor(); + Map resourceNames = Parser.parseResourceNames(echoFileDescriptor); + Map messageTypes = Parser.parseMessages(echoFileDescriptor); + ServiceDescriptor echoService = echoFileDescriptor.getServices().get(0); + Set outputResourceNames = new HashSet<>(); + List services = + Parser.parseService( + echoFileDescriptor, messageTypes, resourceNames, Optional.empty(), outputResourceNames); + Service echoProtoService = services.get(0); + TypeNode clientType = + TypeNode.withReference( + VaporReference.builder() + .setName("EchoClient") + .setPakkage(SHOWCASE_PACKAGE_NAME) + .build()); + String results = ServiceClientSampleCodeComposer.composeClassHeaderMethodSampleCode(echoProtoService, clientType, resourceNames, messageTypes); + String expected = + LineFormatter.lines( + "try (EchoClient echoClient = EchoClient.create()) {\n", + " EchoResponse response = echoClient.echo();\n", + "}"); + assertEquals(expected, results); + } + + @Test + public void composeClassHeaderMethodSampleCode_firstMethodIsNotUnaryRpc() { + FileDescriptor echoFileDescriptor = EchoOuterClass.getDescriptor(); + Map resourceNames = Parser.parseResourceNames(echoFileDescriptor); + Map messageTypes = Parser.parseMessages(echoFileDescriptor); + TypeNode inputType = + TypeNode.withReference( + VaporReference.builder() + .setName("WaitRequest") + .setPakkage(SHOWCASE_PACKAGE_NAME) + .build()); + TypeNode outputType = + TypeNode.withReference( + VaporReference.builder().setName("Operation").setPakkage(LRO_PACKAGE_NAME).build()); + TypeNode responseType = + TypeNode.withReference( + VaporReference.builder() + .setName("WaitResponse") + .setPakkage(SHOWCASE_PACKAGE_NAME) + .build()); + TypeNode metadataType = + TypeNode.withReference( + VaporReference.builder() + .setName("WaitMetadata") + .setPakkage(SHOWCASE_PACKAGE_NAME) + .build()); + LongrunningOperation lro = LongrunningOperation.withTypes(responseType, metadataType); + TypeNode ttlTypeNode = + TypeNode.withReference( + VaporReference.builder().setName("Duration").setPakkage(PROTO_PACKAGE_NAME).build()); + MethodArgument ttl = + MethodArgument.builder() + .setName("ttl") + .setType(ttlTypeNode) + .setField( + Field.builder() + .setName("ttl") + .setType(ttlTypeNode) + .setIsMessage(true) + .setIsContainedInOneof(true) + .build()) + .build(); + Method method = + Method.builder() + .setName("Wait") + .setInputType(inputType) + .setOutputType(outputType) + .setLro(lro) + .setMethodSignatures(Arrays.asList(Arrays.asList(ttl))) + .build(); + Service service = Service.builder() + .setName("Echo") + .setDefaultHost("localhost:7469") + .setOauthScopes(Arrays.asList("https://www.googleapis.com/auth/cloud-platform")) + .setPakkage(SHOWCASE_PACKAGE_NAME) + .setProtoPakkage(SHOWCASE_PACKAGE_NAME) + .setOriginalJavaPackage(SHOWCASE_PACKAGE_NAME) + .setOverriddenName("Echo") + .setMethods(Arrays.asList(method)) + .build(); + TypeNode clientType = + TypeNode.withReference( + VaporReference.builder() + .setName("EchoClient") + .setPakkage(SHOWCASE_PACKAGE_NAME) + .build()); + String results = + ServiceClientSampleCodeComposer.composeClassHeaderMethodSampleCode( + service, clientType, resourceNames, messageTypes); + String expected = + LineFormatter.lines( + "try (EchoClient echoClient = EchoClient.create()) {\n", + " Duration ttl = Duration.newBuilder().build();\n", + " WaitResponse response = echoClient.waitAsync(ttl).get();\n", + "}"); + assertEquals(results, expected); + } + + @Test + public void composeClassHeaderMethodSampleCode_firstMethodHasNoSignatures() { + FileDescriptor echoFileDescriptor = EchoOuterClass.getDescriptor(); + Map resourceNames = Parser.parseResourceNames(echoFileDescriptor); + Map messageTypes = Parser.parseMessages(echoFileDescriptor); + TypeNode inputType = + TypeNode.withReference( + VaporReference.builder() + .setName("EchoRequest") + .setPakkage(SHOWCASE_PACKAGE_NAME) + .build()); + TypeNode outputType = + TypeNode.withReference( + VaporReference.builder().setName("EchoResponse").setPakkage(SHOWCASE_PACKAGE_NAME).build()); + Method method = + Method.builder() + .setName("Echo") + .setInputType(inputType) + .setOutputType(outputType) + .setMethodSignatures(Collections.emptyList()) + .build(); + Service service = Service.builder() + .setName("Echo") + .setDefaultHost("localhost:7469") + .setOauthScopes(Arrays.asList("https://www.googleapis.com/auth/cloud-platform")) + .setPakkage(SHOWCASE_PACKAGE_NAME) + .setProtoPakkage(SHOWCASE_PACKAGE_NAME) + .setOriginalJavaPackage(SHOWCASE_PACKAGE_NAME) + .setOverriddenName("Echo") + .setMethods(Arrays.asList(method)) + .build(); + TypeNode clientType = + TypeNode.withReference( + VaporReference.builder() + .setName("EchoClient") + .setPakkage(SHOWCASE_PACKAGE_NAME) + .build()); + String results = + ServiceClientSampleCodeComposer.composeClassHeaderMethodSampleCode( + service, clientType, resourceNames, messageTypes); + String expected = + LineFormatter.lines( + "try (EchoClient echoClient = EchoClient.create()) {\n", + " EchoRequest request =\n", + " EchoRequest.newBuilder()\n", + " .setName(FoobarName.ofProjectFoobarName(\"[PROJECT]\", \"[FOOBAR]\").toString())\n", + " .setParent(FoobarName.ofProjectFoobarName(\"[PROJECT]\", \"[FOOBAR]\").toString())\n", + " .setFoobar(Foobar.newBuilder().build())\n", + " .build();\n", + " EchoResponse response = echoClient.echo(request);\n", + "}"); + assertEquals(results, expected); + } + + @Test + public void composeClassHeaderMethodSampleCode_firstMethodIsStream() { + FileDescriptor echoFileDescriptor = EchoOuterClass.getDescriptor(); + Map resourceNames = Parser.parseResourceNames(echoFileDescriptor); + Map messageTypes = Parser.parseMessages(echoFileDescriptor); + TypeNode inputType = + TypeNode.withReference( + VaporReference.builder() + .setName("ExpandRequest") + .setPakkage(SHOWCASE_PACKAGE_NAME) + .build()); + TypeNode outputType = + TypeNode.withReference( + VaporReference.builder() + .setName("EchoResponse") + .setPakkage(SHOWCASE_PACKAGE_NAME) + .build()); + Method method = + Method.builder() + .setName("Expand") + .setInputType(inputType) + .setOutputType(outputType) + .setStream(Stream.SERVER) + .build(); + Service service = Service.builder() + .setName("Echo") + .setDefaultHost("localhost:7469") + .setOauthScopes(Arrays.asList("https://www.googleapis.com/auth/cloud-platform")) + .setPakkage(SHOWCASE_PACKAGE_NAME) + .setProtoPakkage(SHOWCASE_PACKAGE_NAME) + .setOriginalJavaPackage(SHOWCASE_PACKAGE_NAME) + .setOverriddenName("Echo") + .setMethods(Arrays.asList(method)) + .build(); + TypeNode clientType = + TypeNode.withReference( + VaporReference.builder() + .setName("EchoClient") + .setPakkage(SHOWCASE_PACKAGE_NAME) + .build()); + String results = ServiceClientSampleCodeComposer.composeClassHeaderMethodSampleCode(service, clientType, resourceNames, messageTypes); + String expected = + LineFormatter.lines( + "try (EchoClient echoClient = EchoClient.create()) {\n", + " ExpandRequest request =\n", + " ExpandRequest.newBuilder().setContent(\"content951530617\").setInfo(\"info3237038\").build();\n", + " ServerStream stream = echoClient.expandCallable().call(request);\n", + " for (EchoResponse response : stream) {\n", + " // Do something when a response is received.\n", + " }\n", + "}"); + assertEquals(results, expected); + } + @Test public void composeClassHeaderCredentialsSampleCode() { TypeNode clientType = diff --git a/test/integration/goldens/asset/AssetServiceClient.java b/test/integration/goldens/asset/AssetServiceClient.java index 66f9f6589e..b838391926 100644 --- a/test/integration/goldens/asset/AssetServiceClient.java +++ b/test/integration/goldens/asset/AssetServiceClient.java @@ -46,6 +46,18 @@ *

This class provides the ability to make remote calls to the backing service through method * calls that map to API methods. Sample code to get started: * + *

{@code
+ * try (AssetServiceClient assetServiceClient = AssetServiceClient.create()) {
+ *   BatchGetAssetsHistoryRequest request =
+ *       BatchGetAssetsHistoryRequest.newBuilder()
+ *           .setParent(FeedName.ofProjectFeedName("[PROJECT]", "[FEED]").toString())
+ *           .addAllAssetNames(new ArrayList())
+ *           .setReadTimeWindow(TimeWindow.newBuilder().build())
+ *           .build();
+ *   BatchGetAssetsHistoryResponse response = assetServiceClient.batchGetAssetsHistory(request);
+ * }
+ * }
+ * *

Note: close() needs to be called on the AssetServiceClient object to clean up resources such * as threads. In the example above, try-with-resources is used, which automatically calls close(). * diff --git a/test/integration/goldens/credentials/IamCredentialsClient.java b/test/integration/goldens/credentials/IamCredentialsClient.java index 6dd22974d7..dd6d14576c 100644 --- a/test/integration/goldens/credentials/IamCredentialsClient.java +++ b/test/integration/goldens/credentials/IamCredentialsClient.java @@ -42,6 +42,17 @@ *

This class provides the ability to make remote calls to the backing service through method * calls that map to API methods. Sample code to get started: * + *

{@code
+ * try (IamCredentialsClient iamCredentialsClient = IamCredentialsClient.create()) {
+ *   ServiceAccountName name = ServiceAccountName.of("[PROJECT]", "[SERVICE_ACCOUNT]");
+ *   List delegates = new ArrayList<>();
+ *   List scope = new ArrayList<>();
+ *   Duration lifetime = Duration.newBuilder().build();
+ *   GenerateAccessTokenResponse response =
+ *       iamCredentialsClient.generateAccessToken(name, delegates, scope, lifetime);
+ * }
+ * }
+ * *

Note: close() needs to be called on the IamCredentialsClient object to clean up resources such * as threads. In the example above, try-with-resources is used, which automatically calls close(). * diff --git a/test/integration/goldens/library/LibraryServiceClient.java b/test/integration/goldens/library/LibraryServiceClient.java index 8cb759bc3a..71f65f763b 100644 --- a/test/integration/goldens/library/LibraryServiceClient.java +++ b/test/integration/goldens/library/LibraryServiceClient.java @@ -66,6 +66,13 @@ *

This class provides the ability to make remote calls to the backing service through method * calls that map to API methods. Sample code to get started: * + *

{@code
+ * try (LibraryServiceClient libraryServiceClient = LibraryServiceClient.create()) {
+ *   Shelf shelf = Shelf.newBuilder().build();
+ *   Shelf response = libraryServiceClient.createShelf(shelf);
+ * }
+ * }
+ * *

Note: close() needs to be called on the LibraryServiceClient object to clean up resources such * as threads. In the example above, try-with-resources is used, which automatically calls close(). * diff --git a/test/integration/goldens/logging/ConfigClient.java b/test/integration/goldens/logging/ConfigClient.java index 5e50999446..d36cf98868 100644 --- a/test/integration/goldens/logging/ConfigClient.java +++ b/test/integration/goldens/logging/ConfigClient.java @@ -75,6 +75,18 @@ *

This class provides the ability to make remote calls to the backing service through method * calls that map to API methods. Sample code to get started: * + *

{@code
+ * try (ConfigClient configClient = ConfigClient.create()) {
+ *   GetBucketRequest request =
+ *       GetBucketRequest.newBuilder()
+ *           .setName(
+ *               LogBucketName.ofProjectLocationBucketName("[PROJECT]", "[LOCATION]", "[BUCKET]")
+ *                   .toString())
+ *           .build();
+ *   LogBucket response = configClient.getBucket(request);
+ * }
+ * }
+ * *

Note: close() needs to be called on the ConfigClient object to clean up resources such as * threads. In the example above, try-with-resources is used, which automatically calls close(). * diff --git a/test/integration/goldens/logging/LoggingClient.java b/test/integration/goldens/logging/LoggingClient.java index c4941027e1..777f7cec46 100644 --- a/test/integration/goldens/logging/LoggingClient.java +++ b/test/integration/goldens/logging/LoggingClient.java @@ -60,6 +60,13 @@ *

This class provides the ability to make remote calls to the backing service through method * calls that map to API methods. Sample code to get started: * + *

{@code
+ * try (LoggingClient loggingClient = LoggingClient.create()) {
+ *   LogName logName = LogName.ofProjectLogName("[PROJECT]", "[LOG]");
+ *   loggingClient.deleteLog(logName);
+ * }
+ * }
+ * *

Note: close() needs to be called on the LoggingClient object to clean up resources such as * threads. In the example above, try-with-resources is used, which automatically calls close(). * diff --git a/test/integration/goldens/logging/MetricsClient.java b/test/integration/goldens/logging/MetricsClient.java index 15bb6d7de2..75f52ead30 100644 --- a/test/integration/goldens/logging/MetricsClient.java +++ b/test/integration/goldens/logging/MetricsClient.java @@ -51,6 +51,13 @@ *

This class provides the ability to make remote calls to the backing service through method * calls that map to API methods. Sample code to get started: * + *

{@code
+ * try (MetricsClient metricsClient = MetricsClient.create()) {
+ *   LogMetricName metricName = LogMetricName.of("[PROJECT]", "[METRIC]");
+ *   LogMetric response = metricsClient.getLogMetric(metricName);
+ * }
+ * }
+ * *

Note: close() needs to be called on the MetricsClient object to clean up resources such as * threads. In the example above, try-with-resources is used, which automatically calls close(). * diff --git a/test/integration/goldens/redis/CloudRedisClient.java b/test/integration/goldens/redis/CloudRedisClient.java index aa220493f0..7b1a0e27f6 100644 --- a/test/integration/goldens/redis/CloudRedisClient.java +++ b/test/integration/goldens/redis/CloudRedisClient.java @@ -67,6 +67,13 @@ *

This class provides the ability to make remote calls to the backing service through method * calls that map to API methods. Sample code to get started: * + *

{@code
+ * try (CloudRedisClient cloudRedisClient = CloudRedisClient.create()) {
+ *   InstanceName name = InstanceName.of("[PROJECT]", "[LOCATION]", "[INSTANCE]");
+ *   Instance response = cloudRedisClient.getInstance(name);
+ * }
+ * }
+ * *

Note: close() needs to be called on the CloudRedisClient object to clean up resources such as * threads. In the example above, try-with-resources is used, which automatically calls close(). *