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