JAMES-2293 Allow to clear a mail repository
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/3c2559ca Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/3c2559ca Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/3c2559ca Branch: refs/heads/master Commit: 3c2559ca065bcfa25c49f79241f39514ecda11ec Parents: 9118fd0 Author: benwa <[email protected]> Authored: Mon Jan 22 11:49:04 2018 +0700 Committer: benwa <[email protected]> Committed: Thu Jan 25 11:39:06 2018 +0700 ---------------------------------------------------------------------- .../mailrepository/file/MBoxMailRepository.java | 8 ++++++ .../lib/AbstractMailRepository.java | 8 ++++++ .../mailrepository/api/MailRepository.java | 7 +++++ .../mailrepository/MailRepositoryContract.java | 30 +++++++++++++++++++- .../memory/MemoryMailRepository.java | 5 ++++ 5 files changed, 57 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/3c2559ca/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/MBoxMailRepository.java ---------------------------------------------------------------------- diff --git a/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/MBoxMailRepository.java b/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/MBoxMailRepository.java index b0b3992..fa9ba5d 100755 --- a/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/MBoxMailRepository.java +++ b/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/MBoxMailRepository.java @@ -77,6 +77,8 @@ import org.apache.mailet.Mail; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.github.fge.lambdas.Throwing; +import com.google.common.collect.ImmutableList; import com.google.common.hash.Hashing; /** @@ -699,4 +701,10 @@ public class MBoxMailRepository implements MailRepository, Configurable { public long size() throws MessagingException { return loadKeysAsArray().size(); } + + @Override + public void removeAll() throws MessagingException { + ImmutableList.copyOf(list()) + .forEach(Throwing.<String>consumer(this::remove).sneakyThrow()); + } } http://git-wip-us.apache.org/repos/asf/james-project/blob/3c2559ca/server/data/data-library/src/main/java/org/apache/james/mailrepository/lib/AbstractMailRepository.java ---------------------------------------------------------------------- diff --git a/server/data/data-library/src/main/java/org/apache/james/mailrepository/lib/AbstractMailRepository.java b/server/data/data-library/src/main/java/org/apache/james/mailrepository/lib/AbstractMailRepository.java index 11f3eb6..8f82041 100644 --- a/server/data/data-library/src/main/java/org/apache/james/mailrepository/lib/AbstractMailRepository.java +++ b/server/data/data-library/src/main/java/org/apache/james/mailrepository/lib/AbstractMailRepository.java @@ -33,6 +33,8 @@ import org.apache.mailet.Mail; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.github.fge.lambdas.Throwing; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterators; /** @@ -163,4 +165,10 @@ public abstract class AbstractMailRepository implements MailRepository, Configur public long size() throws MessagingException { return Iterators.size(list()); } + + @Override + public void removeAll() throws MessagingException { + ImmutableList.copyOf(list()) + .forEach(Throwing.<String>consumer(this::remove).sneakyThrow()); + } } http://git-wip-us.apache.org/repos/asf/james-project/blob/3c2559ca/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepository.java ---------------------------------------------------------------------- diff --git a/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepository.java b/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepository.java index 95d7a89..db5e267 100644 --- a/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepository.java +++ b/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepository.java @@ -90,6 +90,13 @@ public interface MailRepository { void remove(String key) throws MessagingException; /** + * Removes all mails from this repository + * + * @throws MessagingException + */ + void removeAll() throws MessagingException; + + /** * @deprecated This method is implementation dependent, it has been moved to org.apache.james.mailrepository.lib.AbstractMailRepository */ @Deprecated http://git-wip-us.apache.org/repos/asf/james-project/blob/3c2559ca/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 7594fde..d52c8cc 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 @@ -150,7 +150,6 @@ public interface MailRepositoryContract { testee.store(mail); } - @Test default void retrieveShouldGetStoredMail() throws Exception { MailRepository testee = retrieveRepository(); @@ -163,6 +162,35 @@ public interface MailRepositoryContract { } @Test + default void removeAllShouldRemoveStoredMails() throws Exception { + MailRepository testee = retrieveRepository(); + testee.store(createMail("name")); + + testee.removeAll(); + + assertThat(testee.size()).isEqualTo(0L); + } + + @Test + default void removeAllShouldBeIdempotent() throws Exception { + MailRepository testee = retrieveRepository(); + testee.store(createMail("name")); + + testee.removeAll(); + testee.removeAll(); + + assertThat(testee.size()).isEqualTo(0L); + } + + @Test + default void removeAllShouldNotFailWhenEmpty() throws Exception { + MailRepository testee = retrieveRepository(); + testee.store(createMail("name")); + + testee.removeAll(); + } + + @Test default void retrieveShouldGetStoredEmojiMail() throws Exception { MailRepository testee = retrieveRepository(); String key1 = "mail1"; http://git-wip-us.apache.org/repos/asf/james-project/blob/3c2559ca/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepository.java ---------------------------------------------------------------------- diff --git a/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepository.java b/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepository.java index b201bc2..6d83596 100644 --- a/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepository.java +++ b/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepository.java @@ -78,4 +78,9 @@ public class MemoryMailRepository implements MailRepository { public long size() { return mails.size(); } + + @Override + public void removeAll() { + mails.clear(); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
