|
26 | 26 | import static java.util.concurrent.TimeUnit.SECONDS; |
27 | 27 | import static org.assertj.core.api.Assertions.assertThat; |
28 | 28 |
|
| 29 | +import java.util.Arrays; |
| 30 | + |
29 | 31 | import io.awspring.cloud.sqs.operations.SqsTemplate; |
30 | 32 | import io.opentelemetry.api.trace.SpanKind; |
31 | 33 | import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; |
@@ -176,4 +178,45 @@ void sqsListener() throws Exception { |
176 | 178 | + "/000000000000/test-queue"), |
177 | 179 | satisfies(AWS_REQUEST_ID, val -> val.isInstanceOf(String.class))))); |
178 | 180 | } |
| 181 | + |
| 182 | + @Test |
| 183 | + void sqsBatchListener() throws Exception { |
| 184 | + String messageContent1 = "hello"; |
| 185 | + String messageContent2 = "world"; |
| 186 | + CompletableFuture<java.util.List<String>> messageFuture = new CompletableFuture<>(); |
| 187 | + AwsSqsTestApplication.batchMessageHandler = |
| 188 | + strings -> testing.runWithSpan("callback", () -> messageFuture.complete(strings)); |
| 189 | + |
| 190 | + testing.runWithSpan( |
| 191 | + "parent", |
| 192 | + () -> |
| 193 | + sqsTemplate.sendMany( |
| 194 | + "test-batch-queue", Arrays.asList(messageContent1, messageContent2))); |
| 195 | + |
| 196 | + java.util.List<String> result = messageFuture.get(10, SECONDS); |
| 197 | + assertThat(result).containsExactlyInAnyOrder(messageContent1, messageContent2); |
| 198 | + |
| 199 | + testing.waitAndAssertTraces( |
| 200 | + trace -> |
| 201 | + trace.hasSpansSatisfyingExactly( |
| 202 | + span -> span.hasName("parent").hasKind(SpanKind.INTERNAL).hasNoParent(), |
| 203 | + span -> |
| 204 | + span.hasName("Sqs.GetQueueUrl") |
| 205 | + .hasKind(SpanKind.CLIENT) |
| 206 | + .hasParent(trace.getSpan(0)), |
| 207 | + span -> |
| 208 | + span.hasName("test-batch-queue publish") |
| 209 | + .hasKind(SpanKind.PRODUCER) |
| 210 | + .hasParent(trace.getSpan(0)), |
| 211 | + span -> |
| 212 | + span.hasName("test-batch-queue process") |
| 213 | + .hasKind(SpanKind.CONSUMER) |
| 214 | + .hasParent(trace.getSpan(2)), |
| 215 | + span -> |
| 216 | + span.hasName("callback").hasKind(SpanKind.INTERNAL).hasParent(trace.getSpan(3)), |
| 217 | + span -> |
| 218 | + span.hasName("Sqs.DeleteMessageBatch") |
| 219 | + .hasKind(SpanKind.CLIENT) |
| 220 | + .hasParent(trace.getSpan(2)))); |
| 221 | + } |
179 | 222 | } |
0 commit comments