You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2018/08/03 00:58:16 UTC

[1/8] james-project git commit: JAMES-2470 Modest performance improvment by making unreachable MX static

Repository: james-project
Updated Branches:
  refs/heads/master 5935abbb7 -> c3715e708


JAMES-2470 Modest performance improvment by making unreachable MX static

It allows to gain ~12 s


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

Branch: refs/heads/master
Commit: a139cc2619d8f96b12d91d3f716c5d410c88ffce
Parents: 5935abb
Author: benwa <bt...@linagora.com>
Authored: Thu Aug 2 14:20:32 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Aug 2 14:20:32 2018 +0700

----------------------------------------------------------------------
 .../mailets/DirectResolutionRemoteDeliveryIntegrationTest.java  | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/a139cc26/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java
index f48587f..69c088c 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java
@@ -49,6 +49,7 @@ import org.apache.james.utils.SMTPMessageSender;
 import org.awaitility.Duration;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
@@ -75,8 +76,8 @@ public class DirectResolutionRemoteDeliveryIntegrationTest {
     public SMTPMessageSender messageSender = new SMTPMessageSender(DEFAULT_DOMAIN);
     @Rule
     public FakeSmtp fakeSmtp = new FakeSmtp();
-    @Rule
-    public FakeSmtp fakeSmtpOnPort26 = FakeSmtp.withSmtpPort(26);
+    @ClassRule
+    public static FakeSmtp fakeSmtpOnPort26 = FakeSmtp.withSmtpPort(26);
 
     private TemporaryJamesServer jamesServer;
     private DataProbe dataProbe;


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


[7/8] james-project git commit: JAMES-2425 Avoid adding URL to Mail Repository Store when unknown protocol

Posted by bt...@apache.org.
JAMES-2425 Avoid adding URL to Mail Repository Store when unknown protocol


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

Branch: refs/heads/master
Commit: a17102407973ba01c4b965f9e0bb49c58823b6f8
Parents: 6592d7c
Author: benwa <bt...@linagora.com>
Authored: Wed Aug 1 17:03:12 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Aug 3 07:57:22 2018 +0700

----------------------------------------------------------------------
 .../org/apache/james/utils/InMemoryMailRepositoryStore.java  | 2 +-
 .../apache/james/utils/InMemoryMailRepositoryStoreTest.java  | 8 ++++++++
 2 files changed, 9 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/a1710240/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
index b6e1491..6bf875d 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
@@ -117,8 +117,8 @@ public class InMemoryMailRepositoryStore implements MailRepositoryStore, Configu
     }
 
     private MailRepository createNewMailRepository(MailRepositoryUrl mailRepositoryUrl) throws MailRepositoryStoreException {
-        urlStore.add(mailRepositoryUrl);
         MailRepository newMailRepository = retrieveMailRepository(mailRepositoryUrl);
+        urlStore.add(mailRepositoryUrl);
         newMailRepository = initializeNewRepository(newMailRepository, createRepositoryCombinedConfig(mailRepositoryUrl));
         MailRepository previousRepository = destinationToRepositoryAssociations.putIfAbsent(mailRepositoryUrl, newMailRepository);
         return Optional.ofNullable(previousRepository)

http://git-wip-us.apache.org/repos/asf/james-project/blob/a1710240/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java b/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
index 44b91a9..04e6950 100644
--- a/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
+++ b/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
@@ -47,6 +47,7 @@ import com.google.common.collect.Sets;
 
 public class InMemoryMailRepositoryStoreTest {
     private static final MailRepositoryUrl FILE_REPO = MailRepositoryUrl.from("file://repo");
+    private static final MailRepositoryUrl UNKNOWN_PROTOCOL_REPO = MailRepositoryUrl.from("toto://repo");
     private static final MailRepositoryUrl MEMORY_REPO = MailRepositoryUrl.from("memory://repo");
     private static final MailRepositoryPath PATH_REPO = MailRepositoryPath.from("repo");
 
@@ -265,4 +266,11 @@ public class InMemoryMailRepositoryStoreTest {
         assertThat(actualSize).isEqualTo(threadCount);
     }
 
+    @Test
+    public void selectShouldNotAddUrlWhenProtocolDoNotExist() {
+        assertThatThrownBy(() -> repositoryStore.select(UNKNOWN_PROTOCOL_REPO));
+
+        assertThat(urlStore.listDistinct()).isEmpty();
+    }
+
 }


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


[3/8] james-project git commit: JAMES-2468 Add tests for quota updates upon mailbox deletion

Posted by bt...@apache.org.
JAMES-2468 Add tests for quota updates upon mailbox deletion


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

Branch: refs/heads/master
Commit: 31662d5969f5758754e4a0bbc846177a95d9c49c
Parents: a4214bd
Author: benwa <bt...@linagora.com>
Authored: Wed Aug 1 15:28:43 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Aug 3 07:56:28 2018 +0700

----------------------------------------------------------------------
 .../manager/QuotaMessageManagerTest.java        | 41 ++++++++++++++++++++
 1 file changed, 41 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/31662d59/mailbox/api/src/test/java/org/apache/james/mailbox/manager/QuotaMessageManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/manager/QuotaMessageManagerTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/manager/QuotaMessageManagerTest.java
index f8e6308..cea2c5d 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/manager/QuotaMessageManagerTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/manager/QuotaMessageManagerTest.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.mailbox.manager;
 
+import java.nio.charset.StandardCharsets;
+
 import javax.mail.Flags;
 
 import org.apache.james.core.quota.QuotaCount;
@@ -31,8 +33,12 @@ import org.apache.james.mailbox.exception.OverQuotaException;
 import org.apache.james.mailbox.mock.MockMail;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageRange;
+import org.apache.james.mailbox.model.Quota;
+import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.quota.MaxQuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
+import org.apache.james.mime4j.dom.Message;
+import org.assertj.core.api.SoftAssertions;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -142,5 +148,40 @@ public abstract class QuotaMessageManagerTest<T extends MailboxManager> {
         resources.appendMessage(messageManager, session, new FlagsBuilder().add(Flags.Flag.SEEN).build());
     }
 
+    @Test
+    public void deletingAMailboxShouldDecreaseCurrentQuota() throws Exception {
+        resources.fillMailbox();
+
+        mailboxManager.deleteMailbox(inbox, session);
+
+        QuotaRoot quotaRoot = quotaRootResolver.getQuotaRoot(inbox);
+        Quota<QuotaCount> messageQuota = resources.getQuotaManager().getMessageQuota(quotaRoot);
+        Quota<QuotaSize> storageQuota = resources.getQuotaManager().getStorageQuota(quotaRoot);
+        SoftAssertions.assertSoftly(softly -> {
+            softly.assertThat(messageQuota.getUsed()).isEqualTo(QuotaCount.count(0));
+            softly.assertThat(storageQuota.getUsed()).isEqualTo(QuotaSize.size(0));
+        });
+    }
+
+    @Test
+    public void deletingAMailboxShouldPreserveQuotaOfOtherMailboxes() throws Exception {
+        resources.fillMailbox();
 
+        mailboxManager.getMailbox(subFolder, session)
+            .appendMessage(MessageManager.AppendCommand.from(
+                Message.Builder.of()
+                    .setSubject("test")
+                    .setBody("testmail", StandardCharsets.UTF_8)
+                    .build()), session);
+
+        mailboxManager.deleteMailbox(subFolder, session);
+
+        QuotaRoot quotaRoot = quotaRootResolver.getQuotaRoot(inbox);
+        Quota<QuotaCount> messageQuota = resources.getQuotaManager().getMessageQuota(quotaRoot);
+        Quota<QuotaSize> storageQuota = resources.getQuotaManager().getStorageQuota(quotaRoot);
+        SoftAssertions.assertSoftly(softly -> {
+            softly.assertThat(messageQuota.getUsed()).isEqualTo(QuotaCount.count(32));
+            softly.assertThat(storageQuota.getUsed()).isEqualTo(QuotaSize.size(7904));
+        });
+    }
 }
\ No newline at end of file


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


[8/8] james-project git commit: JAMES-2425 Make MailRepositoryStore javadoc more explicit for get* methods

Posted by bt...@apache.org.
JAMES-2425 Make MailRepositoryStore javadoc more explicit for get* methods


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

Branch: refs/heads/master
Commit: c3715e7083fbe025cf98ec326afcbffe2f93848d
Parents: a171024
Author: benwa <bt...@linagora.com>
Authored: Thu Aug 2 16:13:15 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Aug 3 07:57:22 2018 +0700

----------------------------------------------------------------------
 .../mailrepository/api/MailRepositoryStore.java | 36 ++++++++++++++------
 1 file changed, 25 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/c3715e70/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
----------------------------------------------------------------------
diff --git a/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java b/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
index babc19c..7d0c520 100644
--- a/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
+++ b/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
@@ -25,17 +25,18 @@ import java.util.stream.Stream;
 public interface MailRepositoryStore {
 
     /**
-     * Select the {@link MailRepository} for the given url. Repository will be created if it does not exist already.
-     * 
-     * @param url
-     * @return repository
-     * @throws MailRepositoryStoreException
+     * Select the {@link MailRepository} for the given url.
+     *
+     * If the repository is not referenced by {@link MailRepositoryStore::getUrls}, it will be created, and its URL referenced
+     * by {@link MailRepositoryStore::getUrls}.
      */
     MailRepository select(MailRepositoryUrl url) throws MailRepositoryStoreException;
 
     /**
      * Create the {@link MailRepository} for the given url and return it. If the repository already exists,
      * then no new repository is created, the old one will be returned.
+     *
+     * The URL of the created repository will be referenced by {@link MailRepositoryStore::getUrls}
      */
     default MailRepository create(MailRepositoryUrl url) throws MailRepositoryStoreException {
         return select(url);
@@ -43,24 +44,37 @@ public interface MailRepositoryStore {
 
     /**
      * Returns the {@link MailRepository} for the given url.
-     * This mail repository will not be created if it does not exist.
+     *
+     * This mail repository will not be created if the URL is not referenced by {@link MailRepositoryStore::getUrls}.
+     *
+     * If the repository is referenced by {@link MailRepositoryStore::getUrls}, and the repository do not exist locally, then
+     * this repository will be created locally.
      */
     Optional<MailRepository> get(MailRepositoryUrl url) throws MailRepositoryStoreException;
 
     /**
-     * Returns all the {@link MailRepository} for the given path.
+     * Returns all the {@link MailRepository} referenced by {@link MailRepositoryStore::getUrls} got a given path.
+     *
+     * The corresponding mail repositories will not be created if they do not exist.
+     *
+     * If the path matches URLs referenced by {@link MailRepositoryStore::getUrls}, and the repositories do not exist locally, then
+     * these repositories will be created locally.
      */
     Stream<MailRepository> getByPath(MailRepositoryPath path) throws MailRepositoryStoreException;
 
     /**
-     * Return a {@link Stream} which contains all urls of the selected
-     * {@link MailRepository}'s
+     * Return a {@link Stream} which contains all urls of the selected {@link MailRepository}'s.
+     *
+     * Note that this may include MailRepositories that do not exist locally.
+     *
+     * This can be the case if:
+     *  - The MailRepository had been created by another James server in a clustered environment
+     *  - The MailRepository had been dynamically created, and James was restarted
      */
     Stream<MailRepositoryUrl> getUrls();
 
     /**
-     * Return a {@link Stream} which contains all paths of the selected
-     * {@link MailRepository}'s
+     * Return a {@link Stream} which contains all paths of the selected {@link MailRepository}'s
      */
     default Stream<MailRepositoryPath> getPaths() {
         return getUrls()


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


[2/8] james-project git commit: JAMES-2470 Allow FakeSmtp to be reused

Posted by bt...@apache.org.
JAMES-2470 Allow FakeSmtp to be reused

This allow to use statically FakeSmtp, saving time


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

Branch: refs/heads/master
Commit: f6af9e078575363c3fa6a70e4d30d945b119b459
Parents: a139cc2
Author: benwa <bt...@linagora.com>
Authored: Thu Aug 2 15:29:51 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Aug 3 07:55:59 2018 +0700

----------------------------------------------------------------------
 .../apache/james/mpt/smtp/ForwardSmtpTest.java  | 33 ++++++++++----------
 ...ResolutionRemoteDeliveryIntegrationTest.java | 11 ++++---
 .../GatewayRemoteDeliveryIntegrationTest.java   | 14 ++++++---
 .../james/smtp/SmtpAuthorizedAddressesTest.java | 22 +++++++------
 .../mailets/GroupMappingRelayTest.java          | 14 ++++++---
 .../jmap/VacationRelayIntegrationTest.java      | 16 ++++++----
 .../java/org/apache/james/utils/FakeSmtp.java   | 14 ++++++++-
 7 files changed, 79 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/f6af9e07/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java
----------------------------------------------------------------------
diff --git a/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java b/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java
index e30d555..d6bffc8 100644
--- a/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java
+++ b/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java
@@ -18,7 +18,7 @@
  ****************************************************************/
 package org.apache.james.mpt.smtp;
 
-import static org.awaitility.Duration.FIVE_HUNDRED_MILLISECONDS;
+import static org.awaitility.Duration.ONE_HUNDRED_MILLISECONDS;
 import static org.awaitility.Duration.ONE_MINUTE;
 import static org.hamcrest.Matchers.equalTo;
 
@@ -30,7 +30,8 @@ import org.awaitility.Awaitility;
 import org.awaitility.Duration;
 import org.awaitility.core.ConditionFactory;
 import org.junit.Before;
-import org.junit.Rule;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
 import org.junit.Test;
 
 public abstract class ForwardSmtpTest {
@@ -39,17 +40,27 @@ public abstract class ForwardSmtpTest {
     public static final String DOMAIN = "mydomain.tld";
     public static final String USER_AT_DOMAIN = USER + "@" + DOMAIN;
     public static final String PASSWORD = "secret";
+    public static final Duration slowPacedPollInterval = ONE_HUNDRED_MILLISECONDS;
+    public static final ConditionFactory calmlyAwait = Awaitility.with()
+        .pollInterval(slowPacedPollInterval)
+        .and()
+        .with()
+        .pollDelay(slowPacedPollInterval)
+        .await();
 
-    @Rule
-    public FakeSmtp fakeSmtp = new FakeSmtp();
-
-    private ConditionFactory calmlyAwait;
+    @ClassRule
+    public static FakeSmtp fakeSmtp = new FakeSmtp();
 
     protected abstract SmtpHostSystem createSmtpHostSystem();
     
     private SmtpHostSystem hostSystem;
     private SimpleScriptedTestProtocol scriptedTest;
 
+    @BeforeClass
+    public static void classSetUp() {
+        fakeSmtp.awaitStarted(calmlyAwait.atMost(ONE_MINUTE));
+    }
+
     @Before
     public void setUp() throws Exception {
         hostSystem = createSmtpHostSystem();
@@ -61,16 +72,6 @@ public abstract class ForwardSmtpTest {
         hostSystem.getInMemoryDnsService()
             .registerMxRecord("yopmail.com", fakeSmtp.getContainer().getContainerIp());
         hostSystem.addAddressMapping(USER, DOMAIN, "ray@yopmail.com");
-
-        Duration slowPacedPollInterval = FIVE_HUNDRED_MILLISECONDS;
-        calmlyAwait = Awaitility.with()
-            .pollInterval(slowPacedPollInterval)
-            .and()
-            .with()
-            .pollDelay(slowPacedPollInterval)
-            .await();
-
-        fakeSmtp.awaitStarted(calmlyAwait.atMost(ONE_MINUTE));
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6af9e07/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java
index 69c088c..c9509a4 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java
@@ -48,7 +48,7 @@ import org.apache.james.utils.IMAPMessageReader;
 import org.apache.james.utils.SMTPMessageSender;
 import org.awaitility.Duration;
 import org.junit.After;
-import org.junit.Before;
+import org.junit.BeforeClass;
 import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
@@ -74,22 +74,23 @@ public class DirectResolutionRemoteDeliveryIntegrationTest {
     public IMAPMessageReader imapMessageReader = new IMAPMessageReader();
     @Rule
     public SMTPMessageSender messageSender = new SMTPMessageSender(DEFAULT_DOMAIN);
-    @Rule
-    public FakeSmtp fakeSmtp = new FakeSmtp();
+    @ClassRule
+    public static FakeSmtp fakeSmtp = new FakeSmtp();
     @ClassRule
     public static FakeSmtp fakeSmtpOnPort26 = FakeSmtp.withSmtpPort(26);
 
     private TemporaryJamesServer jamesServer;
     private DataProbe dataProbe;
 
-    @Before
-    public void setup() {
+    @BeforeClass
+    public static void setup() {
         fakeSmtp.awaitStarted(awaitAtMostOneMinute);
         fakeSmtpOnPort26.awaitStarted(awaitAtMostOneMinute);
     }
 
     @After
     public void tearDown() {
+        fakeSmtp.clean();
         if (jamesServer != null) {
             jamesServer.shutdown();
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6af9e07/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
index 9da3345..71c1ebe 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
@@ -46,6 +46,8 @@ import org.apache.james.utils.SMTPMessageSender;
 import org.awaitility.Duration;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
@@ -56,29 +58,33 @@ public class GatewayRemoteDeliveryIntegrationTest {
     private static final String FROM = "from@" + DEFAULT_DOMAIN;
     private static final String RECIPIENT = "touser@" + JAMES_ANOTHER_DOMAIN;
 
+    @ClassRule
+    public static FakeSmtp fakeSmtp = new FakeSmtp();
     @Rule
     public TemporaryFolder temporaryFolder = new TemporaryFolder();
     @Rule
     public IMAPMessageReader imapMessageReader = new IMAPMessageReader();
     @Rule
     public SMTPMessageSender messageSender = new SMTPMessageSender(DEFAULT_DOMAIN);
-    @Rule
-    public FakeSmtp fakeSmtp = new FakeSmtp();
 
     private TemporaryJamesServer jamesServer;
     private DataProbe dataProbe;
     private InMemoryDNSService inMemoryDNSService;
 
-    @Before
-    public void setup() throws Exception {
+    @BeforeClass
+    public static void classSetUp() {
         fakeSmtp.awaitStarted(awaitAtMostOneMinute);
+    }
 
+    @Before
+    public void setup() throws Exception {
         inMemoryDNSService = new InMemoryDNSService()
             .registerMxRecord(JAMES_ANOTHER_DOMAIN, fakeSmtp.getContainer().getContainerIp());
     }
 
     @After
     public void tearDown() {
+        fakeSmtp.clean();
         if (jamesServer != null) {
             jamesServer.shutdown();
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6af9e07/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
index 1248a04..ed3a9b6 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
@@ -46,7 +46,8 @@ import org.apache.james.utils.SMTPSendingException;
 import org.apache.james.utils.SmtpSendingStep;
 import org.awaitility.Duration;
 import org.junit.After;
-import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
@@ -55,8 +56,8 @@ public class SmtpAuthorizedAddressesTest {
     private static final String FROM = "fromuser@" + DEFAULT_DOMAIN;
     private static final String TO = "to@any.com";
 
-    @Rule
-    public FakeSmtp fakeSmtp = new FakeSmtp();
+    @ClassRule
+    public static FakeSmtp fakeSmtp = new FakeSmtp();
     @Rule
     public IMAPMessageReader imapMessageReader = new IMAPMessageReader();
     @Rule
@@ -66,8 +67,8 @@ public class SmtpAuthorizedAddressesTest {
 
     private TemporaryJamesServer jamesServer;
 
-    @Before
-    public void setup() {
+    @BeforeClass
+    public static void setup() {
         fakeSmtp.awaitStarted(awaitAtMostOneMinute);
     }
 
@@ -93,6 +94,7 @@ public class SmtpAuthorizedAddressesTest {
 
     @After
     public void tearDown() {
+        fakeSmtp.clean();
         if (jamesServer != null) {
             jamesServer.shutdown();
         }
@@ -107,10 +109,12 @@ public class SmtpAuthorizedAddressesTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FROM, TO);
 
-        awaitAtMostOneMinute.until(() -> fakeSmtp.isReceived(response -> response
-            .body("", hasSize(1))
-            .body("[0].from", equalTo(FROM))
-            .body("[0].subject", equalTo("test"))));
+        awaitAtMostOneMinute
+            .pollDelay(Duration.ONE_HUNDRED_MILLISECONDS)
+            .until(() -> fakeSmtp.isReceived(response -> response
+                .body("", hasSize(1))
+                .body("[0].from", equalTo(FROM))
+                .body("[0].subject", equalTo("test"))));
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6af9e07/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingRelayTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingRelayTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingRelayTest.java
index b9842a1..7a58eff 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingRelayTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingRelayTest.java
@@ -52,6 +52,8 @@ import org.apache.mailet.base.test.FakeMail;
 import org.awaitility.Duration;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
@@ -73,8 +75,8 @@ public class GroupMappingRelayTest {
     private MimeMessage message;
     private RequestSpecification webAdminApi;
 
-    @Rule
-    public final FakeSmtp fakeSmtp = new FakeSmtp();
+    @ClassRule
+    public static final FakeSmtp fakeSmtp = new FakeSmtp();
     @Rule
     public TemporaryFolder temporaryFolder = new TemporaryFolder();
     @Rule
@@ -82,6 +84,11 @@ public class GroupMappingRelayTest {
     @Rule
     public SMTPMessageSender messageSender = new SMTPMessageSender(DEFAULT_DOMAIN);
 
+    @BeforeClass
+    public static void classSetUp() {
+        fakeSmtp.awaitStarted(awaitAtMostOneMinute);
+    }
+
     @Before
     public void setup() throws Exception {
         MailetContainer.Builder mailetContainer = TemporaryJamesServer.SIMPLE_MAILET_CONTAINER_CONFIGURATION
@@ -115,8 +122,6 @@ public class GroupMappingRelayTest {
             .withMailetContainer(mailetContainer)
             .build(temporaryFolder);
 
-        fakeSmtp.awaitStarted(awaitAtMostOneMinute);
-
         DataProbe dataProbe = jamesServer.getProbe(DataProbeImpl.class);
         dataProbe.addDomain(DOMAIN1);
 
@@ -135,6 +140,7 @@ public class GroupMappingRelayTest {
 
     @After
     public void tearDown() {
+        fakeSmtp.clean();
         jamesServer.shutdown();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6af9e07/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java
index 050f9e0..0a40262 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java
@@ -44,7 +44,8 @@ import org.apache.james.utils.FakeSmtp;
 import org.apache.james.utils.JmapGuiceProbe;
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Rule;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
 import org.junit.Test;
 
 public abstract class VacationRelayIntegrationTest {
@@ -54,9 +55,8 @@ public abstract class VacationRelayIntegrationTest {
     private static final String PASSWORD = "secret";
     private static final String REASON = "Message explaining my wonderful vacations";
 
-
-    @Rule
-    public FakeSmtp fakeSmtp = new FakeSmtp();
+    @ClassRule
+    public static FakeSmtp fakeSmtp = new FakeSmtp();
 
     private GuiceJamesServer guiceJamesServer;
     private JmapGuiceProbe jmapGuiceProbe;
@@ -67,6 +67,11 @@ public abstract class VacationRelayIntegrationTest {
 
     protected abstract InMemoryDNSService getInMemoryDns();
 
+    @BeforeClass
+    public static void classSetUp() {
+        fakeSmtp.awaitStarted(calmlyAwait.atMost(ONE_MINUTE));
+    }
+
     @Before
     public void setUp() throws Exception {
         getInMemoryDns()
@@ -84,12 +89,11 @@ public abstract class VacationRelayIntegrationTest {
         await();
 
         jmapGuiceProbe = guiceJamesServer.getProbe(JmapGuiceProbe.class);
-
-        fakeSmtp.awaitStarted(calmlyAwait.atMost(ONE_MINUTE));
     }
 
     @After
     public void teardown() {
+        fakeSmtp.clean();
         guiceJamesServer.stop();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6af9e07/server/testing/src/main/java/org/apache/james/utils/FakeSmtp.java
----------------------------------------------------------------------
diff --git a/server/testing/src/main/java/org/apache/james/utils/FakeSmtp.java b/server/testing/src/main/java/org/apache/james/utils/FakeSmtp.java
index 167a0a7..51685dd 100644
--- a/server/testing/src/main/java/org/apache/james/utils/FakeSmtp.java
+++ b/server/testing/src/main/java/org/apache/james/utils/FakeSmtp.java
@@ -65,7 +65,7 @@ public class FakeSmtp implements TestRule {
         this(fakeSmtpContainer().withExposedPorts(SMTP_PORT), SMTP_PORT);
     }
 
-    public FakeSmtp(SwarmGenericContainer container, Integer smtpPort) {
+    private FakeSmtp(SwarmGenericContainer container, Integer smtpPort) {
         this.smtpPort = smtpPort;
         this.container = container;
     }
@@ -105,4 +105,16 @@ public class FakeSmtp implements TestRule {
     public SwarmGenericContainer getContainer() {
         return container;
     }
+
+    public void clean() {
+        given(requestSpecification(), RESPONSE_SPECIFICATION)
+            .get("/api/email")
+            .jsonPath()
+            .getList("id", String.class)
+            .stream()
+            .mapToInt(Integer::valueOf)
+            .max()
+            .ifPresent(id -> given(requestSpecification(), RESPONSE_SPECIFICATION)
+                .get("/api/email/purge/" + id));
+    }
 }


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


[5/8] james-project git commit: JAMES-2468 Handle quota update on mailbox deletion

Posted by bt...@apache.org.
JAMES-2468 Handle quota update on mailbox deletion


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

Branch: refs/heads/master
Commit: a4214bdfcf359a6e8510c31c93bc0503fecbd163
Parents: 3a1a896
Author: benwa <bt...@linagora.com>
Authored: Thu Aug 2 09:51:59 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Aug 3 07:56:28 2018 +0700

----------------------------------------------------------------------
 .../apache/james/mailbox/MailboxListener.java   | 21 ++++-
 .../james/mailbox/MailboxManagerTest.java       | 17 ++++
 .../resources/META-INF/spring/event-system.xml  |  4 -
 mailbox/store/pom.xml                           |  4 +
 .../mailbox/store/StoreMailboxManager.java      | 27 ++++--
 .../james/mailbox/store/event/EventFactory.java | 12 ++-
 .../store/event/MailboxEventDispatcher.java     |  4 +-
 .../store/json/JacksonEventSerializer.java      | 94 +++++++++++++++++++-
 .../store/json/event/EventConverter.java        | 37 ++++++--
 .../json/event/EventNotValidException.java      | 26 ++++++
 .../json/event/dto/EventDataTransferObject.java | 53 ++++++++++-
 .../quota/ListeningCurrentQuotaUpdater.java     |  9 ++
 .../DefaultDelegatingMailboxListenerTest.java   | 15 +++-
 .../event/MailboxAnnotationListenerTest.java    |  9 +-
 .../BroadcastDelegatingMailboxListenerTest.java | 10 ++-
 ...RegisteredDelegatingMailboxListenerTest.java | 10 ++-
 .../mailbox/store/json/EventSerializerTest.java | 14 ++-
 .../quota/ListeningCurrentQuotaUpdaterTest.java | 13 +++
 .../registrations/GlobalRegistrationTest.java   |  8 +-
 19 files changed, 353 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/a4214bdf/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
index 5329b87..3112378 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
@@ -170,8 +170,27 @@ public interface MailboxListener {
          */
         private static final long serialVersionUID = 1L;
 
-        public MailboxDeletion(MailboxSession session, MailboxPath path) {
+        private final QuotaRoot quotaRoot;
+        private final QuotaCount deletedMessageCOunt;
+        private final QuotaSize totalDeletedSize;
+
+        public MailboxDeletion(MailboxSession session, MailboxPath path, QuotaRoot quotaRoot, QuotaCount deletedMessageCOunt, QuotaSize totalDeletedSize) {
             super(session, path);
+            this.quotaRoot = quotaRoot;
+            this.deletedMessageCOunt = deletedMessageCOunt;
+            this.totalDeletedSize = totalDeletedSize;
+        }
+
+        public QuotaRoot getQuotaRoot() {
+            return quotaRoot;
+        }
+
+        public QuotaCount getDeletedMessageCount() {
+            return deletedMessageCOunt;
+        }
+
+        public QuotaSize getTotalDeletedSize() {
+            return totalDeletedSize;
         }
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4214bdf/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 796d80e..a89a602 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
@@ -933,6 +933,23 @@ public abstract class MailboxManagerTest {
     }
 
     @Test
+    public void deleteMailboxShouldFireMailboxDeletionEvent() throws Exception {
+        Assume.assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.Quota));
+        session = mailboxManager.createSystemSession(USER_1);
+
+        EventCollector listener = new EventCollector();
+        mailboxManager.addGlobalListener(listener, session);
+
+        MailboxPath inbox = MailboxPath.inbox(session);
+        mailboxManager.createMailbox(inbox, session);
+        mailboxManager.deleteMailbox(inbox, session);
+
+        assertThat(listener.getEvents())
+            .filteredOn(event -> event instanceof MailboxListener.MailboxDeletion)
+            .isNotEmpty();
+    }
+
+    @Test
     public void moveMessagesShouldNotThrowWhenMovingAllMessagesOfAnEmptyMailbox() throws Exception {
         session = mailboxManager.createSystemSession(USER_1);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4214bdf/mailbox/spring/src/main/resources/META-INF/spring/event-system.xml
----------------------------------------------------------------------
diff --git a/mailbox/spring/src/main/resources/META-INF/spring/event-system.xml b/mailbox/spring/src/main/resources/META-INF/spring/event-system.xml
index 2647d0c..b168c72 100644
--- a/mailbox/spring/src/main/resources/META-INF/spring/event-system.xml
+++ b/mailbox/spring/src/main/resources/META-INF/spring/event-system.xml
@@ -54,10 +54,6 @@
         <constructor-arg index="0" ref="mailbox-converter"/>
     </bean>
 
-    <bean id="message-pack-event-serializer" class="org.apache.james.mailbox.store.json.MessagePackEventSerializer" lazy-init="true">
-        <constructor-arg index="0" ref="event-converter"/>
-    </bean>
-
     <bean id="event-converter" class="org.apache.james.mailbox.store.json.event.EventConverter" lazy-init="true">
         <constructor-arg index="0" ref="mailbox-converter"/>
     </bean>

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4214bdf/mailbox/store/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/store/pom.xml b/mailbox/store/pom.xml
index 1913e89..ae0fabb 100644
--- a/mailbox/store/pom.xml
+++ b/mailbox/store/pom.xml
@@ -81,6 +81,10 @@
             <artifactId>jackson-databind</artifactId>
         </dependency>
         <dependency>
+            <groupId>com.fasterxml.jackson.datatype</groupId>
+            <artifactId>jackson-datatype-jdk8</artifactId>
+        </dependency>
+        <dependency>
             <groupId>com.github.steveash.guavate</groupId>
             <artifactId>guavate</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4214bdf/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 31307fa..f5d7a54 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -30,6 +30,8 @@ import java.util.stream.Stream;
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 
+import org.apache.james.core.quota.QuotaCount;
+import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailbox.MailboxAnnotationManager;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxManager;
@@ -60,6 +62,7 @@ import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MessageId.Factory;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.model.MultimailboxesSearchQuery;
+import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.model.search.MailboxNameExpression;
 import org.apache.james.mailbox.model.search.MailboxQuery;
 import org.apache.james.mailbox.quota.QuotaManager;
@@ -69,7 +72,9 @@ import org.apache.james.mailbox.store.event.MailboxAnnotationListener;
 import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
 import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
+import org.apache.james.mailbox.store.mail.MessageMapper;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
+import org.apache.james.mailbox.store.mail.model.Message;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
@@ -79,6 +84,7 @@ import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
 import org.apache.james.mailbox.store.transaction.Mapper;
+import org.apache.james.util.streams.Iterators;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -529,22 +535,29 @@ public class StoreMailboxManager implements MailboxManager {
     public void deleteMailbox(final MailboxPath mailboxPath, final MailboxSession session) throws MailboxException {
         LOGGER.info("deleteMailbox {}", mailboxPath);
         assertIsOwner(session, mailboxPath);
-        final MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session);
+        MailboxMapper mailboxMapper = mailboxSessionMapperFactory.getMailboxMapper(session);
+        MessageMapper messageMapper = mailboxSessionMapperFactory.getMessageMapper(session);
 
-        Mailbox mailbox = mapper.execute((Mapper.Transaction<Mailbox>) () -> {
-            final Mailbox mailbox1 = mapper.findMailboxByPath(mailboxPath);
-            if (mailbox1 == null) {
+        mailboxMapper.execute((Mapper.Transaction<Mailbox>) () -> {
+            Mailbox mailbox = mailboxMapper.findMailboxByPath(mailboxPath);
+            if (mailbox == null) {
                 throw new MailboxNotFoundException(mailboxPath);
             }
 
+            QuotaRoot quotaRoot = quotaRootResolver.getQuotaRoot(mailboxPath);
+            long messageCount = messageMapper.countMessagesInMailbox(mailbox);
+            long totalSize = Iterators.toStream(messageMapper.findInMailbox(mailbox, MessageRange.all(), MessageMapper.FetchType.Metadata, -1))
+                .mapToLong(Message::getFullContentOctets)
+                .sum();
+
             // We need to create a copy of the mailbox as maybe we can not refer to the real
             // mailbox once we remove it
-            SimpleMailbox m = new SimpleMailbox(mailbox1);
-            mapper.delete(mailbox1);
+            SimpleMailbox m = new SimpleMailbox(mailbox);
+            mailboxMapper.delete(mailbox);
+            dispatcher.mailboxDeleted(session, mailbox, quotaRoot, QuotaCount.count(messageCount), QuotaSize.size(totalSize));
             return m;
         });
 
-        dispatcher.mailboxDeleted(session, mailbox);
 
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4214bdf/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java
index aa38509..4ee78b6 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java
@@ -23,6 +23,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.SortedMap;
 
+import org.apache.james.core.quota.QuotaCount;
+import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageUid;
@@ -30,6 +32,7 @@ import org.apache.james.mailbox.acl.ACLDiff;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageMetaData;
 import org.apache.james.mailbox.model.MessageMoves;
+import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.model.UpdatedFlags;
 import org.apache.james.mailbox.store.StoreMailboxPath;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -136,8 +139,8 @@ public class EventFactory {
     public final class MailboxDeletionImpl extends MailboxListener.MailboxDeletion implements MailboxAware {
         private final Mailbox mailbox;
 
-        public MailboxDeletionImpl(MailboxSession session, Mailbox mailbox) {
-            super(session, new StoreMailboxPath(mailbox));
+        public MailboxDeletionImpl(MailboxSession session, Mailbox mailbox, QuotaRoot quotaRoot, QuotaCount deletedMessageCount, QuotaSize totalDeletedSize) {
+            super(session, new StoreMailboxPath(mailbox), quotaRoot, deletedMessageCount, totalDeletedSize);
             this.mailbox = mailbox;
         }
 
@@ -204,8 +207,9 @@ public class EventFactory {
         return new MailboxRenamedEventImpl(session, from, to);
     }
 
-    public MailboxListener.MailboxDeletion mailboxDeleted(MailboxSession session, Mailbox mailbox) {
-        return new MailboxDeletionImpl(session, mailbox);
+    public MailboxListener.MailboxDeletion mailboxDeleted(MailboxSession session, Mailbox mailbox, QuotaRoot quotaRoot,
+                                                          QuotaCount deletedMessageCount, QuotaSize totalDeletedSize) {
+        return new MailboxDeletionImpl(session, mailbox, quotaRoot, deletedMessageCount, totalDeletedSize);
     }
 
     public MailboxListener.MailboxAdded mailboxAdded(MailboxSession session, Mailbox mailbox) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4214bdf/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxEventDispatcher.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxEventDispatcher.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxEventDispatcher.java
index c897ac9..da0f503 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxEventDispatcher.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxEventDispatcher.java
@@ -145,8 +145,8 @@ public class MailboxEventDispatcher {
      * Should get called when a Mailbox was deleted. All registered
      * MailboxListener will get triggered then
      */
-    public void mailboxDeleted(MailboxSession session, Mailbox mailbox) {
-        listener.event(eventFactory.mailboxDeleted(session, mailbox));
+    public void mailboxDeleted(MailboxSession session, Mailbox mailbox, QuotaRoot quotaRoot, QuotaCount deletedMessageCount, QuotaSize totalDeletedSize) {
+        listener.event(eventFactory.mailboxDeleted(session, mailbox, quotaRoot, deletedMessageCount, totalDeletedSize));
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4214bdf/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/JacksonEventSerializer.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/JacksonEventSerializer.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/JacksonEventSerializer.java
index 82fc394..6710b58 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/JacksonEventSerializer.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/JacksonEventSerializer.java
@@ -20,18 +20,26 @@
 package org.apache.james.mailbox.store.json;
 
 import java.io.IOException;
+import java.util.Optional;
 
+import org.apache.james.core.Domain;
+import org.apache.james.core.quota.QuotaCount;
+import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MessageId.Factory;
+import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.store.event.EventSerializer;
 import org.apache.james.mailbox.store.json.event.EventConverter;
 import org.apache.james.mailbox.store.json.event.dto.EventDataTransferObject;
 
 import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonParseException;
 import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.ObjectCodec;
+import com.fasterxml.jackson.core.TreeNode;
 import com.fasterxml.jackson.databind.DeserializationContext;
 import com.fasterxml.jackson.databind.JsonDeserializer;
 import com.fasterxml.jackson.databind.JsonSerializer;
@@ -39,6 +47,9 @@ import com.fasterxml.jackson.databind.KeyDeserializer;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializerProvider;
 import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.databind.node.TextNode;
+import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
+import com.github.fge.lambdas.Throwing;
 
 public class JacksonEventSerializer implements EventSerializer {
 
@@ -69,7 +80,13 @@ public class JacksonEventSerializer implements EventSerializer {
         module.addKeySerializer(MessageUid.class, new MessageUidKeySerializer());
         module.addSerializer(MessageId.class, new MessageIdSerializer());
         module.addDeserializer(MessageId.class, new MessageIdDeserializer(messageIdFactory));
-        objectMapper.registerModule(module);
+        module.addSerializer(QuotaRoot.class, new QuotaRootSerializer());
+        module.addDeserializer(QuotaRoot.class, new QuotaRootDeserializer());
+        module.addSerializer(QuotaCount.class, new QuotaCountSerializer());
+        module.addDeserializer(QuotaCount.class, new QuotaCountDeserializer());
+        module.addSerializer(QuotaSize.class, new QuotaSizeSerializer());
+        module.addDeserializer(QuotaSize.class, new QuotaSizeDeserializer());
+        objectMapper.registerModules(module, new Jdk8Module());
         return objectMapper;
     }
 
@@ -132,4 +149,79 @@ public class JacksonEventSerializer implements EventSerializer {
         
     }
 
+    private static final String QUOTA_ROOT_VALUE_FIELD = "value";
+    private static final String QUOTA_ROOT_DOMAIN_FIELD = "domain";
+
+    public static class QuotaRootSerializer extends JsonSerializer<QuotaRoot> {
+
+        @Override
+        public void serialize(QuotaRoot value, JsonGenerator generator, SerializerProvider serializers) throws IOException, JsonProcessingException {
+            generator.writeStartObject();
+            generator.writeStringField(QUOTA_ROOT_VALUE_FIELD, value.getValue());
+            value.getDomain()
+                .ifPresent(Throwing.consumer(domain -> generator.writeStringField(QUOTA_ROOT_DOMAIN_FIELD, domain.asString())));
+            generator.writeEndObject();
+        }
+        
+    }
+
+    public static class QuotaRootDeserializer extends JsonDeserializer<QuotaRoot> {
+
+        @Override
+        public QuotaRoot deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {
+            ObjectCodec codec = parser.getCodec();
+            TreeNode node = codec.readTree(parser);
+            return QuotaRoot.quotaRoot(value(node), domain(node));
+        }
+
+        private String value(TreeNode node) throws IOException, JsonParseException {
+            TextNode value = (TextNode) node.get(QUOTA_ROOT_VALUE_FIELD);
+            return value.asText();
+        }
+
+        private Optional<Domain> domain(TreeNode node) throws IOException, JsonParseException {
+            TreeNode value = node.get(QUOTA_ROOT_DOMAIN_FIELD);
+            if (value == null || value.isMissingNode()) {
+                return Optional.empty();
+            }
+            return Optional.ofNullable(node.asToken().asString()).map(Domain::of);
+        }
+        
+    }
+
+    public static class QuotaCountSerializer extends JsonSerializer<QuotaCount> {
+
+        @Override
+        public void serialize(QuotaCount value, JsonGenerator generator, SerializerProvider serializers) throws IOException, JsonProcessingException {
+            generator.writeNumber(value.asLong());
+        }
+        
+    }
+
+    public static class QuotaCountDeserializer extends JsonDeserializer<QuotaCount> {
+
+        @Override
+        public QuotaCount deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {
+            return QuotaCount.count(parser.getLongValue());
+        }
+        
+    }
+
+    public static class QuotaSizeSerializer extends JsonSerializer<QuotaSize> {
+
+        @Override
+        public void serialize(QuotaSize value, JsonGenerator generator, SerializerProvider serializers) throws IOException, JsonProcessingException {
+            generator.writeNumber(value.asLong());
+        }
+        
+    }
+
+    public static class QuotaSizeDeserializer extends JsonDeserializer<QuotaSize> {
+
+        @Override
+        public QuotaSize deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {
+            return QuotaSize.size(parser.getLongValue());
+        }
+        
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4214bdf/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/event/EventConverter.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/event/EventConverter.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/event/EventConverter.java
index 12c54e8..d92d077 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/event/EventConverter.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/event/EventConverter.java
@@ -22,15 +22,19 @@ package org.apache.james.mailbox.store.json.event;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.SortedMap;
 import java.util.TreeMap;
 
+import org.apache.james.core.quota.QuotaCount;
+import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageMetaData;
+import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.model.UpdatedFlags;
 import org.apache.james.mailbox.store.event.EventFactory;
 import org.apache.james.mailbox.store.json.event.dto.EventDataTransferObject;
@@ -83,11 +87,15 @@ public class EventConverter {
                 mailboxDataTransferObject,
                 event.getMailboxPath());
         } else if (event instanceof MailboxListener.MailboxDeletion) {
-            return constructMailboxEventProxy(EventType.MAILBOX_DELETED,
+            MailboxListener.MailboxDeletion deletionEvent = (MailboxListener.MailboxDeletion) event;
+            return constructMailboxDeletionProxy(EventType.MAILBOX_DELETED,
                 event.getSession(),
-                mailboxDataTransferObject);
+                mailboxDataTransferObject,
+                deletionEvent.getQuotaRoot(),
+                deletionEvent.getDeletedMessageCount(),
+                deletionEvent.getTotalDeletedSize());
         } else if (event instanceof MailboxListener.MailboxAdded) {
-            return constructMailboxEventProxy(EventType.MAILBOX_ADDED,
+            return constructMailboxAddedProxy(EventType.MAILBOX_ADDED,
                 event.getSession(),
                 mailboxDataTransferObject);
         } else {
@@ -115,7 +123,10 @@ public class EventConverter {
             case MAILBOX_ADDED:
                 return eventFactory.mailboxAdded(eventDataTransferObject.getSession().getMailboxSession(), mailbox);
             case MAILBOX_DELETED:
-                return eventFactory.mailboxDeleted(eventDataTransferObject.getSession().getMailboxSession(), mailbox);
+                return eventFactory.mailboxDeleted(eventDataTransferObject.getSession().getMailboxSession(), mailbox, 
+                    eventDataTransferObject.getQuotaRoot().orElseThrow(() -> new EventNotValidException("Not a Deletion event, missing quotaRoot")),
+                    eventDataTransferObject.getDeletedMessageCount().orElseThrow(() -> new EventNotValidException("Not a Deletion event, missing quotaCount")),
+                    eventDataTransferObject.getTotalDeletedSize().orElseThrow(() -> new EventNotValidException("Not a Deletion event, missing quotaSize")));
             case MAILBOX_RENAMED:
                 return eventFactory.mailboxRenamed(eventDataTransferObject.getSession().getMailboxSession(),
                     eventDataTransferObject.getFrom().getPath(),
@@ -125,7 +136,7 @@ public class EventConverter {
         }
     }
 
-    private EventDataTransferObject constructMailboxEventProxy(EventType eventType,
+    private EventDataTransferObject constructMailboxAddedProxy(EventType eventType,
                                                                MailboxSession mailboxSession,
                                                                MailboxDataTransferObject mailboxIntermediate) {
         return EventDataTransferObject.builder()
@@ -135,6 +146,22 @@ public class EventConverter {
             .build();
     }
 
+    private EventDataTransferObject constructMailboxDeletionProxy(EventType eventType,
+                                                               MailboxSession mailboxSession,
+                                                               MailboxDataTransferObject mailboxIntermediate, 
+                                                               QuotaRoot quotaRoot, 
+                                                               QuotaCount deletedMessageCount,
+                                                               QuotaSize totalDeletedSize) {
+        return EventDataTransferObject.builder()
+            .type(eventType)
+            .session(new MailboxSessionDataTransferObject(mailboxSession))
+            .mailbox(mailboxIntermediate)
+            .quotaRoot(Optional.of(quotaRoot))
+            .deletedMessageCount(Optional.of(deletedMessageCount))
+            .totalDeletedSize(Optional.of(totalDeletedSize))
+            .build();
+    }
+
     private EventDataTransferObject constructMailboxRenamedProxy(MailboxSession mailboxSession,
                                                                  MailboxDataTransferObject mailboxIntermediate,
                                                                  MailboxPath from) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4214bdf/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/event/EventNotValidException.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/event/EventNotValidException.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/event/EventNotValidException.java
new file mode 100644
index 0000000..f4536be
--- /dev/null
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/event/EventNotValidException.java
@@ -0,0 +1,26 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.mailbox.store.json.event;
+
+public class EventNotValidException extends Exception {
+
+    public EventNotValidException(String message) {
+        super(message);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4214bdf/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/event/dto/EventDataTransferObject.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/event/dto/EventDataTransferObject.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/event/dto/EventDataTransferObject.java
index e007f9d..0041a21 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/event/dto/EventDataTransferObject.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/event/dto/EventDataTransferObject.java
@@ -21,8 +21,12 @@ package org.apache.james.mailbox.store.json.event.dto;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
+import org.apache.james.core.quota.QuotaCount;
+import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.model.QuotaRoot;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
@@ -38,6 +42,9 @@ public class EventDataTransferObject {
         private Map<MessageUid, MessageMetaDataDataTransferObject> metaData;
         private List<UpdatedFlagsDataTransferObject> updatedFlags;
         private MailboxPathDataTransferObject from;
+        private Optional<QuotaRoot> quotaRoot;
+        private Optional<QuotaCount> deletedMessageCount;
+        private Optional<QuotaSize> totalDeletedSize;
 
         public Builder type(EventType type) {
             this.type = type;
@@ -74,8 +81,23 @@ public class EventDataTransferObject {
             return this;
         }
 
+        public Builder quotaRoot(Optional<QuotaRoot> quotaRoot) {
+            this.quotaRoot = quotaRoot;
+            return this;
+        }
+
+        public Builder deletedMessageCount(Optional<QuotaCount> deletedMessageCount) {
+            this.deletedMessageCount = deletedMessageCount;
+            return this;
+        }
+
+        public Builder totalDeletedSize(Optional<QuotaSize> totalDeletedSize) {
+            this.totalDeletedSize = totalDeletedSize;
+            return this;
+        }
+
         public EventDataTransferObject build() {
-            return new EventDataTransferObject(type, mailbox, session, uids, metaData, updatedFlags, from);
+            return new EventDataTransferObject(type, mailbox, session, uids, metaData, updatedFlags, from, quotaRoot, deletedMessageCount, totalDeletedSize);
         }
 
     }
@@ -98,6 +120,12 @@ public class EventDataTransferObject {
     private List<UpdatedFlagsDataTransferObject> updatedFlags;
     @JsonProperty()
     private MailboxPathDataTransferObject from;
+    @JsonProperty()
+    private Optional<QuotaRoot> quotaRoot;
+    @JsonProperty()
+    private Optional<QuotaCount> deletedMessageCount;
+    @JsonProperty()
+    private Optional<QuotaSize> totalDeletedSize;
 
     public EventDataTransferObject() {}
 
@@ -107,7 +135,10 @@ public class EventDataTransferObject {
                                    List<MessageUid> uids,
                                    Map<MessageUid, MessageMetaDataDataTransferObject> metaData,
                                    List<UpdatedFlagsDataTransferObject> updatedFlags,
-                                   MailboxPathDataTransferObject from) {
+                                   MailboxPathDataTransferObject from, 
+                                   Optional<QuotaRoot> quotaRoot, 
+                                   Optional<QuotaCount> deletedMessageCount,
+                                   Optional<QuotaSize> totalDeletedSize) {
         this.type = type;
         this.mailbox = mailbox;
         this.session = session;
@@ -115,6 +146,9 @@ public class EventDataTransferObject {
         this.metaData = metaData;
         this.updatedFlags = updatedFlags;
         this.from = from;
+        this.quotaRoot = quotaRoot;
+        this.deletedMessageCount = deletedMessageCount;
+        this.totalDeletedSize = totalDeletedSize;
     }
 
     @JsonIgnore
@@ -151,4 +185,19 @@ public class EventDataTransferObject {
     public MailboxPathDataTransferObject getFrom() {
         return from;
     }
+
+    @JsonIgnore
+    public Optional<QuotaRoot> getQuotaRoot() {
+        return quotaRoot;
+    }
+
+    @JsonIgnore
+    public Optional<QuotaCount> getDeletedMessageCount() {
+        return deletedMessageCount;
+    }
+
+    @JsonIgnore
+    public Optional<QuotaSize> getTotalDeletedSize() {
+        return totalDeletedSize;
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4214bdf/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
index 4ffbf4a..a6c8308 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
@@ -66,6 +66,9 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener, QuotaUpdat
                 Expunged expungedEvent = (Expunged) event;
                 QuotaRoot quotaRoot = quotaRootResolver.getQuotaRoot(expungedEvent.getMailboxPath());
                 handleExpungedEvent(expungedEvent, quotaRoot);
+            } else if (event instanceof MailboxDeletion) {
+                MailboxDeletion mailboxDeletionEvent = (MailboxDeletion) event;
+                handleMailboxDeletionEvent(mailboxDeletionEvent);
             }
         } catch (MailboxException e) {
             LOGGER.error("Error while updating quotas", e);
@@ -107,4 +110,10 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener, QuotaUpdat
             quotaManager.getStorageQuota(quotaRoot));
     }
 
+    private void handleMailboxDeletionEvent(MailboxDeletion mailboxDeletionEvent) throws MailboxException {
+        currentQuotaManager.decrease(mailboxDeletionEvent.getQuotaRoot(),
+                mailboxDeletionEvent.getDeletedMessageCount().asLong(),
+                mailboxDeletionEvent.getTotalDeletedSize().asLong());
+    }
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4214bdf/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListenerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListenerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListenerTest.java
index 1e5d36d..fe509ec 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListenerTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListenerTest.java
@@ -24,11 +24,16 @@ import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.util.Optional;
+
+import org.apache.james.core.quota.QuotaCount;
+import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.util.EventCollector;
 import org.junit.Before;
 import org.junit.Test;
@@ -124,7 +129,10 @@ public class DefaultDelegatingMailboxListenerTest {
 
     @Test
     public void mailboxDeletionShouldUnregisterMAILBOXListeners() throws Exception {
-        MailboxListener.MailboxDeletion event = new MailboxListener.MailboxDeletion(null, MAILBOX_PATH) {};
+        QuotaRoot quotaRoot = QuotaRoot.quotaRoot("root", Optional.empty());
+        QuotaCount deletedMessageCount = QuotaCount.count(123);
+        QuotaSize totalDeletedSize = QuotaSize.size(456);
+        MailboxListener.MailboxDeletion event = new MailboxListener.MailboxDeletion(null, MAILBOX_PATH, quotaRoot, deletedMessageCount, totalDeletedSize) {};
         defaultDelegatingMailboxListener.event(event);
         MailboxListener.MailboxEvent secondEvent = new MailboxListener.MailboxEvent(null, MAILBOX_PATH) {};
         defaultDelegatingMailboxListener.event(secondEvent);
@@ -135,7 +143,10 @@ public class DefaultDelegatingMailboxListenerTest {
 
     @Test
     public void mailboxDeletionShouldNotRegisterMAILBOXListenerToOtherPaths() throws Exception {
-        MailboxListener.MailboxDeletion event = new MailboxListener.MailboxDeletion(null, MAILBOX_PATH) {};
+        QuotaRoot quotaRoot = QuotaRoot.quotaRoot("root", Optional.empty());
+        QuotaCount quotaCount = QuotaCount.count(123);
+        QuotaSize quotaSize = QuotaSize.size(456);
+        MailboxListener.MailboxDeletion event = new MailboxListener.MailboxDeletion(null, MAILBOX_PATH, quotaRoot, quotaCount, quotaSize) {};
         defaultDelegatingMailboxListener.event(event);
         MailboxListener.MailboxEvent secondEvent = new MailboxListener.MailboxEvent(null, OTHER_MAILBOX_PATH) {};
         defaultDelegatingMailboxListener.event(secondEvent);

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4214bdf/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxAnnotationListenerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxAnnotationListenerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxAnnotationListenerTest.java
index cbc1ae3..524ad7d 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxAnnotationListenerTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxAnnotationListenerTest.java
@@ -26,7 +26,10 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
 import java.util.List;
+import java.util.Optional;
 
+import org.apache.james.core.quota.QuotaCount;
+import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.mock.MockMailboxSession;
@@ -34,6 +37,7 @@ import org.apache.james.mailbox.model.MailboxAnnotation;
 import org.apache.james.mailbox.model.MailboxAnnotationKey;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.model.TestId;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.mail.AnnotationMapper;
@@ -77,7 +81,10 @@ public class MailboxAnnotationListenerTest {
         eventFactory = new EventFactory();
         mailbox = new SimpleMailbox(MailboxPath.forUser("user", "name"), UID_VALIDITY, mailboxId);
 
-        deleteEvent = eventFactory.mailboxDeleted(mailboxSession, mailbox);
+        QuotaRoot quotaRoot = QuotaRoot.quotaRoot("root", Optional.empty());
+        QuotaCount quotaCount = QuotaCount.count(123);
+        QuotaSize quotaSize = QuotaSize.size(456);
+        deleteEvent = eventFactory.mailboxDeleted(mailboxSession, mailbox, quotaRoot, quotaCount, quotaSize);
 
         when(mailboxSessionMapperFactory.getAnnotationMapper(eq(deleteEvent.getSession()))).thenReturn(annotationMapper);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4214bdf/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/distributed/BroadcastDelegatingMailboxListenerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/distributed/BroadcastDelegatingMailboxListenerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/distributed/BroadcastDelegatingMailboxListenerTest.java
index 94460c7..a0d6ac8 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/distributed/BroadcastDelegatingMailboxListenerTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/distributed/BroadcastDelegatingMailboxListenerTest.java
@@ -25,10 +25,15 @@ import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
+import java.util.Optional;
+
+import org.apache.james.core.quota.QuotaCount;
+import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.store.event.EventSerializer;
 import org.apache.james.mailbox.store.publisher.MessageConsumer;
 import org.apache.james.mailbox.store.publisher.Publisher;
@@ -166,7 +171,10 @@ public class BroadcastDelegatingMailboxListenerTest {
 
     @Test
     public void deletionDistantEventsShouldBeWellHandled() throws Exception {
-        final MailboxListener.MailboxEvent event = new MailboxListener.MailboxDeletion(mailboxSession, MAILBOX_PATH);
+        QuotaRoot quotaRoot = QuotaRoot.quotaRoot("root", Optional.empty());
+        QuotaCount quotaCount = QuotaCount.count(123);
+        QuotaSize quotaSize = QuotaSize.size(456);
+        MailboxListener.MailboxEvent event = new MailboxListener.MailboxDeletion(mailboxSession, MAILBOX_PATH, quotaRoot, quotaCount, quotaSize);
         broadcastDelegatingMailboxListener.addListener(MAILBOX_PATH, mailboxEventCollector, mailboxSession);
         when(mockedEventSerializer.deSerializeEvent(BYTES)).thenReturn(event);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4214bdf/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/distributed/RegisteredDelegatingMailboxListenerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/distributed/RegisteredDelegatingMailboxListenerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/distributed/RegisteredDelegatingMailboxListenerTest.java
index 259174b..b904e53 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/distributed/RegisteredDelegatingMailboxListenerTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/distributed/RegisteredDelegatingMailboxListenerTest.java
@@ -26,11 +26,16 @@ import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
+import java.util.Optional;
+
+import org.apache.james.core.quota.QuotaCount;
+import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.store.event.EventSerializer;
 import org.apache.james.mailbox.store.publisher.MessageConsumer;
 import org.apache.james.mailbox.store.publisher.Publisher;
@@ -157,7 +162,10 @@ public class RegisteredDelegatingMailboxListenerTest {
 
     @Test
     public void deletionEventsShouldBeWellHandled() throws Exception {
-        MailboxListener.MailboxEvent event = new MailboxListener.MailboxDeletion(mailboxSession, MAILBOX_PATH);
+        QuotaRoot quotaRoot = QuotaRoot.quotaRoot("root", Optional.empty());
+        QuotaCount quotaCount = QuotaCount.count(123);
+        QuotaSize quotaSize = QuotaSize.size(456);
+        MailboxListener.MailboxEvent event = new MailboxListener.MailboxDeletion(mailboxSession, MAILBOX_PATH, quotaRoot, quotaCount, quotaSize);
         testee.addListener(MAILBOX_PATH, mailboxEventCollector, mailboxSession);
         verify(mockedMailboxPathRegister).register(MAILBOX_PATH);
         when(mockedMailboxPathRegister.getTopics(MAILBOX_PATH)).thenReturn(Sets.newHashSet(TOPIC, TOPIC_2));

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4214bdf/mailbox/store/src/test/java/org/apache/james/mailbox/store/json/EventSerializerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/json/EventSerializerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/json/EventSerializerTest.java
index 629cced..f6d68b8 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/json/EventSerializerTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/json/EventSerializerTest.java
@@ -21,10 +21,13 @@ package org.apache.james.mailbox.store.json;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
+import java.util.Optional;
 import java.util.TreeMap;
 
 import javax.mail.Flags;
 
+import org.apache.james.core.quota.QuotaCount;
+import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageUid;
@@ -32,6 +35,7 @@ import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MessageMetaData;
+import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.model.TestId;
 import org.apache.james.mailbox.model.TestMessageId;
 import org.apache.james.mailbox.model.UpdatedFlags;
@@ -133,12 +137,18 @@ public abstract class EventSerializerTest {
 
     @Test
     public void mailboxDeletionShouldBeWellConverted() throws Exception {
-        MailboxListener.MailboxEvent event = eventFactory.mailboxDeleted(mailboxSession, mailbox);
+        QuotaRoot quotaRoot = QuotaRoot.quotaRoot("root", Optional.empty());
+        QuotaCount quotaCount = QuotaCount.count(123);
+        QuotaSize quotaSize = QuotaSize.size(456);
+        MailboxListener.MailboxDeletion event = eventFactory.mailboxDeleted(mailboxSession, mailbox, quotaRoot, quotaCount, quotaSize);
         byte[] serializedEvent = serializer.serializeEvent(event);
-        MailboxListener.MailboxEvent deserializedEvent = serializer.deSerializeEvent(serializedEvent);
+        MailboxListener.MailboxDeletion deserializedEvent = (MailboxListener.MailboxDeletion) serializer.deSerializeEvent(serializedEvent);
         assertThat(deserializedEvent.getMailboxPath()).isEqualTo(event.getMailboxPath());
         assertThat(deserializedEvent.getSession().getSessionId()).isEqualTo(event.getSession().getSessionId());
         assertThat(deserializedEvent).isInstanceOf(MailboxListener.MailboxDeletion.class);
+        assertThat(deserializedEvent.getQuotaRoot()).isEqualTo(quotaRoot);
+        assertThat(deserializedEvent.getDeletedMessageCount()).isEqualTo(quotaCount);
+        assertThat(deserializedEvent.getTotalDeletedSize()).isEqualTo(quotaSize);
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4214bdf/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java
index 158cd97..f2f2385 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java
@@ -29,6 +29,8 @@ import java.util.Optional;
 
 import javax.mail.Flags;
 
+import org.apache.james.core.quota.QuotaCount;
+import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.model.MailboxPath;
@@ -105,4 +107,15 @@ public class ListeningCurrentQuotaUpdaterTest {
         verify(mockedCurrentQuotaManager, never()).increase(QUOTA_ROOT, 0, 0);
     }
 
+    @Test
+    public void mailboxDeletionEventShouldDecreaseCurrentQuotaValues() throws Exception {
+        MailboxListener.MailboxDeletion deletion = mock(MailboxListener.MailboxDeletion.class);
+        when(deletion.getMailboxPath()).thenReturn(MAILBOX_PATH);
+        when(deletion.getQuotaRoot()).thenReturn(QUOTA_ROOT);
+        when(deletion.getDeletedMessageCount()).thenReturn(QuotaCount.count(10));
+        when(deletion.getTotalDeletedSize()).thenReturn(QuotaSize.size(5));
+        when(mockedQuotaRootResolver.getQuotaRoot(MAILBOX_PATH)).thenReturn(QUOTA_ROOT);
+        testee.event(deletion);
+        verify(mockedCurrentQuotaManager).decrease(QUOTA_ROOT, 10, 5);
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4214bdf/mailbox/tool/src/test/java/org/apache/james/mailbox/indexer/registrations/GlobalRegistrationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/tool/src/test/java/org/apache/james/mailbox/indexer/registrations/GlobalRegistrationTest.java b/mailbox/tool/src/test/java/org/apache/james/mailbox/indexer/registrations/GlobalRegistrationTest.java
index 86fe5b6..2717c05 100644
--- a/mailbox/tool/src/test/java/org/apache/james/mailbox/indexer/registrations/GlobalRegistrationTest.java
+++ b/mailbox/tool/src/test/java/org/apache/james/mailbox/indexer/registrations/GlobalRegistrationTest.java
@@ -23,9 +23,12 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.Optional;
 
+import org.apache.james.core.quota.QuotaCount;
+import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.store.event.EventFactory;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
 import org.junit.Before;
@@ -63,7 +66,10 @@ public class GlobalRegistrationTest {
 
     @Test
     public void pathToIndexShouldBeNullifiedByDeletedEvents() {
-        MailboxListener.MailboxEvent event = eventFactory.mailboxDeleted(session, MAILBOX);
+        QuotaRoot quotaRoot = QuotaRoot.quotaRoot("root", Optional.empty());
+        QuotaCount quotaCount = QuotaCount.count(123);
+        QuotaSize quotaSize = QuotaSize.size(456);
+        MailboxListener.MailboxEvent event = eventFactory.mailboxDeleted(session, MAILBOX, quotaRoot, quotaCount, quotaSize);
         globalRegistration.event(event);
         assertThat(globalRegistration.getPathToIndex(INBOX)).isEqualTo(Optional.empty());
     }


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


[6/8] james-project git commit: JAMES-2425 MailRepositoryStore::getByPath should create mail repository when repository exist

Posted by bt...@apache.org.
JAMES-2425 MailRepositoryStore::getByPath should create mail repository when repository exist


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

Branch: refs/heads/master
Commit: 6592d7cebacb4f8b5d4cfae82991700e41f69cac
Parents: 31662d5
Author: benwa <bt...@linagora.com>
Authored: Wed Aug 1 16:56:50 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Aug 3 07:57:22 2018 +0700

----------------------------------------------------------------------
 .../org/apache/james/utils/InMemoryMailRepositoryStore.java  | 8 +++-----
 .../apache/james/utils/InMemoryMailRepositoryStoreTest.java  | 8 ++++++++
 2 files changed, 11 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/6592d7ce/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
index b93ea77..b6e1491 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
@@ -103,11 +103,9 @@ public class InMemoryMailRepositoryStore implements MailRepositoryStore, Configu
 
     @Override
     public Stream<MailRepository> getByPath(MailRepositoryPath path) {
-        return destinationToRepositoryAssociations
-                .keySet()
-                .stream()
-                .filter((MailRepositoryUrl key) -> key.getPath().equals(path))
-                .map(destinationToRepositoryAssociations::get);
+        return urlStore.listDistinct()
+            .filter(url -> url.getPath().equals(path))
+            .map(this::select);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/6592d7ce/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java b/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
index cb6cb00..44b91a9 100644
--- a/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
+++ b/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
@@ -197,6 +197,14 @@ public class InMemoryMailRepositoryStoreTest {
     }
 
     @Test
+    public void getByPathShouldReturnRepositoryWhenUrlExists() {
+        urlStore.add(FILE_REPO);
+
+        assertThat(repositoryStore.getByPath(FILE_REPO.getPath()))
+            .isNotEmpty();
+    }
+
+    @Test
     public void getShouldReturnPreviouslyCreatedMailRepository() {
         MailRepository mailRepository = repositoryStore.select(FILE_REPO);
 


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


[4/8] james-project git commit: JAMES-2468 Remove message pack EventSerializer implementation

Posted by bt...@apache.org.
JAMES-2468 Remove message pack EventSerializer implementation


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

Branch: refs/heads/master
Commit: 3a1a896d8c81fa78cfa400d8efe232dd6a65a0b6
Parents: f6af9e0
Author: Antoine Duprat <ad...@linagora.com>
Authored: Mon Jul 16 12:42:44 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Aug 3 07:56:28 2018 +0700

----------------------------------------------------------------------
 ...istributedMailboxDelegatingListenerTest.java | 20 ++++-------
 mailbox/store/pom.xml                           |  5 ---
 .../james/mailbox/store/MessageBatcher.java     |  3 +-
 .../store/json/MessagePackEventSerializer.java  | 35 ------------------
 ...elegatingMailboxListenerIntegrationTest.java | 20 ++++-------
 .../json/MessagePackEventSerializerTest.java    | 37 --------------------
 6 files changed, 16 insertions(+), 104 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/3a1a896d/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest.java
index ca6dc84..b1563d1 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest.java
@@ -40,7 +40,7 @@ import org.apache.james.mailbox.store.event.EventFactory;
 import org.apache.james.mailbox.store.event.distributed.DistantMailboxPathRegister;
 import org.apache.james.mailbox.store.event.distributed.PublisherReceiver;
 import org.apache.james.mailbox.store.event.distributed.RegisteredDelegatingMailboxListener;
-import org.apache.james.mailbox.store.json.MessagePackEventSerializer;
+import org.apache.james.mailbox.store.json.JsonEventSerializer;
 import org.apache.james.mailbox.store.json.event.EventConverter;
 import org.apache.james.mailbox.store.json.event.MailboxConverter;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
@@ -98,11 +98,11 @@ public class CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest {
                 CassandraUtils.WITH_DEFAULT_CONFIGURATION,
                 CASSANDRA_TIME_OUT_IN_S),
             SCHEDULER_PERIOD_IN_S);
+        JsonEventSerializer eventSerializer = new JsonEventSerializer(
+            new EventConverter(new MailboxConverter(new TestIdDeserializer())),
+            new TestMessageId.Factory());
         registeredDelegatingMailboxListener1 = new RegisteredDelegatingMailboxListener(
-            new MessagePackEventSerializer(
-                new EventConverter(new MailboxConverter(new TestIdDeserializer())),
-                new TestMessageId.Factory()
-            ),
+            eventSerializer,
             publisherReceiver,
             publisherReceiver,
             mailboxPathRegister1);
@@ -114,10 +114,7 @@ public class CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest {
                 CASSANDRA_TIME_OUT_IN_S),
             SCHEDULER_PERIOD_IN_S);
         registeredDelegatingMailboxListener2 = new RegisteredDelegatingMailboxListener(
-            new MessagePackEventSerializer(
-                new EventConverter(new MailboxConverter(new TestIdDeserializer())),
-                new TestMessageId.Factory()
-            ),
+            eventSerializer,
             publisherReceiver,
             publisherReceiver,
             mailboxPathRegister2);
@@ -129,10 +126,7 @@ public class CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest {
                 CASSANDRA_TIME_OUT_IN_S),
             SCHEDULER_PERIOD_IN_S);
         registeredDelegatingMailboxListener3 = new RegisteredDelegatingMailboxListener(
-            new MessagePackEventSerializer(
-                new EventConverter(new MailboxConverter(new TestIdDeserializer())),
-                new TestMessageId.Factory()
-            ),
+            eventSerializer,
             publisherReceiver,
             publisherReceiver,
             mailboxPathRegister3);

http://git-wip-us.apache.org/repos/asf/james-project/blob/3a1a896d/mailbox/store/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/store/pom.xml b/mailbox/store/pom.xml
index 8033192..1913e89 100644
--- a/mailbox/store/pom.xml
+++ b/mailbox/store/pom.xml
@@ -135,11 +135,6 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.msgpack</groupId>
-            <artifactId>jackson-dataformat-msgpack</artifactId>
-            <version>0.7.0-p9</version>
-        </dependency>
-        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/3a1a896d/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageBatcher.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageBatcher.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageBatcher.java
index c51154b..a1119e0 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageBatcher.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageBatcher.java
@@ -24,7 +24,8 @@ import java.util.List;
 
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MessageRange;
-import org.msgpack.core.Preconditions;
+
+import com.google.common.base.Preconditions;
 
 public class MessageBatcher {
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/3a1a896d/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/MessagePackEventSerializer.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/MessagePackEventSerializer.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/MessagePackEventSerializer.java
deleted file mode 100644
index 6f09e47..0000000
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/MessagePackEventSerializer.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.mailbox.store.json;
-
-import org.apache.james.mailbox.model.MessageId;
-import org.apache.james.mailbox.store.json.event.EventConverter;
-import org.msgpack.jackson.dataformat.MessagePackFactory;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-/**
- * MailboxMessage Pack ( http://msgpack.org/ ) Event Serializer
- */
-public class MessagePackEventSerializer extends JacksonEventSerializer {
-    public MessagePackEventSerializer(EventConverter eventConverter, MessageId.Factory messageIdFactory) {
-        super(eventConverter, configureObjectMapper(new ObjectMapper(new MessagePackFactory()), messageIdFactory));
-    }
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/3a1a896d/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/distributed/BroadcastDelegatingMailboxListenerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/distributed/BroadcastDelegatingMailboxListenerIntegrationTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/distributed/BroadcastDelegatingMailboxListenerIntegrationTest.java
index 9eaca45..9403bfc 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/distributed/BroadcastDelegatingMailboxListenerIntegrationTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/distributed/BroadcastDelegatingMailboxListenerIntegrationTest.java
@@ -32,7 +32,7 @@ import org.apache.james.mailbox.model.TestId;
 import org.apache.james.mailbox.model.TestMessageId;
 import org.apache.james.mailbox.store.TestIdDeserializer;
 import org.apache.james.mailbox.store.event.EventFactory;
-import org.apache.james.mailbox.store.json.MessagePackEventSerializer;
+import org.apache.james.mailbox.store.json.JsonEventSerializer;
 import org.apache.james.mailbox.store.json.event.EventConverter;
 import org.apache.james.mailbox.store.json.event.MailboxConverter;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
@@ -71,26 +71,20 @@ public class BroadcastDelegatingMailboxListenerIntegrationTest {
     @Before
     public void setUp() throws Exception {
         PublisherReceiver publisherReceiver = new PublisherReceiver();
+        JsonEventSerializer eventSerializer = new JsonEventSerializer(
+            new EventConverter(new MailboxConverter(new TestIdDeserializer())),
+            new TestMessageId.Factory());
         broadcastDelegatingMailboxListener1 = new BroadcastDelegatingMailboxListener(publisherReceiver,
             publisherReceiver,
-            new MessagePackEventSerializer(
-                new EventConverter(new MailboxConverter(new TestIdDeserializer())),
-                new TestMessageId.Factory()
-            ),
+            eventSerializer,
             TOPIC);
         broadcastDelegatingMailboxListener2 = new BroadcastDelegatingMailboxListener(publisherReceiver,
             publisherReceiver,
-            new MessagePackEventSerializer(
-                new EventConverter(new MailboxConverter(new TestIdDeserializer())),
-                new TestMessageId.Factory()
-            ),
+            eventSerializer,
             TOPIC);
         broadcastDelegatingMailboxListener3 = new BroadcastDelegatingMailboxListener(publisherReceiver,
             publisherReceiver,
-            new MessagePackEventSerializer(
-                new EventConverter(new MailboxConverter(new TestIdDeserializer())),
-                new TestMessageId.Factory()
-            ),
+            eventSerializer,
             TOPIC);
         eventCollectorMailbox1 = new EventCollector(MailboxListener.ListenerType.MAILBOX);
         eventCollectorMailbox2 = new EventCollector(MailboxListener.ListenerType.MAILBOX);

http://git-wip-us.apache.org/repos/asf/james-project/blob/3a1a896d/mailbox/store/src/test/java/org/apache/james/mailbox/store/json/MessagePackEventSerializerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/json/MessagePackEventSerializerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/json/MessagePackEventSerializerTest.java
deleted file mode 100644
index 5273005..0000000
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/json/MessagePackEventSerializerTest.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.mailbox.store.json;
-
-import org.apache.james.mailbox.model.TestMessageId;
-import org.apache.james.mailbox.store.TestIdDeserializer;
-import org.apache.james.mailbox.store.event.EventSerializer;
-import org.apache.james.mailbox.store.json.event.EventConverter;
-import org.apache.james.mailbox.store.json.event.MailboxConverter;
-
-public class MessagePackEventSerializerTest extends EventSerializerTest {
-
-    @Override
-    EventSerializer createSerializer() {
-        return new MessagePackEventSerializer(
-            new EventConverter(
-                new MailboxConverter(new TestIdDeserializer())),
-            new TestMessageId.Factory());
-    }
-}


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