|
17 | 17 |
|
18 | 18 | import java.util.ArrayList;
|
19 | 19 | import java.util.Arrays;
|
| 20 | +import java.util.Collections; |
| 21 | +import java.util.HashMap; |
20 | 22 | import java.util.List;
|
21 | 23 | import java.util.Map;
|
22 | 24 |
|
| 25 | +import com.amazonaws.AmazonServiceException; |
23 | 26 | import com.amazonaws.services.s3.AmazonS3;
|
| 27 | +import com.amazonaws.services.s3.model.GetObjectRequest; |
24 | 28 | import com.amazonaws.services.s3.model.PutObjectRequest;
|
25 | 29 | import com.amazonaws.services.sqs.AmazonSQS;
|
26 | 30 | import com.amazonaws.services.sqs.AmazonSQSClient;
|
| 31 | +import com.amazonaws.services.sqs.model.DeleteMessageRequest; |
| 32 | +import com.amazonaws.services.sqs.model.Message; |
27 | 33 | import com.amazonaws.services.sqs.model.MessageAttributeValue;
|
28 | 34 | import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
|
29 | 35 | import com.amazonaws.services.sqs.model.ReceiveMessageResult;
|
|
36 | 42 | import org.junit.Test;
|
37 | 43 | import org.mockito.ArgumentCaptor;
|
38 | 44 |
|
| 45 | +import static org.mockito.Matchers.any; |
39 | 46 | import static org.mockito.Matchers.eq;
|
| 47 | +import static org.mockito.Mockito.doThrow; |
40 | 48 | import static org.mockito.Mockito.isA;
|
41 | 49 | import static org.mockito.Mockito.mock;
|
42 | 50 | import static org.mockito.Mockito.never;
|
@@ -224,6 +232,39 @@ public void testWhenLargeMessgaeIsSentThenAttributeWithPayloadSizeIsAdded() {
|
224 | 232 | Assert.assertEquals(messageLength, (int)Integer.valueOf(attributes.get(SQSExtendedClientConstants.RESERVED_ATTRIBUTE_NAME).getStringValue()));
|
225 | 233 | }
|
226 | 234 |
|
| 235 | + @Test |
| 236 | + public void testWhenIgnorePayloadNotFoundIsSentThenNotFoundKeysInS3AreDeletedInSQS() throws Exception { |
| 237 | + ExtendedClientConfiguration extendedClientConfiguration = new ExtendedClientConfiguration() |
| 238 | + .withIgnorePayloadNotFound(true).withLargePayloadSupportEnabled(mockS3, S3_BUCKET_NAME); |
| 239 | + |
| 240 | + AmazonServiceException mockException = mock(AmazonServiceException.class); |
| 241 | + when(mockException.getErrorCode()).thenReturn("NoSuchKey"); |
| 242 | + |
| 243 | + Message mockMessage = mock(Message.class); |
| 244 | + MessageS3Pointer messageS3Pointer = new MessageS3Pointer(); |
| 245 | + when(mockMessage.getBody()).thenReturn(new JsonDataConverter().serializeToJson(messageS3Pointer)); |
| 246 | + when(mockMessage.getReceiptHandle()).thenReturn("receipt-handle"); |
| 247 | + Map<String, MessageAttributeValue> messageAttributes = new HashMap<>(); |
| 248 | + messageAttributes.put(SQSExtendedClientConstants.RESERVED_ATTRIBUTE_NAME, new MessageAttributeValue()); |
| 249 | + when(mockMessage.getMessageAttributes()).thenReturn(messageAttributes); |
| 250 | + |
| 251 | + ReceiveMessageResult mockReceiveMessageResult = mock(ReceiveMessageResult.class); |
| 252 | + when(mockSqsBackend.receiveMessage(any(ReceiveMessageRequest.class))).thenReturn(mockReceiveMessageResult); |
| 253 | + when(mockReceiveMessageResult.getMessages()).thenReturn(Collections.singletonList(mockMessage)); |
| 254 | + |
| 255 | + doThrow(mockException).when(mockS3).getObject(any(GetObjectRequest.class)); |
| 256 | + |
| 257 | + AmazonSQS sqsExtended = spy(new AmazonSQSExtendedClient(mockSqsBackend, extendedClientConfiguration)); |
| 258 | + |
| 259 | + sqsExtended.receiveMessage(SQS_QUEUE_URL); |
| 260 | + |
| 261 | + ArgumentCaptor<DeleteMessageRequest> deleteMessageRequestArgumentCaptor = ArgumentCaptor.forClass(DeleteMessageRequest.class); |
| 262 | + verify(mockSqsBackend).deleteMessage(deleteMessageRequestArgumentCaptor.capture()); |
| 263 | + |
| 264 | + Assert.assertEquals(SQS_QUEUE_URL, deleteMessageRequestArgumentCaptor.getValue().getQueueUrl()); |
| 265 | + Assert.assertEquals("receipt-handle", deleteMessageRequestArgumentCaptor.getValue().getReceiptHandle()); |
| 266 | + } |
| 267 | + |
227 | 268 | private String generateStringWithLength(int messageLength) {
|
228 | 269 | char[] charArray = new char[messageLength];
|
229 | 270 | Arrays.fill(charArray, 'x');
|
|
0 commit comments