You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/07/25 08:40:43 UTC

[camel] branch main updated: Myq (#10815)

This is an automated email from the ASF dual-hosted git repository.

davsclaus 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 21959d398b1 Myq (#10815)
21959d398b1 is described below

commit 21959d398b149dec8a9e5d85424da19bc7bbd59d
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Jul 25 10:40:37 2023 +0200

    Myq (#10815)
    
    * camel-quartz: Use awailability instead of thread sleep in unit tests
    
    * camel-quartz - Make test 20 sec faster
---
 .../quartz/SimpleScheduledRoutePolicyTest.java     | 115 +++++++++++++--------
 1 file changed, 72 insertions(+), 43 deletions(-)

diff --git a/components/camel-quartz/src/test/java/org/apache/camel/routepolicy/quartz/SimpleScheduledRoutePolicyTest.java b/components/camel-quartz/src/test/java/org/apache/camel/routepolicy/quartz/SimpleScheduledRoutePolicyTest.java
index 603bf57b9d2..f4806aa62a2 100644
--- a/components/camel-quartz/src/test/java/org/apache/camel/routepolicy/quartz/SimpleScheduledRoutePolicyTest.java
+++ b/components/camel-quartz/src/test/java/org/apache/camel/routepolicy/quartz/SimpleScheduledRoutePolicyTest.java
@@ -20,13 +20,14 @@ import java.util.Date;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.CamelExecutionException;
+import org.apache.camel.Consumer;
 import org.apache.camel.ServiceStatus;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.direct.DirectComponent;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.component.quartz.QuartzComponent;
 import org.apache.camel.support.service.ServiceHelper;
-import org.junit.jupiter.api.Disabled;
+import org.awaitility.Awaitility;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 
@@ -49,10 +50,10 @@ public class SimpleScheduledRoutePolicyTest {
             context.addRoutes(new RouteBuilder() {
                 public void configure() {
                     SimpleScheduledRoutePolicy policy = new SimpleScheduledRoutePolicy();
-                    long startTime = System.currentTimeMillis() + 3000L;
+                    long startTime = System.currentTimeMillis() + 500;
                     policy.setRouteStartDate(new Date(startTime));
                     policy.setRouteStartRepeatCount(1);
-                    policy.setRouteStartRepeatInterval(3000);
+                    policy.setRouteStartRepeatInterval(1000);
 
                     from("direct:start")
                             .routeId("test")
@@ -61,10 +62,12 @@ public class SimpleScheduledRoutePolicyTest {
                 }
             });
             context.start();
-            context.getRouteController().stopRoute("test", 1000, TimeUnit.MILLISECONDS);
+            context.getRouteController().stopRoute("test");
+
+            Awaitility.await().atMost(5, TimeUnit.SECONDS).untilAsserted(() -> {
+                assertSame(ServiceStatus.Started, context.getRouteController().getRouteStatus("test"));
+            });
 
-            Thread.sleep(5000);
-            assertSame(ServiceStatus.Started, context.getRouteController().getRouteStatus("test"));
             template.sendBody("direct:start", "Ready or not, Here, I come");
 
             context.getComponent("quartz", QuartzComponent.class).stop();
@@ -82,10 +85,10 @@ public class SimpleScheduledRoutePolicyTest {
             context.addRoutes(new RouteBuilder() {
                 public void configure() {
                     SimpleScheduledRoutePolicy policy = new SimpleScheduledRoutePolicy();
-                    long startTime = System.currentTimeMillis() + 3000;
+                    long startTime = System.currentTimeMillis() + 500;
                     policy.setRouteStopDate(new Date(startTime));
                     policy.setRouteStopRepeatCount(1);
-                    policy.setRouteStopRepeatInterval(3000);
+                    policy.setRouteStopRepeatInterval(1000);
 
                     from("direct:start")
                             .routeId("test")
@@ -95,17 +98,13 @@ public class SimpleScheduledRoutePolicyTest {
             });
             context.start();
 
-            Thread.sleep(4000);
+            // wait for route to stop
+            Awaitility.await().atMost(5, TimeUnit.SECONDS).untilAsserted(() -> {
+                assertTrue(ServiceHelper.isStopped(context.getRoute("test").getConsumer()));
+            });
 
-            assertSame(ServiceStatus.Stopped, context.getRouteController().getRouteStatus("test"));
+            assertThrows(CamelExecutionException.class, () -> template.sendBody("direct:start", "Ready or not, Here, I come"));
 
-            boolean consumerStopped = false;
-            try {
-                template.sendBody("direct:start", "Ready or not, Here, I come");
-            } catch (CamelExecutionException e) {
-                consumerStopped = true;
-            }
-            assertTrue(consumerStopped);
             context.getComponent("quartz", QuartzComponent.class).stop();
         }
     }
@@ -120,10 +119,10 @@ public class SimpleScheduledRoutePolicyTest {
             context.addRoutes(new RouteBuilder() {
                 public void configure() {
                     SimpleScheduledRoutePolicy policy = new SimpleScheduledRoutePolicy();
-                    long startTime = System.currentTimeMillis() + 3000L;
+                    long startTime = System.currentTimeMillis() + 500;
                     policy.setRouteSuspendDate(new Date(startTime));
                     policy.setRouteSuspendRepeatCount(1);
-                    policy.setRouteSuspendRepeatInterval(3000);
+                    policy.setRouteSuspendRepeatInterval(1000);
 
                     from("direct:start")
                             .routeId("test")
@@ -133,10 +132,13 @@ public class SimpleScheduledRoutePolicyTest {
             });
             context.start();
 
-            Thread.sleep(4000);
+            // wait for route to suspend
+            Awaitility.await().atMost(5, TimeUnit.SECONDS).untilAsserted(() -> {
+                assertTrue(ServiceHelper.isSuspended(context.getRoute("test").getConsumer()));
+            });
 
-            boolean consumerSuspended = false;
             assertThrows(CamelExecutionException.class, () -> template.sendBody("direct:start", "Ready or not, Here, I come"));
+
             context.getComponent("quartz", QuartzComponent.class).stop();
         }
     }
@@ -154,10 +156,10 @@ public class SimpleScheduledRoutePolicyTest {
             context.addRoutes(new RouteBuilder() {
                 public void configure() {
                     SimpleScheduledRoutePolicy policy = new SimpleScheduledRoutePolicy();
-                    long startTime = System.currentTimeMillis() + 3000L;
+                    long startTime = System.currentTimeMillis() + 1000;
                     policy.setRouteResumeDate(new Date(startTime));
                     policy.setRouteResumeRepeatCount(1);
-                    policy.setRouteResumeRepeatInterval(3000);
+                    policy.setRouteResumeRepeatInterval(1000);
 
                     from("direct:start")
                             .routeId("test")
@@ -172,7 +174,11 @@ public class SimpleScheduledRoutePolicyTest {
             assertThrows(CamelExecutionException.class, () -> template.sendBody("direct:start", "Ready or not, Here, I come"),
                     "Should have thrown an exception");
 
-            Thread.sleep(4000);
+            // wait for route to resume/start
+            Awaitility.await().atMost(5, TimeUnit.SECONDS).untilAsserted(() -> {
+                assertTrue(ServiceHelper.isStarted(context.getRoute("test").getConsumer()));
+            });
+
             template.sendBody("direct:start", "Ready or not, Here, I come");
 
             context.getComponent("quartz", QuartzComponent.class).stop();
@@ -183,7 +189,6 @@ public class SimpleScheduledRoutePolicyTest {
     @Nested
     class SimpleTest5 extends NoBuilderTest {
 
-        @Disabled("Currently this test is flaky")
         @Test
         public void testScheduledSuspendAndResumeRoutePolicy() throws Exception {
             MockEndpoint success = context.getEndpoint("mock:success", MockEndpoint.class);
@@ -195,14 +200,14 @@ public class SimpleScheduledRoutePolicyTest {
             context.addRoutes(new RouteBuilder() {
                 public void configure() {
                     SimpleScheduledRoutePolicy policy = new SimpleScheduledRoutePolicy();
-                    long suspendTime = System.currentTimeMillis() + 1000L;
+                    long suspendTime = System.currentTimeMillis() + 500;
                     policy.setRouteSuspendDate(new Date(suspendTime));
                     policy.setRouteSuspendRepeatCount(0);
-                    policy.setRouteSuspendRepeatInterval(3000);
-                    long resumeTime = System.currentTimeMillis() + 4000L;
+                    policy.setRouteSuspendRepeatInterval(1000);
+                    long resumeTime = System.currentTimeMillis() + 2000;
                     policy.setRouteResumeDate(new Date(resumeTime));
                     policy.setRouteResumeRepeatCount(1);
-                    policy.setRouteResumeRepeatInterval(3000);
+                    policy.setRouteResumeRepeatInterval(1000);
 
                     from("direct:start")
                             .routeId("test")
@@ -211,12 +216,20 @@ public class SimpleScheduledRoutePolicyTest {
                 }
             });
             context.start();
-            Thread.sleep(1000);
+
+            // wait for route to suspend
+            Awaitility.await().atMost(5, TimeUnit.SECONDS).untilAsserted(() -> {
+                assertTrue(ServiceHelper.isSuspended(context.getRoute("test").getConsumer()));
+            });
 
             assertThrows(CamelExecutionException.class, () -> template.sendBody("direct:start", "Ready or not, Here, I come"),
                     "Should have thrown an exception");
 
-            Thread.sleep(4000);
+            // wait for route to resume/start
+            Awaitility.await().atMost(5, TimeUnit.SECONDS).untilAsserted(() -> {
+                assertTrue(ServiceHelper.isStarted(context.getRoute("test").getConsumer()));
+            });
+
             template.sendBody("direct:start", "Ready or not, Here, I come");
 
             context.getComponent("quartz", QuartzComponent.class).stop();
@@ -237,13 +250,13 @@ public class SimpleScheduledRoutePolicyTest {
             context.addRoutes(new RouteBuilder() {
                 public void configure() {
                     SimpleScheduledRoutePolicy policy = new SimpleScheduledRoutePolicy();
-                    long suspendTime = System.currentTimeMillis() + 1000L;
+                    long suspendTime = System.currentTimeMillis() + 500;
                     policy.setRouteSuspendDate(new Date(suspendTime));
                     policy.setRouteSuspendRepeatCount(0);
-                    long startTime = System.currentTimeMillis() + 4000L;
+                    long startTime = System.currentTimeMillis() + 2000;
                     policy.setRouteStartDate(new Date(startTime));
                     policy.setRouteResumeRepeatCount(1);
-                    policy.setRouteResumeRepeatInterval(3000);
+                    policy.setRouteResumeRepeatInterval(1000);
 
                     from("direct:start")
                             .routeId("test")
@@ -252,12 +265,22 @@ public class SimpleScheduledRoutePolicyTest {
                 }
             });
             context.start();
-            Thread.sleep(1000);
+
+            Awaitility.await().atMost(5, TimeUnit.SECONDS).until(
+                    () -> {
+                        Consumer consumer = context.getRoute("test").getConsumer();
+                        return ServiceHelper.isSuspended(consumer);
+                    });
 
             assertThrows(CamelExecutionException.class, () -> template.sendBody("direct:start", "Ready or not, Here, I come"),
                     "Should have thrown an exception");
 
-            Thread.sleep(4000);
+            Awaitility.await().atMost(5, TimeUnit.SECONDS).until(
+                    () -> {
+                        Consumer consumer = context.getRoute("test").getConsumer();
+                        return ServiceHelper.isStarted(consumer);
+                    });
+
             template.sendBody("direct:start", "Ready or not, Here, I come");
 
             context.getComponent("quartz", QuartzComponent.class).stop();
@@ -277,10 +300,10 @@ public class SimpleScheduledRoutePolicyTest {
                 context.addRoutes(new RouteBuilder() {
                     public void configure() {
                         SimpleScheduledRoutePolicy policy = new SimpleScheduledRoutePolicy();
-                        long startTime = System.currentTimeMillis() + 3000L;
+                        long startTime = System.currentTimeMillis() + 500;
                         policy.setRouteStartDate(new Date(startTime));
                         policy.setRouteStartRepeatCount(1);
-                        policy.setRouteStartRepeatInterval(3000);
+                        policy.setRouteStartRepeatInterval(1000);
 
                         from("direct:start")
                                 .routeId("test")
@@ -291,8 +314,11 @@ public class SimpleScheduledRoutePolicyTest {
                 });
                 context.start();
 
-                Thread.sleep(5000);
-                assertSame(ServiceStatus.Started, context.getRouteController().getRouteStatus("test"));
+                // wait for route to start
+                Awaitility.await().atMost(5, TimeUnit.SECONDS).untilAsserted(() -> {
+                    assertTrue(ServiceHelper.isStarted(context.getRoute("test").getConsumer()));
+                });
+
                 template.sendBody("direct:start", "Ready or not, Here, I come");
 
                 context.getComponent("quartz", QuartzComponent.class).stop();
@@ -319,7 +345,7 @@ public class SimpleScheduledRoutePolicyTest {
                                     @Override
                                     public void configure() throws Exception {
                                         SimpleScheduledRoutePolicy policy = new SimpleScheduledRoutePolicy();
-                                        long startTime = System.currentTimeMillis() + 3000L;
+                                        long startTime = System.currentTimeMillis() + 500;
                                         policy.setRouteStartDate(new Date(startTime));
 
                                         from("direct:dynamic")
@@ -336,8 +362,11 @@ public class SimpleScheduledRoutePolicyTest {
 
                 template.sendBody("direct:start", "Hello World");
 
-                Thread.sleep(5000);
-                assertSame(ServiceStatus.Started, context.getRouteController().getRouteStatus("dynamic"));
+                // wait for route to start
+                Awaitility.await().atMost(5, TimeUnit.SECONDS).untilAsserted(() -> {
+                    assertTrue(ServiceHelper.isStarted(context.getRoute("dynamic").getConsumer()));
+                });
+
                 template.sendBody("direct:dynamic", "Ready or not, Here, I come");
 
                 context.getComponent("quartz", QuartzComponent.class).stop();