From b0446baedf4b3c6c2be3dfa5f3b651d64e34834c Mon Sep 17 00:00:00 2001 From: Marco Ziccardi Date: Wed, 20 Apr 2016 17:18:03 +0200 Subject: [PATCH 1/2] Chain cause in ComputeException.translateAndThrow, add tests --- .../gcloud/compute/ComputeException.java | 8 +- .../gcloud/compute/ComputeExceptionTest.java | 96 +++++++++++++++++++ 2 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 gcloud-java-compute/src/test/java/com/google/gcloud/compute/ComputeExceptionTest.java diff --git a/gcloud-java-compute/src/main/java/com/google/gcloud/compute/ComputeException.java b/gcloud-java-compute/src/main/java/com/google/gcloud/compute/ComputeException.java index 94a409305338..e63d61f2792d 100644 --- a/gcloud-java-compute/src/main/java/com/google/gcloud/compute/ComputeException.java +++ b/gcloud-java-compute/src/main/java/com/google/gcloud/compute/ComputeException.java @@ -33,7 +33,11 @@ public class ComputeException extends BaseServiceException { private static final long serialVersionUID = -8039359778707845810L; public ComputeException(int code, String message) { - super(code, message, null, true); + super(code, message, null, true, null); + } + + private ComputeException(int code, String message, Throwable cause) { + super(code, message, null, true, cause); } public ComputeException(IOException exception) { @@ -54,6 +58,6 @@ protected Set retryableErrors() { */ static BaseServiceException translateAndThrow(RetryHelperException ex) { BaseServiceException.translateAndPropagateIfPossible(ex); - throw new ComputeException(UNKNOWN_CODE, ex.getMessage()); + throw new ComputeException(UNKNOWN_CODE, ex.getMessage(), ex.getCause()); } } diff --git a/gcloud-java-compute/src/test/java/com/google/gcloud/compute/ComputeExceptionTest.java b/gcloud-java-compute/src/test/java/com/google/gcloud/compute/ComputeExceptionTest.java new file mode 100644 index 000000000000..995be7841624 --- /dev/null +++ b/gcloud-java-compute/src/test/java/com/google/gcloud/compute/ComputeExceptionTest.java @@ -0,0 +1,96 @@ +/* + * Copyright 2016 Google Inc. All Rights Reserved. + * + * 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 + * + * http://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.gcloud.compute; + +import static org.easymock.EasyMock.createMock; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.verify; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import com.google.gcloud.BaseServiceException; +import com.google.gcloud.RetryHelper.RetryHelperException; + +import org.junit.Test; + +import java.io.IOException; +import java.net.SocketTimeoutException; + +public class ComputeExceptionTest { + + @Test + public void testResourceManagerException() { + ComputeException exception = new ComputeException(500, "message"); + assertEquals(500, exception.code()); + assertEquals("message", exception.getMessage()); + assertNull(exception.reason()); + assertTrue(exception.retryable()); + assertTrue(exception.idempotent()); + + exception = new ComputeException(403, "message"); + assertEquals(403, exception.code()); + assertEquals("message", exception.getMessage()); + assertNull(exception.reason()); + assertFalse(exception.retryable()); + assertTrue(exception.idempotent()); + + IOException cause = new SocketTimeoutException(); + exception = new ComputeException(cause); + assertNull(exception.reason()); + assertNull(exception.getMessage()); + assertTrue(exception.retryable()); + assertTrue(exception.idempotent()); + assertEquals(cause, exception.getCause()); + } + + @Test + public void testTranslateAndThrow() throws Exception { + Exception cause = new ComputeException(500, "message"); + RetryHelperException exceptionMock = createMock(RetryHelperException.class); + expect(exceptionMock.getCause()).andReturn(cause).times(2); + replay(exceptionMock); + try { + ComputeException.translateAndThrow(exceptionMock); + } catch (BaseServiceException ex) { + assertEquals(500, ex.code()); + assertEquals("message", ex.getMessage()); + assertTrue(ex.retryable()); + assertTrue(ex.idempotent()); + } finally { + verify(exceptionMock); + } + cause = new IllegalArgumentException("message"); + exceptionMock = createMock(RetryHelperException.class); + expect(exceptionMock.getMessage()).andReturn("message").times(1); + expect(exceptionMock.getCause()).andReturn(cause).times(2); + replay(exceptionMock); + try { + ComputeException.translateAndThrow(exceptionMock); + } catch (BaseServiceException ex) { + assertEquals(ComputeException.UNKNOWN_CODE, ex.code()); + assertEquals("message", ex.getMessage()); + assertFalse(ex.retryable()); + assertTrue(ex.idempotent()); + assertEquals(cause, ex.getCause()); + } finally { + verify(exceptionMock); + } + } +} From 678f04950a3083b4273b725b2b803764517c846e Mon Sep 17 00:00:00 2001 From: Marco Ziccardi Date: Wed, 20 Apr 2016 21:45:56 +0200 Subject: [PATCH 2/2] Make ComputeException constructors package scoped, better test coverage --- .../com/google/gcloud/compute/ComputeException.java | 4 ++-- .../google/gcloud/compute/ComputeExceptionTest.java | 13 +++++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/gcloud-java-compute/src/main/java/com/google/gcloud/compute/ComputeException.java b/gcloud-java-compute/src/main/java/com/google/gcloud/compute/ComputeException.java index e63d61f2792d..c6e7ef734442 100644 --- a/gcloud-java-compute/src/main/java/com/google/gcloud/compute/ComputeException.java +++ b/gcloud-java-compute/src/main/java/com/google/gcloud/compute/ComputeException.java @@ -32,11 +32,11 @@ public class ComputeException extends BaseServiceException { private static final Set RETRYABLE_ERRORS = ImmutableSet.of(new Error(500, null)); private static final long serialVersionUID = -8039359778707845810L; - public ComputeException(int code, String message) { + ComputeException(int code, String message) { super(code, message, null, true, null); } - private ComputeException(int code, String message, Throwable cause) { + ComputeException(int code, String message, Throwable cause) { super(code, message, null, true, cause); } diff --git a/gcloud-java-compute/src/test/java/com/google/gcloud/compute/ComputeExceptionTest.java b/gcloud-java-compute/src/test/java/com/google/gcloud/compute/ComputeExceptionTest.java index 995be7841624..f98bfa150d8c 100644 --- a/gcloud-java-compute/src/test/java/com/google/gcloud/compute/ComputeExceptionTest.java +++ b/gcloud-java-compute/src/test/java/com/google/gcloud/compute/ComputeExceptionTest.java @@ -23,6 +23,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import com.google.gcloud.BaseServiceException; @@ -57,7 +58,15 @@ public void testResourceManagerException() { assertNull(exception.getMessage()); assertTrue(exception.retryable()); assertTrue(exception.idempotent()); - assertEquals(cause, exception.getCause()); + assertSame(cause, exception.getCause()); + + exception = new ComputeException(403, "message", cause); + assertEquals(403, exception.code()); + assertEquals("message", exception.getMessage()); + assertNull(exception.reason()); + assertFalse(exception.retryable()); + assertTrue(exception.idempotent()); + assertSame(cause, exception.getCause()); } @Test @@ -88,7 +97,7 @@ public void testTranslateAndThrow() throws Exception { assertEquals("message", ex.getMessage()); assertFalse(ex.retryable()); assertTrue(ex.idempotent()); - assertEquals(cause, ex.getCause()); + assertSame(cause, ex.getCause()); } finally { verify(exceptionMock); }