MAILBOX-291 Add QUOTA feature to JPA MPT tests

Enhance ImapHostSystem with the capability to set quotas


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

Branch: refs/heads/master
Commit: 2bded9da67138e2b046919b7bc493f7f446c6075
Parents: e91f36f
Author: benwa <btell...@linagora.com>
Authored: Wed Mar 29 20:20:57 2017 +0700
Committer: benwa <btell...@linagora.com>
Committed: Fri Mar 31 08:46:26 2017 +0700

----------------------------------------------------------------------
 .../apache/james/mpt/api/ImapHostSystem.java    |  2 +
 .../james/mpt/host/ExternalHostSystem.java      |  5 ++
 .../cassandra/host/CassandraHostSystem.java     | 13 +++--
 .../james/mpt/imapmailbox/suite/QuotaTest.java  |  6 +++
 .../imapmailbox/cyrus/host/CyrusHostSystem.java |  6 ++-
 .../host/ElasticSearchHostSystem.java           |  5 ++
 .../james/host/ExternalJamesHostSystem.java     |  5 ++
 .../imapmailbox/hbase/host/HBaseHostSystem.java |  6 +++
 .../InMemoryEventAsynchronousHostSystem.java    | 11 ++--
 .../inmemory/host/InMemoryHostSystem.java       | 12 +++--
 .../mpt/imapmailbox/jcr/host/JCRHostSystem.java |  6 +++
 .../mpt/imapmailbox/jpa/host/JPAHostSystem.java | 53 ++++++++++++++++----
 .../host/LuceneSearchHostSystem.java            |  6 +++
 .../maildir/host/MaildirHostSystem.java         |  5 ++
 14 files changed, 118 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/2bded9da/mpt/core/src/main/java/org/apache/james/mpt/api/ImapHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/core/src/main/java/org/apache/james/mpt/api/ImapHostSystem.java 
b/mpt/core/src/main/java/org/apache/james/mpt/api/ImapHostSystem.java
index 1ed2e29..dbff398 100644
--- a/mpt/core/src/main/java/org/apache/james/mpt/api/ImapHostSystem.java
+++ b/mpt/core/src/main/java/org/apache/james/mpt/api/ImapHostSystem.java
@@ -27,4 +27,6 @@ public interface ImapHostSystem extends HostSystem {
     
     void createMailbox(MailboxPath mailboxPath) throws Exception;
 
+    void setQuotaLimits(long maxMessageQuota, long maxStorageQuota) throws 
Exception;
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/2bded9da/mpt/core/src/main/java/org/apache/james/mpt/host/ExternalHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/core/src/main/java/org/apache/james/mpt/host/ExternalHostSystem.java 
b/mpt/core/src/main/java/org/apache/james/mpt/host/ExternalHostSystem.java
index 286b485..e766a77 100644
--- a/mpt/core/src/main/java/org/apache/james/mpt/host/ExternalHostSystem.java
+++ b/mpt/core/src/main/java/org/apache/james/mpt/host/ExternalHostSystem.java
@@ -107,5 +107,10 @@ public class ExternalHostSystem extends 
ExternalSessionFactory implements ImapHo
     public boolean supports(Feature... features) {
         return this.features.supports(features);
     }
+
+    @Override
+    public void setQuotaLimits(long maxMessageQuota, long maxStorageQuota) 
throws Exception {
+        throw new NotImplementedException();
+    }
     
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/2bded9da/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
 
b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
index 14b4ded..0948a6a 100644
--- 
a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
+++ 
b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
@@ -57,6 +57,7 @@ import 
org.apache.james.mailbox.cassandra.modules.CassandraSubscriptionModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraUidModule;
 import org.apache.james.mailbox.cassandra.quota.CassandraCurrentQuotaManager;
 import 
org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaManager;
+import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
@@ -82,6 +83,7 @@ public class CassandraHostSystem extends JamesImapHostSystem {
 
     private final CassandraMailboxManager mailboxManager;
     private final CassandraCluster cassandraClusterSingleton;
+    private final CassandraPerUserMaxQuotaManager perUserMaxQuotaManager;
 
     public CassandraHostSystem() throws Exception {
         CassandraModule mailboxModule = new CassandraModuleComposite(
@@ -134,9 +136,7 @@ public class CassandraHostSystem extends 
JamesImapHostSystem {
         mailboxManager = new CassandraMailboxManager(mapperFactory, 
authenticator, authorizator, new JVMMailboxPathLocker(), new MessageParser(), 
messageIdFactory);
         QuotaRootResolver quotaRootResolver = new 
DefaultQuotaRootResolver(mapperFactory);
 
-        CassandraPerUserMaxQuotaManager perUserMaxQuotaManager = new 
CassandraPerUserMaxQuotaManager(session);
-        perUserMaxQuotaManager.setDefaultMaxMessage(4096);
-        perUserMaxQuotaManager.setDefaultMaxStorage(5L * 1024L * 1024L * 
1024L);
+        perUserMaxQuotaManager = new CassandraPerUserMaxQuotaManager(session);
 
         CassandraCurrentQuotaManager currentQuotaManager = new 
CassandraCurrentQuotaManager(session);
 
@@ -181,5 +181,10 @@ public class CassandraHostSystem extends 
JamesImapHostSystem {
     public boolean supports(Feature... features) {
         return IMAP_FEATURES.supports(features);
     }
-    
+
+    @Override
+    public void setQuotaLimits(long maxMessageQuota, long maxStorageQuota) 
throws MailboxException {
+        perUserMaxQuotaManager.setDefaultMaxMessage(maxMessageQuota);
+        perUserMaxQuotaManager.setDefaultMaxStorage(maxStorageQuota);
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/2bded9da/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/QuotaTest.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/QuotaTest.java
 
b/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/QuotaTest.java
index 43e8222..e1ef008 100644
--- 
a/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/QuotaTest.java
+++ 
b/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/QuotaTest.java
@@ -30,6 +30,9 @@ import java.util.Locale;
 
 public class QuotaTest extends BaseSelectedState {
 
+    private static final int MAX_MESSAGE_QUOTA = 4096;
+    private static final long MAX_STORAGE_QUOTA = 5 * 1024L * 1024L * 1024L;
+
     @Inject
     private static ImapHostSystem system;
 
@@ -40,6 +43,9 @@ public class QuotaTest extends BaseSelectedState {
     @Test
     public void testQuotaScript() throws Exception {
         Assume.assumeTrue(system.supports(ImapFeatures.Feature.QUOTA_SUPPORT));
+
+        system.setQuotaLimits(MAX_MESSAGE_QUOTA, MAX_STORAGE_QUOTA);
+
         scriptTest("Quota", Locale.CANADA);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/2bded9da/mpt/impl/imap-mailbox/cyrus/src/test/java/org/apache/james/mpt/imapmailbox/cyrus/host/CyrusHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/imap-mailbox/cyrus/src/test/java/org/apache/james/mpt/imapmailbox/cyrus/host/CyrusHostSystem.java
 
b/mpt/impl/imap-mailbox/cyrus/src/test/java/org/apache/james/mpt/imapmailbox/cyrus/host/CyrusHostSystem.java
index 4a99953..2af65be 100644
--- 
a/mpt/impl/imap-mailbox/cyrus/src/test/java/org/apache/james/mpt/imapmailbox/cyrus/host/CyrusHostSystem.java
+++ 
b/mpt/impl/imap-mailbox/cyrus/src/test/java/org/apache/james/mpt/imapmailbox/cyrus/host/CyrusHostSystem.java
@@ -20,6 +20,7 @@ package org.apache.james.mpt.imapmailbox.cyrus.host;
 
 import java.net.InetSocketAddress;
 
+import org.apache.commons.lang.NotImplementedException;
 import org.apache.james.mailbox.model.MailboxConstants;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mpt.api.ImapFeatures;
@@ -129,6 +130,9 @@ public class CyrusHostSystem extends ExternalHostSystem 
implements Provider<Cont
             Throwables.propagate(e);
         }
     }
-    
 
+    @Override
+    public void setQuotaLimits(long maxMessageQuota, long maxStorageQuota) 
throws Exception {
+        throw new NotImplementedException();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/2bded9da/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
 
b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
index 8bcd715..c69c075 100644
--- 
a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
+++ 
b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
@@ -25,6 +25,7 @@ import java.time.ZoneId;
 import java.util.concurrent.Executors;
 
 import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.NotImplementedException;
 import org.apache.james.backends.es.DeleteByQueryPerformer;
 import org.apache.james.backends.es.ElasticSearchIndexer;
 import org.apache.james.backends.es.EmbeddedElasticSearch;
@@ -150,4 +151,8 @@ public class ElasticSearchHostSystem extends 
JamesImapHostSystem {
         return SUPPORTED_FEATURES.supports(features);
     }
 
+    @Override
+    public void setQuotaLimits(long maxMessageQuota, long maxStorageQuota) 
throws Exception {
+        throw new NotImplementedException();
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/2bded9da/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesHostSystem.java
 
b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesHostSystem.java
index 2aa65f4..1f82887 100644
--- 
a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesHostSystem.java
+++ 
b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ExternalJamesHostSystem.java
@@ -74,5 +74,10 @@ public class ExternalJamesHostSystem extends 
ExternalHostSystem {
     public void createMailbox(MailboxPath mailboxPath) {
         throw new NotImplementedException();
     }
+
+    @Override
+    public void setQuotaLimits(long maxMessageQuota, long maxStorageQuota) 
throws Exception {
+        throw new NotImplementedException();
+    }
     
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/2bded9da/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java
 
b/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java
index 1355d1b..a6558b0 100644
--- 
a/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java
+++ 
b/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java
@@ -21,6 +21,7 @@ package org.apache.james.mpt.imapmailbox.hbase.host;
 import java.io.File;
 
 import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.NotImplementedException;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HBaseConfiguration;
 import org.apache.hadoop.hbase.HBaseTestingUtility;
@@ -156,4 +157,9 @@ public class HBaseHostSystem extends JamesImapHostSystem {
     public boolean supports(Feature... features) {
         return SUPPORTED_FEATURES.supports(features);
     }
+
+    @Override
+    public void setQuotaLimits(long maxMessageQuota, long maxStorageQuota) 
throws Exception {
+        throw new NotImplementedException();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/2bded9da/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryEventAsynchronousHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryEventAsynchronousHostSystem.java
 
b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryEventAsynchronousHostSystem.java
index 0a3361b..6393d50 100644
--- 
a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryEventAsynchronousHostSystem.java
+++ 
b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryEventAsynchronousHostSystem.java
@@ -55,6 +55,7 @@ public class InMemoryEventAsynchronousHostSystem extends 
JamesImapHostSystem {
     private static final ImapFeatures SUPPORTED_FEATURES = 
ImapFeatures.of(Feature.NAMESPACE_SUPPORT);
 
     private StoreMailboxManager mailboxManager;
+    private InMemoryPerUserMaxQuotaManager perUserMaxQuotaManager;
 
     public static JamesImapHostSystem build() throws Exception {
         return new InMemoryEventAsynchronousHostSystem();
@@ -79,9 +80,7 @@ public class InMemoryEventAsynchronousHostSystem extends 
JamesImapHostSystem {
                 new InMemoryMessageId.Factory(), 
MailboxConstants.DEFAULT_LIMIT_ANNOTATIONS_ON_MAILBOX, 
MailboxConstants.DEFAULT_LIMIT_ANNOTATION_SIZE);
         QuotaRootResolver quotaRootResolver = new 
DefaultQuotaRootResolver(factory);
 
-        InMemoryPerUserMaxQuotaManager perUserMaxQuotaManager = new 
InMemoryPerUserMaxQuotaManager();
-        perUserMaxQuotaManager.setDefaultMaxMessage(4096);
-        perUserMaxQuotaManager.setDefaultMaxStorage(5L * 1024L * 1024L * 
1024L);
+        perUserMaxQuotaManager = new InMemoryPerUserMaxQuotaManager();
 
         InMemoryCurrentQuotaManager currentQuotaManager = new 
InMemoryCurrentQuotaManager(
             new CurrentQuotaCalculator(factory, quotaRootResolver),
@@ -123,5 +122,11 @@ public class InMemoryEventAsynchronousHostSystem extends 
JamesImapHostSystem {
     public boolean supports(Feature... features) {
         return SUPPORTED_FEATURES.supports(features);
     }
+
+    @Override
+    public void setQuotaLimits(long maxMessageQuota, long maxStorageQuota) 
throws MailboxException {
+        perUserMaxQuotaManager.setDefaultMaxMessage(maxMessageQuota);
+        perUserMaxQuotaManager.setDefaultMaxStorage(maxStorageQuota);
+    }
     
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/2bded9da/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
 
b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
index 635602d..0394d3e 100644
--- 
a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
+++ 
b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
@@ -57,6 +57,7 @@ public class InMemoryHostSystem extends JamesImapHostSystem {
         Feature.ANNOTATION_SUPPORT);
 
     private InMemoryMailboxManager mailboxManager;
+    private InMemoryPerUserMaxQuotaManager perUserMaxQuotaManager;
 
     public static JamesImapHostSystem build() throws Exception {
         return new InMemoryHostSystem();
@@ -81,9 +82,7 @@ public class InMemoryHostSystem extends JamesImapHostSystem {
                 new JVMMailboxPathLocker(), aclResolver, 
groupMembershipResolver, messageParser, new InMemoryMessageId.Factory());
         QuotaRootResolver quotaRootResolver = new 
DefaultQuotaRootResolver(mailboxManager.getMapperFactory());
 
-        InMemoryPerUserMaxQuotaManager perUserMaxQuotaManager = new 
InMemoryPerUserMaxQuotaManager();
-        perUserMaxQuotaManager.setDefaultMaxMessage(4096);
-        perUserMaxQuotaManager.setDefaultMaxStorage(5L * 1024L * 1024L * 
1024L);
+        perUserMaxQuotaManager = new InMemoryPerUserMaxQuotaManager();
 
         InMemoryCurrentQuotaManager currentQuotaManager = new 
InMemoryCurrentQuotaManager(
             new CurrentQuotaCalculator(mailboxManager.getMapperFactory(), 
quotaRootResolver),
@@ -118,5 +117,10 @@ public class InMemoryHostSystem extends 
JamesImapHostSystem {
     public boolean supports(Feature... features) {
         return SUPPORTED_FEATURES.supports(features);
     }
-    
+
+    @Override
+    public void setQuotaLimits(long maxMessageQuota, long maxStorageQuota) 
throws MailboxException {
+        perUserMaxQuotaManager.setDefaultMaxMessage(maxMessageQuota);
+        perUserMaxQuotaManager.setDefaultMaxStorage(maxStorageQuota);
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/2bded9da/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java
 
b/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java
index fc0a07f..30251af 100644
--- 
a/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java
+++ 
b/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java
@@ -21,6 +21,7 @@ package org.apache.james.mpt.imapmailbox.jcr.host;
 import java.io.File;
 
 import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.NotImplementedException;
 import org.apache.jackrabbit.core.RepositoryImpl;
 import org.apache.jackrabbit.core.config.RepositoryConfig;
 import org.apache.james.imap.api.process.ImapProcessor;
@@ -166,5 +167,10 @@ public class JCRHostSystem extends JamesImapHostSystem {
     public boolean supports(Feature... features) {
         return SUPPORTED_FEATURES.supports(features);
     }
+
+    @Override
+    public void setQuotaLimits(long maxMessageQuota, long maxStorageQuota) 
throws Exception {
+        throw new NotImplementedException();
+    }
     
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/2bded9da/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
 
b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
index fe6237c..71d73f6 100644
--- 
a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
+++ 
b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
@@ -35,18 +35,22 @@ import org.apache.james.mailbox.acl.GroupMembershipResolver;
 import org.apache.james.mailbox.acl.MailboxACLResolver;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
+import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.jpa.JPAMailboxFixture;
 import org.apache.james.mailbox.jpa.JPAMailboxSessionMapperFactory;
 import org.apache.james.mailbox.jpa.JPASubscriptionManager;
 import org.apache.james.mailbox.jpa.mail.JPAModSeqProvider;
 import org.apache.james.mailbox.jpa.mail.JPAUidProvider;
 import org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager;
+import org.apache.james.mailbox.jpa.quota.JPAPerUserMaxQuotaManager;
+import org.apache.james.mailbox.jpa.quota.JpaCurrentQuotaManager;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver;
-import org.apache.james.mailbox.store.quota.NoQuotaManager;
+import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
+import org.apache.james.mailbox.store.quota.StoreQuotaManager;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.mpt.api.ImapFeatures;
 import org.apache.james.mpt.api.ImapFeatures.Feature;
@@ -54,12 +58,22 @@ import org.apache.james.mpt.host.JamesImapHostSystem;
 import org.apache.james.mpt.imapmailbox.MailboxCreationDelegate;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.collect.ImmutableList;
+
 public class JPAHostSystem extends JamesImapHostSystem {
 
-    private static final JpaTestCluster JPA_TEST_CLUSTER = 
JpaTestCluster.create(JPAMailboxFixture.MAILBOX_PERSISTANCE_CLASSES);
+    private static final JpaTestCluster JPA_TEST_CLUSTER = 
JpaTestCluster.create(
+        ImmutableList.<Class<?>>builder()
+            .addAll(JPAMailboxFixture.MAILBOX_PERSISTANCE_CLASSES)
+            .addAll(JPAMailboxFixture.QUOTA_PERSISTANCE_CLASSES)
+            .build());
 
     public static final String META_DATA_DIRECTORY = "target/user-meta-data";
-    private static final ImapFeatures SUPPORTED_FEATURES = 
ImapFeatures.of(Feature.NAMESPACE_SUPPORT, Feature.USER_FLAGS_SUPPORT, 
Feature.ANNOTATION_SUPPORT);
+    private static final ImapFeatures SUPPORTED_FEATURES = 
ImapFeatures.of(Feature.NAMESPACE_SUPPORT,
+        Feature.USER_FLAGS_SUPPORT,
+        Feature.ANNOTATION_SUPPORT,
+        Feature.QUOTA_SUPPORT);
+    private final JPAPerUserMaxQuotaManager maxQuotaManager;
 
     public static JamesImapHostSystem build() throws Exception {
         return new JPAHostSystem();
@@ -72,27 +86,39 @@ public class JPAHostSystem extends JamesImapHostSystem {
         JVMMailboxPathLocker locker = new JVMMailboxPathLocker();
         JPAUidProvider uidProvider = new JPAUidProvider(locker, 
entityManagerFactory);
         JPAModSeqProvider modSeqProvider = new JPAModSeqProvider(locker, 
entityManagerFactory);
-        JPAMailboxSessionMapperFactory mf = new 
JPAMailboxSessionMapperFactory(entityManagerFactory, uidProvider, 
modSeqProvider);
+        JPAMailboxSessionMapperFactory mapperFactory = new 
JPAMailboxSessionMapperFactory(entityManagerFactory, uidProvider, 
modSeqProvider);
 
         MailboxACLResolver aclResolver = new UnionMailboxACLResolver();
         GroupMembershipResolver groupMembershipResolver = new 
SimpleGroupMembershipResolver();
         MessageParser messageParser = new MessageParser();
 
-        mailboxManager = new OpenJPAMailboxManager(mf, authenticator, 
authorizator, locker, false, aclResolver, groupMembershipResolver, 
messageParser, new DefaultMessageId.Factory());
+        mailboxManager = new OpenJPAMailboxManager(mapperFactory, 
authenticator, authorizator, locker, false, aclResolver, 
groupMembershipResolver, messageParser, new DefaultMessageId.Factory());
+
+        DefaultQuotaRootResolver quotaRootResolver = new 
DefaultQuotaRootResolver(mapperFactory);
+        JpaCurrentQuotaManager currentQuotaManager = new 
JpaCurrentQuotaManager(entityManagerFactory);
+        maxQuotaManager = new JPAPerUserMaxQuotaManager(entityManagerFactory);
+        StoreQuotaManager storeQuotaManager = new StoreQuotaManager();
+        storeQuotaManager.setCurrentQuotaManager(currentQuotaManager);
+        storeQuotaManager.setMaxQuotaManager(maxQuotaManager);
+        ListeningCurrentQuotaUpdater quotaUpdater = new 
ListeningCurrentQuotaUpdater();
+        quotaUpdater.setCurrentQuotaManager(currentQuotaManager);
+        quotaUpdater.setQuotaRootResolver(quotaRootResolver);
+
+        mailboxManager.setQuotaManager(storeQuotaManager);
+        mailboxManager.setQuotaUpdater(quotaUpdater);
+        mailboxManager.setQuotaRootResolver(quotaRootResolver);
         mailboxManager.init();
 
-        SubscriptionManager subscriptionManager = new 
JPASubscriptionManager(mf);
+        SubscriptionManager subscriptionManager = new 
JPASubscriptionManager(mapperFactory);
         
         final ImapProcessor defaultImapProcessorFactory = 
                 DefaultImapProcessorFactory.createDefaultProcessor(
                         mailboxManager, 
                         subscriptionManager, 
-                        new NoQuotaManager(), 
-                        new DefaultQuotaRootResolver(mf),
+                        storeQuotaManager,
+                        quotaRootResolver,
                         new DefaultMetricFactory());
-        
-        resetUserMetaData();
-        
+
         configure(new DefaultImapDecoderFactory().buildImapDecoder(),
                 new DefaultImapEncoderFactory().buildImapEncoder(),
                 defaultImapProcessorFactory);
@@ -127,4 +153,9 @@ public class JPAHostSystem extends JamesImapHostSystem {
         return SUPPORTED_FEATURES.supports(features);
     }
 
+    @Override
+    public void setQuotaLimits(long maxMessageQuota, long maxStorageQuota) 
throws MailboxException {
+        maxQuotaManager.setDefaultMaxMessage(maxMessageQuota);
+        maxQuotaManager.setDefaultMaxStorage(maxStorageQuota);
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/2bded9da/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
 
b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
index 9651472..9768cf0 100644
--- 
a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
+++ 
b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
@@ -25,6 +25,7 @@ import java.io.IOException;
 import javax.persistence.EntityManagerFactory;
 
 import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.NotImplementedException;
 import org.apache.james.backends.jpa.JpaTestCluster;
 import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.encode.main.DefaultImapEncoderFactory;
@@ -155,4 +156,9 @@ public class LuceneSearchHostSystem extends 
JamesImapHostSystem {
         return SUPPORTED_FEATURES.supports(features);
     }
 
+    @Override
+    public void setQuotaLimits(long maxMessageQuota, long maxStorageQuota) 
throws Exception {
+        throw new NotImplementedException();
+    }
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/2bded9da/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
 
b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
index 70d192e..f5d93cc 100644
--- 
a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
+++ 
b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
@@ -21,6 +21,7 @@ package org.apache.james.mpt.imapmailbox.maildir.host;
 import java.io.File;
 
 import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.NotImplementedException;
 import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.encode.main.DefaultImapEncoderFactory;
 import org.apache.james.imap.main.DefaultImapDecoderFactory;
@@ -114,4 +115,8 @@ public class MaildirHostSystem extends JamesImapHostSystem {
         return SUPPORTED_FEATURES.supports(features);
     }
 
+    @Override
+    public void setQuotaLimits(long maxMessageQuota, long maxStorageQuota) 
throws Exception {
+        throw new NotImplementedException();
+    }
 }


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

Reply via email to