You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2022/01/20 12:57:16 UTC

[camel-quarkus] 02/02: deadLetterChannel does not work in BaseRouteBuilder configure method #3436

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 e35c2c4e3cbc3e5a685fae34213eb2831e9ed51c
Author: JiriOndrusek <on...@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());
+            });
 
         }
     }