This is an automated email from the ASF dual-hosted git repository. jamesnetherton pushed a commit to branch camel-main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit 5fb39fc5918163e284bc6765d38fa8bdcdaca566 Author: JiriOndrusek <ondrusek.j...@gmail.com> AuthorDate: Mon Jan 10 13:26:13 2022 +0100 deadLetterChannel does not work in BaseRouteBuilder configure method #3436 --- .../it/Aws2SqsQuarkusClientTestEnvCustomizer.java | 3 ++ .../component/aws2/sqs/it/DeadLetterBuilder.java | 41 ++++++++++++++++++++++ .../quarkus/component/aws2/sqs/it/Aws2SqsTest.java | 20 +++++++++++ .../aws2/sqs/it/Aws2SqsTestEnvCustomizer.java | 23 +++++++++++- 4 files changed, 86 insertions(+), 1 deletion(-) diff --git a/integration-test-groups/aws2-quarkus-client/aws2-sqs/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsQuarkusClientTestEnvCustomizer.java b/integration-test-groups/aws2-quarkus-client/aws2-sqs/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsQuarkusClientTestEnvCustomizer.java index 361459f..64e290d 100644 --- a/integration-test-groups/aws2-quarkus-client/aws2-sqs/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsQuarkusClientTestEnvCustomizer.java +++ b/integration-test-groups/aws2-quarkus-client/aws2-sqs/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsQuarkusClientTestEnvCustomizer.java @@ -34,6 +34,9 @@ public class Aws2SqsQuarkusClientTestEnvCustomizer extends Aws2SqsTestEnvCustomi super.customize(envContext); + //remove camel properties for client creation to ensure that client is not created by camel component + envContext.removeClient(localstackServices()); + Map<String, String> envContextProperties = envContext.getProperies(); envContext.property("quarkus.sqs.aws.credentials.static-provider.access-key-id", envContext.getAccessKey()); diff --git a/integration-test-groups/aws2/aws2-sqs/src/main/java/org/apache/camel/quarkus/component/aws2/sqs/it/DeadLetterBuilder.java b/integration-test-groups/aws2/aws2-sqs/src/main/java/org/apache/camel/quarkus/component/aws2/sqs/it/DeadLetterBuilder.java new file mode 100644 index 0000000..6d611ef --- /dev/null +++ b/integration-test-groups/aws2/aws2-sqs/src/main/java/org/apache/camel/quarkus/component/aws2/sqs/it/DeadLetterBuilder.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.quarkus.component.aws2.sqs.it; + +import javax.enterprise.context.ApplicationScoped; + +import org.apache.camel.builder.RouteBuilder; +import org.eclipse.microprofile.config.ConfigProvider; + +@ApplicationScoped +public class DeadLetterBuilder extends RouteBuilder { + + @Override + public void configure() { + String name = ConfigProvider.getConfig().getValue("aws-sqs.failing-name", String.class); + String deadLetterName = ConfigProvider.getConfig().getValue("aws-sqs.deadletter-name", String.class); + errorHandler(deadLetterChannel("aws2-sqs://" + deadLetterName) + .log("Error processing message and sending to the Dead Letter Queue: Body: " + body()) + .useOriginalMessage()); + + from("aws2-sqs://" + name) + .process(e -> { + throw new IllegalArgumentException(); + }); + + } +} diff --git a/integration-test-groups/aws2/aws2-sqs/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTest.java b/integration-test-groups/aws2/aws2-sqs/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTest.java index b0a928b..87d924e 100644 --- a/integration-test-groups/aws2/aws2-sqs/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTest.java +++ b/integration-test-groups/aws2/aws2-sqs/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTest.java @@ -55,6 +55,14 @@ class Aws2SqsTest { return ConfigProvider.getConfig().getValue("aws-sqs.queue-name", String.class); } + private String getPredefinedFailingQueueName() { + return ConfigProvider.getConfig().getValue("aws-sqs.failing-name", String.class); + } + + private String getPredefinedDeadletterQueueName() { + return ConfigProvider.getConfig().getValue("aws-sqs.deadletter-name", String.class); + } + @AfterEach void purgeQueueAndWait() { String qName = getPredefinedQueueName(); @@ -96,6 +104,18 @@ class Aws2SqsTest { } @Test + void deadletter() { + final String failingQueueName = getPredefinedFailingQueueName(); + final String deadletterQueueName = getPredefinedDeadletterQueueName(); + + final String[] queues = listQueues(); + Assertions.assertTrue(Stream.of(queues).anyMatch(url -> url.contains(failingQueueName))); + + final String msg = sendSingleMessageToQueue(failingQueueName); + awaitMessageWithExpectedContentFromQueue(msg, deadletterQueueName); + } + + @Test void sqsDeleteMessage() { final String qName = getPredefinedQueueName(); sendSingleMessageToQueue(qName); diff --git a/integration-test-groups/aws2/aws2-sqs/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTestEnvCustomizer.java b/integration-test-groups/aws2/aws2-sqs/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTestEnvCustomizer.java index 43d078a..ca00184 100644 --- a/integration-test-groups/aws2/aws2-sqs/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTestEnvCustomizer.java +++ b/integration-test-groups/aws2/aws2-sqs/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTestEnvCustomizer.java @@ -38,6 +38,10 @@ public class Aws2SqsTestEnvCustomizer implements Aws2TestEnvCustomizer { /* SQS */ final String queueName = "camel-quarkus-" + RandomStringUtils.randomAlphanumeric(49).toLowerCase(Locale.ROOT); envContext.property("aws-sqs.queue-name", queueName); + final String failingQueueName = "camel-quarkus-" + RandomStringUtils.randomAlphanumeric(49).toLowerCase(Locale.ROOT); + envContext.property("aws-sqs.failing-name", failingQueueName); + final String deadletterQueueName = "camel-quarkus-" + RandomStringUtils.randomAlphanumeric(49).toLowerCase(Locale.ROOT); + envContext.property("aws-sqs.deadletter-name", deadletterQueueName); final SqsClient sqsClient = envContext.client(Service.SQS, SqsClient::builder); { @@ -46,7 +50,24 @@ public class Aws2SqsTestEnvCustomizer implements Aws2TestEnvCustomizer { .queueName(queueName) .build()) .queueUrl(); - envContext.closeable(() -> sqsClient.deleteQueue(DeleteQueueRequest.builder().queueUrl(queueUrl).build())); + + final String failingUrl = sqsClient.createQueue( + CreateQueueRequest.builder() + .queueName(failingQueueName) + .build()) + .queueUrl(); + + final String deadletterUrl = sqsClient.createQueue( + CreateQueueRequest.builder() + .queueName(deadletterQueueName) + .build()) + .queueUrl(); + + envContext.closeable(() -> { + sqsClient.deleteQueue(DeleteQueueRequest.builder().queueUrl(queueUrl).build()); + sqsClient.deleteQueue(DeleteQueueRequest.builder().queueUrl(failingUrl).build()); + sqsClient.deleteQueue(DeleteQueueRequest.builder().queueUrl(deadletterUrl).build()); + }); } }