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

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 9c0e636cdfe9bf96f5f48ae709c50f57e06a47af
Author: LanKhuat <[email protected]>
AuthorDate: Wed Mar 25 18:07:35 2020 +0700

    JAMES-3117 Use reactor test library for testing with virtual time
---
 server/container/guice/guice-common/pom.xml        |  5 ++-
 .../org/apache/james/PeriodicalHealthChecks.java   | 22 ++++++-----
 .../apache/james/PeriodicalHealthChecksTest.java   | 46 ++++++++++------------
 3 files changed, 36 insertions(+), 37 deletions(-)

diff --git a/server/container/guice/guice-common/pom.xml 
b/server/container/guice/guice-common/pom.xml
index 4433636..e24d450 100644
--- a/server/container/guice/guice-common/pom.xml
+++ b/server/container/guice/guice-common/pom.xml
@@ -152,8 +152,9 @@
             <artifactId>guice</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.awaitility</groupId>
-            <artifactId>awaitility</artifactId>
+            <groupId>io.projectreactor</groupId>
+            <artifactId>reactor-test</artifactId>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.mockito</groupId>
diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/PeriodicalHealthChecks.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/PeriodicalHealthChecks.java
index a18998c..86d5806 100644
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/PeriodicalHealthChecks.java
+++ 
b/server/container/guice/guice-common/src/main/java/org/apache/james/PeriodicalHealthChecks.java
@@ -31,26 +31,28 @@ import org.apache.james.lifecycle.api.Startable;
 import reactor.core.Disposable;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
+import reactor.core.scheduler.Scheduler;
 import reactor.core.scheduler.Schedulers;
 
 public class PeriodicalHealthChecks implements Startable {
 
-    private final Flux<HealthCheck> healthChecks;
-    private final long initialDelay;
-    private final long period;
+    private final Set<HealthCheck> healthChecks;
+    private final Scheduler scheduler;
+    private final Duration period;
     private Disposable disposable;
 
     @Inject
-    PeriodicalHealthChecks(Set<HealthCheck> healthChecks, 
PeriodicalHealthChecksConfiguration config) {
-        this.healthChecks = Flux.fromIterable(healthChecks);
-        this.initialDelay = config.getInitialDelay();
+    PeriodicalHealthChecks(Set<HealthCheck> healthChecks, Scheduler scheduler, 
PeriodicalHealthChecksConfiguration config) {
+        this.healthChecks = healthChecks;
+        this.scheduler = scheduler;
         this.period = config.getPeriod();
     }
 
     public void start() {
-        disposable = Flux.interval(Duration.ofSeconds(initialDelay), 
Duration.ofSeconds(period))
-            .flatMap(any ->
-                healthChecks.flatMap(healthCheck -> 
Mono.just(healthCheck.check())))
+        disposable = Flux.interval(period, scheduler)
+            .flatMap(any -> Flux.fromIterable(healthChecks)
+                .flatMap(healthCheck ->
+                    Mono.fromCallable(healthCheck::check)))
             .subscribeOn(Schedulers.elastic())
             .subscribe();
     }
@@ -59,4 +61,4 @@ public class PeriodicalHealthChecks implements Startable {
     public void stop() {
         disposable.dispose();
     }
-}
+}
\ No newline at end of file
diff --git 
a/server/container/guice/guice-common/src/test/java/org/apache/james/PeriodicalHealthChecksTest.java
 
b/server/container/guice/guice-common/src/test/java/org/apache/james/PeriodicalHealthChecksTest.java
index 8253899..dfc241f 100644
--- 
a/server/container/guice/guice-common/src/test/java/org/apache/james/PeriodicalHealthChecksTest.java
+++ 
b/server/container/guice/guice-common/src/test/java/org/apache/james/PeriodicalHealthChecksTest.java
@@ -25,32 +25,28 @@ import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import java.util.HashSet;
-import java.util.Set;
+import java.time.Duration;
 
 import org.apache.james.core.healthcheck.ComponentName;
 import org.apache.james.core.healthcheck.HealthCheck;
 import org.apache.james.core.healthcheck.Result;
 import org.apache.james.mailbox.events.EventDeadLettersHealthCheck;
-import org.awaitility.Awaitility;
-import org.awaitility.Duration;
-import org.awaitility.core.ConditionFactory;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 
-public class PeriodicalHealthChecksTest {
+import com.google.common.collect.ImmutableSet;
+
+import reactor.test.scheduler.VirtualTimeScheduler;
 
-    private static final long INITIAL_DELAY = 1;
-    private static final long PERIOD = 1;
-    private static final ConditionFactory AWAIT = Awaitility.await()
-        .atMost(Duration.TEN_SECONDS)
-        .with()
-        .pollInterval(Duration.ONE_SECOND);
+public class PeriodicalHealthChecksTest {
 
+    private static final long PERIOD = 10;
+    private static final int EXPECTED_INVOKED_TIME = 10;
     private HealthCheck mockHealthCheck1;
     private HealthCheck mockHealthCheck2;
+    private VirtualTimeScheduler scheduler;
     private PeriodicalHealthChecks testee;
 
     @BeforeEach
@@ -60,11 +56,10 @@ public class PeriodicalHealthChecksTest {
         when(mockHealthCheck1.check()).thenReturn(Result.healthy(new 
ComponentName("mockHealthCheck1")));
         when(mockHealthCheck2.check()).thenReturn(Result.healthy(new 
ComponentName("mockHealthCheck2")));
 
-        Set<HealthCheck> healthCheckSet = new HashSet<>();
-        healthCheckSet.add(mockHealthCheck1);
-        healthCheckSet.add(mockHealthCheck2);
-
-        testee = new PeriodicalHealthChecks(healthCheckSet, new 
PeriodicalHealthChecksConfiguration(INITIAL_DELAY, PERIOD));
+        scheduler = VirtualTimeScheduler.getOrSet();
+        testee = new PeriodicalHealthChecks(ImmutableSet.of(mockHealthCheck1, 
mockHealthCheck2),
+            scheduler,
+            new 
PeriodicalHealthChecksConfiguration(Duration.ofMillis(PERIOD)));
         testee.start();
     }
 
@@ -72,22 +67,23 @@ public class PeriodicalHealthChecksTest {
     void tearDown() {
         testee.stop();
     }
-
+    
     @Test
     void startShouldCallHealthCheckAtLeastOnce() {
-        AWAIT.untilAsserted(() -> verify(mockHealthCheck1, 
atLeast(1)).check());
+        scheduler.advanceTimeBy(Duration.ofMillis(PERIOD));
+        verify(mockHealthCheck1, atLeast(1)).check();
     }
 
     @Test
     void startShouldCallHealthCheckMultipleTimes() {
-        AWAIT.untilAsserted(() -> verify(mockHealthCheck1, times(5)).check());
+        scheduler.advanceTimeBy(Duration.ofMillis(PERIOD * 
EXPECTED_INVOKED_TIME));
+        verify(mockHealthCheck1, times(EXPECTED_INVOKED_TIME)).check();
     }
 
     @Test
     void startShouldCallAllHealthChecks() {
-        AWAIT.untilAsserted(() -> {
-            verify(mockHealthCheck1, atLeast(5)).check();
-            verify(mockHealthCheck2, atLeast(5)).check();
-        });
+        scheduler.advanceTimeBy(Duration.ofMillis(PERIOD * 
EXPECTED_INVOKED_TIME));
+        verify(mockHealthCheck1, times(EXPECTED_INVOKED_TIME)).check();
+        verify(mockHealthCheck2, times(EXPECTED_INVOKED_TIME)).check();
     }
-}
+}
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to