From bd5894df89f5a7ed652faeb28eec904a1e04acce Mon Sep 17 00:00:00 2001 From: Mark Sailes Date: Wed, 26 Jul 2023 22:11:00 +0100 Subject: [PATCH] Adding additional information to logging and exception. --- .../software/amazon/payloadoffloading/S3Dao.java | 4 ++-- .../amazon/payloadoffloading/S3DaoTest.java | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/main/java/software/amazon/payloadoffloading/S3Dao.java b/src/main/java/software/amazon/payloadoffloading/S3Dao.java index 2b03dd5..9bf2876 100644 --- a/src/main/java/software/amazon/payloadoffloading/S3Dao.java +++ b/src/main/java/software/amazon/payloadoffloading/S3Dao.java @@ -41,11 +41,11 @@ public String getTextFromS3(String s3BucketName, String s3Key) { .key(s3Key) .build(); - ResponseInputStream object = null; + ResponseInputStream object; try { object = s3Client.getObject(getObjectRequest); } catch (SdkException e) { - String errorMessage = "Failed to get the S3 object which contains the payload."; + String errorMessage = "Failed to get the S3 object from Bucket: {" + s3BucketName + "} with Key: {" + s3Key + "}."; LOG.error(errorMessage, e); throw SdkException.create(errorMessage, e); } diff --git a/src/test/java/software/amazon/payloadoffloading/S3DaoTest.java b/src/test/java/software/amazon/payloadoffloading/S3DaoTest.java index b0a8f25..ed78279 100644 --- a/src/test/java/software/amazon/payloadoffloading/S3DaoTest.java +++ b/src/test/java/software/amazon/payloadoffloading/S3DaoTest.java @@ -1,7 +1,10 @@ package software.amazon.payloadoffloading; +import software.amazon.awssdk.core.exception.SdkException; import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.services.s3.S3Client; +import software.amazon.awssdk.services.s3.model.GetObjectAclRequest; +import software.amazon.awssdk.services.s3.model.GetObjectRequest; import software.amazon.awssdk.services.s3.model.ObjectCannedACL; import org.junit.jupiter.api.BeforeEach; @@ -13,14 +16,15 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; public class S3DaoTest { - private static final String s3ServerSideEncryptionKMSKeyId = "test-customer-managed-kms-key-id"; private static final String S3_BUCKET_NAME = "test-bucket-name"; private static final String ANY_PAYLOAD = "AnyPayload"; private static final String ANY_S3_KEY = "AnyS3key"; @@ -75,4 +79,14 @@ public void storeTextInS3WithBothTest() { assertEquals(objectCannedACL, argument.getValue().acl()); assertEquals(S3_BUCKET_NAME, argument.getValue().bucket()); } + + @Test + public void bucketNameAndKeyIncludedInExceptionWhenFailedToGetObject() { + dao = new S3Dao(s3Client); + when(s3Client.getObject(any(GetObjectRequest.class))).thenThrow(SdkException.create("Failed", new Exception())); + + SdkException sdkException = assertThrows(SdkException.class, () -> dao.getTextFromS3(S3_BUCKET_NAME, ANY_S3_KEY)); + + assertEquals("Failed to get the S3 object from Bucket: {test-bucket-name} with Key: {AnyS3key}.", sdkException.getMessage()); + } } \ No newline at end of file