From b64f307e82bc06a2299143b50f0dbdf45e522b0f Mon Sep 17 00:00:00 2001 From: Jacob Li Date: Mon, 23 Jan 2023 15:51:27 -0800 Subject: [PATCH 1/2] bump payloadOffLoading version to 1.1.2 --- README.md | 2 +- pom.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6c71d9c..09caffa 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ For more information on using the amazon-sqs-java-extended-client-lib, see our g com.amazonaws amazon-sqs-java-extended-client-lib - 1.2.3 + 1.2.4 jar ``` diff --git a/pom.xml b/pom.xml index d6226b1..4a78aa9 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.amazonaws amazon-sqs-java-extended-client-lib - 1.2.3 + 1.2.4 jar Amazon SQS Extended Client Library for Java An extension to the Amazon SQS client that enables sending and receiving messages up to 2GB via Amazon S3. @@ -55,7 +55,7 @@ software.amazon.payloadoffloading payloadoffloading-common - 1.1.0 + 1.1.2 From f476381beb922b703d8de3ee8b3da56be99c81f2 Mon Sep 17 00:00:00 2001 From: Jacob Li Date: Wed, 22 Mar 2023 16:38:17 -0700 Subject: [PATCH 2/2] Adopte the latest testing suite and minor refactoring --- .github/dependabot.yml | 10 ++ pom.xml | 25 +-- .../AmazonSQSExtendedClient.java | 19 +- .../AmazonSQSExtendedClientBase.java | 2 +- .../AmazonSQSExtendedClientTest.java | 169 +++++++++--------- .../ExtendedClientConfigurationTest.java | 100 ++++++----- 6 files changed, 179 insertions(+), 146 deletions(-) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..e1d1cc7 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,10 @@ +version: 2 +updates: + - package-ecosystem: "maven" + directory: "/" + schedule: + interval: "weekly" + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" diff --git a/pom.xml b/pom.xml index 4a78aa9..38e9e05 100644 --- a/pom.xml +++ b/pom.xml @@ -59,15 +59,15 @@ - junit - junit - 4.13.1 + org.junit.jupiter + junit-jupiter + 5.9.2 test org.mockito mockito-core - 1.10.19 + 5.2.0 test @@ -77,7 +77,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.2 + 3.11.0 1.8 1.8 @@ -100,10 +100,15 @@ + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0 + org.apache.maven.plugins maven-javadoc-plugin - 2.9.1 + 3.5.0 attach-javadocs @@ -111,11 +116,7 @@ jar - - -Xdoclint:none + none @@ -123,7 +124,7 @@ org.sonatype.plugins nexus-staging-maven-plugin - 1.6.7 + 1.6.13 true ossrh diff --git a/src/main/java/com/amazon/sqs/javamessaging/AmazonSQSExtendedClient.java b/src/main/java/com/amazon/sqs/javamessaging/AmazonSQSExtendedClient.java index 452fa8a..4249dec 100644 --- a/src/main/java/com/amazon/sqs/javamessaging/AmazonSQSExtendedClient.java +++ b/src/main/java/com/amazon/sqs/javamessaging/AmazonSQSExtendedClient.java @@ -15,10 +15,6 @@ package com.amazon.sqs.javamessaging; -import java.nio.ByteBuffer; -import java.util.*; -import java.util.Map.Entry; - import com.amazonaws.AmazonClientException; import com.amazonaws.AmazonServiceException; import com.amazonaws.services.sqs.AmazonSQS; @@ -53,10 +49,21 @@ import com.amazonaws.services.sqs.model.SendMessageRequest; import com.amazonaws.services.sqs.model.SendMessageResult; import com.amazonaws.services.sqs.model.TooManyEntriesInBatchRequestException; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import software.amazon.payloadoffloading.*; +import software.amazon.payloadoffloading.PayloadS3Pointer; +import software.amazon.payloadoffloading.PayloadStore; +import software.amazon.payloadoffloading.S3BackedPayloadStore; +import software.amazon.payloadoffloading.S3Dao; +import software.amazon.payloadoffloading.Util; + +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Optional; /** diff --git a/src/main/java/com/amazon/sqs/javamessaging/AmazonSQSExtendedClientBase.java b/src/main/java/com/amazon/sqs/javamessaging/AmazonSQSExtendedClientBase.java index 70edbae..8530c6d 100644 --- a/src/main/java/com/amazon/sqs/javamessaging/AmazonSQSExtendedClientBase.java +++ b/src/main/java/com/amazon/sqs/javamessaging/AmazonSQSExtendedClientBase.java @@ -104,7 +104,7 @@ public AmazonSQSExtendedClientBase(AmazonSQS sqsClient) { * IMPORTANT: The following list shows the characters (in * Unicode) allowed in your message, according to the W3C XML * specification. For more information, go to - * http://www.w3.org/TR/REC-xml/#charsets If you send any characters not + * ... If you send any characters not * included in the list, your request will be rejected. #x9 | #xA | #xD | * [#x20 to #xD7FF] | [#xE000 to #xFFFD] | [#x10000 to #x10FFFF] *

diff --git a/src/test/java/com/amazon/sqs/javamessaging/AmazonSQSExtendedClientTest.java b/src/test/java/com/amazon/sqs/javamessaging/AmazonSQSExtendedClientTest.java index 0975183..1351db3 100644 --- a/src/test/java/com/amazon/sqs/javamessaging/AmazonSQSExtendedClientTest.java +++ b/src/test/java/com/amazon/sqs/javamessaging/AmazonSQSExtendedClientTest.java @@ -15,36 +15,56 @@ package com.amazon.sqs.javamessaging; -import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - import com.amazonaws.AmazonServiceException; import com.amazonaws.services.s3.AmazonS3; -import com.amazonaws.services.s3.model.*; +import com.amazonaws.services.s3.model.CannedAccessControlList; +import com.amazonaws.services.s3.model.GetObjectRequest; +import com.amazonaws.services.s3.model.PutObjectRequest; +import com.amazonaws.services.s3.model.S3Object; +import com.amazonaws.services.s3.model.SSEAwsKeyManagementParams; import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClient; -import com.amazonaws.services.sqs.model.*; - +import com.amazonaws.services.sqs.model.DeleteMessageBatchRequest; +import com.amazonaws.services.sqs.model.DeleteMessageBatchRequestEntry; +import com.amazonaws.services.sqs.model.DeleteMessageRequest; +import com.amazonaws.services.sqs.model.Message; +import com.amazonaws.services.sqs.model.MessageAttributeValue; +import com.amazonaws.services.sqs.model.ReceiveMessageRequest; +import com.amazonaws.services.sqs.model.ReceiveMessageResult; +import com.amazonaws.services.sqs.model.SendMessageBatchRequest; +import com.amazonaws.services.sqs.model.SendMessageBatchRequestEntry; +import com.amazonaws.services.sqs.model.SendMessageRequest; import com.amazonaws.util.StringInputStream; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import software.amazon.payloadoffloading.PayloadS3Pointer; -import static org.mockito.Matchers.eq; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.isA; -import static org.mockito.Mockito.when; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.anyString; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.when; /** * Tests the AmazonSQSExtendedClient class. @@ -69,7 +89,7 @@ public class AmazonSQSExtendedClientTest { // should be > 1 and << SQS_SIZE_LIMIT private static final int ARBITRARY_SMALLER_THRESHOLD = 500; - @Before + @BeforeEach public void setupClients() { mockS3 = mock(AmazonS3.class); mockSqsBackend = mock(AmazonSQS.class); @@ -89,8 +109,7 @@ public void setupClients() { ExtendedClientConfiguration extendedClientConfigurationWithGenericReservedAttributeName = new ExtendedClientConfiguration() .withPayloadSupportEnabled(mockS3, S3_BUCKET_NAME).withLegacyReservedAttributeNameDisabled(); - ExtendedClientConfiguration extendedClientConfigurationDeprecated = new ExtendedClientConfiguration() - .withLargePayloadSupportEnabled(mockS3, S3_BUCKET_NAME); + ExtendedClientConfiguration extendedClientConfigurationDeprecated = new ExtendedClientConfiguration().withPayloadSupportEnabled(mockS3, S3_BUCKET_NAME); extendedSqsWithDefaultConfig = spy(new AmazonSQSExtendedClient(mockSqsBackend, extendedClientConfiguration)); extendedSqsWithCustomKMS = spy(new AmazonSQSExtendedClient(mockSqsBackend, extendedClientConfigurationWithCustomKMS)); @@ -101,10 +120,8 @@ public void setupClients() { @Test public void testWhenSendMessageWithLargePayloadSupportDisabledThenS3IsNotUsedAndSqsBackendIsResponsibleToFailItWithDeprecatedMethod() { - int messageLength = MORE_THAN_SQS_SIZE_LIMIT; - String messageBody = generateStringWithLength(messageLength); - ExtendedClientConfiguration extendedClientConfiguration = new ExtendedClientConfiguration() - .withLargePayloadSupportDisabled(); + String messageBody = generateStringWithLength(MORE_THAN_SQS_SIZE_LIMIT); + ExtendedClientConfiguration extendedClientConfiguration = new ExtendedClientConfiguration().withPayloadSupportDisabled(); AmazonSQS sqsExtended = spy(new AmazonSQSExtendedClient(mockSqsBackend, extendedClientConfiguration)); SendMessageRequest messageRequest = new SendMessageRequest(SQS_QUEUE_URL, messageBody); @@ -116,10 +133,8 @@ public void testWhenSendMessageWithLargePayloadSupportDisabledThenS3IsNotUsedAnd @Test public void testWhenSendMessageWithAlwaysThroughS3AndMessageIsSmallThenItIsStillStoredInS3WithDeprecatedMethod() { - int messageLength = LESS_THAN_SQS_SIZE_LIMIT; - String messageBody = generateStringWithLength(messageLength); - ExtendedClientConfiguration extendedClientConfiguration = new ExtendedClientConfiguration() - .withLargePayloadSupportEnabled(mockS3, S3_BUCKET_NAME).withAlwaysThroughS3(true); + String messageBody = generateStringWithLength(LESS_THAN_SQS_SIZE_LIMIT); + ExtendedClientConfiguration extendedClientConfiguration = new ExtendedClientConfiguration().withPayloadSupportEnabled(mockS3, S3_BUCKET_NAME).withAlwaysThroughS3(true); AmazonSQS sqsExtended = spy(new AmazonSQSExtendedClient(mock(AmazonSQSClient.class), extendedClientConfiguration)); SendMessageRequest messageRequest = new SendMessageRequest(SQS_QUEUE_URL, messageBody); @@ -132,8 +147,7 @@ public void testWhenSendMessageWithAlwaysThroughS3AndMessageIsSmallThenItIsStill public void testWhenSendMessageWithSetMessageSizeThresholdThenThresholdIsHonoredWithDeprecatedMethod() { int messageLength = ARBITRARY_SMALLER_THRESHOLD * 2; String messageBody = generateStringWithLength(messageLength); - ExtendedClientConfiguration extendedClientConfiguration = new ExtendedClientConfiguration() - .withLargePayloadSupportEnabled(mockS3, S3_BUCKET_NAME).withMessageSizeThreshold(ARBITRARY_SMALLER_THRESHOLD); + ExtendedClientConfiguration extendedClientConfiguration = new ExtendedClientConfiguration().withPayloadSupportEnabled(mockS3, S3_BUCKET_NAME).withPayloadSizeThreshold(ARBITRARY_SMALLER_THRESHOLD); AmazonSQS sqsExtended = spy(new AmazonSQSExtendedClient(mock(AmazonSQSClient.class), extendedClientConfiguration)); @@ -144,8 +158,7 @@ public void testWhenSendMessageWithSetMessageSizeThresholdThenThresholdIsHonored @Test public void testReceiveMessageMultipleTimesDoesNotAdditionallyAlterReceiveMessageRequestWithDeprecatedMethod() { - ExtendedClientConfiguration extendedClientConfiguration = new ExtendedClientConfiguration() - .withLargePayloadSupportEnabled(mockS3, S3_BUCKET_NAME); + ExtendedClientConfiguration extendedClientConfiguration = new ExtendedClientConfiguration().withPayloadSupportEnabled(mockS3, S3_BUCKET_NAME); AmazonSQS sqsExtended = spy(new AmazonSQSExtendedClient(mockSqsBackend, extendedClientConfiguration)); when(mockSqsBackend.receiveMessage(isA(ReceiveMessageRequest.class))).thenReturn(new ReceiveMessageResult()); @@ -154,10 +167,10 @@ public void testReceiveMessageMultipleTimesDoesNotAdditionallyAlterReceiveMessag .withMessageAttributeNames(AmazonSQSExtendedClient.LEGACY_RESERVED_ATTRIBUTE_NAME, SQSExtendedClientConstants.RESERVED_ATTRIBUTE_NAME); sqsExtended.receiveMessage(messageRequest); - Assert.assertEquals(expectedRequest, messageRequest); + assertEquals(expectedRequest, messageRequest); sqsExtended.receiveMessage(messageRequest); - Assert.assertEquals(expectedRequest, messageRequest); + assertEquals(expectedRequest, messageRequest); } @Test @@ -180,8 +193,8 @@ public void testWhenSendLargeMessage_WithoutKMS_ThenPayloadIsStoredInS3AndKMSKey ArgumentCaptor putObjectRequestArgumentCaptor = ArgumentCaptor.forClass(PutObjectRequest.class); verify(mockS3, times(1)).putObject(putObjectRequestArgumentCaptor.capture()); - Assert.assertNull(putObjectRequestArgumentCaptor.getValue().getSSEAwsKeyManagementParams()); - Assert.assertEquals(putObjectRequestArgumentCaptor.getValue().getBucketName(), S3_BUCKET_NAME); + assertNull(putObjectRequestArgumentCaptor.getValue().getSSEAwsKeyManagementParams()); + assertEquals(putObjectRequestArgumentCaptor.getValue().getBucketName(), S3_BUCKET_NAME); } @Test @@ -194,9 +207,9 @@ public void testWhenSendLargeMessage_WithCustomKMS_ThenPayloadIsStoredInS3AndCor ArgumentCaptor putObjectRequestArgumentCaptor = ArgumentCaptor.forClass(PutObjectRequest.class); verify(mockS3, times(1)).putObject(putObjectRequestArgumentCaptor.capture()); - Assert.assertEquals(putObjectRequestArgumentCaptor.getValue().getSSEAwsKeyManagementParams() + assertEquals(putObjectRequestArgumentCaptor.getValue().getSSEAwsKeyManagementParams() .getAwsKmsKeyId(), S3_SERVER_SIDE_ENCRYPTION_KMS_KEY_ID); - Assert.assertEquals(putObjectRequestArgumentCaptor.getValue().getBucketName(), S3_BUCKET_NAME); + assertEquals(putObjectRequestArgumentCaptor.getValue().getBucketName(), S3_BUCKET_NAME); } @Test @@ -209,15 +222,14 @@ public void testWhenSendLargeMessage_WithDefaultKMS_ThenPayloadIsStoredInS3AndCo ArgumentCaptor putObjectRequestArgumentCaptor = ArgumentCaptor.forClass(PutObjectRequest.class); verify(mockS3, times(1)).putObject(putObjectRequestArgumentCaptor.capture()); - Assert.assertTrue(putObjectRequestArgumentCaptor.getValue().getSSEAwsKeyManagementParams() != null && + assertTrue(putObjectRequestArgumentCaptor.getValue().getSSEAwsKeyManagementParams() != null && putObjectRequestArgumentCaptor.getValue().getSSEAwsKeyManagementParams().getAwsKmsKeyId() == null); - Assert.assertEquals(putObjectRequestArgumentCaptor.getValue().getBucketName(), S3_BUCKET_NAME); + assertEquals(putObjectRequestArgumentCaptor.getValue().getBucketName(), S3_BUCKET_NAME); } @Test public void testSendLargeMessageWithDefaultConfigThenLegacyReservedAttributeNameIsUsed(){ - int messageLength = MORE_THAN_SQS_SIZE_LIMIT; - String messageBody = generateStringWithLength(messageLength); + String messageBody = generateStringWithLength(MORE_THAN_SQS_SIZE_LIMIT); SendMessageRequest messageRequest = new SendMessageRequest(SQS_QUEUE_URL, messageBody); extendedSqsWithDefaultConfig.sendMessage(messageRequest); @@ -225,15 +237,14 @@ public void testSendLargeMessageWithDefaultConfigThenLegacyReservedAttributeName verify(mockSqsBackend).sendMessage(sendMessageRequestCaptor.capture()); Map attributes = sendMessageRequestCaptor.getValue().getMessageAttributes(); - Assert.assertTrue(attributes.keySet().contains(AmazonSQSExtendedClient.LEGACY_RESERVED_ATTRIBUTE_NAME)); - Assert.assertFalse(attributes.keySet().contains(SQSExtendedClientConstants.RESERVED_ATTRIBUTE_NAME)); + assertTrue(attributes.containsKey(AmazonSQSExtendedClient.LEGACY_RESERVED_ATTRIBUTE_NAME)); + assertFalse(attributes.containsKey(SQSExtendedClientConstants.RESERVED_ATTRIBUTE_NAME)); } @Test public void testSendLargeMessageWithGenericReservedAttributeNameConfigThenGenericReservedAttributeNameIsUsed(){ - int messageLength = MORE_THAN_SQS_SIZE_LIMIT; - String messageBody = generateStringWithLength(messageLength); + String messageBody = generateStringWithLength(MORE_THAN_SQS_SIZE_LIMIT); SendMessageRequest messageRequest = new SendMessageRequest(SQS_QUEUE_URL, messageBody); extendedSqsWithGenericReservedAttributeName.sendMessage(messageRequest); @@ -241,14 +252,13 @@ public void testSendLargeMessageWithGenericReservedAttributeNameConfigThenGeneri verify(mockSqsBackend).sendMessage(sendMessageRequestCaptor.capture()); Map attributes = sendMessageRequestCaptor.getValue().getMessageAttributes(); - Assert.assertTrue(attributes.keySet().contains(SQSExtendedClientConstants.RESERVED_ATTRIBUTE_NAME)); - Assert.assertFalse(attributes.keySet().contains(AmazonSQSExtendedClient.LEGACY_RESERVED_ATTRIBUTE_NAME)); + assertTrue(attributes.containsKey(SQSExtendedClientConstants.RESERVED_ATTRIBUTE_NAME)); + assertFalse(attributes.containsKey(AmazonSQSExtendedClient.LEGACY_RESERVED_ATTRIBUTE_NAME)); } @Test public void testWhenSendSmallMessageThenS3IsNotUsed() { - int messageLength = SQS_SIZE_LIMIT; - String messageBody = generateStringWithLength(messageLength); + String messageBody = generateStringWithLength(SQS_SIZE_LIMIT); SendMessageRequest messageRequest = new SendMessageRequest(SQS_QUEUE_URL, messageBody); extendedSqsWithDefaultConfig.sendMessage(messageRequest); @@ -258,8 +268,7 @@ public void testWhenSendSmallMessageThenS3IsNotUsed() { @Test public void testWhenSendMessageWithLargePayloadSupportDisabledThenS3IsNotUsedAndSqsBackendIsResponsibleToFailIt() { - int messageLength = MORE_THAN_SQS_SIZE_LIMIT; - String messageBody = generateStringWithLength(messageLength); + String messageBody = generateStringWithLength(MORE_THAN_SQS_SIZE_LIMIT); ExtendedClientConfiguration extendedClientConfiguration = new ExtendedClientConfiguration() .withPayloadSupportDisabled(); AmazonSQS sqsExtended = spy(new AmazonSQSExtendedClient(mockSqsBackend, extendedClientConfiguration)); @@ -273,8 +282,7 @@ public void testWhenSendMessageWithLargePayloadSupportDisabledThenS3IsNotUsedAnd @Test public void testWhenSendMessageWithAlwaysThroughS3AndMessageIsSmallThenItIsStillStoredInS3() { - int messageLength = LESS_THAN_SQS_SIZE_LIMIT; - String messageBody = generateStringWithLength(messageLength); + String messageBody = generateStringWithLength(LESS_THAN_SQS_SIZE_LIMIT); ExtendedClientConfiguration extendedClientConfiguration = new ExtendedClientConfiguration() .withPayloadSupportEnabled(mockS3, S3_BUCKET_NAME).withAlwaysThroughS3(true); AmazonSQS sqsExtended = spy(new AmazonSQSExtendedClient(mock(AmazonSQSClient.class), extendedClientConfiguration)); @@ -309,10 +317,10 @@ public void testReceiveMessageMultipleTimesDoesNotAdditionallyAlterReceiveMessag .withMessageAttributeNames(AmazonSQSExtendedClient.RESERVED_ATTRIBUTE_NAMES); extendedSqsWithDefaultConfig.receiveMessage(messageRequest); - Assert.assertEquals(expectedRequest, messageRequest); + assertEquals(expectedRequest, messageRequest); extendedSqsWithDefaultConfig.receiveMessage(messageRequest); - Assert.assertEquals(expectedRequest, messageRequest); + assertEquals(expectedRequest, messageRequest); } @Test @@ -326,7 +334,7 @@ public void testReceiveMessage_when_MessageIsLarge_ReservedAttributeUsed() throw } @Test - public void testReceiveMessage_when_MessageIsSmall() throws Exception { + public void testReceiveMessage_when_MessageIsSmall() { String expectedMessageAttributeName = "AnyMessageAttribute"; String expectedMessage = "SmallMessage"; Message message = new Message().addMessageAttributesEntry(expectedMessageAttributeName, mock(MessageAttributeValue.class)); @@ -337,10 +345,10 @@ public void testReceiveMessage_when_MessageIsSmall() throws Exception { ReceiveMessageResult actualReceiveMessageResult = extendedSqsWithDefaultConfig.receiveMessage(messageRequest); Message actualMessage = actualReceiveMessageResult.getMessages().get(0); - Assert.assertEquals(expectedMessage, actualMessage.getBody()); - Assert.assertTrue(actualMessage.getMessageAttributes().keySet().contains(expectedMessageAttributeName)); - Assert.assertFalse(actualMessage.getMessageAttributes().keySet().containsAll(AmazonSQSExtendedClient.RESERVED_ATTRIBUTE_NAMES)); - verifyZeroInteractions(mockS3); + assertEquals(expectedMessage, actualMessage.getBody()); + assertTrue(actualMessage.getMessageAttributes().containsKey(expectedMessageAttributeName)); + assertFalse(actualMessage.getMessageAttributes().keySet().containsAll(AmazonSQSExtendedClient.RESERVED_ATTRIBUTE_NAMES)); + verifyNoInteractions(mockS3); } @Test @@ -361,7 +369,7 @@ public void testWhenMessageBatchIsSentThenOnlyMessagesLargerThanThresholdAreStor 1000_000 }; - List batchEntries = new ArrayList(); + List batchEntries = new ArrayList<>(); for (int i = 0; i < 10; i++) { SendMessageBatchRequestEntry entry = new SendMessageBatchRequestEntry(); int messageLength = messageLengthForCounter[i]; @@ -380,8 +388,7 @@ public void testWhenMessageBatchIsSentThenOnlyMessagesLargerThanThresholdAreStor @Test public void testWhenSmallMessageIsSentThenNoAttributeIsAdded() { - int messageLength = LESS_THAN_SQS_SIZE_LIMIT; - String messageBody = generateStringWithLength(messageLength); + String messageBody = generateStringWithLength(LESS_THAN_SQS_SIZE_LIMIT); SendMessageRequest messageRequest = new SendMessageRequest(SQS_QUEUE_URL, messageBody); extendedSqsWithDefaultConfig.sendMessage(messageRequest); @@ -390,7 +397,7 @@ public void testWhenSmallMessageIsSentThenNoAttributeIsAdded() { verify(mockSqsBackend).sendMessage(sendMessageRequestCaptor.capture()); Map attributes = sendMessageRequestCaptor.getValue().getMessageAttributes(); - Assert.assertTrue(attributes.isEmpty()); + assertTrue(attributes.isEmpty()); } @Test @@ -405,8 +412,8 @@ public void testWhenLargeMessageIsSentThenAttributeWithPayloadSizeIsAdded() { verify(mockSqsBackend).sendMessage(sendMessageRequestCaptor.capture()); Map attributes = sendMessageRequestCaptor.getValue().getMessageAttributes(); - Assert.assertEquals("Number", attributes.get(AmazonSQSExtendedClient.LEGACY_RESERVED_ATTRIBUTE_NAME).getDataType()); - Assert.assertEquals(messageLength, (int) Integer.valueOf(attributes.get(AmazonSQSExtendedClient.LEGACY_RESERVED_ATTRIBUTE_NAME).getStringValue())); + assertEquals("Number", attributes.get(AmazonSQSExtendedClient.LEGACY_RESERVED_ATTRIBUTE_NAME).getDataType()); + assertEquals(messageLength, Integer.parseInt(attributes.get(AmazonSQSExtendedClient.LEGACY_RESERVED_ATTRIBUTE_NAME).getStringValue())); } @Test @@ -428,12 +435,12 @@ public void testWhenIgnorePayloadNotFoundIsSentThenNotFoundKeysInS3AreDeletedInS AmazonSQS sqsExtended = spy(new AmazonSQSExtendedClient(mockSqsBackend, extendedClientConfiguration)); ReceiveMessageRequest messageRequest = new ReceiveMessageRequest().withQueueUrl(SQS_QUEUE_URL); ReceiveMessageResult actualReceiveMessageResult = sqsExtended.receiveMessage(messageRequest); - Assert.assertTrue(actualReceiveMessageResult.getMessages().isEmpty()); + assertTrue(actualReceiveMessageResult.getMessages().isEmpty()); ArgumentCaptor deleteMessageRequestArgumentCaptor = ArgumentCaptor.forClass(DeleteMessageRequest.class); verify(mockSqsBackend).deleteMessage(deleteMessageRequestArgumentCaptor.capture()); - Assert.assertEquals(SQS_QUEUE_URL, deleteMessageRequestArgumentCaptor.getValue().getQueueUrl()); - Assert.assertEquals("receipt-handle", deleteMessageRequestArgumentCaptor.getValue().getReceiptHandle()); + assertEquals(SQS_QUEUE_URL, deleteMessageRequestArgumentCaptor.getValue().getQueueUrl()); + assertEquals("receipt-handle", deleteMessageRequestArgumentCaptor.getValue().getReceiptHandle()); } @Test @@ -452,7 +459,7 @@ public void testWhenIgnorePayloadNotFoundIsNotSentThenNotFoundKeysInS3AreNotDele try { extendedSqsWithDefaultConfig.receiveMessage(messageRequest); - Assert.fail("exception should have been thrown"); + fail("exception should have been thrown"); } catch (AmazonServiceException e) { verify(mockSqsBackend, never()).deleteMessage(any(DeleteMessageRequest.class)); } @@ -470,8 +477,8 @@ public void testDefaultExtendedClientDeletesSmallMessage() { // then ArgumentCaptor deleteRequestCaptor = ArgumentCaptor.forClass(DeleteMessageRequest.class); verify(mockSqsBackend).deleteMessage(deleteRequestCaptor.capture()); - Assert.assertEquals(receiptHandle, deleteRequestCaptor.getValue().getReceiptHandle()); - verifyZeroInteractions(mockS3); + assertEquals(receiptHandle, deleteRequestCaptor.getValue().getReceiptHandle()); + verifyNoInteractions(mockS3); } @Test @@ -488,7 +495,7 @@ public void testDefaultExtendedClientDeletesObjectS3UponMessageDelete() { // then ArgumentCaptor deleteRequestCaptor = ArgumentCaptor.forClass(DeleteMessageRequest.class); verify(mockSqsBackend).deleteMessage(deleteRequestCaptor.capture()); - Assert.assertEquals(originalReceiptHandle, deleteRequestCaptor.getValue().getReceiptHandle()); + assertEquals(originalReceiptHandle, deleteRequestCaptor.getValue().getReceiptHandle()); verify(mockS3).deleteObject(eq(S3_BUCKET_NAME), eq(randomS3Key)); } @@ -511,8 +518,8 @@ public void testExtendedClientConfiguredDoesNotDeleteObjectFromS3UponDelete() { // then ArgumentCaptor deleteRequestCaptor = ArgumentCaptor.forClass(DeleteMessageRequest.class); verify(mockSqsBackend).deleteMessage(deleteRequestCaptor.capture()); - Assert.assertEquals(originalReceiptHandle, deleteRequestCaptor.getValue().getReceiptHandle()); - verifyZeroInteractions(mockS3); + assertEquals(originalReceiptHandle, deleteRequestCaptor.getValue().getReceiptHandle()); + verifyNoInteractions(mockS3); } @Test @@ -529,7 +536,7 @@ public void testExtendedClientConfiguredDoesNotDeletesObjectsFromS3UponDeleteBat // then verify(mockSqsBackend, times(1)).deleteMessageBatch(any(DeleteMessageBatchRequest.class)); - verifyZeroInteractions(mockS3); + verifyNoInteractions(mockS3); } @Test @@ -561,7 +568,7 @@ public void testWhenSendMessageWIthCannedAccessControlListDefined() { verify(mockS3).putObject(captor.capture()); - Assert.assertEquals(expected, captor.getValue().getCannedAcl()); + assertEquals(expected, captor.getValue().getCannedAcl()); } private void testReceiveMessage_when_MessageIsLarge(String reservedAttributeName) throws Exception { @@ -578,8 +585,8 @@ private void testReceiveMessage_when_MessageIsLarge(String reservedAttributeName ReceiveMessageResult actualReceiveMessageResult = extendedSqsWithDefaultConfig.receiveMessage(messageRequest); Message actualMessage = actualReceiveMessageResult.getMessages().get(0); - Assert.assertEquals(expectedMessage, actualMessage.getBody()); - Assert.assertFalse(actualMessage.getMessageAttributes().keySet().containsAll(AmazonSQSExtendedClient.RESERVED_ATTRIBUTE_NAMES)); + assertEquals(expectedMessage, actualMessage.getBody()); + assertFalse(actualMessage.getMessageAttributes().keySet().containsAll(AmazonSQSExtendedClient.RESERVED_ATTRIBUTE_NAMES)); verify(mockS3, times(1)).getObject(isA(GetObjectRequest.class)); } diff --git a/src/test/java/com/amazon/sqs/javamessaging/ExtendedClientConfigurationTest.java b/src/test/java/com/amazon/sqs/javamessaging/ExtendedClientConfigurationTest.java index 1ff48be..b306319 100644 --- a/src/test/java/com/amazon/sqs/javamessaging/ExtendedClientConfigurationTest.java +++ b/src/test/java/com/amazon/sqs/javamessaging/ExtendedClientConfigurationTest.java @@ -18,19 +18,27 @@ import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.model.PutObjectRequest; import com.amazonaws.services.s3.model.SSEAwsKeyManagementParams; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import static org.mockito.Mockito.*; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNotSame; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.isA; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; /** * Tests the ExtendedClientConfiguration class. */ public class ExtendedClientConfigurationTest { - private static String s3BucketName = "test-bucket-name"; - private static String s3ServerSideEncryptionKMSKeyId = "test-customer-managed-kms-key-id"; + private static final String s3BucketName = "test-bucket-name"; + private static final String s3ServerSideEncryptionKMSKeyId = "test-customer-managed-kms-key-id"; @Test public void testCopyConstructor() { @@ -48,15 +56,15 @@ public void testCopyConstructor() { ExtendedClientConfiguration newExtendedClientConfig = new ExtendedClientConfiguration(extendedClientConfig); - Assert.assertEquals(s3, newExtendedClientConfig.getAmazonS3Client()); - Assert.assertEquals(s3BucketName, newExtendedClientConfig.getS3BucketName()); - Assert.assertEquals(s3ServerSideEncryptionKMSKeyId, newExtendedClientConfig.getSSEAwsKeyManagementParams().getAwsKmsKeyId()); - Assert.assertTrue(newExtendedClientConfig.isPayloadSupportEnabled()); - Assert.assertEquals(doesCleanupS3Payload, newExtendedClientConfig.doesCleanupS3Payload()); - Assert.assertEquals(alwaysThroughS3, newExtendedClientConfig.isAlwaysThroughS3()); - Assert.assertEquals(messageSizeThreshold, newExtendedClientConfig.getPayloadSizeThreshold()); + assertEquals(s3, newExtendedClientConfig.getAmazonS3Client()); + assertEquals(s3BucketName, newExtendedClientConfig.getS3BucketName()); + assertEquals(s3ServerSideEncryptionKMSKeyId, newExtendedClientConfig.getSSEAwsKeyManagementParams().getAwsKmsKeyId()); + assertTrue(newExtendedClientConfig.isPayloadSupportEnabled()); + assertEquals(doesCleanupS3Payload, newExtendedClientConfig.doesCleanupS3Payload()); + assertEquals(alwaysThroughS3, newExtendedClientConfig.isAlwaysThroughS3()); + assertEquals(messageSizeThreshold, newExtendedClientConfig.getPayloadSizeThreshold()); - Assert.assertNotSame(newExtendedClientConfig, extendedClientConfig); + assertNotSame(newExtendedClientConfig, extendedClientConfig); } @Test @@ -65,10 +73,10 @@ public void testLargePayloadSupportEnabledWithDefaultDeleteFromS3Config() { ExtendedClientConfiguration extendedClientConfiguration = new ExtendedClientConfiguration(); extendedClientConfiguration.setPayloadSupportEnabled(s3, s3BucketName); - Assert.assertTrue(extendedClientConfiguration.isPayloadSupportEnabled()); - Assert.assertTrue(extendedClientConfiguration.doesCleanupS3Payload()); - Assert.assertNotNull(extendedClientConfiguration.getAmazonS3Client()); - Assert.assertEquals(s3BucketName, extendedClientConfiguration.getS3BucketName()); + assertTrue(extendedClientConfiguration.isPayloadSupportEnabled()); + assertTrue(extendedClientConfiguration.doesCleanupS3Payload()); + assertNotNull(extendedClientConfiguration.getAmazonS3Client()); + assertEquals(s3BucketName, extendedClientConfiguration.getS3BucketName()); } @@ -79,10 +87,10 @@ public void testLargePayloadSupportEnabledWithDeleteFromS3Enabled() { ExtendedClientConfiguration extendedClientConfiguration = new ExtendedClientConfiguration(); extendedClientConfiguration.setPayloadSupportEnabled(s3, s3BucketName, true); - Assert.assertTrue(extendedClientConfiguration.isPayloadSupportEnabled()); - Assert.assertTrue(extendedClientConfiguration.doesCleanupS3Payload()); - Assert.assertNotNull(extendedClientConfiguration.getAmazonS3Client()); - Assert.assertEquals(s3BucketName, extendedClientConfiguration.getS3BucketName()); + assertTrue(extendedClientConfiguration.isPayloadSupportEnabled()); + assertTrue(extendedClientConfiguration.doesCleanupS3Payload()); + assertNotNull(extendedClientConfiguration.getAmazonS3Client()); + assertEquals(s3BucketName, extendedClientConfiguration.getS3BucketName()); } @Test @@ -91,10 +99,10 @@ public void testLargePayloadSupportEnabledWithDeleteFromS3Disabled() { ExtendedClientConfiguration extendedClientConfiguration = new ExtendedClientConfiguration(); extendedClientConfiguration.setPayloadSupportEnabled(s3, s3BucketName, false); - Assert.assertTrue(extendedClientConfiguration.isPayloadSupportEnabled()); - Assert.assertFalse(extendedClientConfiguration.doesCleanupS3Payload()); - Assert.assertNotNull(extendedClientConfiguration.getAmazonS3Client()); - Assert.assertEquals(s3BucketName, extendedClientConfiguration.getS3BucketName()); + assertTrue(extendedClientConfiguration.isPayloadSupportEnabled()); + assertFalse(extendedClientConfiguration.doesCleanupS3Payload()); + assertNotNull(extendedClientConfiguration.getAmazonS3Client()); + assertEquals(s3BucketName, extendedClientConfiguration.getS3BucketName()); } @Test @@ -108,18 +116,18 @@ public void testCopyConstructorDeprecated() { ExtendedClientConfiguration extendedClientConfig = new ExtendedClientConfiguration(); - extendedClientConfig.withLargePayloadSupportEnabled(s3, s3BucketName) - .withAlwaysThroughS3(alwaysThroughS3).withMessageSizeThreshold(messageSizeThreshold); + extendedClientConfig.withPayloadSupportEnabled(s3, s3BucketName) + .withAlwaysThroughS3(alwaysThroughS3).withPayloadSizeThreshold(messageSizeThreshold); ExtendedClientConfiguration newExtendedClientConfig = new ExtendedClientConfiguration(extendedClientConfig); - Assert.assertEquals(s3, newExtendedClientConfig.getAmazonS3Client()); - Assert.assertEquals(s3BucketName, newExtendedClientConfig.getS3BucketName()); - Assert.assertTrue(newExtendedClientConfig.isLargePayloadSupportEnabled()); - Assert.assertEquals(alwaysThroughS3, newExtendedClientConfig.isAlwaysThroughS3()); - Assert.assertEquals(messageSizeThreshold, newExtendedClientConfig.getMessageSizeThreshold()); + assertEquals(s3, newExtendedClientConfig.getAmazonS3Client()); + assertEquals(s3BucketName, newExtendedClientConfig.getS3BucketName()); + assertTrue(newExtendedClientConfig.isPayloadSupportEnabled()); + assertEquals(alwaysThroughS3, newExtendedClientConfig.isAlwaysThroughS3()); + assertEquals(messageSizeThreshold, newExtendedClientConfig.getPayloadSizeThreshold()); - Assert.assertNotSame(newExtendedClientConfig, extendedClientConfig); + assertNotSame(newExtendedClientConfig, extendedClientConfig); } @Test @@ -129,11 +137,11 @@ public void testLargePayloadSupportEnabled() { when(s3.putObject(isA(PutObjectRequest.class))).thenReturn(null); ExtendedClientConfiguration extendedClientConfiguration = new ExtendedClientConfiguration(); - extendedClientConfiguration.setLargePayloadSupportEnabled(s3, s3BucketName); + extendedClientConfiguration.setPayloadSupportEnabled(s3, s3BucketName); - Assert.assertTrue(extendedClientConfiguration.isLargePayloadSupportEnabled()); - Assert.assertNotNull(extendedClientConfiguration.getAmazonS3Client()); - Assert.assertEquals(s3BucketName, extendedClientConfiguration.getS3BucketName()); + assertTrue(extendedClientConfiguration.isPayloadSupportEnabled()); + assertNotNull(extendedClientConfiguration.getAmazonS3Client()); + assertEquals(s3BucketName, extendedClientConfiguration.getS3BucketName()); } @@ -144,10 +152,10 @@ public void testDisableLargePayloadSupport() { when(s3.putObject(isA(PutObjectRequest.class))).thenReturn(null); ExtendedClientConfiguration extendedClientConfiguration = new ExtendedClientConfiguration(); - extendedClientConfiguration.setLargePayloadSupportDisabled(); + extendedClientConfiguration.setPayloadSupportDisabled(); - Assert.assertNull(extendedClientConfiguration.getAmazonS3Client()); - Assert.assertNull(extendedClientConfiguration.getS3BucketName()); + assertNull(extendedClientConfiguration.getAmazonS3Client()); + assertNull(extendedClientConfiguration.getS3BucketName()); verify(s3, never()).putObject(isA(PutObjectRequest.class)); } @@ -157,12 +165,12 @@ public void testMessageSizeThreshold() { ExtendedClientConfiguration extendedClientConfiguration = new ExtendedClientConfiguration(); - Assert.assertEquals(SQSExtendedClientConstants.DEFAULT_MESSAGE_SIZE_THRESHOLD, - extendedClientConfiguration.getMessageSizeThreshold()); + assertEquals(SQSExtendedClientConstants.DEFAULT_MESSAGE_SIZE_THRESHOLD, + extendedClientConfiguration.getPayloadSizeThreshold()); int messageLength = 1000; - extendedClientConfiguration.setMessageSizeThreshold(messageLength); - Assert.assertEquals(messageLength, extendedClientConfiguration.getMessageSizeThreshold()); + extendedClientConfiguration.setPayloadSizeThreshold(messageLength); + assertEquals(messageLength, extendedClientConfiguration.getPayloadSizeThreshold()); } }