|
1 | 1 | package software.amazon.lambda.powertools.sqs.internal;
|
2 | 2 |
|
3 | 3 | import java.io.IOException;
|
4 |
| -import java.time.LocalDateTime; |
5 | 4 | import java.util.HashMap;
|
6 |
| -import java.util.function.Consumer; |
7 |
| - |
8 | 5 | import com.amazonaws.services.lambda.runtime.Context;
|
9 | 6 | import com.amazonaws.services.lambda.runtime.RequestHandler;
|
10 | 7 | import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
|
|
15 | 12 | import org.junit.jupiter.api.Test;
|
16 | 13 | import org.mockito.ArgumentCaptor;
|
17 | 14 | import software.amazon.awssdk.services.sqs.SqsClient;
|
| 15 | +import software.amazon.awssdk.services.sqs.model.BatchResultErrorEntry; |
18 | 16 | import software.amazon.awssdk.services.sqs.model.DeleteMessageBatchRequest;
|
19 | 17 | import software.amazon.awssdk.services.sqs.model.GetQueueAttributesRequest;
|
20 | 18 | import software.amazon.awssdk.services.sqs.model.GetQueueAttributesResponse;
|
21 | 19 | import software.amazon.awssdk.services.sqs.model.QueueAttributeName;
|
22 | 20 | import software.amazon.awssdk.services.sqs.model.SendMessageBatchRequest;
|
| 21 | +import software.amazon.awssdk.services.sqs.model.SendMessageBatchResponse; |
23 | 22 | import software.amazon.lambda.powertools.sqs.SQSBatchProcessingException;
|
24 | 23 | import software.amazon.lambda.powertools.sqs.handlers.LambdaHandlerApiGateway;
|
25 | 24 | import software.amazon.lambda.powertools.sqs.handlers.PartialBatchFailureSuppressedHandler;
|
|
30 | 29 |
|
31 | 30 | import static org.assertj.core.api.Assertions.assertThat;
|
32 | 31 | import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
33 |
| -import static org.assertj.core.api.Assertions.in; |
34 | 32 | import static org.mockito.ArgumentMatchers.any;
|
35 | 33 | import static org.mockito.Mockito.mock;
|
36 | 34 | import static org.mockito.Mockito.never;
|
@@ -137,6 +135,38 @@ void shouldBatchProcessAndMoveNonRetryableExceptionToDlq() {
|
137 | 135 | verify(sqsClient).sendMessageBatch(any(SendMessageBatchRequest.class));
|
138 | 136 | }
|
139 | 137 |
|
| 138 | + @Test |
| 139 | + void shouldBatchProcessAndThrowExceptionForNonRetryableExceptionWhenMoveToDlqReturnFailedResponse() { |
| 140 | + requestHandler = new SqsMessageHandlerWithNonRetryableHandler(); |
| 141 | + event.getRecords().get(0).setMessageId(""); |
| 142 | + |
| 143 | + when(sqsClient.sendMessageBatch(any(SendMessageBatchRequest.class))).thenReturn(SendMessageBatchResponse.builder() |
| 144 | + .failed(BatchResultErrorEntry.builder() |
| 145 | + .message("Permission Error") |
| 146 | + .code("KMS.AccessDeniedException") |
| 147 | + .senderFault(true) |
| 148 | + .build()) |
| 149 | + .build()); |
| 150 | + |
| 151 | + HashMap<QueueAttributeName, String> attributes = new HashMap<>(); |
| 152 | + |
| 153 | + attributes.put(QueueAttributeName.REDRIVE_POLICY, "{\n" + |
| 154 | + " \"deadLetterTargetArn\": \"arn:aws:sqs:us-east-2:123456789012:retry-queue\",\n" + |
| 155 | + " \"maxReceiveCount\": 2\n" + |
| 156 | + "}"); |
| 157 | + |
| 158 | + when(sqsClient.getQueueAttributes(any(GetQueueAttributesRequest.class))).thenReturn(GetQueueAttributesResponse.builder() |
| 159 | + .attributes(attributes) |
| 160 | + .build()); |
| 161 | + |
| 162 | + Assertions.assertThatExceptionOfType(SQSBatchProcessingException.class). |
| 163 | + isThrownBy(() -> requestHandler.handleRequest(event, context)); |
| 164 | + |
| 165 | + verify(interactionClient).listQueues(); |
| 166 | + verify(sqsClient).sendMessageBatch(any(SendMessageBatchRequest.class)); |
| 167 | + verify(sqsClient).deleteMessageBatch(any(DeleteMessageBatchRequest.class)); |
| 168 | + } |
| 169 | + |
140 | 170 | @Test
|
141 | 171 | void shouldBatchProcessAndDeleteNonRetryableExceptionMessage() {
|
142 | 172 | requestHandler = new SqsMessageHandlerWithNonRetryableHandlerWithDelete();
|
|
0 commit comments