JAMES-2449 Release all tests about snapshot isolation Keep some tests about exception upon concurrent actions
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d3f6f1ad Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d3f6f1ad Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d3f6f1ad Branch: refs/heads/master Commit: d3f6f1ada9a86d2f12b39cd5cff3bece64c56963 Parents: f101b0d Author: Benoit Tellier <[email protected]> Authored: Thu Aug 2 17:16:04 2018 +0700 Committer: Benoit Tellier <[email protected]> Committed: Fri Aug 3 15:51:30 2018 +0700 ---------------------------------------------------------------------- .../queue/api/ManageableMailQueueContract.java | 210 ++++++++++++++----- .../james/queue/file/FileMailQueueTest.java | 63 ------ 2 files changed, 155 insertions(+), 118 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/d3f6f1ad/server/queue/queue-api/src/test/java/org/apache/james/queue/api/ManageableMailQueueContract.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-api/src/test/java/org/apache/james/queue/api/ManageableMailQueueContract.java b/server/queue/queue-api/src/test/java/org/apache/james/queue/api/ManageableMailQueueContract.java index 00bac8d..53c4a4e 100644 --- a/server/queue/queue-api/src/test/java/org/apache/james/queue/api/ManageableMailQueueContract.java +++ b/server/queue/queue-api/src/test/java/org/apache/james/queue/api/ManageableMailQueueContract.java @@ -27,11 +27,14 @@ import static org.apache.mailet.base.MailAddressFixture.RECIPIENT2; import static org.apache.mailet.base.MailAddressFixture.RECIPIENT3; import static org.apache.mailet.base.MailAddressFixture.SENDER; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatCode; import org.apache.mailet.Mail; import org.apache.mailet.base.MailAddressFixture; import org.junit.jupiter.api.Test; +import com.google.common.collect.Iterators; + public interface ManageableMailQueueContract extends MailQueueContract { ManageableMailQueue getManageableMailQueue(); @@ -136,7 +139,25 @@ public interface ManageableMailQueueContract extends MailQueueContract { } @Test - default void concurrentDequeueShouldNotAlterBrowsing() throws Exception { + default void dequeueShouldNotFailWhenBrowsing() throws Exception { + getManageableMailQueue().enQueue(defaultMail() + .name("name1") + .build()); + getManageableMailQueue().enQueue(defaultMail() + .name("name2") + .build()); + getManageableMailQueue().enQueue(defaultMail() + .name("name3") + .build()); + + ManageableMailQueue.MailQueueIterator items = getManageableMailQueue().browse(); + + assertThatCode(() -> getManageableMailQueue().deQueue()).doesNotThrowAnyException(); + + } + + @Test + default void browseShouldNotFailWhenConcurrentDequeue() throws Exception { getManageableMailQueue().enQueue(defaultMail() .name("name1") .build()); @@ -151,14 +172,11 @@ public interface ManageableMailQueueContract extends MailQueueContract { getManageableMailQueue().deQueue(); - assertThat(items) - .extracting(ManageableMailQueue.MailQueueItemView::getMail) - .extracting(Mail::getName) - .containsExactly("name1", "name2", "name3"); + assertThatCode(() -> Iterators.consumingIterator(items)).doesNotThrowAnyException(); } @Test - default void concurrentDequeueShouldNotAlterBrowsingWhenDequeueWhileIterating() throws Exception { + default void dequeueShouldNotFailWhenBrowsingIterating() throws Exception { getManageableMailQueue().enQueue(defaultMail() .name("name1") .build()); @@ -170,20 +188,34 @@ public interface ManageableMailQueueContract extends MailQueueContract { .build()); ManageableMailQueue.MailQueueIterator items = getManageableMailQueue().browse(); + ManageableMailQueue.MailQueueItemView firstItem = items.next(); + + assertThatCode(() -> getManageableMailQueue().deQueue()).doesNotThrowAnyException(); + + } + @Test + default void browseShouldNotFailWhenConcurrentDequeueWhenIterating() throws Exception { + getManageableMailQueue().enQueue(defaultMail() + .name("name1") + .build()); + getManageableMailQueue().enQueue(defaultMail() + .name("name2") + .build()); + getManageableMailQueue().enQueue(defaultMail() + .name("name3") + .build()); + + ManageableMailQueue.MailQueueIterator items = getManageableMailQueue().browse(); ManageableMailQueue.MailQueueItemView firstItem = items.next(); getManageableMailQueue().deQueue(); - assertThat(firstItem.getMail().getName()).isEqualTo("name1"); - assertThat(items) - .extracting(ManageableMailQueue.MailQueueItemView::getMail) - .extracting(Mail::getName) - .containsExactly("name2", "name3"); + assertThatCode(() -> Iterators.consumingIterator(items)).doesNotThrowAnyException(); } @Test - default void browsingShouldNotAffectDequeue() throws Exception { + default void enqueueShouldNotFailWhenBrowsing() throws Exception { getManageableMailQueue().enQueue(defaultMail() .name("name1") .build()); @@ -195,149 +227,217 @@ public interface ManageableMailQueueContract extends MailQueueContract { .build()); ManageableMailQueue.MailQueueIterator items = getManageableMailQueue().browse(); - items.next(); - MailQueue.MailQueueItem mailQueueItem = getManageableMailQueue().deQueue(); + assertThatCode(() -> getManageableMailQueue().enQueue(defaultMail() + .name("name4") + .build())).doesNotThrowAnyException(); - assertThat(mailQueueItem.getMail().getName()).isEqualTo("name1"); } @Test - default void concurrentEnqueueShouldNotAlterBrowsingWhenDequeueWhileIterating() throws Exception { + default void browseShouldNotFailWhenConcurrentEnqueue() throws Exception { getManageableMailQueue().enQueue(defaultMail() .name("name1") .build()); getManageableMailQueue().enQueue(defaultMail() .name("name2") .build()); + getManageableMailQueue().enQueue(defaultMail() + .name("name3") + .build()); ManageableMailQueue.MailQueueIterator items = getManageableMailQueue().browse(); - ManageableMailQueue.MailQueueItemView firstItem = items.next(); + getManageableMailQueue().enQueue(defaultMail() + .name("name4") + .build()); + assertThatCode(() -> Iterators.consumingIterator(items)).doesNotThrowAnyException(); + } + + @Test + default void enqueueShouldNotFailWhenBrowsingIterating() throws Exception { + getManageableMailQueue().enQueue(defaultMail() + .name("name1") + .build()); + getManageableMailQueue().enQueue(defaultMail() + .name("name2") + .build()); getManageableMailQueue().enQueue(defaultMail() .name("name3") .build()); - assertThat(firstItem.getMail().getName()).isEqualTo("name1"); - assertThat(items).extracting(ManageableMailQueue.MailQueueItemView::getMail) - .extracting(Mail::getName) - .containsExactly("name2"); + ManageableMailQueue.MailQueueIterator items = getManageableMailQueue().browse(); + ManageableMailQueue.MailQueueItemView firstItem = items.next(); + + assertThatCode(() -> + getManageableMailQueue().enQueue(defaultMail() + .name("name4") + .build())) + .doesNotThrowAnyException(); + } @Test - default void concurrentFlushShouldNotAlterBrowsingWhenDequeueWhileIterating() throws Exception { + default void browseShouldNotFailWhenConcurrentEnqueueWhenIterating() throws Exception { getManageableMailQueue().enQueue(defaultMail() .name("name1") .build()); getManageableMailQueue().enQueue(defaultMail() .name("name2") .build()); + getManageableMailQueue().enQueue(defaultMail() + .name("name3") + .build()); ManageableMailQueue.MailQueueIterator items = getManageableMailQueue().browse(); - ManageableMailQueue.MailQueueItemView firstItem = items.next(); - getManageableMailQueue().flush(); + getManageableMailQueue().enQueue(defaultMail() + .name("name2") + .build()); - assertThat(firstItem.getMail().getName()).isEqualTo("name1"); - assertThat(items).extracting(ManageableMailQueue.MailQueueItemView::getMail) - .extracting(Mail::getName) - .containsExactly("name2"); + assertThatCode(() -> Iterators.consumingIterator(items)).doesNotThrowAnyException(); } @Test - default void concurrentFlushShouldNotAlterBrowsing() throws Exception { + default void clearShouldNotFailWhenBrowsingIterating() throws Exception { getManageableMailQueue().enQueue(defaultMail() .name("name1") .build()); getManageableMailQueue().enQueue(defaultMail() .name("name2") .build()); + getManageableMailQueue().enQueue(defaultMail() + .name("name3") + .build()); ManageableMailQueue.MailQueueIterator items = getManageableMailQueue().browse(); + ManageableMailQueue.MailQueueItemView firstItem = items.next(); - getManageableMailQueue().flush(); + assertThatCode(() -> getManageableMailQueue().clear()) + .doesNotThrowAnyException(); - assertThat(items).extracting(ManageableMailQueue.MailQueueItemView::getMail) - .extracting(Mail::getName) - .containsExactly("name1", "name2"); } @Test - default void concurrentClearShouldNotAlterBrowsingWhenDequeue() throws Exception { + default void browseShouldNotFailWhenConcurrentClearWhenIterating() throws Exception { getManageableMailQueue().enQueue(defaultMail() .name("name1") .build()); getManageableMailQueue().enQueue(defaultMail() .name("name2") .build()); + getManageableMailQueue().enQueue(defaultMail() + .name("name3") + .build()); ManageableMailQueue.MailQueueIterator items = getManageableMailQueue().browse(); + ManageableMailQueue.MailQueueItemView firstItem = items.next(); getManageableMailQueue().clear(); - assertThat(items).extracting(ManageableMailQueue.MailQueueItemView::getMail) - .extracting(Mail::getName) - .containsExactly("name1", "name2"); + assertThatCode(() -> Iterators.consumingIterator(items)).doesNotThrowAnyException(); } @Test - default void concurrentRemoveShouldNotAlterBrowsingWhenDequeue() throws Exception { + default void flushShouldNotFailWhenBrowsingIterating() throws Exception { getManageableMailQueue().enQueue(defaultMail() .name("name1") .build()); getManageableMailQueue().enQueue(defaultMail() .name("name2") .build()); + getManageableMailQueue().enQueue(defaultMail() + .name("name3") + .build()); ManageableMailQueue.MailQueueIterator items = getManageableMailQueue().browse(); + ManageableMailQueue.MailQueueItemView firstItem = items.next(); - getManageableMailQueue().remove(ManageableMailQueue.Type.Name, "name2"); + assertThatCode(() -> getManageableMailQueue().flush()) + .doesNotThrowAnyException(); - assertThat(items).extracting(ManageableMailQueue.MailQueueItemView::getMail) - .extracting(Mail::getName) - .containsExactly("name1", "name2"); } @Test - default void concurrentClearShouldNotAlterBrowsingWhenDequeueWhileIterating() throws Exception { + default void browseShouldNotFailWhenConcurrentFlushWhenIterating() throws Exception { getManageableMailQueue().enQueue(defaultMail() .name("name1") .build()); getManageableMailQueue().enQueue(defaultMail() .name("name2") .build()); + getManageableMailQueue().enQueue(defaultMail() + .name("name3") + .build()); ManageableMailQueue.MailQueueIterator items = getManageableMailQueue().browse(); - ManageableMailQueue.MailQueueItemView next = items.next(); + ManageableMailQueue.MailQueueItemView firstItem = items.next(); - getManageableMailQueue().clear(); + getManageableMailQueue().flush(); - assertThat(next.getMail().getName()).isEqualTo("name1"); - assertThat(items).extracting(ManageableMailQueue.MailQueueItemView::getMail) - .extracting(Mail::getName) - .containsExactly("name2"); + assertThatCode(() -> Iterators.consumingIterator(items)).doesNotThrowAnyException(); } @Test - default void concurrentRemoveShouldNotAlterBrowsingWhenDequeueWhileIterating() throws Exception { + default void removeShouldNotFailWhenBrowsingIterating() throws Exception { getManageableMailQueue().enQueue(defaultMail() .name("name1") .build()); getManageableMailQueue().enQueue(defaultMail() .name("name2") .build()); + getManageableMailQueue().enQueue(defaultMail() + .name("name3") + .build()); ManageableMailQueue.MailQueueIterator items = getManageableMailQueue().browse(); - ManageableMailQueue.MailQueueItemView next = items.next(); + ManageableMailQueue.MailQueueItemView firstItem = items.next(); + + assertThatCode(() -> getManageableMailQueue().flush()) + .doesNotThrowAnyException(); + + } + + @Test + default void browseShouldNotFailWhenConcurrentRemoveWhenIterating() throws Exception { + getManageableMailQueue().enQueue(defaultMail() + .name("name1") + .build()); + getManageableMailQueue().enQueue(defaultMail() + .name("name2") + .build()); + getManageableMailQueue().enQueue(defaultMail() + .name("name3") + .build()); + + ManageableMailQueue.MailQueueIterator items = getManageableMailQueue().browse(); + ManageableMailQueue.MailQueueItemView firstItem = items.next(); getManageableMailQueue().remove(ManageableMailQueue.Type.Name, "name2"); - assertThat(next.getMail().getName()).isEqualTo("name1"); - assertThat(items).extracting(ManageableMailQueue.MailQueueItemView::getMail) - .extracting(Mail::getName) - .containsExactly("name2"); + assertThatCode(() -> Iterators.consumingIterator(items)).doesNotThrowAnyException(); + } + + @Test + default void browsingShouldNotAffectDequeue() throws Exception { + getManageableMailQueue().enQueue(defaultMail() + .name("name1") + .build()); + getManageableMailQueue().enQueue(defaultMail() + .name("name2") + .build()); + getManageableMailQueue().enQueue(defaultMail() + .name("name3") + .build()); + + ManageableMailQueue.MailQueueIterator items = getManageableMailQueue().browse(); + items.next(); + + MailQueue.MailQueueItem mailQueueItem = getManageableMailQueue().deQueue(); + + assertThat(mailQueueItem.getMail().getName()).isEqualTo("name1"); } @Test http://git-wip-us.apache.org/repos/asf/james-project/blob/d3f6f1ad/server/queue/queue-file/src/test/java/org/apache/james/queue/file/FileMailQueueTest.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-file/src/test/java/org/apache/james/queue/file/FileMailQueueTest.java b/server/queue/queue-file/src/test/java/org/apache/james/queue/file/FileMailQueueTest.java index d829200..f044d8c 100644 --- a/server/queue/queue-file/src/test/java/org/apache/james/queue/file/FileMailQueueTest.java +++ b/server/queue/queue-file/src/test/java/org/apache/james/queue/file/FileMailQueueTest.java @@ -58,69 +58,6 @@ public class FileMailQueueTest implements DelayedManageableMailQueueContract { @Test @Override - @Disabled("JAMES-2299 No snapshot isolation") - public void concurrentClearShouldNotAlterBrowsingWhenDequeueWhileIterating() { - - } - - @Test - @Override - @Disabled("JAMES-2299 No snapshot isolation") - public void concurrentClearShouldNotAlterBrowsingWhenDequeue() { - - } - - @Test - @Override - @Disabled("JAMES-2299 No snapshot isolation") - public void concurrentDequeueShouldNotAlterBrowsing() { - - } - - @Test - @Override - @Disabled("JAMES-2299 No snapshot isolation") - public void concurrentDequeueShouldNotAlterBrowsingWhenDequeueWhileIterating() { - - } - - @Test - @Override - @Disabled("JAMES-2299 No snapshot isolation") - public void concurrentEnqueueShouldNotAlterBrowsingWhenDequeueWhileIterating() { - - } - - @Test - @Override - @Disabled("JAMES-2299 No snapshot isolation") - public void concurrentRemoveShouldNotAlterBrowsingWhenDequeueWhileIterating() { - - } - - @Test - @Override - @Disabled("JAMES-2299 No snapshot isolation") - public void concurrentFlushShouldNotAlterBrowsingWhenDequeueWhileIterating() { - - } - - @Test - @Override - @Disabled("JAMES-2299 No snapshot isolation") - public void concurrentFlushShouldNotAlterBrowsing() { - - } - - @Test - @Override - @Disabled("JAMES-2299 No snapshot isolation") - public void concurrentRemoveShouldNotAlterBrowsingWhenDequeue() { - - } - - @Test - @Override @Disabled("JAMES-2298 Not supported yet") public void removeBySenderShouldRemoveSpecificEmail() { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
