diff --git a/src/main/java/com/google/api/generator/gapic/composer/Composer.java b/src/main/java/com/google/api/generator/gapic/composer/Composer.java index ca50e1892d..a69db5dc97 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/Composer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/Composer.java @@ -36,7 +36,9 @@ public class Composer { public static List composeServiceClasses(GapicContext context) { List clazzes = new ArrayList<>(); for (Service service : context.services()) { - clazzes.addAll(generateServiceClasses(service, context.serviceConfig(), context.messages())); + clazzes.addAll( + generateServiceClasses( + service, context.serviceConfig(), context.resourceNames(), context.messages())); } clazzes.addAll(generateResourceNameHelperClasses(context.helperResourceNames())); return addApacheLicense(clazzes); @@ -45,11 +47,12 @@ public static List composeServiceClasses(GapicContext context) { public static List generateServiceClasses( @Nonnull Service service, @Nullable GapicServiceConfig serviceConfig, + @Nonnull Map resourceNames, @Nonnull Map messageTypes) { List clazzes = new ArrayList<>(); clazzes.addAll(generateStubClasses(service, serviceConfig, messageTypes)); clazzes.addAll(generateClientSettingsClasses(service, messageTypes)); - clazzes.addAll(generateMocksAndTestClasses(service, messageTypes)); + clazzes.addAll(generateMocksAndTestClasses(service, resourceNames, messageTypes)); // TODO(miraleung): Generate test classes. return clazzes; } @@ -82,11 +85,12 @@ public static List generateClientSettingsClasses( } public static List generateMocksAndTestClasses( - Service service, Map messageTypes) { + Service service, Map resourceNames, Map messageTypes) { List clazzes = new ArrayList<>(); clazzes.add(MockServiceClassComposer.instance().generate(service, messageTypes)); clazzes.add(MockServiceImplClassComposer.instance().generate(service, messageTypes)); - clazzes.add(ServiceClientTestClassComposer.instance().generate(service, messageTypes)); + clazzes.add( + ServiceClientTestClassComposer.instance().generate(service, resourceNames, messageTypes)); return clazzes; } diff --git a/src/main/java/com/google/api/generator/gapic/composer/ServiceClientTestClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/ServiceClientTestClassComposer.java index ba38c71bd5..3634f74d7e 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/ServiceClientTestClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/ServiceClientTestClassComposer.java @@ -33,16 +33,22 @@ import com.google.api.generator.engine.ast.AnnotationNode; import com.google.api.generator.engine.ast.AssignmentExpr; import com.google.api.generator.engine.ast.ClassDefinition; +import com.google.api.generator.engine.ast.CommentStatement; import com.google.api.generator.engine.ast.ConcreteReference; +import com.google.api.generator.engine.ast.EnumRefExpr; import com.google.api.generator.engine.ast.Expr; import com.google.api.generator.engine.ast.ExprStatement; +import com.google.api.generator.engine.ast.LineComment; import com.google.api.generator.engine.ast.MethodDefinition; import com.google.api.generator.engine.ast.MethodInvocationExpr; import com.google.api.generator.engine.ast.NewObjectExpr; import com.google.api.generator.engine.ast.Reference; import com.google.api.generator.engine.ast.ScopeNode; import com.google.api.generator.engine.ast.Statement; +import com.google.api.generator.engine.ast.StringObjectValue; +import com.google.api.generator.engine.ast.TryCatchStatement; import com.google.api.generator.engine.ast.TypeNode; +import com.google.api.generator.engine.ast.ValueExpr; import com.google.api.generator.engine.ast.VaporReference; import com.google.api.generator.engine.ast.Variable; import com.google.api.generator.engine.ast.VariableExpr; @@ -50,13 +56,15 @@ import com.google.api.generator.gapic.model.GapicClass.Kind; import com.google.api.generator.gapic.model.Message; import com.google.api.generator.gapic.model.Method; +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 com.google.common.collect.Lists; import com.google.longrunning.Operation; import com.google.protobuf.AbstractMessage; import com.google.protobuf.Any; -import io.grpc.Status; import io.grpc.StatusRuntimeException; import java.io.IOException; import java.util.ArrayList; @@ -78,7 +86,8 @@ import org.junit.BeforeClass; import org.junit.Test; -public class ServiceClientTestClassComposer implements ClassComposer { +// TODO(miraleung): Refactor classComposer. +public class ServiceClientTestClassComposer { private static final String CHANNEL_PROVIDER_VAR_NAME = "channelProvider"; private static final String CLASS_NAME_PATTERN = "%sClientTest"; private static final String CLIENT_VAR_NAME = "client"; @@ -94,7 +103,14 @@ public class ServiceClientTestClassComposer implements ClassComposer { private static final ServiceClientTestClassComposer INSTANCE = new ServiceClientTestClassComposer(); - private static final Map staticTypes = createStaticTypes(); + private static final Map STATIC_TYPES = createStaticTypes(); + + private static final AnnotationNode TEST_ANNOTATION = + AnnotationNode.withType(STATIC_TYPES.get("Test")); + // Avoid conflicting types with com.google.rpc.Status. + private static final TypeNode GRPC_STATUS_TYPE = + TypeNode.withReference( + ConcreteReference.builder().setClazz(io.grpc.Status.class).setUseFullName(true).build()); private ServiceClientTestClassComposer() {} @@ -102,8 +118,8 @@ public static ServiceClientTestClassComposer instance() { return INSTANCE; } - @Override - public GapicClass generate(Service service, Map ignore) { + public GapicClass generate( + Service service, Map resourceNames, Map messageTypes) { String pakkage = service.pakkage(); Map types = createDynamicTypes(service); String className = String.format("%sClientTest", service.name()); @@ -118,7 +134,9 @@ public GapicClass generate(Service service, Map ignore) { .setScope(ScopeNode.PUBLIC) .setName(className) .setStatements(createClassMemberFieldDecls(classMemberVarExprs)) - .setMethods(createClassMethods(service, classMemberVarExprs, types)) + .setMethods( + createClassMethods( + service, classMemberVarExprs, types, resourceNames, messageTypes)) .build(); return GapicClass.create(kind, classDef); } @@ -126,7 +144,7 @@ public GapicClass generate(Service service, Map ignore) { private static List createClassAnnotations() { return Arrays.asList( AnnotationNode.builder() - .setType(staticTypes.get("Generated")) + .setType(STATIC_TYPES.get("Generated")) .setDescription("by gapic-generator-java") .build()); } @@ -140,9 +158,9 @@ private static Map createClassMemberVarExprs( fields.put( getMockServiceVarName(service.name()), types.get(String.format(MOCK_SERVICE_CLASS_NAME_PATTERN, service.name()))); - fields.put(SERVICE_HELPER_VAR_NAME, staticTypes.get("MockServiceHelper")); + fields.put(SERVICE_HELPER_VAR_NAME, STATIC_TYPES.get("MockServiceHelper")); fields.put(CLIENT_VAR_NAME, types.get(getClientClassName(service.name()))); - fields.put(CHANNEL_PROVIDER_VAR_NAME, staticTypes.get("LocalChannelProvider")); + fields.put(CHANNEL_PROVIDER_VAR_NAME, STATIC_TYPES.get("LocalChannelProvider")); return fields.entrySet().stream() .collect(Collectors.toMap(e -> e.getKey(), e -> varExprFn.apply(e.getKey(), e.getValue()))); } @@ -162,16 +180,15 @@ private static List createClassMemberFieldDecls( } private static List createClassMethods( - Service service, Map classMemberVarExprs, Map types) { + Service service, + Map classMemberVarExprs, + Map types, + Map resourceNames, + Map messageTypes) { List javaMethods = new ArrayList<>(); javaMethods.addAll(createTestAdminMethods(service, classMemberVarExprs, types)); - // TODO(miraleung): FIll this in. - /* - for (Method protoMethod : service.methods()) { - javaMethods.add(createTestMethod(protoMethod, classMemberVarExprs, types)); - javaMethods.add(createExceptionTestMethod(protoMethod, classMemberVarExprs, types)); - } - */ + javaMethods.addAll( + createTestMethods(service, classMemberVarExprs, resourceNames, messageTypes)); return javaMethods; } @@ -198,7 +215,7 @@ private static MethodDefinition createStartStaticServerMethod( MethodInvocationExpr firstArg = MethodInvocationExpr.builder() - .setStaticReferenceType(staticTypes.get("UUID")) + .setStaticReferenceType(STATIC_TYPES.get("UUID")) .setMethodName("randomUUID") .build(); firstArg = @@ -209,8 +226,8 @@ private static MethodDefinition createStartStaticServerMethod( MethodInvocationExpr secondArg = MethodInvocationExpr.builder() - .setStaticReferenceType(staticTypes.get("Arrays")) - .setGenerics(Arrays.asList(staticTypes.get("MockGrpcService").reference())) + .setStaticReferenceType(STATIC_TYPES.get("Arrays")) + .setGenerics(Arrays.asList(STATIC_TYPES.get("MockGrpcService").reference())) .setMethodName("asList") .setArguments(Arrays.asList(mockServiceVarExpr)) .build(); @@ -232,7 +249,7 @@ private static MethodDefinition createStartStaticServerMethod( .build(); return MethodDefinition.builder() - .setAnnotations(Arrays.asList(AnnotationNode.withType(staticTypes.get("BeforeClass")))) + .setAnnotations(Arrays.asList(AnnotationNode.withType(STATIC_TYPES.get("BeforeClass")))) .setScope(ScopeNode.PUBLIC) .setIsStatic(true) .setReturnType(TypeNode.VOID) @@ -248,7 +265,7 @@ private static MethodDefinition createStartStaticServerMethod( private static MethodDefinition createStopServerMethod( Service service, Map classMemberVarExprs) { return MethodDefinition.builder() - .setAnnotations(Arrays.asList(AnnotationNode.withType(staticTypes.get("AfterClass")))) + .setAnnotations(Arrays.asList(AnnotationNode.withType(STATIC_TYPES.get("AfterClass")))) .setScope(ScopeNode.PUBLIC) .setIsStatic(true) .setReturnType(TypeNode.VOID) @@ -314,7 +331,7 @@ private static MethodDefinition createSetUpMethod( .apply( "setCredentialsProvider", MethodInvocationExpr.builder() - .setStaticReferenceType(staticTypes.get("NoCredentialsProvider")) + .setStaticReferenceType(STATIC_TYPES.get("NoCredentialsProvider")) .setMethodName("create") .build()); settingsBuilderExpr = @@ -343,11 +360,11 @@ private static MethodDefinition createSetUpMethod( .build(); return MethodDefinition.builder() - .setAnnotations(Arrays.asList(AnnotationNode.withType(staticTypes.get("Before")))) + .setAnnotations(Arrays.asList(AnnotationNode.withType(STATIC_TYPES.get("Before")))) .setScope(ScopeNode.PUBLIC) .setReturnType(TypeNode.VOID) .setName("setUp") - .setThrowsExceptions(Arrays.asList(staticTypes.get("IOException"))) + .setThrowsExceptions(Arrays.asList(STATIC_TYPES.get("IOException"))) .setBody( Arrays.asList( resetServiceHelperExpr, @@ -363,7 +380,7 @@ private static MethodDefinition createSetUpMethod( private static MethodDefinition createTearDownMethod( Service service, Map classMemberVarExprs) { return MethodDefinition.builder() - .setAnnotations(Arrays.asList(AnnotationNode.withType(staticTypes.get("After")))) + .setAnnotations(Arrays.asList(AnnotationNode.withType(STATIC_TYPES.get("After")))) .setScope(ScopeNode.PUBLIC) .setReturnType(TypeNode.VOID) .setName("tearDown") @@ -379,20 +396,139 @@ private static MethodDefinition createTearDownMethod( .build(); } - private static void createTestMethod( - Method protoMethod, + private static List createTestMethods( + Service service, Map classMemberVarExprs, - Map types) { - // TODO(miraleung): Fill this in. + Map resourceNames, + Map messageTypes) { + List javaMethods = new ArrayList<>(); + for (Method method : service.methods()) { + for (int i = 0; i < method.methodSignatures().size(); i++) { + javaMethods.add( + createRpcExceptionTestMethod( + method, + method.methodSignatures().get(i), + i, + classMemberVarExprs, + resourceNames, + messageTypes)); + } + } + return javaMethods; } - private static void createExceptionTestMethod( - Method protoMethod, + private static MethodDefinition createRpcExceptionTestMethod( + Method method, + List methodSignature, + int variantIndex, Map classMemberVarExprs, - Map types) { - // TODO(miraleung): Fill this in. + Map resourceNames, + Map messageTypes) { + VariableExpr exceptionVarExpr = + VariableExpr.withVariable( + Variable.builder() + .setType(STATIC_TYPES.get("StatusRuntimeException")) + .setName("exception") + .build()); + + // First two assignment lines. + Expr exceptionAssignExpr = + AssignmentExpr.builder() + .setVariableExpr(exceptionVarExpr.toBuilder().setIsDecl(true).build()) + .setValueExpr( + NewObjectExpr.builder() + .setType(STATIC_TYPES.get("StatusRuntimeException")) + .setArguments( + EnumRefExpr.builder() + .setType(GRPC_STATUS_TYPE) + .setName("INVALID_ARGUMENT") + .build()) + .build()) + .build(); + Expr addExceptionExpr = + MethodInvocationExpr.builder() + .setExprReferenceExpr( + classMemberVarExprs.get( + String.format("mock%s", JavaStyle.toUpperCamelCase(method.name())))) + .setMethodName("addException") + .setArguments(exceptionVarExpr) + .build(); + + // Try-catch block. Build the method call. + String exceptionTestMethodName = + String.format( + "%sExceptionTest%s", + JavaStyle.toLowerCamelCase(method.name()), variantIndex > 0 ? variantIndex + 1 : ""); + + List argVarExprs = new ArrayList<>(); + List tryBodyExprs = new ArrayList<>(); + for (MethodArgument methodArg : methodSignature) { + VariableExpr varExpr = + VariableExpr.withVariable( + Variable.builder().setType(methodArg.type()).setName(methodArg.name()).build()); + argVarExprs.add(varExpr); + Expr valExpr = DefaultValueComposer.createDefaultValue(methodArg, resourceNames); + tryBodyExprs.add( + AssignmentExpr.builder() + .setVariableExpr(varExpr.toBuilder().setIsDecl(true).build()) + .setValueExpr(valExpr) + .build()); + // TODO(miraleung): Empty line here. + } + tryBodyExprs.add( + MethodInvocationExpr.builder() + .setExprReferenceExpr(classMemberVarExprs.get("client")) + .setMethodName(JavaStyle.toLowerCamelCase(method.name())) + .setArguments(argVarExprs.stream().map(e -> (Expr) e).collect(Collectors.toList())) + .build()); + + // Assert a failure if no exception was raised. + tryBodyExprs.add( + MethodInvocationExpr.builder() + .setStaticReferenceType(STATIC_TYPES.get("Assert")) + .setMethodName("fail") + .setArguments(ValueExpr.withValue(StringObjectValue.withValue("No exception raised"))) + .build()); + + TryCatchStatement tryCatchBlock = + TryCatchStatement.builder() + .setTryBody( + tryBodyExprs.stream() + .map(e -> ExprStatement.withExpr(e)) + .collect(Collectors.toList())) + .setCatchVariableExpr( + VariableExpr.builder() + .setVariable( + Variable.builder() + .setType(TypeNode.withExceptionClazz(InvalidArgumentException.class)) + .setName("e") + .build()) + .setIsDecl(true) + .build()) + .setCatchBody( + Arrays.asList( + CommentStatement.withComment(LineComment.withComment("Expected exception.")))) + .build(); + + return MethodDefinition.builder() + .setAnnotations(Arrays.asList(TEST_ANNOTATION)) + .setScope(ScopeNode.PUBLIC) + .setReturnType(TypeNode.VOID) + .setName(exceptionTestMethodName) + .setThrowsExceptions(Arrays.asList(TypeNode.withExceptionClazz(Exception.class))) + .setBody( + Arrays.asList( + ExprStatement.withExpr(exceptionAssignExpr), + ExprStatement.withExpr(addExceptionExpr), + tryCatchBlock)) + .build(); } + /* ========================================= + * Type creator methods. + * ========================================= + */ + private static Map createStaticTypes() { List concreteClazzes = Arrays.asList( @@ -417,19 +553,18 @@ private static Map createStaticTypes() { NoCredentialsProvider.class, Operation.class, ServerStreamingCallable.class, - Status.class, StatusCode.class, StatusRuntimeException.class, Test.class, UUID.class); - Map staticTypes = + Map STATIC_TYPES = concreteClazzes.stream() .collect( Collectors.toMap( c -> c.getSimpleName(), c -> TypeNode.withReference(ConcreteReference.withClazz(c)))); - staticTypes.putAll( + STATIC_TYPES.putAll( Arrays.asList( "LocalChannelProvider", "MockGrpcService", @@ -445,7 +580,7 @@ private static Map createStaticTypes() { .setName(n) .setPakkage(GRPC_TESTING_PACKAGE) .build())))); - return staticTypes; + return STATIC_TYPES; } private static Map createDefaultMethodNamesToTypes() { @@ -470,7 +605,7 @@ private static Map createDefaultMethodNamesToTypes() { "defaultGrpcTransportProviderBuilder", typeMakerFn.apply(InstantiatingGrpcChannelProvider.Builder.class)); javaMethodNameToReturnType.put( - "defaultTransportChannelProvider", staticTypes.get("TransportChannelProvider")); + "defaultTransportChannelProvider", STATIC_TYPES.get("TransportChannelProvider")); return javaMethodNameToReturnType; } diff --git a/src/main/java/com/google/api/generator/gapic/model/BUILD.bazel b/src/main/java/com/google/api/generator/gapic/model/BUILD.bazel index 53be89cb6f..9d9d3f7af8 100644 --- a/src/main/java/com/google/api/generator/gapic/model/BUILD.bazel +++ b/src/main/java/com/google/api/generator/gapic/model/BUILD.bazel @@ -15,6 +15,7 @@ java_library( "//src/main/java/com/google/api/generator:autovalue", "//src/main/java/com/google/api/generator/engine/ast", "//src/main/java/com/google/api/generator/gapic/utils", + "@com_google_api_api_common//jar", "@com_google_auto_value_auto_value//jar", "@com_google_auto_value_auto_value_annotations//jar", "@com_google_code_findbugs_jsr305//jar", diff --git a/src/main/java/com/google/api/generator/gapic/model/ResourceName.java b/src/main/java/com/google/api/generator/gapic/model/ResourceName.java index 14770b7366..effb867746 100644 --- a/src/main/java/com/google/api/generator/gapic/model/ResourceName.java +++ b/src/main/java/com/google/api/generator/gapic/model/ResourceName.java @@ -14,6 +14,8 @@ package com.google.api.generator.gapic.model; +import com.google.api.generator.engine.ast.ConcreteReference; +import com.google.api.generator.engine.ast.Reference; import com.google.api.generator.engine.ast.TypeNode; import com.google.api.generator.engine.ast.VaporReference; import com.google.api.generator.gapic.utils.JavaStyle; @@ -27,6 +29,8 @@ @AutoValue public abstract class ResourceName { static final String SLASH = "/"; + static final Reference RESOURCE_NAME_REF = + ConcreteReference.withClazz(com.google.api.resourcenames.ResourceName.class); // The original binding variable name. // This should be in lower_snake_case in the proto, and expected to be surrounded by braces. @@ -42,6 +46,8 @@ public abstract class ResourceName { public abstract String resourceTypeString(); // A list of patterns such as projects/{project}/locations/{location}/resources/{this_resource}. + // Order is copuled to the method variants and ordering in the reosurce name helper, as well as + // the relevant client tests. public abstract ImmutableList patterns(); // The Java TypeNode of the resource name helper class to generate. @@ -83,12 +89,7 @@ public static ResourceName createWildcard(String resourceTypeString, String pakk .setResourceTypeString(resourceTypeString) .setPatterns(ImmutableList.of(ResourceNameConstants.WILDCARD_PATTERN)) .setIsOnlyWildcard(true) - .setType( - TypeNode.withReference( - VaporReference.builder() - .setName("ResourceName") - .setPakkage("com.google.api.resourcenames") - .build())) + .setType(TypeNode.withReference(RESOURCE_NAME_REF)) .build(); } @@ -159,6 +160,7 @@ public ResourceName build() { VaporReference.builder() .setName(String.format("%sName", typeName)) .setPakkage(pakkage()) + .setSupertypeReference(RESOURCE_NAME_REF) .build())); } return autoBuild(); diff --git a/src/test/java/com/google/api/generator/gapic/composer/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/composer/BUILD.bazel index e291e47611..169ed8837b 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/composer/BUILD.bazel @@ -3,11 +3,13 @@ package(default_visibility = ["//visibility:public"]) TESTS = [ "BatchingDescriptorComposerTest", "ComposerTest", + "DefaultValueComposerTest", "GrpcServiceCallableFactoryClassComposerTest", "GrpcServiceStubClassComposerTest", "MockServiceClassComposerTest", "MockServiceImplClassComposerTest", "ResourceNameHelperClassComposerTest", + "ResourceNameTokenizerTest", "RetrySettingsComposerTest", "ServiceClientClassComposerTest", "ServiceClientTestClassComposerTest", @@ -52,6 +54,7 @@ java_proto_library( "//src/main/java/com/google/api/generator/gapic/model", "//src/main/java/com/google/api/generator/gapic/protoparser", "//src/test/java/com/google/api/generator/gapic/testdata:showcase_java_proto", + "//src/test/java/com/google/api/generator/gapic/testdata:testgapic_java_proto", "@com_google_api_gax_java//gax", "@com_google_googleapis//google/logging/v2:logging_java_proto", "@com_google_googleapis//google/pubsub/v1:pubsub_java_proto", diff --git a/src/test/java/com/google/api/generator/gapic/composer/ServiceClientTestClassComposerTest.java b/src/test/java/com/google/api/generator/gapic/composer/ServiceClientTestClassComposerTest.java index e916663570..a096271069 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/ServiceClientTestClassComposerTest.java +++ b/src/test/java/com/google/api/generator/gapic/composer/ServiceClientTestClassComposerTest.java @@ -53,7 +53,8 @@ public void generateServiceClasses() { Service echoProtoService = services.get(0); GapicClass clazz = - ServiceClientTestClassComposer.instance().generate(echoProtoService, messageTypes); + ServiceClientTestClassComposer.instance() + .generate(echoProtoService, resourceNames, messageTypes); JavaWriterVisitor visitor = new JavaWriterVisitor(); clazz.classDefinition().accept(visitor); @@ -68,14 +69,20 @@ public void generateServiceClasses() { + "import com.google.api.gax.grpc.testing.LocalChannelProvider;\n" + "import com.google.api.gax.grpc.testing.MockGrpcService;\n" + "import com.google.api.gax.grpc.testing.MockServiceHelper;\n" + + "import com.google.api.gax.rpc.InvalidArgumentException;\n" + + "import com.google.api.resourcenames.ResourceName;\n" + + "import com.google.rpc.Status;\n" + + "import io.grpc.StatusRuntimeException;\n" + "import java.io.IOException;\n" + "import java.util.Arrays;\n" + "import java.util.UUID;\n" + "import javax.annotation.Generated;\n" + "import org.junit.After;\n" + "import org.junit.AfterClass;\n" + + "import org.junit.Assert;\n" + "import org.junit.Before;\n" + "import org.junit.BeforeClass;\n" + + "import org.junit.Test;\n" + "\n" + "@Generated(\"by gapic-generator-java\")\n" + "public class EchoClientTest {\n" @@ -89,7 +96,8 @@ public void generateServiceClasses() { + " mockEcho = new MockEcho();\n" + " mockServiceHelper =\n" + " new MockServiceHelper(\n" - + " UUID.randomUUID().toString(), Arrays.asList(mockEcho));\n" + + " UUID.randomUUID().toString()," + + " Arrays.asList(mockEcho));\n" + " mockServiceHelper.start();\n" + " }\n" + "\n" @@ -114,5 +122,149 @@ public void generateServiceClasses() { + " public void tearDown() throws Exception {\n" + " client.close();\n" + " }\n" + + "\n" + + " @Test\n" + + " public void echoExceptionTest() throws Exception {\n" + + " StatusRuntimeException exception = new" + + " StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT);\n" + + " mockEcho.addException(exception);\n" + + " try {\n" + + " String content = \"content951530617\";\n" + + " client.echo(content);\n" + + " Assert.fail(\"No exception raised\");\n" + + " } catch (InvalidArgumentException e) {\n" + + " // Expected exception.\n" + + " }\n" + + " }\n" + + "\n" + + " @Test\n" + + " public void echoExceptionTest2() throws Exception {\n" + + " StatusRuntimeException exception = new" + + " StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT);\n" + + " mockEcho.addException(exception);\n" + + " try {\n" + + " Status error = Status.newBuilder().build();\n" + + " client.echo(error);\n" + + " Assert.fail(\"No exception raised\");\n" + + " } catch (InvalidArgumentException e) {\n" + + " // Expected exception.\n" + + " }\n" + + " }\n" + + "\n" + + " @Test\n" + + " public void echoExceptionTest3() throws Exception {\n" + + " StatusRuntimeException exception = new" + + " StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT);\n" + + " mockEcho.addException(exception);\n" + + " try {\n" + + " String content = \"content951530617\";\n" + + " Severity severity = Severity.forNumber(0);\n" + + " client.echo(content, severity);\n" + + " Assert.fail(\"No exception raised\");\n" + + " } catch (InvalidArgumentException e) {\n" + + " // Expected exception.\n" + + " }\n" + + " }\n" + + "\n" + + " @Test\n" + + " public void echoExceptionTest4() throws Exception {\n" + + " StatusRuntimeException exception = new" + + " StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT);\n" + + " mockEcho.addException(exception);\n" + + " try {\n" + + " String name = \"name3373707\";\n" + + " client.echo(name);\n" + + " Assert.fail(\"No exception raised\");\n" + + " } catch (InvalidArgumentException e) {\n" + + " // Expected exception.\n" + + " }\n" + + " }\n" + + "\n" + + " @Test\n" + + " public void echoExceptionTest5() throws Exception {\n" + + " StatusRuntimeException exception = new" + + " StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT);\n" + + " mockEcho.addException(exception);\n" + + " try {\n" + + " FoobarName name = FoobarName.ofProjectFoobarName(\"[PROJECT]\"," + + " \"[FOOBAR]\");\n" + + " client.echo(name);\n" + + " Assert.fail(\"No exception raised\");\n" + + " } catch (InvalidArgumentException e) {\n" + + " // Expected exception.\n" + + " }\n" + + " }\n" + + "\n" + + " @Test\n" + + " public void echoExceptionTest6() throws Exception {\n" + + " StatusRuntimeException exception = new" + + " StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT);\n" + + " mockEcho.addException(exception);\n" + + " try {\n" + + " String parent = \"parent-995424086\";\n" + + " client.echo(parent);\n" + + " Assert.fail(\"No exception raised\");\n" + + " } catch (InvalidArgumentException e) {\n" + + " // Expected exception.\n" + + " }\n" + + " }\n" + + "\n" + + " @Test\n" + + " public void echoExceptionTest7() throws Exception {\n" + + " StatusRuntimeException exception = new" + + " StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT);\n" + + " mockEcho.addException(exception);\n" + + " try {\n" + + " ResourceName parent = FoobarName.ofProjectFoobarName(\"[PROJECT]\"," + + " \"[FOOBAR]\");\n" + + " client.echo(parent);\n" + + " Assert.fail(\"No exception raised\");\n" + + " } catch (InvalidArgumentException e) {\n" + + " // Expected exception.\n" + + " }\n" + + " }\n" + + "\n" + + " @Test\n" + + " public void expandExceptionTest() throws Exception {\n" + + " StatusRuntimeException exception = new" + + " StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT);\n" + + " addException(exception);\n" + + " try {\n" + + " String content = \"content951530617\";\n" + + " Status error = Status.newBuilder().build();\n" + + " client.expand(content, error);\n" + + " Assert.fail(\"No exception raised\");\n" + + " } catch (InvalidArgumentException e) {\n" + + " // Expected exception.\n" + + " }\n" + + " }\n" + + "\n" + + " @Test\n" + + " public void collectExceptionTest() throws Exception {\n" + + " StatusRuntimeException exception = new" + + " StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT);\n" + + " addException(exception);\n" + + " try {\n" + + " String content = \"content951530617\";\n" + + " client.collect(content);\n" + + " Assert.fail(\"No exception raised\");\n" + + " } catch (InvalidArgumentException e) {\n" + + " // Expected exception.\n" + + " }\n" + + " }\n" + + "\n" + + " @Test\n" + + " public void chatAgainExceptionTest() throws Exception {\n" + + " StatusRuntimeException exception = new" + + " StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT);\n" + + " addException(exception);\n" + + " try {\n" + + " String content = \"content951530617\";\n" + + " client.chatAgain(content);\n" + + " Assert.fail(\"No exception raised\");\n" + + " } catch (InvalidArgumentException e) {\n" + + " // Expected exception.\n" + + " }\n" + + " }\n" + "}\n"; } diff --git a/src/test/java/com/google/api/generator/gapic/protoparser/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/protoparser/BUILD.bazel index cde28cbf97..83c0403098 100644 --- a/src/test/java/com/google/api/generator/gapic/protoparser/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/protoparser/BUILD.bazel @@ -35,6 +35,7 @@ filegroup( "//src/main/java/com/google/api/generator/gapic/utils", "//src/test/java/com/google/api/generator/gapic/testdata:showcase_java_proto", "//src/test/java/com/google/api/generator/gapic/testdata:testgapic_java_proto", + "@com_google_api_api_common//jar", "@com_google_googleapis//google/rpc:rpc_java_proto", "@com_google_protobuf//:protobuf_java", "@com_google_protobuf//:protobuf_java_util", diff --git a/src/test/java/com/google/api/generator/gapic/protoparser/ResourceNameParserTest.java b/src/test/java/com/google/api/generator/gapic/protoparser/ResourceNameParserTest.java index 7bb6c1fe29..c02a8f4427 100644 --- a/src/test/java/com/google/api/generator/gapic/protoparser/ResourceNameParserTest.java +++ b/src/test/java/com/google/api/generator/gapic/protoparser/ResourceNameParserTest.java @@ -20,8 +20,8 @@ import static junit.framework.Assert.assertTrue; import static org.junit.Assert.assertThrows; +import com.google.api.generator.engine.ast.ConcreteReference; import com.google.api.generator.engine.ast.TypeNode; -import com.google.api.generator.engine.ast.VaporReference; import com.google.api.generator.gapic.model.ResourceName; import com.google.api.generator.gapic.utils.ResourceNameConstants; import com.google.protobuf.Descriptors.Descriptor; @@ -99,10 +99,7 @@ public void parseResourceNames_wildcard() { assertTrue(resourceName.isOnlyWildcard()); assertEquals( TypeNode.withReference( - VaporReference.builder() - .setName("ResourceName") - .setPakkage("com.google.api.resourcenames") - .build()), + ConcreteReference.withClazz(com.google.api.resourcenames.ResourceName.class)), resourceName.type()); }