JAMES-2541 Improve concurrent test runner builder

 - Explicitly name the operation
 - Cascading lambdas to ensure compulsory parameters


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/469eed38
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/469eed38
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/469eed38

Branch: refs/heads/master
Commit: 469eed38c70c15b03305df683356ac562e318762
Parents: 9a5e1e5
Author: Benoit Tellier <btell...@linagora.com>
Authored: Tue Sep 11 10:44:11 2018 +0700
Committer: Benoit Tellier <btell...@linagora.com>
Committed: Thu Oct 4 15:12:07 2018 +0700

----------------------------------------------------------------------
 .../james/mailbox/MailboxManagerTest.java       |  4 +-
 .../CassandraMailboxMapperConcurrencyTest.java  |  6 +-
 .../QuotaThresholdMailingIntegrationTest.java   |  3 +-
 .../store/mail/model/MessageIdMapperTest.java   | 20 ++++---
 .../store/mail/model/MessageMapperTest.java     | 18 +++---
 .../mailbox/tika/CachingTextExtractorTest.java  |  3 +-
 .../processor/base/UidMsnConverterTest.java     | 15 +++--
 .../protocols/smtp/AbstractSMTPServerTest.java  |  3 +-
 .../util/concurrency/ConcurrentTestRunner.java  | 56 ++++++++++--------
 .../concurrency/ConcurrentTestRunnerTest.java   | 60 +++++++++++++-------
 .../api/MailRepositoryUrlStoreContract.java     |  6 +-
 .../memory/MemoryMailRepositoryStoreTest.java   |  7 ++-
 .../mailets/delivery/MailboxAppenderTest.java   |  3 +-
 .../mailrepository/MailRepositoryContract.java  |  3 +-
 .../org/apache/james/jmap/ProvisioningTest.java |  5 +-
 .../DefaultMailboxesProvisioningFilterTest.java |  3 +-
 ...ltMailboxesProvisioningFilterThreadTest.java |  3 +-
 .../jmap/UserProvisioningFilterThreadTest.java  |  3 +-
 18 files changed, 135 insertions(+), 86 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/469eed38/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java 
b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
index f36b1b3..6f904ec 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
@@ -981,9 +981,9 @@ public abstract class MailboxManagerTest {
         String mailboxName = 
"a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z";
 
         ConcurrentTestRunner testRunner = ConcurrentTestRunner.builder()
+            .operation((a, b) -> 
mailboxManager.createMailbox(MailboxPath.forUser(USER_1, mailboxName + a), 
session))
             .threadCount(10)
-            .build(
-                (a, b) -> 
mailboxManager.createMailbox(MailboxPath.forUser(USER_1, mailboxName + a), 
session))
+            .build()
             .run();
         testRunner.awaitTermination(1, TimeUnit.MINUTES);
         testRunner.assertNoException();

http://git-wip-us.apache.org/repos/asf/james-project/blob/469eed38/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 b4f8090..bbe6577 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
@@ -62,9 +62,10 @@ class CassandraMailboxMapperConcurrencyTest {
     @Test
     void saveShouldBeThreadSafe() throws Exception {
         boolean termination = ConcurrentTestRunner.builder()
+            .operation((a, b) -> testee.save(new SimpleMailbox(MAILBOX_PATH, 
UID_VALIDITY)))
             .threadCount(THREAD_COUNT)
             .operationCount(OPERATION_COUNT)
-            .build((a, b) -> testee.save(new SimpleMailbox(MAILBOX_PATH, 
UID_VALIDITY)))
+            .build()
             .run()
             .awaitTermination(1, TimeUnit.MINUTES);
 
@@ -80,9 +81,10 @@ class CassandraMailboxMapperConcurrencyTest {
         mailbox.setName("newName");
 
         boolean termination = ConcurrentTestRunner.builder()
+            .operation((a, b) -> testee.save(mailbox))
             .threadCount(THREAD_COUNT)
             .operationCount(OPERATION_COUNT)
-            .build((a, b) -> testee.save(mailbox))
+            .build()
             .run()
             .awaitTermination(1, TimeUnit.MINUTES);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/469eed38/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdMailingIntegrationTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdMailingIntegrationTest.java
 
b/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdMailingIntegrationTest.java
index 964570c..3a7a2f3 100644
--- 
a/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdMailingIntegrationTest.java
+++ 
b/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdMailingIntegrationTest.java
@@ -212,8 +212,9 @@ public interface QuotaThresholdMailingIntegrationTest {
                 .build());
 
         ConcurrentTestRunner.builder()
+            .operation((threadNb, step) -> testee.event(new 
QuotaUsageUpdatedEvent(BOB_SESSION, QUOTAROOT, Counts._40_PERCENT, 
Sizes._55_PERCENT, NOW)))
             .threadCount(10)
-            .build((threadNb, step) -> testee.event(new 
QuotaUsageUpdatedEvent(BOB_SESSION, QUOTAROOT, Counts._40_PERCENT, 
Sizes._55_PERCENT, NOW)))
+            .build()
             .run()
             .awaitTermination(1, TimeUnit.MINUTES);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/469eed38/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
index db3cd6e..7f653eb 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
@@ -678,12 +678,14 @@ public abstract class MessageIdMapperTest {
         int threadCount = 2;
         int updateCount = 10;
         assertThat(ConcurrentTestRunner.builder()
-            .threadCount(threadCount)
-            .operationCount(updateCount)
-            .build((threadNumber, step) -> 
sut.setFlags(message1.getMessageId(),
+            .operation((threadNumber, step) -> 
sut.setFlags(message1.getMessageId(),
                 ImmutableList.of(message1.getMailboxId()),
                 new Flags("custom-" + threadNumber + "-" + step),
-                FlagsUpdateMode.ADD)).run()
+                FlagsUpdateMode.ADD))
+            .threadCount(threadCount)
+            .operationCount(updateCount)
+            .build()
+            .run()
             .awaitTermination(1, TimeUnit.MINUTES))
             .isTrue();
 
@@ -702,9 +704,7 @@ public abstract class MessageIdMapperTest {
         int threadCount = 4;
         int updateCount = 20;
         assertThat(ConcurrentTestRunner.builder()
-            .threadCount(threadCount)
-            .operationCount(updateCount)
-            .build((threadNumber, step) -> {
+            .operation((threadNumber, step) -> {
                 if (step  < updateCount / 2) {
                     sut.setFlags(message1.getMessageId(),
                         ImmutableList.of(message1.getMailboxId()),
@@ -716,7 +716,11 @@ public abstract class MessageIdMapperTest {
                         new Flags("custom-" + threadNumber + "-" + 
(updateCount - step - 1)),
                         FlagsUpdateMode.REMOVE);
                 }
-            }).run()
+            })
+            .threadCount(threadCount)
+            .operationCount(updateCount)
+            .build()
+            .run()
             .awaitTermination(1, TimeUnit.MINUTES))
             .isTrue();
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/469eed38/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
index a993d81..f113489 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
@@ -797,11 +797,13 @@ public abstract class MessageMapperTest {
         int threadCount = 2;
         int updateCount = 10;
         assertThat(ConcurrentTestRunner.builder()
+            .operation((threadNumber, step) -> 
messageMapper.updateFlags(benwaInboxMailbox,
+                new FlagsUpdateCalculator(new Flags("custom-" + threadNumber + 
"-" + step), FlagsUpdateMode.ADD),
+                MessageRange.one(message1.getUid())))
             .threadCount(threadCount)
             .operationCount(updateCount)
-            .build((threadNumber, step) -> 
messageMapper.updateFlags(benwaInboxMailbox,
-                new FlagsUpdateCalculator(new Flags("custom-" + threadNumber + 
"-" + step), FlagsUpdateMode.ADD),
-                MessageRange.one(message1.getUid()))).run()
+            .build()
+            .run()
             .awaitTermination(1, TimeUnit.MINUTES))
             .isTrue();
 
@@ -819,9 +821,7 @@ public abstract class MessageMapperTest {
         int threadCount = 4;
         int updateCount = 20;
         assertThat(ConcurrentTestRunner.builder()
-            .threadCount(threadCount)
-            .operationCount(updateCount)
-            .build((threadNumber, step) -> {
+            .operation((threadNumber, step) -> {
                 if (step  < updateCount / 2) {
                     messageMapper.updateFlags(benwaInboxMailbox,
                         new FlagsUpdateCalculator(new Flags("custom-" + 
threadNumber + "-" + step), FlagsUpdateMode.ADD),
@@ -832,7 +832,11 @@ public abstract class MessageMapperTest {
                             FlagsUpdateMode.REMOVE),
                         MessageRange.one(message1.getUid()));
                 }
-            }).run()
+            })
+            .threadCount(threadCount)
+            .operationCount(updateCount)
+            .build()
+            .run()
             .awaitTermination(1, TimeUnit.MINUTES))
             .isTrue();
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/469eed38/mailbox/tika/src/test/java/org/apache/james/mailbox/tika/CachingTextExtractorTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/tika/src/test/java/org/apache/james/mailbox/tika/CachingTextExtractorTest.java
 
b/mailbox/tika/src/test/java/org/apache/james/mailbox/tika/CachingTextExtractorTest.java
index 91a9eba..a33d582 100644
--- 
a/mailbox/tika/src/test/java/org/apache/james/mailbox/tika/CachingTextExtractorTest.java
+++ 
b/mailbox/tika/src/test/java/org/apache/james/mailbox/tika/CachingTextExtractorTest.java
@@ -186,8 +186,9 @@ public class CachingTextExtractorTest {
     @RepeatedTest(10)
     void concurrentValueComputationShouldNotLeadToDuplicatedBackendAccess() 
throws Exception {
         ConcurrentTestRunner.builder()
+            .operation((a, b) -> 
textExtractor.extractContent(INPUT_STREAM.get(), CONTENT_TYPE))
             .threadCount(10)
-            .build((a, b) -> textExtractor.extractContent(INPUT_STREAM.get(), 
CONTENT_TYPE))
+            .build()
             .run()
             .awaitTermination(1, TimeUnit.MINUTES);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/469eed38/protocols/imap/src/test/java/org/apache/james/imap/processor/base/UidMsnConverterTest.java
----------------------------------------------------------------------
diff --git 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/UidMsnConverterTest.java
 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/UidMsnConverterTest.java
index 9da76ae..501986c 100644
--- 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/UidMsnConverterTest.java
+++ 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/UidMsnConverterTest.java
@@ -371,15 +371,16 @@ public class UidMsnConverterTest {
         }
 
         ConcurrentTestRunner concurrentTestRunner = 
ConcurrentTestRunner.builder()
-            .threadCount(2)
-            .operationCount(initialCount)
-            .build((threadNumber, step) -> {
+            .operation((threadNumber, step) -> {
                 if (threadNumber == 0) {
                     testee.remove(MessageUid.of(step + 1));
                 } else {
                     testee.addUid(MessageUid.of(initialCount + step + 1));
                 }
-            });
+            })
+            .threadCount(2)
+            .operationCount(initialCount)
+            .build();
         concurrentTestRunner.run();
         concurrentTestRunner.awaitTermination(10, TimeUnit.SECONDS);
 
@@ -397,9 +398,10 @@ public class UidMsnConverterTest {
         int threadCount = 2;
 
         ConcurrentTestRunner concurrentTestRunner = 
ConcurrentTestRunner.builder()
+            .operation((threadNumber, step) -> 
testee.addUid(MessageUid.of((threadNumber * operationCount) + (step + 1))))
             .threadCount(threadCount)
             .operationCount(operationCount)
-            .build((threadNumber, step) -> 
testee.addUid(MessageUid.of((threadNumber * operationCount) + (step + 1))));
+            .build();
         concurrentTestRunner.run();
         concurrentTestRunner.awaitTermination(10, TimeUnit.SECONDS);
 
@@ -420,9 +422,10 @@ public class UidMsnConverterTest {
         }
 
         ConcurrentTestRunner concurrentTestRunner = 
ConcurrentTestRunner.builder()
+            .operation((threadNumber, step) -> 
testee.remove(MessageUid.of((threadNumber * operationCount) + (step + 1))))
             .threadCount(threadCount)
             .operationCount(operationCount)
-            .build((threadNumber, step) -> 
testee.remove(MessageUid.of((threadNumber * operationCount) + (step + 1))));
+            .build();
         concurrentTestRunner.run();
         concurrentTestRunner.awaitTermination(10, TimeUnit.SECONDS);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/469eed38/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
----------------------------------------------------------------------
diff --git 
a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
 
b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
index e6891eb..79a9949 100644
--- 
a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
+++ 
b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
@@ -104,8 +104,9 @@ public abstract class AbstractSMTPServerTest {
             String mailContent = CharStreams.toString(new 
InputStreamReader(ClassLoader.getSystemResourceAsStream("a50.eml"), 
StandardCharsets.US_ASCII));
 
             assertThat(ConcurrentTestRunner.builder()
+                .operation((threadNumber, step) -> send(finalServer, 
bindedAddress, mailContent))
                 .threadCount(4)
-                .build((threadNumber, step) -> send(finalServer, 
bindedAddress, mailContent))
+                .build()
                 .run()
                 .awaitTermination(1, TimeUnit.MINUTES))
                 .isTrue();

http://git-wip-us.apache.org/repos/asf/james-project/blob/469eed38/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 0efb525..052f5db 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
@@ -38,19 +38,28 @@ public class ConcurrentTestRunner {
 
     public static final int DEFAULT_OPERATION_COUNT = 1;
 
-    public static class Builder {
-        private Optional<Integer> threadCount;
-        private Optional<Integer>  operationCount;
+    @FunctionalInterface
+    public interface RequireOperation {
+        RequireThreadCount operation(ConcurrentOperation operation);
+    }
 
-        public Builder() {
-            threadCount = Optional.empty();
-            operationCount = Optional.empty();
-        }
+    @FunctionalInterface
+    public interface RequireThreadCount {
+        Builder threadCount(int threadCount);
+    }
+
+    public static class Builder {
+        private final int threadCount;
+        private final ConcurrentOperation operation;
+        private Optional<Integer> operationCount;
 
-        public Builder threadCount(int threadCount) {
+        public Builder(int threadCount, ConcurrentOperation operation) {
             Preconditions.checkArgument(threadCount > 0, "Thread count should 
be strictly positive");
-            this.threadCount = Optional.of(threadCount);
-            return this;
+            Preconditions.checkNotNull(operation);
+
+            this.threadCount = threadCount;
+            this.operation = operation;
+            this.operationCount = Optional.empty();
         }
 
         public Builder operationCount(int operationCount) {
@@ -59,29 +68,26 @@ public class ConcurrentTestRunner {
             return this;
         }
 
-        public ConcurrentTestRunner build(BiConsumer operation) {
-            Preconditions.checkState(threadCount.isPresent(), "'threadCount' 
is compulsory");
-            Preconditions.checkNotNull(operation);
-
+        public ConcurrentTestRunner build() {
             return new ConcurrentTestRunner(
-                threadCount.get(),
+                threadCount,
                 operationCount.orElse(DEFAULT_OPERATION_COUNT),
                 operation);
         }
     }
 
-    public interface BiConsumer {
-        void consume(int threadNumber, int step) throws Exception;
+    public interface ConcurrentOperation {
+        void execute(int threadNumber, int step) throws Exception;
     }
 
     private class ConcurrentRunnableTask implements Runnable {
         private final int threadNumber;
-        private final BiConsumer biConsumer;
+        private final ConcurrentOperation concurrentOperation;
         private Exception exception;
 
-        public ConcurrentRunnableTask(int threadNumber, BiConsumer biConsumer) 
{
+        public ConcurrentRunnableTask(int threadNumber, ConcurrentOperation 
concurrentOperation) {
             this.threadNumber = threadNumber;
-            this.biConsumer = biConsumer;
+            this.concurrentOperation = concurrentOperation;
         }
 
         @Override
@@ -90,7 +96,7 @@ public class ConcurrentTestRunner {
             countDownLatch.countDown();
             for (int i = 0; i < operationCount; i++) {
                 try {
-                    biConsumer.consume(threadNumber, i);
+                    concurrentOperation.execute(threadNumber, i);
                 } catch (Exception e) {
                     LOGGER.error("Error caught during concurrent testing", e);
                     exception = e;
@@ -104,18 +110,18 @@ public class ConcurrentTestRunner {
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(ConcurrentTestRunner.class);
 
-    public static Builder builder() {
-        return new Builder();
+    public static RequireOperation builder() {
+        return operation -> threadCount -> new Builder(threadCount, operation);
     }
 
     private final int threadCount;
     private final int operationCount;
     private final CountDownLatch countDownLatch;
-    private final BiConsumer biConsumer;
+    private final ConcurrentOperation biConsumer;
     private final ExecutorService executorService;
     private final List<Future<?>> futures;
 
-    private ConcurrentTestRunner(int threadCount, int operationCount, 
BiConsumer biConsumer) {
+    private ConcurrentTestRunner(int threadCount, int operationCount, 
ConcurrentOperation biConsumer) {
         this.threadCount = threadCount;
         this.operationCount = operationCount;
         this.countDownLatch = new CountDownLatch(threadCount);

http://git-wip-us.apache.org/repos/asf/james-project/blob/469eed38/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 5eac926..3cabc82 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
@@ -29,14 +29,16 @@ import java.util.concurrent.TimeUnit;
 import org.junit.Test;
 
 public class ConcurrentTestRunnerTest {
-    public static final ConcurrentTestRunner.BiConsumer EMPTY_BI_CONSUMER = 
(threadNumber, step) -> { };
+    public static final ConcurrentTestRunner.ConcurrentOperation NOOP = 
(threadNumber, step) -> { };
     public static final int DEFAULT_AWAIT_TIME = 100;
 
     @Test
     public void constructorShouldThrowOnNegativeThreadCount() {
         assertThatThrownBy(() ->
             ConcurrentTestRunner.builder()
-                .threadCount(-1))
+                .operation(NOOP)
+                .threadCount(-1)
+                .build())
             .isInstanceOf(IllegalArgumentException.class);
     }
 
@@ -44,6 +46,8 @@ public class ConcurrentTestRunnerTest {
     public void constructorShouldThrowOnNegativeOperationCount() {
         assertThatThrownBy(() ->
             ConcurrentTestRunner.builder()
+                .operation(NOOP)
+                .threadCount(1)
                 .operationCount(-1))
             .isInstanceOf(IllegalArgumentException.class);
     }
@@ -52,7 +56,9 @@ public class ConcurrentTestRunnerTest {
     public void constructorShouldThrowOnZeroThreadCount() {
         assertThatThrownBy(() ->
             ConcurrentTestRunner.builder()
-                .threadCount(0))
+                .operation(NOOP)
+                .threadCount(0)
+                .build())
             .isInstanceOf(IllegalArgumentException.class);
     }
 
@@ -60,6 +66,8 @@ public class ConcurrentTestRunnerTest {
     public void constructorShouldThrowOnZeroOperationCount() {
         assertThatThrownBy(() ->
             ConcurrentTestRunner.builder()
+                .operation(NOOP)
+                .threadCount(1)
                 .operationCount(0))
             .isInstanceOf(IllegalArgumentException.class);
     }
@@ -68,16 +76,18 @@ public class ConcurrentTestRunnerTest {
     public void constructorShouldThrowOnNullBiConsumer() {
         assertThatThrownBy(() ->
             ConcurrentTestRunner.builder()
+                .operation(null)
                 .threadCount(1)
-                .build(null))
+                .build())
             .isInstanceOf(NullPointerException.class);
     }
 
     @Test
     public void awaitTerminationShouldReturnTrueWhenFinished() throws 
Exception {
         ConcurrentTestRunner concurrentTestRunner = 
ConcurrentTestRunner.builder()
+            .operation(NOOP)
             .threadCount(1)
-            .build(EMPTY_BI_CONSUMER)
+            .build()
             .run();
 
         assertThat(concurrentTestRunner.awaitTermination(DEFAULT_AWAIT_TIME, 
TimeUnit.MILLISECONDS)).isTrue();
@@ -88,8 +98,9 @@ public class ConcurrentTestRunnerTest {
         int sleepDelay = 50;
 
         ConcurrentTestRunner concurrentTestRunner = 
ConcurrentTestRunner.builder()
+            .operation((threadNumber, step) -> Thread.sleep(sleepDelay))
             .threadCount(1)
-            .build((threadNumber, step) -> Thread.sleep(sleepDelay))
+            .build()
             .run();
 
         assertThat(concurrentTestRunner.awaitTermination(sleepDelay / 2, 
TimeUnit.MILLISECONDS)).isFalse();
@@ -100,9 +111,10 @@ public class ConcurrentTestRunnerTest {
         ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<>();
 
         ConcurrentTestRunner concurrentTestRunner = 
ConcurrentTestRunner.builder()
+            .operation((threadNumber, step) -> queue.add(threadNumber + ":" + 
step))
             .threadCount(2)
             .operationCount(2)
-            .build((threadNumber, step) -> queue.add(threadNumber + ":" + 
step))
+            .build()
             .run();
 
         assertThat(concurrentTestRunner.awaitTermination(DEFAULT_AWAIT_TIME, 
TimeUnit.MILLISECONDS)).isTrue();
@@ -114,8 +126,9 @@ public class ConcurrentTestRunnerTest {
         ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<>();
 
         ConcurrentTestRunner concurrentTestRunner = 
ConcurrentTestRunner.builder()
+            .operation((threadNumber, step) -> queue.add(threadNumber + ":" + 
step))
             .threadCount(2)
-            .build((threadNumber, step) -> queue.add(threadNumber + ":" + 
step))
+            .build()
             .run();
 
         assertThat(concurrentTestRunner.awaitTermination(DEFAULT_AWAIT_TIME, 
TimeUnit.MILLISECONDS)).isTrue();
@@ -125,11 +138,12 @@ public class ConcurrentTestRunnerTest {
     @Test
     public void runShouldNotThrowOnExceptions() throws Exception {
         ConcurrentTestRunner concurrentTestRunner = 
ConcurrentTestRunner.builder()
-            .threadCount(2)
-            .operationCount(2)
-            .build((threadNumber, step) -> {
+            .operation((threadNumber, step) -> {
                 throw new RuntimeException();
             })
+            .threadCount(2)
+            .operationCount(2)
+            .build()
             .run();
 
         assertThat(concurrentTestRunner.awaitTermination(DEFAULT_AWAIT_TIME, 
TimeUnit.MILLISECONDS)).isTrue();
@@ -138,9 +152,10 @@ public class ConcurrentTestRunnerTest {
     @Test
     public void noExceptionsShouldNotThrowWhenNoExceptionGenerated() throws 
Exception {
         ConcurrentTestRunner concurrentTestRunner = 
ConcurrentTestRunner.builder()
+            .operation(NOOP)
             .threadCount(2)
             .operationCount(2)
-            .build(EMPTY_BI_CONSUMER)
+            .build()
             .run();
 
         concurrentTestRunner.awaitTermination(DEFAULT_AWAIT_TIME, 
TimeUnit.MILLISECONDS);
@@ -151,11 +166,12 @@ public class ConcurrentTestRunnerTest {
     @Test
     public void assertNoExceptionShouldThrowOnExceptions() throws Exception {
         ConcurrentTestRunner concurrentTestRunner = 
ConcurrentTestRunner.builder()
-            .threadCount(2)
-            .operationCount(2)
-            .build((threadNumber, step) -> {
+            .operation((threadNumber, step) -> {
                 throw new RuntimeException();
             })
+            .threadCount(2)
+            .operationCount(2)
+            .build()
             .run();
         concurrentTestRunner.awaitTermination(DEFAULT_AWAIT_TIME, 
TimeUnit.MILLISECONDS);
 
@@ -168,12 +184,13 @@ public class ConcurrentTestRunnerTest {
         ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<>();
 
         ConcurrentTestRunner concurrentTestRunner = 
ConcurrentTestRunner.builder()
-            .threadCount(2)
-            .operationCount(2)
-            .build((threadNumber, step) -> {
+            .operation((threadNumber, step) -> {
                 queue.add(threadNumber + ":" + step);
                 throw new RuntimeException();
             })
+            .threadCount(2)
+            .operationCount(2)
+            .build()
             .run();
 
         assertThat(concurrentTestRunner.awaitTermination(DEFAULT_AWAIT_TIME, 
TimeUnit.MILLISECONDS)).isTrue();
@@ -185,14 +202,15 @@ public class ConcurrentTestRunnerTest {
         ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<>();
 
         ConcurrentTestRunner concurrentTestRunner = 
ConcurrentTestRunner.builder()
-            .threadCount(2)
-            .operationCount(2)
-            .build((threadNumber, step) -> {
+            .operation((threadNumber, step) -> {
                 queue.add(threadNumber + ":" + step);
                 if ((threadNumber + step) % 2 == 0) {
                     throw new RuntimeException();
                 }
             })
+            .threadCount(2)
+            .operationCount(2)
+            .build()
             .run();
 
         assertThat(concurrentTestRunner.awaitTermination(DEFAULT_AWAIT_TIME, 
TimeUnit.MILLISECONDS)).isTrue();

http://git-wip-us.apache.org/repos/asf/james-project/blob/469eed38/server/data/data-api/src/test/java/org/apache/james/mailrepository/api/MailRepositoryUrlStoreContract.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-api/src/test/java/org/apache/james/mailrepository/api/MailRepositoryUrlStoreContract.java
 
b/server/data/data-api/src/test/java/org/apache/james/mailrepository/api/MailRepositoryUrlStoreContract.java
index 9bbe365..fcafc7d 100644
--- 
a/server/data/data-api/src/test/java/org/apache/james/mailrepository/api/MailRepositoryUrlStoreContract.java
+++ 
b/server/data/data-api/src/test/java/org/apache/james/mailrepository/api/MailRepositoryUrlStoreContract.java
@@ -75,9 +75,10 @@ public interface MailRepositoryUrlStoreContract {
         int operationCount = 10;
         int threadCount = 10;
         ConcurrentTestRunner testRunner = ConcurrentTestRunner.builder()
+            .operation((a, b) -> store.add(MailRepositoryUrl.from("proto://" + 
a + "/" + b)))
             .threadCount(threadCount)
             .operationCount(operationCount)
-            .build((a, b) -> store.add(MailRepositoryUrl.from("proto://" + a + 
"/" + b)))
+            .build()
             .run();
         testRunner.awaitTermination(1, TimeUnit.MINUTES);
         testRunner.assertNoException();
@@ -89,9 +90,10 @@ public interface MailRepositoryUrlStoreContract {
     default void 
addShouldNotAddDuplicatesInConcurrentEnvironment(MailRepositoryUrlStore store) 
throws Exception {
         int operationCount = 10;
         ConcurrentTestRunner testRunner = ConcurrentTestRunner.builder()
+            .operation((a, b) -> store.add(MailRepositoryUrl.from("proto://" + 
b)))
             .threadCount(10)
             .operationCount(operationCount)
-            .build((a, b) -> store.add(MailRepositoryUrl.from("proto://" + b)))
+            .build()
             .run();
         testRunner.awaitTermination(1, TimeUnit.MINUTES);
         testRunner.assertNoException();

http://git-wip-us.apache.org/repos/asf/james-project/blob/469eed38/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
 
b/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
index bf2d55a..e353d35 100644
--- 
a/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
+++ 
b/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
@@ -232,13 +232,14 @@ public class MemoryMailRepositoryStoreTest {
         int threadCount = 10;
 
         ConcurrentTestRunner concurrentTestRunner = 
ConcurrentTestRunner.builder()
-            .threadCount(10)
-            .build((threadNb, operationNb) -> repositoryStore.select(url)
+            .operation((threadNb, operationNb) -> repositoryStore.select(url)
                 .store(FakeMail.builder()
                     .name("name" + threadNb)
                     .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
                         .setText("Any body"))
-                    .build()));
+                    .build()))
+            .threadCount(10)
+            .build();
         concurrentTestRunner.run().awaitTermination(1, TimeUnit.MINUTES);
         concurrentTestRunner.assertNoException();
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/469eed38/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailboxAppenderTest.java
----------------------------------------------------------------------
diff --git 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailboxAppenderTest.java
 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailboxAppenderTest.java
index 914aba9..23f6d4c 100644
--- 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailboxAppenderTest.java
+++ 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailboxAppenderTest.java
@@ -126,8 +126,9 @@ public class MailboxAppenderTest {
     @RepeatedTest(20)
     void appendShouldNotFailInConcurrentEnvironment() throws Exception {
         ConcurrentTestRunner.builder()
+            .operation((a, b) -> testee.append(mimeMessage, USER, FOLDER + 
"/any"))
             .threadCount(100)
-            .build((a, b) -> testee.append(mimeMessage, USER, FOLDER + "/any"))
+            .build()
             .run()
             .assertNoException();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/469eed38/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
----------------------------------------------------------------------
diff --git 
a/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
 
b/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
index 6384798..48f1a48 100644
--- 
a/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
+++ 
b/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
@@ -452,9 +452,10 @@ public interface MailRepositoryContract {
                 new DistributionEntry<>(remove, 0.75)));
 
         ConcurrentTestRunner.builder()
+            .operation((a, b) -> distribution.sample().run())
             .threadCount(10)
             .operationCount(10)
-            .build((a, b) -> distribution.sample().run())
+            .build()
             .run()
             .awaitTermination(1, TimeUnit.MINUTES);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/469eed38/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/ProvisioningTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/ProvisioningTest.java
 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/ProvisioningTest.java
index b0b9af6..052adf1 100644
--- 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/ProvisioningTest.java
+++ 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/ProvisioningTest.java
@@ -79,11 +79,12 @@ public abstract class ProvisioningTest {
         String token = authenticateJamesUser(baseUri(jmapServer), USER, 
PASSWORD).serialize();
 
         boolean termination = ConcurrentTestRunner.builder()
-            .threadCount(10)
-            .build((a, b) -> with()
+            .operation((a, b) -> with()
                 .header("Authorization", token)
                 .body("[[\"getMailboxes\", {}, \"#0\"]]")
                 .post("/jmap"))
+            .threadCount(10)
+            .build()
             .run()
             .awaitTermination(1, TimeUnit.MINUTES);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/469eed38/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterTest.java
 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterTest.java
index ea0dd1f..697299c 100644
--- 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterTest.java
+++ 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterTest.java
@@ -90,8 +90,9 @@ public class DefaultMailboxesProvisioningFilterTest {
     @Test
     public void 
createMailboxesIfNeededShouldNotGenerateExceptionsInConcurrentEnvironment() 
throws Exception {
         ConcurrentTestRunner.builder()
+            .operation((threadNumber, step) -> 
testee.createMailboxesIfNeeded(session))
             .threadCount(10)
-            .build((threadNumber, step) -> 
testee.createMailboxesIfNeeded(session))
+            .build()
             .run()
             .assertNoException()
             .awaitTermination(10, TimeUnit.SECONDS);

http://git-wip-us.apache.org/repos/asf/james-project/blob/469eed38/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterThreadTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterThreadTest.java
 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterThreadTest.java
index c74ec7d..7060147 100644
--- 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterThreadTest.java
+++ 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterThreadTest.java
@@ -65,8 +65,9 @@ public class DefaultMailboxesProvisioningFilterThreadTest {
 
         ConcurrentTestRunner
             .builder()
+            .operation((threadNumber, step) -> 
sut.createMailboxesIfNeeded(session))
             .threadCount(2)
-            .build((threadNumber, step) -> 
sut.createMailboxesIfNeeded(session))
+            .build()
             .run()
             .assertNoException();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/469eed38/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterThreadTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterThreadTest.java
 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterThreadTest.java
index 0f09544..93a3270 100644
--- 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterThreadTest.java
+++ 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterThreadTest.java
@@ -45,8 +45,9 @@ public class UserProvisioningFilterThreadTest {
     public void testConcurrentAccessToFilterShouldNotThrow() throws 
ExecutionException, InterruptedException {
         ConcurrentTestRunner
             .builder()
+            .operation((threadNumber, step) -> 
sut.createAccountIfNeeded(session))
             .threadCount(2)
-            .build((threadNumber, step) -> sut.createAccountIfNeeded(session))
+            .build()
             .run()
             .assertNoException();
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to