|
19 | 19 | import java.util.stream.Collectors;
|
20 | 20 | import java.util.stream.IntStream;
|
21 | 21 |
|
| 22 | +import com.amazonaws.AmazonServiceException; |
22 | 23 | import com.amazonaws.services.s3.AmazonS3;
|
23 | 24 | import com.amazonaws.services.s3.model.*;
|
24 | 25 | import com.amazonaws.services.sqs.AmazonSQS;
|
|
33 | 34 | import software.amazon.payloadoffloading.PayloadS3Pointer;
|
34 | 35 |
|
35 | 36 | import static org.mockito.Matchers.eq;
|
| 37 | +import static org.mockito.Mockito.doThrow; |
36 | 38 | import static org.mockito.Mockito.mock;
|
37 | 39 | import static org.mockito.Mockito.isA;
|
38 | 40 | import static org.mockito.Mockito.when;
|
@@ -407,6 +409,55 @@ public void testWhenLargeMessageIsSentThenAttributeWithPayloadSizeIsAdded() {
|
407 | 409 | Assert.assertEquals(messageLength, (int) Integer.valueOf(attributes.get(AmazonSQSExtendedClient.LEGACY_RESERVED_ATTRIBUTE_NAME).getStringValue()));
|
408 | 410 | }
|
409 | 411 |
|
| 412 | + @Test |
| 413 | + public void testWhenIgnorePayloadNotFoundIsSentThenNotFoundKeysInS3AreDeletedInSQS() { |
| 414 | + ExtendedClientConfiguration extendedClientConfiguration = new ExtendedClientConfiguration() |
| 415 | + .withPayloadSupportEnabled(mockS3, S3_BUCKET_NAME).withIgnorePayloadNotFound(true); |
| 416 | + |
| 417 | + AmazonServiceException mockException = mock(AmazonServiceException.class); |
| 418 | + when(mockException.getErrorCode()).thenReturn("NoSuchKey"); |
| 419 | + |
| 420 | + Message message = new Message().addMessageAttributesEntry(SQSExtendedClientConstants.RESERVED_ATTRIBUTE_NAME, mock(MessageAttributeValue.class)); |
| 421 | + String pointer = new PayloadS3Pointer(S3_BUCKET_NAME, "S3Key").toJson(); |
| 422 | + message.setBody(pointer); |
| 423 | + message.setReceiptHandle("receipt-handle"); |
| 424 | + |
| 425 | + when(mockSqsBackend.receiveMessage(isA(ReceiveMessageRequest.class))).thenReturn(new ReceiveMessageResult().withMessages(message)); |
| 426 | + doThrow(mockException).when(mockS3).getObject(any(GetObjectRequest.class)); |
| 427 | + |
| 428 | + AmazonSQS sqsExtended = spy(new AmazonSQSExtendedClient(mockSqsBackend, extendedClientConfiguration)); |
| 429 | + ReceiveMessageRequest messageRequest = new ReceiveMessageRequest().withQueueUrl(SQS_QUEUE_URL); |
| 430 | + ReceiveMessageResult actualReceiveMessageResult = sqsExtended.receiveMessage(messageRequest); |
| 431 | + Assert.assertTrue(actualReceiveMessageResult.getMessages().isEmpty()); |
| 432 | + |
| 433 | + ArgumentCaptor<DeleteMessageRequest> deleteMessageRequestArgumentCaptor = ArgumentCaptor.forClass(DeleteMessageRequest.class); |
| 434 | + verify(mockSqsBackend).deleteMessage(deleteMessageRequestArgumentCaptor.capture()); |
| 435 | + Assert.assertEquals(SQS_QUEUE_URL, deleteMessageRequestArgumentCaptor.getValue().getQueueUrl()); |
| 436 | + Assert.assertEquals("receipt-handle", deleteMessageRequestArgumentCaptor.getValue().getReceiptHandle()); |
| 437 | + } |
| 438 | + |
| 439 | + @Test |
| 440 | + public void testWhenIgnorePayloadNotFoundIsNotSentThenNotFoundKeysInS3AreNotDeletedInSQS() { |
| 441 | + AmazonServiceException mockException = mock(AmazonServiceException.class); |
| 442 | + when(mockException.getErrorCode()).thenReturn("NoSuchKey"); |
| 443 | + |
| 444 | + Message message = new Message().addMessageAttributesEntry(SQSExtendedClientConstants.RESERVED_ATTRIBUTE_NAME, mock(MessageAttributeValue.class)); |
| 445 | + String pointer = new PayloadS3Pointer(S3_BUCKET_NAME, "S3Key").toJson(); |
| 446 | + message.setBody(pointer); |
| 447 | + |
| 448 | + when(mockSqsBackend.receiveMessage(isA(ReceiveMessageRequest.class))).thenReturn(new ReceiveMessageResult().withMessages(message)); |
| 449 | + |
| 450 | + doThrow(mockException).when(mockS3).getObject(any(GetObjectRequest.class)); |
| 451 | + ReceiveMessageRequest messageRequest = new ReceiveMessageRequest(); |
| 452 | + |
| 453 | + try { |
| 454 | + extendedSqsWithDefaultConfig.receiveMessage(messageRequest); |
| 455 | + Assert.fail("exception should have been thrown"); |
| 456 | + } catch (AmazonServiceException e) { |
| 457 | + verify(mockSqsBackend, never()).deleteMessage(any(DeleteMessageRequest.class)); |
| 458 | + } |
| 459 | + } |
| 460 | + |
410 | 461 | @Test
|
411 | 462 | public void testDefaultExtendedClientDeletesSmallMessage() {
|
412 | 463 | // given
|
|
0 commit comments