JAMES-1925 Adding test for CassandraMailboxMapper upon concurrency
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/09934b1f Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/09934b1f Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/09934b1f Branch: refs/heads/master Commit: 09934b1fe006db1302f4d3b9379d393b5cfdba6d Parents: 3a8d407 Author: Benoit Tellier <[email protected]> Authored: Tue Feb 14 19:04:29 2017 +0700 Committer: Antoine Duprat <[email protected]> Committed: Wed Feb 15 13:12:39 2017 +0100 ---------------------------------------------------------------------- .../CassandraMailboxMapperConcurrencyTest.java | 27 +++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/09934b1f/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 b6612be..14363c6 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 @@ -21,6 +21,7 @@ package org.apache.james.mailbox.cassandra.mail; import static org.assertj.core.api.Assertions.assertThat; +import java.util.List; import java.util.concurrent.TimeUnit; import org.apache.james.backends.cassandra.CassandraCluster; @@ -28,12 +29,13 @@ import org.apache.james.backends.cassandra.init.CassandraModuleComposite; import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; import org.apache.james.mailbox.cassandra.modules.CassandraMailboxModule; import org.apache.james.mailbox.model.MailboxPath; +import org.apache.james.mailbox.store.mail.model.Mailbox; import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox; import org.apache.james.util.concurrency.ConcurrentTestRunner; +import org.junit.After; import org.junit.Before; import org.junit.Test; - public class CassandraMailboxMapperConcurrencyTest { public static final int MAX_RETRY = 10; @@ -54,6 +56,11 @@ public class CassandraMailboxMapperConcurrencyTest { testee = new CassandraMailboxMapper(cassandra.getConf(), mailboxDAO, mailboxPathDAO, MAX_RETRY); } + @After + public void tearDown() { + cassandra.clearAllTables(); + } + @Test public void saveShouldBeThreadSafe() throws Exception { boolean termination = new ConcurrentTestRunner(THREAD_COUNT, OPERATION_COUNT, @@ -64,4 +71,22 @@ public class CassandraMailboxMapperConcurrencyTest { assertThat(termination).isTrue(); assertThat(testee.list()).hasSize(1); } + + @Test + public void saveWithUpdateShouldBeThreadSafe() throws Exception { + SimpleMailbox mailbox = new SimpleMailbox(MAILBOX_PATH, UID_VALIDITY); + testee.save(mailbox); + + mailbox.setName("newName"); + + boolean termination = new ConcurrentTestRunner(THREAD_COUNT, OPERATION_COUNT, + (a, b) -> testee.save(mailbox)) + .run() + .awaitTermination(1, TimeUnit.MINUTES); + + assertThat(termination).isTrue(); + List<Mailbox> list = testee.list(); + assertThat(list).hasSize(1); + assertThat(list.get(0)).isEqualToComparingFieldByField(mailbox); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
