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