This is an automated email from the ASF dual-hosted git repository.
gnodet pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 9e5c829e7a25 CAMEL-22539: Fix and re-enable 13 flaky tests in
camel-core
9e5c829e7a25 is described below
commit 9e5c829e7a25e1d3e245858019011a15d0728052
Author: Guillaume Nodet <[email protected]>
AuthorDate: Wed May 6 19:41:28 2026 +0200
CAMEL-22539: Fix and re-enable 13 flaky tests in camel-core
- AggregateProcessorTest: replace Thread.sleep with Awaitility, increase
completion timeouts
- DefaultTimeoutMapTest: replace Thread.sleep with Awaitility poll loop
- StopTimeoutRouteTest: add CountDownLatch to synchronize async send with
route stop
- AggregateLostGroupIssueTest: replace fragile timer with direct message
sending
- AlbertoAggregatorTest: increase completionTimeout from 100ms to 2000ms
- AggregatorWithBatchConsumingIssueTest: add @Isolated
- FileConsumerMoveFailureTest: increase polling delays, use Awaitility for
file checks
- FileConsumerPollStrategyStopOnRollbackTest: reset static fields in
@BeforeEach
- ConcurrentRequestsThrottlerTest: replace Thread.sleep with Awaitility
between phases
- ThrottlerTest: increase timing slack, replace Thread.sleep, clean
executor shutdown
- AsyncProcessorAwaitManagerInterruptWithRedeliveryTest: increase
redelivery delay
- CamelPostProcessorHelperSedaConsumePredicateTest: use
expectedBodiesReceivedInAnyOrder
- TrustManagersParametersTest: properly create/close CamelContext per test
---
.../file/FileConsumerMoveFailureTest.java | 22 ++++++---
...FileConsumerPollStrategyStopOnRollbackTest.java | 13 +++--
.../apache/camel/impl/StopTimeoutRouteTest.java | 16 ++++---
...ostProcessorHelperSedaConsumePredicateTest.java | 10 ++--
.../AggregatorWithBatchConsumingIssueTest.java | 4 +-
.../aggregator/AggregateLostGroupIssueTest.java | 48 +++----------------
.../aggregator/AggregateProcessorTest.java | 17 +++----
.../aggregator/AlbertoAggregatorTest.java | 10 ++--
...sorAwaitManagerInterruptWithRedeliveryTest.java | 5 +-
.../ConcurrentRequestsThrottlerTest.java | 18 +++----
.../processor/throttle/requests/ThrottlerTest.java | 32 ++++++-------
.../camel/support/DefaultTimeoutMapTest.java | 18 ++++---
.../support/jsse/TrustManagersParametersTest.java | 55 ++++++++++++++--------
13 files changed, 128 insertions(+), 140 deletions(-)
diff --git
a/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerMoveFailureTest.java
b/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerMoveFailureTest.java
index bcdc59ae16ec..633bae46d4b5 100644
---
a/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerMoveFailureTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerMoveFailureTest.java
@@ -16,15 +16,20 @@
*/
package org.apache.camel.component.file;
+import java.nio.file.Files;
+import java.time.Duration;
+
import org.apache.camel.ContextTestSupport;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
+import org.awaitility.Awaitility;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
-@DisabledIfSystemProperty(named = "ci.env.name", matches = ".*",
disabledReason = "Flaky on Github CI")
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
public class FileConsumerMoveFailureTest extends ContextTestSupport {
@Test
@@ -32,13 +37,18 @@ public class FileConsumerMoveFailureTest extends
ContextTestSupport {
MockEndpoint mock = getMockEndpoint("mock:result");
mock.expectedBodiesReceived("Hello World");
- mock.expectedFileExists(testFile(".camel/hello.txt"), "Hello World");
- mock.expectedFileExists(testFile("error/bye-error.txt"), "Kaboom");
-
template.sendBodyAndHeader(fileUri(), "Hello World",
Exchange.FILE_NAME, "hello.txt");
template.sendBodyAndHeader(fileUri(), "Kaboom", Exchange.FILE_NAME,
"bye.txt");
assertMockEndpointsSatisfied();
+
+ Awaitility.await().atMost(Duration.ofSeconds(10))
+ .untilAsserted(() -> {
+ assertTrue(Files.exists(testFile(".camel/hello.txt")),
"hello.txt should have been moved to .camel/");
+ assertEquals("Hello World",
Files.readString(testFile(".camel/hello.txt")));
+ assertTrue(Files.exists(testFile("error/bye-error.txt")),
"bye.txt should have been moved to error/");
+ assertEquals("Kaboom",
Files.readString(testFile("error/bye-error.txt")));
+ });
}
@Override
@@ -46,7 +56,7 @@ public class FileConsumerMoveFailureTest extends
ContextTestSupport {
return new RouteBuilder() {
@Override
public void configure() {
-
from(fileUri("?initialDelay=0&delay=10&moveFailed=error/${file:name.noext}-error.txt"))
+
from(fileUri("?initialDelay=100&delay=100&moveFailed=error/${file:name.noext}-error.txt"))
.process(new Processor() {
public void process(Exchange exchange) {
String body =
exchange.getIn().getBody(String.class);
diff --git
a/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerPollStrategyStopOnRollbackTest.java
b/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerPollStrategyStopOnRollbackTest.java
index fba3a2eb4884..b9f6398eb3ae 100644
---
a/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerPollStrategyStopOnRollbackTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerPollStrategyStopOnRollbackTest.java
@@ -28,20 +28,27 @@ import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.spi.PollingConsumerPollStrategy;
import org.apache.camel.spi.Registry;
import org.awaitility.Awaitility;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* Unit test for poll strategy
*/
-@DisabledIfSystemProperty(named = "ci.env.name", matches = ".*",
disabledReason = "Flaky on Github CI")
public class FileConsumerPollStrategyStopOnRollbackTest extends
ContextTestSupport {
private static int counter;
private static volatile String event = "";
+ @Override
+ @BeforeEach
+ public void setUp() throws Exception {
+ counter = 0;
+ event = "";
+ super.setUp();
+ }
+
@Override
protected Registry createCamelRegistry() throws Exception {
Registry jndi = super.createCamelRegistry();
@@ -53,7 +60,7 @@ public class FileConsumerPollStrategyStopOnRollbackTest
extends ContextTestSuppo
protected RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
public void configure() {
- from(fileUri("?pollStrategy=#myPoll&initialDelay=0&delay=10"))
+
from(fileUri("?pollStrategy=#myPoll&initialDelay=100&delay=100"))
.convertBodyTo(String.class).to("mock:result");
}
};
diff --git
a/core/camel-core/src/test/java/org/apache/camel/impl/StopTimeoutRouteTest.java
b/core/camel-core/src/test/java/org/apache/camel/impl/StopTimeoutRouteTest.java
index 4c5c92b2fb85..49728ab1c694 100644
---
a/core/camel-core/src/test/java/org/apache/camel/impl/StopTimeoutRouteTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/impl/StopTimeoutRouteTest.java
@@ -23,29 +23,30 @@ import org.apache.camel.ContextTestSupport;
import org.apache.camel.ServiceStatus;
import org.apache.camel.builder.RouteBuilder;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
-@DisabledIfSystemProperty(named = "ci.env.name", matches = ".*",
disabledReason = "Flaky on GitHub Actions")
public class StopTimeoutRouteTest extends ContextTestSupport {
- private final CountDownLatch latch = new CountDownLatch(1);
+ private final CountDownLatch processingStarted = new CountDownLatch(1);
+ private final CountDownLatch processingDone = new CountDownLatch(1);
@Test
public void testStopTimeout() throws Exception {
getMockEndpoint("mock:foo").expectedBodiesReceived("Hello Foo");
- // should stop the route before its routed to mock:foo
template.asyncSendBody("direct:start", "Hello World");
+
+ assertTrue(processingStarted.await(5, TimeUnit.SECONDS), "Processing
should have started");
+
context.getRouteController().stopRoute("start", 10,
TimeUnit.MILLISECONDS);
- // send to the other running route
template.sendBody("direct:foo", "Hello Foo");
assertMockEndpointsSatisfied();
- latch.countDown();
+ processingDone.countDown();
assertEquals(ServiceStatus.Stopped,
context.getRouteController().getRouteStatus("start"));
assertEquals(ServiceStatus.Started,
context.getRouteController().getRouteStatus("foo"));
@@ -58,12 +59,13 @@ public class StopTimeoutRouteTest extends
ContextTestSupport {
public void configure() {
from("direct:start").routeId("start")
.process(e -> {
+ processingStarted.countDown();
try {
Thread.sleep(500);
} catch (Exception ex) {
// ignore
}
- latch.countDown();
+ processingDone.countDown();
})
.to("mock:foo");
diff --git
a/core/camel-core/src/test/java/org/apache/camel/impl/engine/CamelPostProcessorHelperSedaConsumePredicateTest.java
b/core/camel-core/src/test/java/org/apache/camel/impl/engine/CamelPostProcessorHelperSedaConsumePredicateTest.java
index bc1dfec07fc6..22f7799a0aca 100644
---
a/core/camel-core/src/test/java/org/apache/camel/impl/engine/CamelPostProcessorHelperSedaConsumePredicateTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/impl/engine/CamelPostProcessorHelperSedaConsumePredicateTest.java
@@ -21,9 +21,7 @@ import java.lang.reflect.Method;
import org.apache.camel.Consume;
import org.apache.camel.ContextTestSupport;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
-@DisabledIfSystemProperty(named = "ci.env.name", matches = ".*",
disabledReason = "Flaky on GitHub Actions")
public class CamelPostProcessorHelperSedaConsumePredicateTest extends
ContextTestSupport {
@Test
@@ -37,8 +35,8 @@ public class CamelPostProcessorHelperSedaConsumePredicateTest
extends ContextTes
method = my.getClass().getMethod("high", String.class);
helper.consumerInjection(method, my, "foo");
- getMockEndpoint("mock:low").expectedBodiesReceived("17", "89", "39");
- getMockEndpoint("mock:high").expectedBodiesReceived("219", "112");
+ getMockEndpoint("mock:low").expectedBodiesReceivedInAnyOrder("17",
"89", "39");
+ getMockEndpoint("mock:high").expectedBodiesReceivedInAnyOrder("219",
"112");
template.sendBody("seda:foo", "17");
template.sendBody("seda:foo", "219");
@@ -60,8 +58,8 @@ public class CamelPostProcessorHelperSedaConsumePredicateTest
extends ContextTes
method = my.getClass().getMethod("high", String.class);
helper.consumerInjection(method, my, "foo");
- getMockEndpoint("mock:low").expectedBodiesReceived("17");
- getMockEndpoint("mock:high").expectedBodiesReceived("112");
+ getMockEndpoint("mock:low").expectedBodiesReceivedInAnyOrder("17");
+ getMockEndpoint("mock:high").expectedBodiesReceivedInAnyOrder("112");
template.sendBody("seda:foo", "17");
// should be dropped as it does not match any predicates
diff --git
a/core/camel-core/src/test/java/org/apache/camel/issues/AggregatorWithBatchConsumingIssueTest.java
b/core/camel-core/src/test/java/org/apache/camel/issues/AggregatorWithBatchConsumingIssueTest.java
index bee8ba49c714..a6713c504f74 100644
---
a/core/camel-core/src/test/java/org/apache/camel/issues/AggregatorWithBatchConsumingIssueTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/issues/AggregatorWithBatchConsumingIssueTest.java
@@ -23,9 +23,9 @@ import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.processor.BodyInAggregatingStrategy;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
+import org.junit.jupiter.api.parallel.Isolated;
-@DisabledIfSystemProperty(named = "ci.env.name", matches = ".*",
disabledReason = "Flaky on Github CI")
+@Isolated
public class AggregatorWithBatchConsumingIssueTest extends ContextTestSupport {
@Test
diff --git
a/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AggregateLostGroupIssueTest.java
b/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AggregateLostGroupIssueTest.java
index 09904a926f71..658f6e442c22 100644
---
a/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AggregateLostGroupIssueTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AggregateLostGroupIssueTest.java
@@ -19,39 +19,15 @@ package org.apache.camel.processor.aggregator;
import org.apache.camel.AggregationStrategy;
import org.apache.camel.ContextTestSupport;
import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.processor.aggregate.MemoryAggregationRepository;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
/**
* Based on user forum issue
*/
-@DisabledIfSystemProperty(named = "ci.env.name", matches = ".*",
disabledReason = "Flaky on GitHub Actions")
public class AggregateLostGroupIssueTest extends ContextTestSupport {
- private int messageIndex;
- private MemoryAggregationRepository aggregationRepository;
-
- @BeforeEach
- public void setUp() throws Exception {
- messageIndex = 0;
- super.setUp();
- getAggregationRepository().start();
- context.getRouteController().startRoute("foo");
- }
-
- @AfterEach
- public void tearDown() throws Exception {
- context.getRouteController().stopRoute("foo");
- getAggregationRepository().stop();
- super.tearDown();
- }
-
@Test
public void testAggregateLostGroupIssue() throws Exception {
MockEndpoint mock = getMockEndpoint("mock:result");
@@ -59,14 +35,11 @@ public class AggregateLostGroupIssueTest extends
ContextTestSupport {
mock.message(0).body().isEqualTo("0,1,2,3,4,5,6,7,8,9");
mock.message(1).body().isEqualTo("10,11,12,13,14,15,16,17,18,19");
- assertMockEndpointsSatisfied();
- }
-
- protected synchronized MemoryAggregationRepository
getAggregationRepository() {
- if (aggregationRepository == null) {
- aggregationRepository = new MemoryAggregationRepository();
+ for (int i = 0; i < 20; i++) {
+ template.sendBodyAndHeader("direct:aggregator", i,
"aggregateGroup", "group1");
}
- return aggregationRepository;
+
+ assertMockEndpointsSatisfied();
}
@Override
@@ -74,14 +47,7 @@ public class AggregateLostGroupIssueTest extends
ContextTestSupport {
return new RouteBuilder() {
@Override
public void configure() {
-
from("timer://foo?period=10&delay=0").id("foo").startupOrder(2).process(new
Processor() {
- public void process(Exchange exchange) {
- exchange.getMessage().setBody(messageIndex++);
- exchange.getMessage().setHeader("aggregateGroup",
"group1");
- }
- }).to("direct:aggregator");
-
-
from("direct:aggregator").startupOrder(1).aggregate(header("aggregateGroup"),
new AggregationStrategy() {
+ from("direct:aggregator").aggregate(header("aggregateGroup"),
new AggregationStrategy() {
public Exchange aggregate(Exchange oldExchange, Exchange
newExchange) {
if (oldExchange == null) {
return newExchange;
@@ -93,8 +59,8 @@ public class AggregateLostGroupIssueTest extends
ContextTestSupport {
oldExchange.getIn().setBody(oldBody + "," + newBody);
return oldExchange;
}
- }).aggregationRepository(getAggregationRepository())
-
.completionSize(10).completionTimeout(500).completionTimeoutCheckerInterval(100).to("log:aggregated")
+
}).completionSize(10).completionTimeout(5000).completionTimeoutCheckerInterval(100)
+ .to("log:aggregated")
.to("mock:result");
}
};
diff --git
a/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AggregateProcessorTest.java
b/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AggregateProcessorTest.java
index b6fe9844784a..e267e31c34ab 100644
---
a/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AggregateProcessorTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AggregateProcessorTest.java
@@ -36,12 +36,11 @@ import org.apache.camel.support.AsyncProcessorSupport;
import org.apache.camel.support.DefaultExchange;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
import org.junit.jupiter.api.parallel.Isolated;
+import static org.awaitility.Awaitility.await;
import static org.junit.jupiter.api.Assertions.*;
-@DisabledIfSystemProperty(named = "ci.env.name", matches = ".*",
disabledReason = "Flaky on Github CI")
@Isolated
public class AggregateProcessorTest extends ContextTestSupport {
@@ -213,7 +212,7 @@ public class AggregateProcessorTest extends
ContextTestSupport {
AggregationStrategy as = new BodyInAggregatingStrategy();
AggregateProcessor ap = new AggregateProcessor(context, done, corr,
as, executorService, true);
- ap.setCompletionTimeout(100);
+ ap.setCompletionTimeout(500);
ap.setEagerCheckCompletion(eager);
ap.setCompletionTimeoutCheckerInterval(10);
ap.start();
@@ -235,12 +234,12 @@ public class AggregateProcessorTest extends
ContextTestSupport {
e4.getIn().setHeader("id", 123);
ap.process(e1);
- Thread.sleep(5);
ap.process(e2);
- Thread.sleep(10);
ap.process(e3);
- Thread.sleep(150);
+ await().atMost(5, java.util.concurrent.TimeUnit.SECONDS)
+ .untilAsserted(() -> assertEquals(1,
mock.getReceivedCounter()));
+
ap.process(e4);
assertMockEndpointsSatisfied();
@@ -262,7 +261,7 @@ public class AggregateProcessorTest extends
ContextTestSupport {
AggregationStrategy as = new BodyInAggregatingStrategy();
AggregateProcessor ap = new AggregateProcessor(context, done, corr,
as, executorService, true);
- ap.setCompletionInterval(100);
+ ap.setCompletionInterval(500);
ap.setCompletionTimeoutCheckerInterval(10);
ap.start();
@@ -286,7 +285,9 @@ public class AggregateProcessorTest extends
ContextTestSupport {
ap.process(e2);
ap.process(e3);
- Thread.sleep(250);
+ await().atMost(5, java.util.concurrent.TimeUnit.SECONDS)
+ .untilAsserted(() -> assertEquals(1,
mock.getReceivedCounter()));
+
ap.process(e4);
assertMockEndpointsSatisfied();
diff --git
a/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AlbertoAggregatorTest.java
b/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AlbertoAggregatorTest.java
index cd75d4514310..39ed94561715 100644
---
a/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AlbertoAggregatorTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AlbertoAggregatorTest.java
@@ -29,9 +29,7 @@ import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.model.AggregateDefinition;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
-@DisabledIfSystemProperty(named = "ci.env.name", matches = ".*",
disabledReason = "Flaky on Github CI")
public class AlbertoAggregatorTest extends ContextTestSupport {
private static final String SURNAME_HEADER = "surname";
private static final String TYPE_HEADER = "type";
@@ -166,15 +164,15 @@ public class AlbertoAggregatorTest extends
ContextTestSupport {
.to("direct:joinSurnames");
- from("direct:joinSurnames").aggregate(header(SURNAME_HEADER),
surnameAggregator).completionTimeout(100)
- .completionTimeoutCheckerInterval(10)
+ from("direct:joinSurnames").aggregate(header(SURNAME_HEADER),
surnameAggregator).completionTimeout(2000)
+ .completionTimeoutCheckerInterval(100)
.setHeader(TYPE_HEADER,
constant(BROTHERS_TYPE)).to("direct:joinBrothers");
// Join all brothers lists and remove surname and type headers
AggregateDefinition agg =
from("direct:joinBrothers").aggregate(header(TYPE_HEADER), brothersAggregator);
- agg.completionTimeout(100L);
- agg.completionTimeoutCheckerInterval(10L);
+ agg.completionTimeout(2000L);
+ agg.completionTimeoutCheckerInterval(100L);
agg.removeHeader(SURNAME_HEADER).removeHeader(TYPE_HEADER).to("mock:result");
}
};
diff --git
a/core/camel-core/src/test/java/org/apache/camel/processor/async/AsyncProcessorAwaitManagerInterruptWithRedeliveryTest.java
b/core/camel-core/src/test/java/org/apache/camel/processor/async/AsyncProcessorAwaitManagerInterruptWithRedeliveryTest.java
index a734a76e0eee..dd6ca433d2cb 100644
---
a/core/camel-core/src/test/java/org/apache/camel/processor/async/AsyncProcessorAwaitManagerInterruptWithRedeliveryTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/processor/async/AsyncProcessorAwaitManagerInterruptWithRedeliveryTest.java
@@ -27,12 +27,10 @@ import org.apache.camel.support.PluginHelper;
import org.awaitility.Awaitility;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
-@DisabledIfSystemProperty(named = "ci.env.name", matches = ".*",
disabledReason = "Flaky on Github CI")
public class AsyncProcessorAwaitManagerInterruptWithRedeliveryTest extends
ContextTestSupport {
private MyBean bean;
@@ -110,9 +108,8 @@ public class
AsyncProcessorAwaitManagerInterruptWithRedeliveryTest extends Conte
return new RouteBuilder() {
@Override
public void configure() {
- // redelivery delay should not be too fast as tested on slower
CI servers can cause test to fail
errorHandler(
-
deadLetterChannel("mock:error").maximumRedeliveries(5).redeliveryDelay(750).asyncDelayedRedelivery());
+
deadLetterChannel("mock:error").maximumRedeliveries(5).redeliveryDelay(1500).asyncDelayedRedelivery());
from("direct:start").routeId("myRoute").to("mock:before").bean("myBean",
"callMe").to("mock:result");
}
diff --git
a/core/camel-core/src/test/java/org/apache/camel/processor/throttle/concurrent/ConcurrentRequestsThrottlerTest.java
b/core/camel-core/src/test/java/org/apache/camel/processor/throttle/concurrent/ConcurrentRequestsThrottlerTest.java
index a3e8e26f18b3..3cdb94d07778 100644
---
a/core/camel-core/src/test/java/org/apache/camel/processor/throttle/concurrent/ConcurrentRequestsThrottlerTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/processor/throttle/concurrent/ConcurrentRequestsThrottlerTest.java
@@ -26,15 +26,14 @@ import org.apache.camel.ContextTestSupport;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.processor.ThrottlerRejectedExecutionException;
+import org.awaitility.Awaitility;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
import org.junit.jupiter.api.condition.EnabledOnOs;
import org.junit.jupiter.api.condition.OS;
import static org.junit.jupiter.api.Assertions.assertTrue;
// time-bound that does not run well in shared environments
-@DisabledIfSystemProperty(named = "ci.env.name", matches = ".*",
disabledReason = "Flaky on Github CI")
@EnabledOnOs(value = { OS.LINUX, OS.MAC, OS.FREEBSD, OS.OPENBSD },
architectures = { "amd64", "aarch64", "ppc64le" },
disabledReason = "This test does not run reliably multiple
platforms (see CAMEL-21438)")
@@ -96,21 +95,18 @@ public class ConcurrentRequestsThrottlerTest extends
ContextTestSupport {
try {
MockEndpoint resultEndpoint =
resolveMandatoryEndpoint("mock:result", MockEndpoint.class);
sendMessagesWithHeaderExpression(executor, resultEndpoint, 2,
MESSAGE_COUNT);
- Thread.sleep(INTERVAL); // sleep here to ensure the
- // first throttle rate does not
- // influence the next one.
+ Awaitility.await().atMost(10, TimeUnit.SECONDS)
+ .untilAsserted(resultEndpoint::assertIsSatisfied);
resultEndpoint.reset();
sendMessagesWithHeaderExpression(executor, resultEndpoint, 4,
MESSAGE_COUNT);
- Thread.sleep(INTERVAL); // sleep here to ensure the
- // first throttle rate does not
- // influence the next one.
+ Awaitility.await().atMost(10, TimeUnit.SECONDS)
+ .untilAsserted(resultEndpoint::assertIsSatisfied);
resultEndpoint.reset();
sendMessagesWithHeaderExpression(executor, resultEndpoint, 2,
MESSAGE_COUNT);
- Thread.sleep(INTERVAL); // sleep here to ensure the
- // first throttle rate does not
- // influence the next one.
+ Awaitility.await().atMost(10, TimeUnit.SECONDS)
+ .untilAsserted(resultEndpoint::assertIsSatisfied);
resultEndpoint.reset();
sendMessagesWithHeaderExpression(executor, resultEndpoint, 4,
MESSAGE_COUNT);
diff --git
a/core/camel-core/src/test/java/org/apache/camel/processor/throttle/requests/ThrottlerTest.java
b/core/camel-core/src/test/java/org/apache/camel/processor/throttle/requests/ThrottlerTest.java
index f1456b61d795..2a699cb4ba35 100644
---
a/core/camel-core/src/test/java/org/apache/camel/processor/throttle/requests/ThrottlerTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/processor/throttle/requests/ThrottlerTest.java
@@ -24,16 +24,14 @@ import org.apache.camel.ContextTestSupport;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.processor.ThrottlerRejectedExecutionException;
+import org.awaitility.Awaitility;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
import org.junit.jupiter.api.condition.EnabledOnOs;
import org.junit.jupiter.api.condition.OS;
import static org.junit.jupiter.api.Assertions.assertTrue;
// time-bound that does not run well in shared environments
-
-@DisabledIfSystemProperty(named = "ci.env.name", matches = ".*",
disabledReason = "Flaky on Github CI")
@EnabledOnOs(value = { OS.LINUX, OS.MAC, OS.FREEBSD, OS.OPENBSD },
architectures = { "amd64", "aarch64", "ppc64le" },
disabledReason = "This test does not run reliably multiple
platforms (see CAMEL-21438)")
@@ -97,7 +95,8 @@ public class ThrottlerTest extends ContextTestSupport {
try {
sendMessagesWithHeaderExpression(executor, resultEndpoint, 5,
INTERVAL, MESSAGE_COUNT);
} finally {
- executor.shutdownNow();
+ executor.shutdown();
+ assertTrue(executor.awaitTermination(10, TimeUnit.SECONDS));
}
}
@@ -107,26 +106,24 @@ public class ThrottlerTest extends ContextTestSupport {
try {
MockEndpoint resultEndpoint =
resolveMandatoryEndpoint("mock:result", MockEndpoint.class);
sendMessagesWithHeaderExpression(executor, resultEndpoint, 5,
INTERVAL, MESSAGE_COUNT);
- Thread.sleep(INTERVAL + TOLERANCE); // sleep here to ensure the
- // first throttle rate does not
- // influence the next one.
+ Awaitility.await().atMost(10, TimeUnit.SECONDS)
+ .untilAsserted(resultEndpoint::assertIsSatisfied);
resultEndpoint.reset();
sendMessagesWithHeaderExpression(executor, resultEndpoint, 10,
INTERVAL, MESSAGE_COUNT);
- Thread.sleep(INTERVAL + TOLERANCE); // sleep here to ensure the
- // first throttle rate does not
- // influence the next one.
+ Awaitility.await().atMost(10, TimeUnit.SECONDS)
+ .untilAsserted(resultEndpoint::assertIsSatisfied);
resultEndpoint.reset();
sendMessagesWithHeaderExpression(executor, resultEndpoint, 5,
INTERVAL, MESSAGE_COUNT);
- Thread.sleep(INTERVAL + TOLERANCE); // sleep here to ensure the
- // first throttle rate does not
- // influence the next one.
+ Awaitility.await().atMost(10, TimeUnit.SECONDS)
+ .untilAsserted(resultEndpoint::assertIsSatisfied);
resultEndpoint.reset();
sendMessagesWithHeaderExpression(executor, resultEndpoint, 10,
INTERVAL, MESSAGE_COUNT);
} finally {
- executor.shutdownNow();
+ executor.shutdown();
+ assertTrue(executor.awaitTermination(10, TimeUnit.SECONDS));
}
}
@@ -136,8 +133,8 @@ public class ThrottlerTest extends ContextTestSupport {
// slack)
long minimum = calculateMinimum(intervalMs, throttle, messageCount) -
50;
long maximum = calculateMaximum(intervalMs, throttle, messageCount) +
50;
- // add 1000 in case running on slow CI boxes
- maximum += 1000;
+ // add 3000 in case running on slow CI boxes
+ maximum += 3000;
log.info("Sent {} exchanges in {}ms, with throttle rate of {} per
{}ms. Calculated min {}ms and max {}ms", messageCount,
elapsedTimeMs, throttle, intervalMs, minimum,
maximum);
@@ -170,7 +167,8 @@ public class ThrottlerTest extends ContextTestSupport {
}
return TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start);
} finally {
- executor.shutdownNow();
+ executor.shutdown();
+ assertTrue(executor.awaitTermination(10, TimeUnit.SECONDS));
}
}
diff --git
a/core/camel-core/src/test/java/org/apache/camel/support/DefaultTimeoutMapTest.java
b/core/camel-core/src/test/java/org/apache/camel/support/DefaultTimeoutMapTest.java
index 1e32a041b156..bbbc0dcf3501 100644
---
a/core/camel-core/src/test/java/org/apache/camel/support/DefaultTimeoutMapTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/support/DefaultTimeoutMapTest.java
@@ -26,7 +26,6 @@ import java.util.concurrent.TimeUnit;
import org.apache.camel.TimeoutMap;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
import org.junit.jupiter.api.parallel.Isolated;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -35,7 +34,6 @@ import static org.awaitility.Awaitility.await;
import static org.junit.jupiter.api.Assertions.*;
@Isolated("Depends on precise timing that may be hard to achieve if the system
is under pressure")
-@DisabledIfSystemProperty(named = "ci.env.name", matches = ".*",
disabledReason = "Flaky on Github CI")
public class DefaultTimeoutMapTest {
private static final Logger LOG =
LoggerFactory.getLogger(DefaultTimeoutMapTest.class);
@@ -70,22 +68,22 @@ public class DefaultTimeoutMapTest {
}
@Test
- public void testDefaultTimeoutMapForcePurge() throws Exception {
+ public void testDefaultTimeoutMapForcePurge() {
DefaultTimeoutMap<String, Integer> map = new
DefaultTimeoutMap<>(executor, 100);
// map.start(); // Do not start background purge
assertTrue(map.currentTime() > 0);
assertEquals(0, map.size());
- map.put("A", 123, 10);
+ map.put("A", 123, 50);
assertEquals(1, map.size());
- Thread.sleep(50);
-
- // will purge and remove old entries
- map.purge();
-
- assertEquals(0, map.size());
+ await().atMost(Duration.ofSeconds(2))
+ .pollInterval(Duration.ofMillis(10))
+ .untilAsserted(() -> {
+ map.purge();
+ assertEquals(0, map.size());
+ });
}
@Test
diff --git
a/core/camel-core/src/test/java/org/apache/camel/support/jsse/TrustManagersParametersTest.java
b/core/camel-core/src/test/java/org/apache/camel/support/jsse/TrustManagersParametersTest.java
index da68298acb54..4181532bbe7f 100644
---
a/core/camel-core/src/test/java/org/apache/camel/support/jsse/TrustManagersParametersTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/support/jsse/TrustManagersParametersTest.java
@@ -26,19 +26,33 @@ import javax.net.ssl.X509TrustManager;
import org.apache.camel.CamelContext;
import org.apache.camel.impl.DefaultCamelContext;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
import org.junit.jupiter.api.parallel.Isolated;
import static org.junit.jupiter.api.Assertions.*;
-@DisabledIfSystemProperty(named = "ci.env.name", matches = ".*",
disabledReason = "Flaky on Github CI")
@Isolated("This test is regularly flaky")
public class TrustManagersParametersTest extends AbstractJsseParametersTest {
+ private CamelContext context;
+
+ @BeforeEach
+ public void setUp() throws Exception {
+ context = new DefaultCamelContext();
+ }
+
+ @AfterEach
+ public void tearDown() throws Exception {
+ if (context != null) {
+ context.close();
+ }
+ }
+
protected KeyStoreParameters createMinimalKeyStoreParameters() {
KeyStoreParameters ksp = new KeyStoreParameters();
- ksp.setCamelContext(new DefaultCamelContext());
+ ksp.setCamelContext(context);
ksp.setResource("org/apache/camel/support/jsse/localhost.p12");
ksp.setPassword("changeit");
@@ -48,32 +62,35 @@ public class TrustManagersParametersTest extends
AbstractJsseParametersTest {
protected TrustManagersParameters createMinimalTrustManagersParameters() {
TrustManagersParameters tmp = new TrustManagersParameters();
- tmp.setCamelContext(new DefaultCamelContext());
+ tmp.setCamelContext(context);
tmp.setKeyStore(this.createMinimalKeyStoreParameters());
return tmp;
}
@Test
public void testPropertyPlaceholders() throws Exception {
- CamelContext context = this.createPropertiesPlaceholderAwareContext();
-
- KeyStoreParameters ksp = new KeyStoreParameters();
- ksp.setCamelContext(context);
+ CamelContext propContext =
this.createPropertiesPlaceholderAwareContext();
+ try {
+ KeyStoreParameters ksp = new KeyStoreParameters();
+ ksp.setCamelContext(propContext);
- ksp.setType("{{keyStoreParameters.type}}");
- ksp.setProvider("{{keyStoreParameters.provider}}");
- ksp.setResource("{{keyStoreParameters.resource}}");
- ksp.setPassword("{{keyStoreParameters.password}}");
+ ksp.setType("{{keyStoreParameters.type}}");
+ ksp.setProvider("{{keyStoreParameters.provider}}");
+ ksp.setResource("{{keyStoreParameters.resource}}");
+ ksp.setPassword("{{keyStoreParameters.password}}");
- TrustManagersParameters tmp = new TrustManagersParameters();
- tmp.setCamelContext(context);
- tmp.setKeyStore(ksp);
+ TrustManagersParameters tmp = new TrustManagersParameters();
+ tmp.setCamelContext(propContext);
+ tmp.setKeyStore(ksp);
- tmp.setAlgorithm("{{trustManagersParameters.algorithm}}");
- tmp.setProvider("{{trustManagersParameters.provider}}");
+ tmp.setAlgorithm("{{trustManagersParameters.algorithm}}");
+ tmp.setProvider("{{trustManagersParameters.provider}}");
- TrustManager[] tms = tmp.createTrustManagers();
- validateTrustManagers(tms);
+ TrustManager[] tms = tmp.createTrustManagers();
+ validateTrustManagers(tms);
+ } finally {
+ propContext.close();
+ }
}
@Test