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


Reply via email to