JAMES-2541 Accept errors in concurrent tests when needed Sometime concurrent access are expected to throw
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d5a7cbfe Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d5a7cbfe Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d5a7cbfe Branch: refs/heads/master Commit: d5a7cbfe3904454d9bc11020d02cefff64f54844 Parents: 99329ee Author: Benoit Tellier <[email protected]> Authored: Wed Sep 12 16:54:13 2018 +0700 Committer: Benoit Tellier <[email protected]> Committed: Thu Oct 4 15:12:08 2018 +0700 ---------------------------------------------------------------------- .../CassandraMailboxMapperConcurrencyTest.java | 4 +- .../util/concurrency/ConcurrentTestRunner.java | 10 +++++ .../concurrency/ConcurrentTestRunnerTest.java | 45 +++++++++----------- 3 files changed, 33 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/d5a7cbfe/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperConcurrencyTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperConcurrencyTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperConcurrencyTest.java index 5055960..44f035c 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperConcurrencyTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperConcurrencyTest.java @@ -65,7 +65,7 @@ class CassandraMailboxMapperConcurrencyTest { .operation((a, b) -> testee.save(new SimpleMailbox(MAILBOX_PATH, UID_VALIDITY))) .threadCount(THREAD_COUNT) .operationCount(OPERATION_COUNT) - .runSuccessfullyWithin(Duration.ofMinutes(1)); + .runAcceptingErrorsWithin(Duration.ofMinutes(1)); assertThat(testee.list()).hasSize(1); } @@ -81,7 +81,7 @@ class CassandraMailboxMapperConcurrencyTest { .operation((a, b) -> testee.save(mailbox)) .threadCount(THREAD_COUNT) .operationCount(OPERATION_COUNT) - .runSuccessfullyWithin(Duration.ofMinutes(1)); + .runAcceptingErrorsWithin(Duration.ofMinutes(1)); List<Mailbox> list = testee.list(); assertThat(list).hasSize(1); http://git-wip-us.apache.org/repos/asf/james-project/blob/d5a7cbfe/server/container/util/src/main/java/org/apache/james/util/concurrency/ConcurrentTestRunner.java ---------------------------------------------------------------------- diff --git a/server/container/util/src/main/java/org/apache/james/util/concurrency/ConcurrentTestRunner.java b/server/container/util/src/main/java/org/apache/james/util/concurrency/ConcurrentTestRunner.java index 9ceefbb..8411d40 100644 --- a/server/container/util/src/main/java/org/apache/james/util/concurrency/ConcurrentTestRunner.java +++ b/server/container/util/src/main/java/org/apache/james/util/concurrency/ConcurrentTestRunner.java @@ -80,6 +80,11 @@ public class ConcurrentTestRunner { return build() .runSuccessfullyWithin(duration); } + + public ConcurrentTestRunner runAcceptingErrorsWithin(Duration duration) throws InterruptedException, ExecutionException { + return build() + .runAcceptingErrorsWithin(duration); + } } public interface ConcurrentOperation { @@ -168,4 +173,9 @@ public class ConcurrentTestRunner { .awaitTermination(duration) .assertNoException(); } + + public ConcurrentTestRunner runAcceptingErrorsWithin(Duration duration) throws InterruptedException, ExecutionException { + return run() + .awaitTermination(duration); + } } http://git-wip-us.apache.org/repos/asf/james-project/blob/d5a7cbfe/server/container/util/src/test/java/org/apache/james/util/concurrency/ConcurrentTestRunnerTest.java ---------------------------------------------------------------------- diff --git a/server/container/util/src/test/java/org/apache/james/util/concurrency/ConcurrentTestRunnerTest.java b/server/container/util/src/test/java/org/apache/james/util/concurrency/ConcurrentTestRunnerTest.java index 9789ba6..4997bbe 100644 --- a/server/container/util/src/test/java/org/apache/james/util/concurrency/ConcurrentTestRunnerTest.java +++ b/server/container/util/src/test/java/org/apache/james/util/concurrency/ConcurrentTestRunnerTest.java @@ -26,7 +26,6 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import java.time.Duration; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; import org.junit.Test; @@ -135,7 +134,7 @@ public class ConcurrentTestRunnerTest { }) .threadCount(2) .operationCount(2) - .runSuccessfullyWithin(DEFAULT_AWAIT_TIME)) + .runAcceptingErrorsWithin(DEFAULT_AWAIT_TIME)) .doesNotThrowAnyException(); } @@ -164,37 +163,35 @@ public class ConcurrentTestRunnerTest { } @Test - public void runShouldPerformAllOperationsEvenOnExceptions() { + public void runShouldPerformAllOperationsEvenOnExceptions() throws Exception { ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<>(); - assertThatCode(() -> ConcurrentTestRunner.builder() - .operation((threadNumber, step) -> { - queue.add(threadNumber + ":" + step); - throw new RuntimeException(); - }) - .threadCount(2) - .operationCount(2) - .runSuccessfullyWithin(DEFAULT_AWAIT_TIME)) - .doesNotThrowAnyException(); + ConcurrentTestRunner.builder() + .operation((threadNumber, step) -> { + queue.add(threadNumber + ":" + step); + throw new RuntimeException(); + }) + .threadCount(2) + .operationCount(2) + .runAcceptingErrorsWithin(DEFAULT_AWAIT_TIME); assertThat(queue).containsOnly("0:0", "0:1", "1:0", "1:1"); } @Test - public void runShouldPerformAllOperationsEvenOnOccasionalExceptions() { + public void runShouldPerformAllOperationsEvenOnOccasionalExceptions() throws Exception { ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<>(); - assertThatCode(() -> ConcurrentTestRunner.builder() - .operation((threadNumber, step) -> { - queue.add(threadNumber + ":" + step); - if ((threadNumber + step) % 2 == 0) { - throw new RuntimeException(); - } - }) - .threadCount(2) - .operationCount(2) - .runSuccessfullyWithin(DEFAULT_AWAIT_TIME)) - .doesNotThrowAnyException(); + ConcurrentTestRunner.builder() + .operation((threadNumber, step) -> { + queue.add(threadNumber + ":" + step); + if ((threadNumber + step) % 2 == 0) { + throw new RuntimeException(); + } + }) + .threadCount(2) + .operationCount(2) + .runAcceptingErrorsWithin(DEFAULT_AWAIT_TIME); assertThat(queue).containsOnly("0:0", "0:1", "1:0", "1:1"); } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
