From 918ae419f84ad5721638ca10eca992333e9f7c3d Mon Sep 17 00:00:00 2001 From: Chanseok Oh Date: Mon, 15 Nov 2021 14:56:10 -0500 Subject: [PATCH] fix: pass error message when creating ApiException (#1556) --- .../grpc/ProtoOperationTransformersTest.java | 36 +++++++----------- .../ProtoOperationTransformersTest.java | 37 ++++++++----------- .../api/gax/rpc/ApiExceptionFactory.java | 8 ++-- 3 files changed, 32 insertions(+), 49 deletions(-) diff --git a/gax-grpc/src/test/java/com/google/api/gax/grpc/ProtoOperationTransformersTest.java b/gax-grpc/src/test/java/com/google/api/gax/grpc/ProtoOperationTransformersTest.java index d8eba05a2..5ac43f141 100644 --- a/gax-grpc/src/test/java/com/google/api/gax/grpc/ProtoOperationTransformersTest.java +++ b/gax-grpc/src/test/java/com/google/api/gax/grpc/ProtoOperationTransformersTest.java @@ -29,11 +29,13 @@ */ package com.google.api.gax.grpc; +import static org.junit.Assert.assertThrows; + import com.google.api.gax.grpc.ProtoOperationTransformers.MetadataTransformer; import com.google.api.gax.grpc.ProtoOperationTransformers.ResponseTransformer; import com.google.api.gax.longrunning.OperationSnapshot; -import com.google.api.gax.rpc.ApiException; import com.google.api.gax.rpc.UnavailableException; +import com.google.api.gax.rpc.UnknownException; import com.google.common.truth.Truth; import com.google.longrunning.Operation; import com.google.protobuf.Any; @@ -41,7 +43,6 @@ import com.google.type.Color; import com.google.type.Money; import io.grpc.Status.Code; -import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -66,14 +67,11 @@ public void testAnyResponseTransformer_exception() { OperationSnapshot operationSnapshot = GrpcOperationSnapshot.create( Operation.newBuilder().setResponse(Any.pack(inputMoney)).setError(status).build()); - try { - transformer.apply(operationSnapshot); - Assert.fail("ResponseTransformer should have thrown an exception"); - } catch (UnavailableException expected) { - Truth.assertThat(expected) - .hasMessageThat() - .contains("failed with status = GrpcStatusCode{transportCode=UNAVAILABLE}"); - } + Exception exception = + assertThrows(UnavailableException.class, () -> transformer.apply(operationSnapshot)); + Truth.assertThat(exception) + .hasMessageThat() + .contains("failed with status = GrpcStatusCode{transportCode=UNAVAILABLE}"); } @Test @@ -86,12 +84,9 @@ public void testAnyResponseTransformer_mismatchedTypes() { .setResponse(Any.pack(Color.getDefaultInstance())) .setError(status) .build()); - try { - transformer.apply(operationSnapshot); - Assert.fail("ResponseTransformer should have thrown an exception"); - } catch (ApiException expected) { - Truth.assertThat(expected).hasMessageThat().contains("Failed to unpack object"); - } + Exception exception = + assertThrows(UnknownException.class, () -> transformer.apply(operationSnapshot)); + Truth.assertThat(exception).hasMessageThat().contains("encountered a problem unpacking it"); } @Test @@ -114,11 +109,8 @@ public void testAnyMetadataTransformer_mismatchedTypes() { .setMetadata(Any.pack(Color.getDefaultInstance())) .setError(status) .build()); - try { - transformer.apply(operationSnapshot); - Assert.fail("MetadataTransformer should have thrown an exception"); - } catch (ApiException expected) { - Truth.assertThat(expected).hasMessageThat().contains("Failed to unpack object"); - } + Exception exception = + assertThrows(UnknownException.class, () -> transformer.apply(operationSnapshot)); + Truth.assertThat(exception).hasMessageThat().contains("encountered a problem unpacking it"); } } diff --git a/gax-httpjson/src/test/java/com/google/api/gax/httpjson/ProtoOperationTransformersTest.java b/gax-httpjson/src/test/java/com/google/api/gax/httpjson/ProtoOperationTransformersTest.java index 549b386dc..38685f17b 100644 --- a/gax-httpjson/src/test/java/com/google/api/gax/httpjson/ProtoOperationTransformersTest.java +++ b/gax-httpjson/src/test/java/com/google/api/gax/httpjson/ProtoOperationTransformersTest.java @@ -29,11 +29,13 @@ */ package com.google.api.gax.httpjson; +import static org.junit.Assert.assertThrows; + import com.google.api.gax.httpjson.ProtoOperationTransformers.MetadataTransformer; import com.google.api.gax.httpjson.ProtoOperationTransformers.ResponseTransformer; import com.google.api.gax.longrunning.OperationSnapshot; -import com.google.api.gax.rpc.ApiException; import com.google.api.gax.rpc.UnavailableException; +import com.google.api.gax.rpc.UnknownException; import com.google.common.truth.Truth; import com.google.longrunning.Operation; import com.google.protobuf.Any; @@ -41,7 +43,6 @@ import com.google.rpc.Status; import com.google.type.Color; import com.google.type.Money; -import org.junit.Assert; import org.junit.Test; public class ProtoOperationTransformersTest { @@ -94,14 +95,12 @@ public void testAnyResponseTransformer_exception() { OperationSnapshot operationSnapshot = HttpJsonOperationSnapshot.create( Operation.newBuilder().setResponse(Any.pack(inputMoney)).setError(status).build()); - try { - transformer.apply(operationSnapshot); - Assert.fail("ResponseTransformer should have thrown an exception"); - } catch (UnavailableException expected) { - Truth.assertThat(expected) - .hasMessageThat() - .contains("failed with status = HttpJsonStatusCode{statusCode=UNAVAILABLE}"); - } + + Exception exception = + assertThrows(UnavailableException.class, () -> transformer.apply(operationSnapshot)); + Truth.assertThat(exception) + .hasMessageThat() + .contains("failed with status = HttpJsonStatusCode{statusCode=UNAVAILABLE}"); } @Test @@ -114,12 +113,9 @@ public void testAnyResponseTransformer_mismatchedTypes() { .setResponse(Any.pack(Color.getDefaultInstance())) .setError(status) .build()); - try { - transformer.apply(operationSnapshot); - Assert.fail("ResponseTransformer should have thrown an exception"); - } catch (ApiException expected) { - Truth.assertThat(expected).hasMessageThat().contains("Failed to unpack object"); - } + Exception exception = + assertThrows(UnknownException.class, () -> transformer.apply(operationSnapshot)); + Truth.assertThat(exception).hasMessageThat().contains("encountered a problem unpacking it"); } @Test @@ -142,11 +138,8 @@ public void testAnyMetadataTransformer_mismatchedTypes() { .setMetadata(Any.pack(Color.getDefaultInstance())) .setError(status) .build()); - try { - transformer.apply(operationSnapshot); - Assert.fail("MetadataTransformer should have thrown an exception"); - } catch (ApiException expected) { - Truth.assertThat(expected).hasMessageThat().contains("Failed to unpack object"); - } + Exception exception = + assertThrows(UnknownException.class, () -> transformer.apply(operationSnapshot)); + Truth.assertThat(exception).hasMessageThat().contains("encountered a problem unpacking it"); } } diff --git a/gax/src/main/java/com/google/api/gax/rpc/ApiExceptionFactory.java b/gax/src/main/java/com/google/api/gax/rpc/ApiExceptionFactory.java index d1b787e85..9820b751e 100644 --- a/gax/src/main/java/com/google/api/gax/rpc/ApiExceptionFactory.java +++ b/gax/src/main/java/com/google/api/gax/rpc/ApiExceptionFactory.java @@ -43,8 +43,6 @@ public static ApiException createException( return new CancelledException(cause, statusCode, retryable); case NOT_FOUND: return new NotFoundException(cause, statusCode, retryable); - case UNKNOWN: - return new UnknownException(cause, statusCode, retryable); case INVALID_ARGUMENT: return new InvalidArgumentException(cause, statusCode, retryable); case DEADLINE_EXCEEDED: @@ -72,6 +70,7 @@ public static ApiException createException( case UNAUTHENTICATED: return new UnauthenticatedException(cause, statusCode, retryable); + case UNKNOWN: // Fall through. default: return new UnknownException(cause, statusCode, retryable); } @@ -84,8 +83,6 @@ public static ApiException createException( return new CancelledException(message, cause, statusCode, retryable); case NOT_FOUND: return new NotFoundException(message, cause, statusCode, retryable); - case UNKNOWN: - return new UnknownException(message, cause, statusCode, retryable); case INVALID_ARGUMENT: return new InvalidArgumentException(message, cause, statusCode, retryable); case DEADLINE_EXCEEDED: @@ -113,8 +110,9 @@ public static ApiException createException( case UNAUTHENTICATED: return new UnauthenticatedException(message, cause, statusCode, retryable); + case UNKNOWN: // Fall through. default: - return new UnknownException(cause, statusCode, retryable); + return new UnknownException(message, cause, statusCode, retryable); } } }