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());
+ });
}
}