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]

Reply via email to