From cfd21c4a811956c7ef4301386af41c797b63de49 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Tue, 5 May 2026 23:07:07 +0200 Subject: [PATCH 1/2] CAMEL-23428: Fix flaky RabbitMQProducerInvalidExchangeIT test Co-Authored-By: Claude Opus 4.6 (1M context) --- .../integration/RabbitMQProducerInvalidExchangeIT.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/components/camel-spring-parent/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQProducerInvalidExchangeIT.java b/components/camel-spring-parent/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQProducerInvalidExchangeIT.java index efa4e5aef018c..51d11920dec99 100644 --- a/components/camel-spring-parent/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQProducerInvalidExchangeIT.java +++ b/components/camel-spring-parent/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQProducerInvalidExchangeIT.java @@ -50,7 +50,13 @@ public void testProducer() { final CamelExecutionException exception = Assertions.assertThrows(CamelExecutionException.class, () -> template.sendBody("direct:start", "Hello World")); - Assertions.assertInstanceOf(ShutdownSignalException.class, exception.getCause()); + // Spring AMQP may wrap ShutdownSignalException in AmqpException depending on timing + Throwable cause = exception.getCause(); + while (cause != null && !(cause instanceof ShutdownSignalException)) { + cause = cause.getCause(); + } + Assertions.assertInstanceOf(ShutdownSignalException.class, cause, + "Expected ShutdownSignalException in cause chain, but got: " + exception.getCause()); } @Override From 8049b332f64f7dadf48b6ebc37c08f8a2278ffe7 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 6 May 2026 10:29:52 +0200 Subject: [PATCH 2/2] CAMEL-23428: Use AssertJ hasRootCauseInstanceOf for better diagnostics Co-Authored-By: Claude Opus 4.6 (1M context) --- .../camel-spring-parent/camel-spring-rabbitmq/pom.xml | 5 +++++ .../integration/RabbitMQProducerInvalidExchangeIT.java | 10 +++------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/components/camel-spring-parent/camel-spring-rabbitmq/pom.xml b/components/camel-spring-parent/camel-spring-rabbitmq/pom.xml index 45a60a49aef4e..56034fe063d31 100644 --- a/components/camel-spring-parent/camel-spring-rabbitmq/pom.xml +++ b/components/camel-spring-parent/camel-spring-rabbitmq/pom.xml @@ -93,5 +93,10 @@ camel-http test + + org.assertj + assertj-core + test + diff --git a/components/camel-spring-parent/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQProducerInvalidExchangeIT.java b/components/camel-spring-parent/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQProducerInvalidExchangeIT.java index 51d11920dec99..8c60decfd5da8 100644 --- a/components/camel-spring-parent/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQProducerInvalidExchangeIT.java +++ b/components/camel-spring-parent/camel-spring-rabbitmq/src/test/java/org/apache/camel/component/springrabbit/integration/RabbitMQProducerInvalidExchangeIT.java @@ -29,6 +29,8 @@ import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.core.RabbitAdmin; +import static org.assertj.core.api.Assertions.assertThat; + public class RabbitMQProducerInvalidExchangeIT extends RabbitMQITSupport { @Override @@ -50,13 +52,7 @@ public void testProducer() { final CamelExecutionException exception = Assertions.assertThrows(CamelExecutionException.class, () -> template.sendBody("direct:start", "Hello World")); - // Spring AMQP may wrap ShutdownSignalException in AmqpException depending on timing - Throwable cause = exception.getCause(); - while (cause != null && !(cause instanceof ShutdownSignalException)) { - cause = cause.getCause(); - } - Assertions.assertInstanceOf(ShutdownSignalException.class, cause, - "Expected ShutdownSignalException in cause chain, but got: " + exception.getCause()); + assertThat(exception).hasRootCauseInstanceOf(ShutdownSignalException.class); } @Override