You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2020/03/20 04:17:33 UTC
[james-project] 10/10: JAMES-3082 define different wait times for
event bus in tests
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 24866d6bbb48f8b634b89ec8a145cbfa2032d5e3
Author: RĂ©mi KOWALSKI <rk...@linagora.com>
AuthorDate: Wed Mar 11 14:10:55 2020 +0100
JAMES-3082 define different wait times for event bus in tests
---
.../mailbox/events/ErrorHandlingContract.java | 28 ++++++++--------
.../james/mailbox/events/EventBusContract.java | 38 ++++++++++++++++++++++
.../james/mailbox/events/EventBusTestFixture.java | 6 ----
.../apache/james/mailbox/events/GroupContract.java | 10 +++---
.../apache/james/mailbox/events/KeyContract.java | 7 ++--
.../james/mailbox/events/InVMEventBusTest.java | 5 +++
.../james/mailbox/events/RabbitMQEventBusTest.java | 17 +++++++---
7 files changed, 77 insertions(+), 34 deletions(-)
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/ErrorHandlingContract.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/ErrorHandlingContract.java
index 4c9612d..7979ed2 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/ErrorHandlingContract.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/ErrorHandlingContract.java
@@ -27,8 +27,6 @@ import static org.apache.james.mailbox.events.EventBusTestFixture.GROUP_A;
import static org.apache.james.mailbox.events.EventBusTestFixture.KEY_1;
import static org.apache.james.mailbox.events.EventBusTestFixture.NO_KEYS;
import static org.apache.james.mailbox.events.EventBusTestFixture.RETRY_BACKOFF_CONFIGURATION;
-import static org.apache.james.mailbox.events.EventBusTestFixture.WAIT_CONDITION;
-import static org.apache.james.mailbox.events.EventBusTestFixture.WAIT_CONDITION_LONG;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.spy;
@@ -103,7 +101,7 @@ interface ErrorHandlingContract extends EventBusContract {
eventBus().register(eventCollector, GROUP_A);
eventBus().dispatch(EVENT, NO_KEYS).block();
- WAIT_CONDITION
+ getSpeedProfile().shortWaitCondition()
.untilAsserted(() -> assertThat(eventCollector.getEvents()).hasSize(1));
}
@@ -125,7 +123,7 @@ interface ErrorHandlingContract extends EventBusContract {
eventBus().register(eventCollector, GROUP_A);
eventBus().dispatch(EVENT, NO_KEYS).block();
- WAIT_CONDITION_LONG
+ getSpeedProfile().longWaitCondition()
.untilAsserted(() -> assertThat(eventCollector.getEvents()).hasSize(1));
}
@@ -161,10 +159,9 @@ interface ErrorHandlingContract extends EventBusContract {
eventBus().register(throwingListener, GROUP_A);
eventBus().dispatch(EVENT, NO_KEYS).block();
- TimeUnit.MINUTES.sleep(1);
+ Thread.sleep(getSpeedProfile().getLongWaitTime().toMillis());
int numberOfCallsAfterExceedMaxRetries = throwingListener.timeElapsed.size();
- TimeUnit.MINUTES.sleep(1);
-
+ Thread.sleep(getSpeedProfile().getLongWaitTime().toMillis());
assertThat(throwingListener.timeElapsed.size())
.isEqualTo(numberOfCallsAfterExceedMaxRetries);
@@ -177,7 +174,7 @@ interface ErrorHandlingContract extends EventBusContract {
eventBus().register(throwingListener, GROUP_A);
eventBus().dispatch(EVENT, NO_KEYS).block();
- TimeUnit.MINUTES.sleep(1);
+ Thread.sleep(getSpeedProfile().getLongWaitTime().toMillis());
SoftAssertions.assertSoftly(softly -> {
List<Instant> timeElapsed = throwingListener.timeElapsed;
softly.assertThat(timeElapsed).hasSize(RETRY_BACKOFF_CONFIGURATION.getMaxRetries() + 1);
@@ -215,7 +212,7 @@ interface ErrorHandlingContract extends EventBusContract {
eventBus().register(listener, GROUP_A);
eventBus().dispatch(EVENT, NO_KEYS).block();
- WAIT_CONDITION.until(successfulRetry::get);
+ getSpeedProfile().shortWaitCondition().until(successfulRetry::get);
}
@Test
@@ -258,7 +255,7 @@ interface ErrorHandlingContract extends EventBusContract {
eventBus().register(eventCollector, new EventBusTestFixture.GroupA());
eventBus().dispatch(EVENT, NO_KEYS).block();
- WAIT_CONDITION
+ getSpeedProfile().shortWaitCondition()
.untilAsserted(() -> assertThat(eventCollector.getEvents()).hasSize(1));
assertThat(deadLetter().groupsWithFailedEvents().toIterable())
@@ -284,7 +281,8 @@ interface ErrorHandlingContract extends EventBusContract {
eventBus().register(eventCollector, GROUP_A);
eventBus().dispatch(EVENT, NO_KEYS).block();
- WAIT_CONDITION_LONG.untilAsserted(() -> assertThat(deadLetter().failedIds(GROUP_A)
+ getSpeedProfile().longWaitCondition()
+ .untilAsserted(() -> assertThat(deadLetter().failedIds(GROUP_A)
.flatMap(insertionId -> deadLetter().failedEvent(GROUP_A, insertionId))
.toIterable())
.containsOnly(EVENT));
@@ -312,7 +310,8 @@ interface ErrorHandlingContract extends EventBusContract {
eventBus().register(eventCollector, GROUP_A);
eventBus().reDeliver(GROUP_A, EVENT).block();
- WAIT_CONDITION_LONG.untilAsserted(() ->
+ getSpeedProfile().longWaitCondition()
+ .untilAsserted(() ->
assertThat(
deadLetter()
.failedIds(GROUP_A)
@@ -343,7 +342,8 @@ interface ErrorHandlingContract extends EventBusContract {
eventBus().register(eventCollector, GROUP_A);
eventBus().reDeliver(GROUP_A, EVENT).block();
- WAIT_CONDITION_LONG.untilAsserted(() -> assertThat(eventCollector.getEvents()).isNotEmpty());
+ getSpeedProfile().longWaitCondition()
+ .untilAsserted(() -> assertThat(eventCollector.getEvents()).isNotEmpty());
}
@Test
@@ -355,7 +355,7 @@ interface ErrorHandlingContract extends EventBusContract {
eventBus().register(eventCollector2, KEY_1);
eventBus().reDeliver(GROUP_A, EVENT).block();
- WAIT_CONDITION
+ getSpeedProfile().longWaitCondition()
.untilAsserted(() -> assertThat(eventCollector.getEvents()).hasSize(1));
assertThat(eventCollector2.getEvents()).isEmpty();
}
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusContract.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusContract.java
index 4abbdee..055eea3 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusContract.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusContract.java
@@ -19,8 +19,46 @@
package org.apache.james.mailbox.events;
+import static org.awaitility.Awaitility.await;
+
+import java.time.Duration;
+import java.util.concurrent.TimeUnit;
+
+import org.awaitility.core.ConditionFactory;
+
public interface EventBusContract {
+ enum EnvironmentSpeedProfile {
+ SLOW(Duration.ofSeconds(5), Duration.ofSeconds(30)),
+ FAST(Duration.ofMillis(200), Duration.ofSeconds(5));
+
+ private final Duration shortWaitTime;
+ private final Duration longWaitTime;
+
+ EnvironmentSpeedProfile(Duration shortWaitTime, Duration longWaitTime) {
+ this.shortWaitTime = shortWaitTime;
+ this.longWaitTime = longWaitTime;
+ }
+
+ public Duration getShortWaitTime() {
+ return shortWaitTime;
+ }
+
+ public Duration getLongWaitTime() {
+ return longWaitTime;
+ }
+
+ public ConditionFactory shortWaitCondition() {
+ return await().timeout(new org.awaitility.Duration(this.getShortWaitTime().toMillis(), TimeUnit.MILLISECONDS));
+ }
+
+ public ConditionFactory longWaitCondition() {
+ return await().timeout(new org.awaitility.Duration(this.getLongWaitTime().toMillis(), TimeUnit.MILLISECONDS));
+ }
+ }
+
+ EnvironmentSpeedProfile getSpeedProfile();
+
interface MultipleEventBusContract extends EventBusContract {
EventBus eventBus2();
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java
index 1d637b0..440ba39 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java
@@ -21,7 +21,6 @@ package org.apache.james.mailbox.events;
import static org.apache.james.mailbox.events.RetryBackoffConfiguration.DEFAULT_JITTER_FACTOR;
import static org.apache.james.mailbox.events.RetryBackoffConfiguration.DEFAULT_MAX_RETRIES;
-import static org.awaitility.Awaitility.await;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -35,8 +34,6 @@ import org.apache.james.mailbox.model.MailboxConstants;
import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.TestId;
-import org.awaitility.Duration;
-import org.awaitility.core.ConditionFactory;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
@@ -118,9 +115,6 @@ public interface EventBusTestFixture {
GroupC GROUP_C = new GroupC();
List<Group> ALL_GROUPS = ImmutableList.of(GROUP_A, GROUP_B, GROUP_C);
- ConditionFactory WAIT_CONDITION = await().timeout(Duration.FIVE_SECONDS);
- ConditionFactory WAIT_CONDITION_LONG = await().timeout(Duration.ONE_MINUTE);
-
java.time.Duration DEFAULT_FIRST_BACKOFF = java.time.Duration.ofMillis(20);
//Retry backoff configuration for testing with a shorter first backoff to accommodate the shorter retry interval in tests
RetryBackoffConfiguration RETRY_BACKOFF_CONFIGURATION = RetryBackoffConfiguration.builder()
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java
index ebfd4ea..83ef2cf 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java
@@ -29,7 +29,6 @@ import static org.apache.james.mailbox.events.EventBusTestFixture.GROUP_B;
import static org.apache.james.mailbox.events.EventBusTestFixture.GROUP_C;
import static org.apache.james.mailbox.events.EventBusTestFixture.NO_KEYS;
import static org.apache.james.mailbox.events.EventBusTestFixture.ONE_SECOND;
-import static org.apache.james.mailbox.events.EventBusTestFixture.WAIT_CONDITION;
import static org.apache.james.mailbox.events.EventBusTestFixture.newListener;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatCode;
@@ -96,7 +95,8 @@ public interface GroupContract {
IntStream.range(0, eventCount)
.forEach(i -> eventBus().dispatch(EVENT, NO_KEYS).block());
- WAIT_CONDITION.atMost(org.awaitility.Duration.TEN_MINUTES).untilAsserted(() -> assertThat(finishedExecutions.get()).isEqualTo(eventCount));
+ getSpeedProfile().shortWaitCondition().atMost(org.awaitility.Duration.TEN_MINUTES)
+ .untilAsserted(() -> assertThat(finishedExecutions.get()).isEqualTo(eventCount));
assertThat(rateExceeded).isFalse();
}
@@ -145,7 +145,7 @@ public interface GroupContract {
eventBus().dispatch(EVENT, NO_KEYS).subscribeOn(Schedulers.elastic()).subscribe();
- WAIT_CONDITION.atMost(org.awaitility.Duration.TEN_SECONDS)
+ getSpeedProfile().shortWaitCondition().atMost(org.awaitility.Duration.TEN_SECONDS)
.untilAsserted(() -> assertThat(threads).hasSize(3));
assertThat(threads).doesNotHaveDuplicates();
} finally {
@@ -166,7 +166,7 @@ public interface GroupContract {
eventBus().register(listener, GROUP_A);
eventBus().dispatch(EVENT, NO_KEYS).block();
- WAIT_CONDITION.until(successfulRetry::get);
+ getSpeedProfile().shortWaitCondition().until(successfulRetry::get);
}
@Test
@@ -318,7 +318,7 @@ public interface GroupContract {
eventBus().dispatch(EVENT, NO_KEYS).block();
eventBus().dispatch(EVENT_2, NO_KEYS).block();
- WAIT_CONDITION
+ getSpeedProfile().shortWaitCondition()
.untilAsserted(() -> assertThat(listener.numberOfEventCalls()).isEqualTo(1));
}
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/KeyContract.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/KeyContract.java
index 2c8e581..34dd756 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/KeyContract.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/KeyContract.java
@@ -27,7 +27,6 @@ import static org.apache.james.mailbox.events.EventBusTestFixture.KEY_1;
import static org.apache.james.mailbox.events.EventBusTestFixture.KEY_2;
import static org.apache.james.mailbox.events.EventBusTestFixture.NO_KEYS;
import static org.apache.james.mailbox.events.EventBusTestFixture.ONE_SECOND;
-import static org.apache.james.mailbox.events.EventBusTestFixture.WAIT_CONDITION;
import static org.apache.james.mailbox.events.EventBusTestFixture.newListener;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatCode;
@@ -82,7 +81,7 @@ public interface KeyContract extends EventBusContract {
IntStream.range(0, eventCount)
.forEach(i -> eventBus().dispatch(EVENT, KEY_1).block());
- WAIT_CONDITION.atMost(org.awaitility.Duration.TEN_MINUTES)
+ getSpeedProfile().shortWaitCondition().atMost(org.awaitility.Duration.TEN_MINUTES)
.untilAsserted(() -> assertThat(finishedExecutions.get()).isEqualTo(eventCount));
assertThat(rateExceeded).isFalse();
}
@@ -108,7 +107,7 @@ public interface KeyContract extends EventBusContract {
eventBus().dispatch(EVENT, KEY_1).subscribeOn(Schedulers.elastic()).subscribe();
- WAIT_CONDITION.atMost(org.awaitility.Duration.TEN_SECONDS)
+ getSpeedProfile().shortWaitCondition().atMost(org.awaitility.Duration.TEN_SECONDS)
.untilAsserted(() -> assertThat(threads).hasSize(3));
assertThat(threads).doesNotHaveDuplicates();
} finally {
@@ -362,7 +361,7 @@ public interface KeyContract extends EventBusContract {
eventBus().dispatch(EVENT, KEY_1).block();
eventBus().dispatch(EVENT_2, KEY_1).block();
- WAIT_CONDITION
+ getSpeedProfile().shortWaitCondition()
.untilAsserted(() -> assertThat(listener.numberOfEventCalls()).isEqualTo(1));
}
diff --git a/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/InVMEventBusTest.java b/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/InVMEventBusTest.java
index 3195baa..5a6a6ea 100644
--- a/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/InVMEventBusTest.java
+++ b/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/InVMEventBusTest.java
@@ -37,6 +37,11 @@ public class InVMEventBusTest implements KeyContract.SingleEventBusKeyContract,
}
@Override
+ public EnvironmentSpeedProfile getSpeedProfile() {
+ return EnvironmentSpeedProfile.FAST;
+ }
+
+ @Override
public EventBus eventBus() {
return eventBus;
}
diff --git a/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/RabbitMQEventBusTest.java b/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/RabbitMQEventBusTest.java
index 0425320..ee96d11 100644
--- a/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/RabbitMQEventBusTest.java
+++ b/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/RabbitMQEventBusTest.java
@@ -31,7 +31,6 @@ import static org.apache.james.mailbox.events.EventBusTestFixture.EVENT;
import static org.apache.james.mailbox.events.EventBusTestFixture.GROUP_A;
import static org.apache.james.mailbox.events.EventBusTestFixture.KEY_1;
import static org.apache.james.mailbox.events.EventBusTestFixture.NO_KEYS;
-import static org.apache.james.mailbox.events.EventBusTestFixture.WAIT_CONDITION;
import static org.apache.james.mailbox.events.EventBusTestFixture.newAsyncListener;
import static org.apache.james.mailbox.events.EventBusTestFixture.newListener;
import static org.apache.james.mailbox.events.GroupRegistration.WorkQueueName.MAILBOX_EVENT_WORK_QUEUE_PREFIX;
@@ -77,7 +76,6 @@ import org.junit.jupiter.api.extension.RegisterExtension;
import org.mockito.stubbing.Answer;
import com.google.common.collect.ImmutableSet;
-
import reactor.core.publisher.Mono;
import reactor.rabbitmq.BindingSpecification;
import reactor.rabbitmq.ExchangeSpecification;
@@ -100,6 +98,11 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract,
private RoutingKeyConverter routingKeyConverter;
private MemoryEventDeadLetters memoryEventDeadLetters;
+ @Override
+ public EnvironmentSpeedProfile getSpeedProfile() {
+ return EnvironmentSpeedProfile.SLOW;
+ }
+
@BeforeEach
void setUp() {
memoryEventDeadLetters = new MemoryEventDeadLetters();
@@ -184,6 +187,10 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract,
class ConcurrentTest implements EventBusConcurrentTestContract.MultiEventBusConcurrentContract,
EventBusConcurrentTestContract.SingleEventBusConcurrentContract {
+ @Override
+ public EnvironmentSpeedProfile getSpeedProfile() {
+ return EnvironmentSpeedProfile.SLOW;
+ }
@Test
void rabbitMQEventBusShouldHandleBulksGracefully() throws Exception {
EventBusTestFixture.MailboxListenerCountingSuccessfulExecution countingListener1 = newCountingListener();
@@ -244,15 +251,15 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract,
eventBus3.register(eventBus3Listener, GROUP_A);
eventBus.dispatch(EVENT, NO_KEYS).block();
- WAIT_CONDITION
+ getSpeedProfile().shortWaitCondition()
.untilAsserted(() -> assertThat(eventBusListener.numberOfEventCalls()).isEqualTo(1));
eventBus.stop();
- WAIT_CONDITION
+ getSpeedProfile().shortWaitCondition()
.untilAsserted(() -> assertThat(eventBus2Listener.numberOfEventCalls()).isEqualTo(1));
eventBus2.stop();
- WAIT_CONDITION
+ getSpeedProfile().shortWaitCondition()
.untilAsserted(() -> assertThat(eventBus3Listener.numberOfEventCalls()).isEqualTo(1));
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org