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/21 10:17:27 UTC
[01/17] james-project git commit: JAMES-2524 Update
com.google.inject:guice to 4.2.0
Repository: james-project
Updated Branches:
refs/heads/master 0a8e0a9dd -> 0084a26ee
JAMES-2524 Update com.google.inject:guice to 4.2.0
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/97078c82
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/97078c82
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/97078c82
Branch: refs/heads/master
Commit: 97078c82ee9a1361cf5fc722e9d53d94eb694cb4
Parents: 0a8e0a9
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 14:24:15 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:12:45 2018 +0700
----------------------------------------------------------------------
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/97078c82/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 888b7f3..f5c2c9d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -659,7 +659,7 @@
<xml-apis.version>1.4.01</xml-apis.version>
<geronimo-activation-spec.version>1.1</geronimo-activation-spec.version>
<jasypt.version>1.9.2</jasypt.version>
- <guice.version>4.1.0</guice.version>
+ <guice.version>4.2.0</guice.version>
<jackrabbit-core.version>2.5.2</jackrabbit-core.version>
<jackson1.version>1.9.2</jackson1.version>
<logback.version>1.2.3</logback.version>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[15/17] james-project git commit: JAMES-2523 Terminate threads for
asynchronous tasks
Posted by bt...@apache.org.
JAMES-2523 Terminate threads for asynchronous tasks
They are used for ES DeleteByQuery operations
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c8cd20d8
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c8cd20d8
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c8cd20d8
Branch: refs/heads/master
Commit: c8cd20d823474632d5eb01d6e098a34011c8faaa
Parents: b7cd375
Author: Benoit Tellier <bt...@linagora.com>
Authored: Mon Aug 20 16:01:20 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:15:05 2018 +0700
----------------------------------------------------------------------
.../server/AsyncTasksExecutorModule.java | 33 ++++++++++++++------
1 file changed, 23 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/c8cd20d8/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/AsyncTasksExecutorModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/AsyncTasksExecutorModule.java b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/AsyncTasksExecutorModule.java
index 5b49d8b..b8e42fe 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/AsyncTasksExecutorModule.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/AsyncTasksExecutorModule.java
@@ -21,25 +21,38 @@ package org.apache.james.modules.server;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
-import javax.inject.Named;
+import javax.annotation.PreDestroy;
import com.google.inject.AbstractModule;
-import com.google.inject.Provides;
-import com.google.inject.Singleton;
+import com.google.inject.Provider;
+import com.google.inject.name.Names;
public class AsyncTasksExecutorModule extends AbstractModule {
- public static final int THREAD_POOL_SIZE = 8;
+ private static final int THREAD_POOL_SIZE = 8;
@Override
protected void configure() {
-
+ bind(ExecutorService.class).annotatedWith(Names.named("AsyncExecutor"))
+ .toProvider(new LifecycleAwareExecutorServiceProvider(
+ Executors.newFixedThreadPool(THREAD_POOL_SIZE)));
}
- @Provides
- @Singleton
- @Named("AsyncExecutor")
- public ExecutorService provideAsyncExecutorService() {
- return Executors.newFixedThreadPool(THREAD_POOL_SIZE);
+ public static class LifecycleAwareExecutorServiceProvider implements Provider<ExecutorService> {
+ private final ExecutorService executorService;
+
+ LifecycleAwareExecutorServiceProvider(ExecutorService executorService) {
+ this.executorService = executorService;
+ }
+
+ @Override
+ public ExecutorService get() {
+ return executorService;
+ }
+
+ @PreDestroy
+ public void stop() {
+ executorService.shutdownNow();
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[05/17] james-project git commit: JAMES-2524 Update
org.apache.jackrabbit to 2.17.5
Posted by bt...@apache.org.
JAMES-2524 Update org.apache.jackrabbit to 2.17.5
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c6622086
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c6622086
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c6622086
Branch: refs/heads/master
Commit: c6622086ef10c95668fdb48fe5028d995eb99b15
Parents: 5d0ba58
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 15:09:19 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:13:16 2018 +0700
----------------------------------------------------------------------
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/c6622086/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 778c5e7..39c9bb1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -594,7 +594,7 @@
<javax.inject.version>1</javax.inject.version>
<javax.activation.groupId>javax.activation</javax.activation.groupId>
<javax.activation.artifactId>activation</javax.activation.artifactId>
- <jackrabbit.version>2.17.4</jackrabbit.version>
+ <jackrabbit.version>2.17.5</jackrabbit.version>
<jsieve.version>0.7</jsieve.version>
<spring.version>3.2.18.RELEASE</spring.version>
<geronimo-jms-spec.version>1.1.1</geronimo-jms-spec.version>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[14/17] james-project git commit: JAMES-2523 Fix GuiceJamesServer
RemoteDelivery/DeliveryRunnable thread leak
Posted by bt...@apache.org.
JAMES-2523 Fix GuiceJamesServer RemoteDelivery/DeliveryRunnable thread leak
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9f6e7688
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9f6e7688
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9f6e7688
Branch: refs/heads/master
Commit: 9f6e768833b435100671b2f3585d05025509ac8d
Parents: e4eddb3
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 13:41:00 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:15:05 2018 +0700
----------------------------------------------------------------------
.../java/org/apache/james/transport/mailets/RemoteDelivery.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/9f6e7688/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
index 17e2ce8..238fed8 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
@@ -259,7 +259,7 @@ public class RemoteDelivery extends GenericMailet {
public synchronized void destroy() {
if (startThreads == ThreadState.START_THREADS) {
isDestroyed.set(true);
- executor.shutdown();
+ executor.shutdownNow();
notifyAll();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[12/17] james-project git commit: MAILBOX-349 Maildir mailbox cache
is not thread safe
Posted by bt...@apache.org.
MAILBOX-349 Maildir mailbox cache is not thread safe
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/e4eddb37
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/e4eddb37
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/e4eddb37
Branch: refs/heads/master
Commit: e4eddb372a4789e13814917fb239bcd0aee09e61
Parents: ecee101
Author: Benoit Tellier <bt...@linagora.com>
Authored: Fri Aug 17 16:16:46 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:14:37 2018 +0700
----------------------------------------------------------------------
.../mailbox/maildir/mail/MailboxCache.java | 68 ++++++++++++++++++++
.../maildir/mail/MaildirMailboxMapper.java | 46 +++----------
2 files changed, 76 insertions(+), 38 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/e4eddb37/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MailboxCache.java
----------------------------------------------------------------------
diff --git a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MailboxCache.java b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MailboxCache.java
new file mode 100644
index 0000000..cf04c1e
--- /dev/null
+++ b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MailboxCache.java
@@ -0,0 +1,68 @@
+/****************************************************************
+ * 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.maildir.mail;
+
+import java.util.ArrayList;
+
+import org.apache.james.mailbox.exception.MailboxNotFoundException;
+import org.apache.james.mailbox.maildir.MaildirId;
+import org.apache.james.mailbox.store.mail.model.Mailbox;
+import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
+
+public class MailboxCache {
+ /**
+ * A request-scoped list of mailboxes in order to refer to them via id
+ */
+ private final ArrayList<Mailbox> mailboxCache = new ArrayList<>();
+
+ /**
+ * Stores a copy of a mailbox in a cache valid for one request. This is to enable
+ * referring to renamed mailboxes via id.
+ * @param mailbox The mailbox to cache
+ * @return the cached mailbox
+ */
+ public synchronized Mailbox cacheMailbox(Mailbox mailbox) {
+ mailboxCache.add(new SimpleMailbox(mailbox));
+ int id = mailboxCache.size() - 1;
+ mailbox.setMailboxId(MaildirId.of(id));
+ return mailbox;
+ }
+
+ /**
+ * Retrieves a mailbox from the cache
+ * @param mailboxId The id of the mailbox to retrieve
+ * @return The mailbox
+ * @throws MailboxNotFoundException If the mailboxId is not in the cache
+ */
+ public synchronized Mailbox getCachedMailbox(MaildirId mailboxId) throws MailboxNotFoundException {
+ if (mailboxId == null) {
+ throw new MailboxNotFoundException("null");
+ }
+ try {
+ return mailboxCache.get(mailboxId.getRawId());
+ } catch (IndexOutOfBoundsException e) {
+ throw new MailboxNotFoundException(mailboxId);
+ }
+ }
+
+ public synchronized void clear() {
+ mailboxCache.clear();
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/e4eddb37/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
index 55092c9..b1b83f9 100644
--- a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
+++ b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
@@ -42,7 +42,6 @@ import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.store.mail.MailboxMapper;
import org.apache.james.mailbox.store.mail.model.Mailbox;
-import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
import org.apache.james.mailbox.store.transaction.NonTransactionalMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -60,13 +59,14 @@ public class MaildirMailboxMapper extends NonTransactionalMapper implements Mail
/**
* A request-scoped list of mailboxes in order to refer to them via id
*/
- private final ArrayList<Mailbox> mailboxCache = new ArrayList<>();
+ private final MailboxCache mailboxCache;
private final MailboxSession session;
public MaildirMailboxMapper(MaildirStore maildirStore, MailboxSession session) {
this.maildirStore = maildirStore;
this.session = session;
+ this.mailboxCache = new MailboxCache();
}
@Override
@@ -110,13 +110,13 @@ public class MaildirMailboxMapper extends NonTransactionalMapper implements Mail
public Mailbox findMailboxByPath(MailboxPath mailboxPath)
throws MailboxException, MailboxNotFoundException {
Mailbox mailbox = maildirStore.loadMailbox(session, mailboxPath);
- return cacheMailbox(mailbox);
+ return mailboxCache.cacheMailbox(mailbox);
}
@Override
public Mailbox findMailboxById(MailboxId id) throws MailboxException, MailboxNotFoundException {
MaildirId mailboxId = (MaildirId)id;
- return getCachedMailbox(mailboxId);
+ return mailboxCache.getCachedMailbox(mailboxId);
}
@Override
@@ -131,13 +131,13 @@ public class MaildirMailboxMapper extends NonTransactionalMapper implements Mail
for (File folder : folders) {
if (folder.isDirectory()) {
Mailbox mailbox = maildirStore.loadMailbox(session, root, mailboxPath.getNamespace(), mailboxPath.getUser(), folder.getName());
- mailboxList.add(cacheMailbox(mailbox));
+ mailboxList.add(mailboxCache.cacheMailbox(mailbox));
}
}
// INBOX is in the root of the folder
if (Pattern.matches(mailboxPath.getName().replace(MaildirStore.WILDCARD, ".*"), MailboxConstants.INBOX)) {
Mailbox mailbox = maildirStore.loadMailbox(session, root, mailboxPath.getNamespace(), mailboxPath.getUser(), "");
- mailboxList.add(0, cacheMailbox(mailbox));
+ mailboxList.add(0, mailboxCache.cacheMailbox(mailbox));
}
return mailboxList;
}
@@ -153,7 +153,7 @@ public class MaildirMailboxMapper extends NonTransactionalMapper implements Mail
@Override
public MailboxId save(Mailbox mailbox) throws MailboxException {
try {
- Mailbox originalMailbox = getCachedMailbox((MaildirId) mailbox.getMailboxId());
+ Mailbox originalMailbox = mailboxCache.getCachedMailbox((MaildirId) mailbox.getMailboxId());
MaildirFolder folder = maildirStore.createMaildirFolder(mailbox);
// equals with null check
if (originalMailbox.getName() == null ? mailbox.getName() != null : !originalMailbox.getName().equals(mailbox.getName())) {
@@ -230,7 +230,7 @@ public class MaildirMailboxMapper extends NonTransactionalMapper implements Mail
}
folder.setACL(session, mailbox.getACL());
}
- cacheMailbox(mailbox);
+ mailboxCache.cacheMailbox(mailbox);
return mailbox.getMailboxId();
}
@@ -260,36 +260,6 @@ public class MaildirMailboxMapper extends NonTransactionalMapper implements Mail
mailboxCache.clear();
}
- /**
- * Stores a copy of a mailbox in a cache valid for one request. This is to enable
- * referring to renamed mailboxes via id.
- * @param mailbox The mailbox to cache
- * @return The id of the cached mailbox
- */
- private Mailbox cacheMailbox(Mailbox mailbox) {
- mailboxCache.add(new SimpleMailbox(mailbox));
- int id = mailboxCache.size() - 1;
- ((SimpleMailbox) mailbox).setMailboxId(MaildirId.of(id));
- return mailbox;
- }
-
- /**
- * Retrieves a mailbox from the cache
- * @param mailboxId The id of the mailbox to retrieve
- * @return The mailbox
- * @throws MailboxNotFoundException If the mailboxId is not in the cache
- */
- private Mailbox getCachedMailbox(MaildirId mailboxId) throws MailboxNotFoundException {
- if (mailboxId == null) {
- throw new MailboxNotFoundException("null");
- }
- try {
- return mailboxCache.get(mailboxId.getRawId());
- } catch (IndexOutOfBoundsException e) {
- throw new MailboxNotFoundException(mailboxId);
- }
- }
-
private void visitUsersForMailboxList(File domain, File[] users, List<Mailbox> mailboxList) throws MailboxException {
String userName = null;
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[08/17] james-project git commit: JAMES-2524 Drop
org.hdrhistogram:HdrHistogram
Posted by bt...@apache.org.
JAMES-2524 Drop org.hdrhistogram:HdrHistogram
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d319a485
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d319a485
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d319a485
Branch: refs/heads/master
Commit: d319a48519224e9ac63f74995decdca25e411a34
Parents: d94966a
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 15:24:48 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:13:16 2018 +0700
----------------------------------------------------------------------
server/container/guice/cassandra-guice/pom.xml | 5 -----
1 file changed, 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/d319a485/server/container/guice/cassandra-guice/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/pom.xml b/server/container/guice/cassandra-guice/pom.xml
index 5035f68..e17a41d 100644
--- a/server/container/guice/cassandra-guice/pom.xml
+++ b/server/container/guice/cassandra-guice/pom.xml
@@ -260,11 +260,6 @@
<artifactId>awaitility</artifactId>
</dependency>
<dependency>
- <groupId>org.hdrhistogram</groupId>
- <artifactId>HdrHistogram</artifactId>
- <version>2.1.4</version>
- </dependency>
- <dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<scope>test</scope>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[11/17] james-project git commit: JAMES-2524 Update
org.testcontainers to 1.8.3
Posted by bt...@apache.org.
JAMES-2524 Update org.testcontainers to 1.8.3
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/ecee1014
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/ecee1014
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/ecee1014
Branch: refs/heads/master
Commit: ecee101472986cef9d8af7b49fecf569c6edbc67
Parents: 9a5cb2e
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 15:44:36 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:14:01 2018 +0700
----------------------------------------------------------------------
pom.xml | 2 +-
server/container/guice/jpa-smtp-mariadb/pom.xml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/ecee1014/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index f31d0e2..93f3497 100644
--- a/pom.xml
+++ b/pom.xml
@@ -631,8 +631,8 @@
<pax-logging-api.version>1.6.4</pax-logging-api.version>
<jackson.version>2.9.6</jackson.version>
<jetty.version>9.4.7.v20170914</jetty.version>
- <testcontainers.version>1.8.1</testcontainers.version>
<metrics.version>3.2.6</metrics.version>
+ <testcontainers.version>1.8.3</testcontainers.version>
<assertj.version>3.3.0</assertj.version>
<es.version>2.2.1</es.version>
<es-reporter.version>2.2.0</es-reporter.version>
http://git-wip-us.apache.org/repos/asf/james-project/blob/ecee1014/server/container/guice/jpa-smtp-mariadb/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-smtp-mariadb/pom.xml b/server/container/guice/jpa-smtp-mariadb/pom.xml
index 88fb888..96a79ce 100644
--- a/server/container/guice/jpa-smtp-mariadb/pom.xml
+++ b/server/container/guice/jpa-smtp-mariadb/pom.xml
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>mariadb</artifactId>
- <version>1.8.1</version>
+ <version>1.8.3</version>
<scope>test</scope>
</dependency>
</dependencies>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[02/17] james-project git commit: JAMES-2524 Update
org.awaitility:awaitility to 3.1.2
Posted by bt...@apache.org.
JAMES-2524 Update org.awaitility:awaitility to 3.1.2
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d94966a5
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d94966a5
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d94966a5
Branch: refs/heads/master
Commit: d94966a5799c3571d56adee957631df50d146e13
Parents: c662208
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 15:15:07 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:13:16 2018 +0700
----------------------------------------------------------------------
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/d94966a5/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 39c9bb1..c65c271 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2283,7 +2283,7 @@
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
- <version>3.1.1</version>
+ <version>3.1.2</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[06/17] james-project git commit: JAMES-2524 Update
org.mockito:mockito-core to 2.21.0
Posted by bt...@apache.org.
JAMES-2524 Update org.mockito:mockito-core to 2.21.0
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9a5cb2ef
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9a5cb2ef
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9a5cb2ef
Branch: refs/heads/master
Commit: 9a5cb2ef34d1294a8fb0b794967ac8dc6508f7e0
Parents: b5e7d37
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 15:37:42 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:13:16 2018 +0700
----------------------------------------------------------------------
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/9a5cb2ef/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 5e4f9d8..f31d0e2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2377,7 +2377,7 @@
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
- <version>2.20.1</version>
+ <version>2.21.0</version>
</dependency>
<dependency>
<groupId>org.ops4j.pax.exam</groupId>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[17/17] james-project git commit: JAMES-2522 Moving and renaming
classes
Posted by bt...@apache.org.
JAMES-2522 Moving and renaming classes
- Moving InMemoryMailRepositoryStore from guice-common -> MailRepositoryStoreImpl in data-lib
- Moving MailRepositoryProvider from guice-common -> mailrepository-api
- Moving CassandraMailRepositoryProvider, FileMailRepositoryProvider, MemoryMailRepositoryProvider from inner classes(CassandraMailRepositoryModule, MailStoreRepositoryModule, InMemoryMailRepositoryStoreTest) to mailrepository-cassandra, mailrepository-memory, data-file... modules
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/0084a26e
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/0084a26e
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/0084a26e
Branch: refs/heads/master
Commit: 0084a26eed364bfb2f445aaa549d649b4ebcc9ca
Parents: c8cd20d
Author: duc <dt...@linagora.com>
Authored: Fri Aug 17 00:56:56 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:16:27 2018 +0700
----------------------------------------------------------------------
.../data/CassandraMailRepositoryModule.java | 33 +--
server/container/guice/guice-common/pom.xml | 9 -
.../server/MailStoreRepositoryModule.java | 42 +--
.../utils/InMemoryMailRepositoryStore.java | 183 ------------
.../james/utils/MailRepositoryProvider.java | 30 --
.../utils/InMemoryMailRepositoryStoreTest.java | 276 -------------------
.../test/resources/fakemailrepositorystore.xml | 31 ---
.../src/test/resources/mailrepositorystore.xml | 36 ---
.../file/FileMailRepositoryProvider.java | 49 ++++
.../mock/MockMailRepositoryStore.java | 64 -----
server/data/data-memory/pom.xml | 10 +
.../memory/MemoryMailRepositoryStore.java | 185 +++++++++++++
.../memory/MemoryMailRepositoryStoreTest.java | 257 +++++++++++++++++
.../test/resources/fakemailrepositorystore.xml | 30 ++
.../src/test/resources/mailrepositorystore.xml | 35 +++
.../mailets/ToSenderDomainRepositoryTest.java | 32 ++-
.../src/test/resources/mailrepositorystore.xml | 30 ++
.../api/MailRepositoryProvider.java | 27 ++
.../CassandraMailRepositoryProvider.java | 52 ++++
.../memory/MemoryMailRepositoryProvider.java | 36 +++
server/protocols/protocols-smtp/pom.xml | 16 +-
.../apache/james/smtpserver/SMTPServerTest.java | 36 ++-
.../james/smtpserver/SMTPTestConfiguration.java | 2 +-
.../src/test/resources/mailrepositorystore.xml | 30 ++
.../webadmin/webadmin-mailrepository/pom.xml | 5 +
.../routes/MailRepositoriesRoutesTest.java | 238 +++++++---------
.../src/test/resources/mailrepositorystore.xml | 30 ++
27 files changed, 943 insertions(+), 861 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraMailRepositoryModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraMailRepositoryModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraMailRepositoryModule.java
index 2f3769b..176c39b 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraMailRepositoryModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraMailRepositoryModule.java
@@ -20,20 +20,16 @@
package org.apache.james.modules.data;
import org.apache.james.backends.cassandra.components.CassandraModule;
-import org.apache.james.blob.api.ObjectStore;
-import org.apache.james.mailrepository.api.MailRepository;
-import org.apache.james.mailrepository.api.MailRepositoryUrl;
+import org.apache.james.mailrepository.api.MailRepositoryProvider;
import org.apache.james.mailrepository.api.MailRepositoryUrlStore;
-import org.apache.james.mailrepository.cassandra.CassandraMailRepository;
import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryCountDAO;
import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryKeysDAO;
import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryMailDAO;
+import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryProvider;
import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryUrlModule;
import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryUrlStore;
-import org.apache.james.utils.MailRepositoryProvider;
import com.google.inject.AbstractModule;
-import com.google.inject.Inject;
import com.google.inject.Scopes;
import com.google.inject.multibindings.Multibinder;
@@ -54,29 +50,4 @@ public class CassandraMailRepositoryModule extends AbstractModule {
cassandraModuleBinder.addBinding().toInstance(org.apache.james.mailrepository.cassandra.CassandraMailRepositoryModule.MODULE);
cassandraModuleBinder.addBinding().toInstance(CassandraMailRepositoryUrlModule.MODULE);
}
-
- public static class CassandraMailRepositoryProvider implements MailRepositoryProvider {
- private final CassandraMailRepositoryKeysDAO keysDAO;
- private final CassandraMailRepositoryCountDAO countDAO;
- private final CassandraMailRepositoryMailDAO mailDAO;
- private final ObjectStore objectStore;
-
- @Inject
- public CassandraMailRepositoryProvider(CassandraMailRepositoryKeysDAO keysDAO, CassandraMailRepositoryCountDAO countDAO, CassandraMailRepositoryMailDAO mailDAO, ObjectStore objectStore) {
- this.keysDAO = keysDAO;
- this.countDAO = countDAO;
- this.mailDAO = mailDAO;
- this.objectStore = objectStore;
- }
-
- @Override
- public String canonicalName() {
- return CassandraMailRepository.class.getCanonicalName();
- }
-
- @Override
- public MailRepository provide(MailRepositoryUrl url) {
- return new CassandraMailRepository(url, keysDAO, countDAO, mailDAO, objectStore);
- }
- }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/container/guice/guice-common/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/pom.xml b/server/container/guice/guice-common/pom.xml
index 6d33d6d..e449699 100644
--- a/server/container/guice/guice-common/pom.xml
+++ b/server/container/guice/guice-common/pom.xml
@@ -52,15 +52,6 @@
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
- <artifactId>james-server-data-library</artifactId>
- </dependency>
- <dependency>
- <groupId>${james.groupId}</groupId>
- <artifactId>james-server-data-memory</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>${james.groupId}</groupId>
<artifactId>james-server-dnsservice-api</artifactId>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java
index 0365beb..cc973a5 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java
@@ -21,18 +21,15 @@ package org.apache.james.modules.server;
import java.util.List;
-import org.apache.james.filesystem.api.FileSystem;
import org.apache.james.lifecycle.api.Configurable;
-import org.apache.james.mailrepository.api.MailRepository;
+import org.apache.james.mailrepository.api.MailRepositoryProvider;
import org.apache.james.mailrepository.api.MailRepositoryStore;
-import org.apache.james.mailrepository.api.MailRepositoryUrl;
-import org.apache.james.mailrepository.file.FileMailRepository;
+import org.apache.james.mailrepository.file.FileMailRepositoryProvider;
+import org.apache.james.mailrepository.memory.MemoryMailRepositoryStore;
import org.apache.james.server.core.configuration.ConfigurationProvider;
import org.apache.james.utils.ConfigurationPerformer;
import org.apache.james.utils.GuiceProbe;
-import org.apache.james.utils.InMemoryMailRepositoryStore;
import org.apache.james.utils.MailRepositoryProbeImpl;
-import org.apache.james.utils.MailRepositoryProvider;
import com.google.common.collect.ImmutableList;
import com.google.inject.AbstractModule;
@@ -45,8 +42,8 @@ public class MailStoreRepositoryModule extends AbstractModule {
@Override
protected void configure() {
- bind(InMemoryMailRepositoryStore.class).in(Scopes.SINGLETON);
- bind(MailRepositoryStore.class).to(InMemoryMailRepositoryStore.class);
+ bind(MemoryMailRepositoryStore.class).in(Scopes.SINGLETON);
+ bind(MailRepositoryStore.class).to(MemoryMailRepositoryStore.class);
Multibinder<MailRepositoryProvider> multibinder = Multibinder.newSetBinder(binder(), MailRepositoryProvider.class);
multibinder.addBinding().to(FileMailRepositoryProvider.class);
@@ -54,38 +51,15 @@ public class MailStoreRepositoryModule extends AbstractModule {
Multibinder.newSetBinder(binder(), GuiceProbe.class).addBinding().to(MailRepositoryProbeImpl.class);
}
- public static class FileMailRepositoryProvider implements MailRepositoryProvider {
-
- private final FileSystem fileSystem;
-
- @Inject
- public FileMailRepositoryProvider(FileSystem fileSystem) {
- this.fileSystem = fileSystem;
- }
-
-
- @Override
- public String canonicalName() {
- return FileMailRepository.class.getCanonicalName();
- }
-
- @Override
- public MailRepository provide(MailRepositoryUrl url) {
- FileMailRepository fileMailRepository = new FileMailRepository();
- fileMailRepository.setFileSystem(fileSystem);
- return fileMailRepository;
- }
- }
-
@Singleton
public static class MailRepositoryStoreModuleConfigurationPerformer implements ConfigurationPerformer {
private final ConfigurationProvider configurationProvider;
- private final InMemoryMailRepositoryStore javaMailRepositoryStore;
+ private final MemoryMailRepositoryStore javaMailRepositoryStore;
@Inject
public MailRepositoryStoreModuleConfigurationPerformer(ConfigurationProvider configurationProvider,
- InMemoryMailRepositoryStore javaMailRepositoryStore) {
+ MemoryMailRepositoryStore javaMailRepositoryStore) {
this.configurationProvider = configurationProvider;
this.javaMailRepositoryStore = javaMailRepositoryStore;
}
@@ -102,7 +76,7 @@ public class MailStoreRepositoryModule extends AbstractModule {
@Override
public List<Class<? extends Configurable>> forClasses() {
- return ImmutableList.of(InMemoryMailRepositoryStore.class);
+ return ImmutableList.of(MemoryMailRepositoryStore.class);
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/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
deleted file mode 100644
index 6bf875d..0000000
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
+++ /dev/null
@@ -1,183 +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.utils;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.stream.Stream;
-
-import org.apache.commons.configuration.CombinedConfiguration;
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.DefaultConfigurationBuilder;
-import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.james.lifecycle.api.Configurable;
-import org.apache.james.mailrepository.api.MailRepository;
-import org.apache.james.mailrepository.api.MailRepositoryPath;
-import org.apache.james.mailrepository.api.MailRepositoryStore;
-import org.apache.james.mailrepository.api.MailRepositoryUrl;
-import org.apache.james.mailrepository.api.MailRepositoryUrlStore;
-import org.apache.james.mailrepository.api.Protocol;
-import org.apache.james.repository.api.Initializable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.github.fge.lambdas.Throwing;
-import com.google.common.collect.ImmutableList;
-import com.google.inject.Inject;
-
-public class InMemoryMailRepositoryStore implements MailRepositoryStore, Configurable {
- private static final Logger LOGGER = LoggerFactory.getLogger(InMemoryMailRepositoryStore.class);
-
- private final MailRepositoryUrlStore urlStore;
- private final Set<MailRepositoryProvider> mailRepositories;
- private final ConcurrentMap<MailRepositoryUrl, MailRepository> destinationToRepositoryAssociations;
- private final Map<Protocol, MailRepositoryProvider> protocolToRepositoryProvider;
- private final Map<Protocol, HierarchicalConfiguration> perProtocolMailRepositoryDefaultConfiguration;
- private HierarchicalConfiguration configuration;
-
- @Inject
- public InMemoryMailRepositoryStore(MailRepositoryUrlStore urlStore, Set<MailRepositoryProvider> mailRepositories) {
- this.urlStore = urlStore;
- this.mailRepositories = mailRepositories;
- this.destinationToRepositoryAssociations = new ConcurrentHashMap<>();
- this.protocolToRepositoryProvider = new HashMap<>();
- this.perProtocolMailRepositoryDefaultConfiguration = new HashMap<>();
- }
-
- @Override
- public Stream<MailRepositoryUrl> getUrls() {
- return urlStore.listDistinct();
- }
-
- @Override
- public void configure(HierarchicalConfiguration configuration) {
- this.configuration = configuration;
- }
-
- public void init() throws Exception {
- LOGGER.info("JamesMailStore init... {}", this);
- List<HierarchicalConfiguration> registeredClasses = retrieveRegisteredClassConfiguration();
- for (HierarchicalConfiguration registeredClass : registeredClasses) {
- readConfigurationEntry(registeredClass);
- }
- }
-
- private List<HierarchicalConfiguration> retrieveRegisteredClassConfiguration() {
- try {
- return configuration.configurationsAt("mailrepositories.mailrepository");
- } catch (Exception e) {
- LOGGER.warn("Could not process configuration. Skipping Mail Repository initialization.", e);
- return ImmutableList.of();
- }
- }
-
- @Override
- public Optional<MailRepository> get(MailRepositoryUrl url) {
- if (urlStore.contains(url)) {
- return Optional.of(select(url));
- }
- return Optional.empty();
- }
-
- @Override
- public Stream<MailRepository> getByPath(MailRepositoryPath path) {
- return urlStore.listDistinct()
- .filter(url -> url.getPath().equals(path))
- .map(this::select);
- }
-
- @Override
- public MailRepository select(MailRepositoryUrl mailRepositoryUrl) {
- return Optional.ofNullable(destinationToRepositoryAssociations.get(mailRepositoryUrl))
- .orElseGet(Throwing.supplier(
- () -> createNewMailRepository(mailRepositoryUrl))
- .sneakyThrow());
- }
-
- private MailRepository createNewMailRepository(MailRepositoryUrl mailRepositoryUrl) throws MailRepositoryStoreException {
- MailRepository newMailRepository = retrieveMailRepository(mailRepositoryUrl);
- urlStore.add(mailRepositoryUrl);
- newMailRepository = initializeNewRepository(newMailRepository, createRepositoryCombinedConfig(mailRepositoryUrl));
- MailRepository previousRepository = destinationToRepositoryAssociations.putIfAbsent(mailRepositoryUrl, newMailRepository);
- return Optional.ofNullable(previousRepository)
- .orElse(newMailRepository);
- }
-
- private void readConfigurationEntry(HierarchicalConfiguration repositoryConfiguration) throws ConfigurationException {
- String className = repositoryConfiguration.getString("[@class]");
- MailRepositoryProvider usedMailRepository = mailRepositories.stream()
- .filter(mailRepositoryProvider -> mailRepositoryProvider.canonicalName().equals(className))
- .findAny()
- .orElseThrow(() -> new ConfigurationException("MailRepository " + className + " has not been registered"));
- for (String protocol : repositoryConfiguration.getStringArray("protocols.protocol")) {
- protocolToRepositoryProvider.put(new Protocol(protocol), usedMailRepository);
- registerRepositoryDefaultConfiguration(repositoryConfiguration, new Protocol(protocol));
- }
- }
-
- private void registerRepositoryDefaultConfiguration(HierarchicalConfiguration repositoryConfiguration, Protocol protocol) {
- HierarchicalConfiguration defConf = null;
- if (repositoryConfiguration.getKeys("config").hasNext()) {
- defConf = repositoryConfiguration.configurationAt("config");
- }
- if (defConf != null) {
- perProtocolMailRepositoryDefaultConfiguration.put(protocol, defConf);
- }
- }
-
- private CombinedConfiguration createRepositoryCombinedConfig(MailRepositoryUrl mailRepositoryUrl) {
- CombinedConfiguration config = new CombinedConfiguration();
- HierarchicalConfiguration defaultProtocolConfig = perProtocolMailRepositoryDefaultConfiguration.get(mailRepositoryUrl.getProtocol());
- if (defaultProtocolConfig != null) {
- config.addConfiguration(defaultProtocolConfig);
- }
- DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder();
- builder.addProperty("[@destinationURL]", mailRepositoryUrl.asString());
- config.addConfiguration(builder);
- return config;
- }
-
- private MailRepository initializeNewRepository(MailRepository mailRepository, CombinedConfiguration config) throws MailRepositoryStoreException {
- try {
- if (mailRepository instanceof Configurable) {
- ((Configurable) mailRepository).configure(config);
- }
- if (mailRepository instanceof Initializable) {
- ((Initializable) mailRepository).init();
- }
- return mailRepository;
- } catch (Exception e) {
- throw new MailRepositoryStoreException("Cannot init mail repository", e);
- }
- }
-
- private MailRepository retrieveMailRepository(MailRepositoryUrl mailRepositoryUrl) throws MailRepositoryStoreException {
- Protocol protocol = mailRepositoryUrl.getProtocol();
- return Optional.ofNullable(protocolToRepositoryProvider.get(protocol))
- .orElseThrow(() -> new MailRepositoryStoreException("No Mail Repository associated with " + protocol.getValue()))
- .provide(mailRepositoryUrl);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/container/guice/guice-common/src/main/java/org/apache/james/utils/MailRepositoryProvider.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/MailRepositoryProvider.java b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/MailRepositoryProvider.java
deleted file mode 100644
index 2338616..0000000
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/MailRepositoryProvider.java
+++ /dev/null
@@ -1,30 +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.utils;
-
-import org.apache.james.mailrepository.api.MailRepository;
-import org.apache.james.mailrepository.api.MailRepositoryUrl;
-
-public interface MailRepositoryProvider {
-
- String canonicalName();
-
- MailRepository provide(MailRepositoryUrl url);
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/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
deleted file mode 100644
index 04e6950..0000000
--- a/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
+++ /dev/null
@@ -1,276 +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.utils;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-
-import java.util.concurrent.TimeUnit;
-
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.james.core.builder.MimeMessageBuilder;
-import org.apache.james.mailrepository.api.MailRepository;
-import org.apache.james.mailrepository.api.MailRepositoryPath;
-import org.apache.james.mailrepository.api.MailRepositoryStore;
-import org.apache.james.mailrepository.api.MailRepositoryUrl;
-import org.apache.james.mailrepository.file.FileMailRepository;
-import org.apache.james.mailrepository.memory.MemoryMailRepository;
-import org.apache.james.mailrepository.memory.MemoryMailRepositoryUrlStore;
-import org.apache.james.modules.server.MailStoreRepositoryModule;
-import org.apache.james.server.core.configuration.Configuration;
-import org.apache.james.server.core.configuration.FileConfigurationProvider;
-import org.apache.james.server.core.filesystem.FileSystemImpl;
-import org.apache.james.util.concurrency.ConcurrentTestRunner;
-import org.apache.mailet.base.test.FakeMail;
-import org.junit.Before;
-import org.junit.Test;
-
-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");
-
- private MemoryMailRepositoryUrlStore urlStore;
-
- private static class MemoryMailRepositoryProvider implements MailRepositoryProvider {
- @Override
- public String canonicalName() {
- return MemoryMailRepository.class.getCanonicalName();
- }
-
- @Override
- public MailRepository provide(MailRepositoryUrl url) {
- return new MemoryMailRepository();
- }
- }
-
- private InMemoryMailRepositoryStore repositoryStore;
- private FileSystemImpl fileSystem;
- private Configuration configuration;
-
- @Before
- public void setUp() throws Exception {
- configuration = Configuration.builder()
- .workingDirectory("../")
- .configurationFromClasspath()
- .build();
- fileSystem = new FileSystemImpl(configuration.directories());
- urlStore = new MemoryMailRepositoryUrlStore();
- MailStoreRepositoryModule.FileMailRepositoryProvider fileProvider = new MailStoreRepositoryModule.FileMailRepositoryProvider(fileSystem);
- repositoryStore = new InMemoryMailRepositoryStore(urlStore, Sets.newHashSet(
- fileProvider,
- new MemoryMailRepositoryProvider()));
- repositoryStore.configure(new FileConfigurationProvider(fileSystem, configuration)
- .getConfiguration("mailrepositorystore"));
- repositoryStore.init();
- }
-
- @Test(expected = MailRepositoryStore.MailRepositoryStoreException.class)
- public void selectingANonRegisteredProtocolShouldFail() {
- repositoryStore.select(MailRepositoryUrl.from("proto://repo"));
- }
-
- @Test
- public void selectingARegisteredProtocolShouldWork() {
- assertThat(repositoryStore.select(FILE_REPO))
- .isInstanceOf(FileMailRepository.class);
- }
-
- @Test
- public void selectingTwiceARegisteredProtocolWithSameDestinationShouldReturnTheSameResult() {
- assertThat(repositoryStore.select(FILE_REPO))
- .isEqualTo(repositoryStore.select(FILE_REPO));
- }
-
- @Test
- public void selectingTwiceARegisteredProtocolWithDifferentDestinationShouldReturnDifferentResults() {
- assertThat(repositoryStore.select(FILE_REPO))
- .isNotEqualTo(repositoryStore.select(MailRepositoryUrl.from("file://repo1")));
- }
-
- @Test
- public void configureShouldThrowWhenNonValidClassesAreProvided() throws Exception {
- repositoryStore = new InMemoryMailRepositoryStore(urlStore, Sets.newHashSet(
- new MailStoreRepositoryModule.FileMailRepositoryProvider(
- fileSystem)));
- repositoryStore.configure(new FileConfigurationProvider(fileSystem, configuration).getConfiguration("fakemailrepositorystore"));
-
- assertThatThrownBy(() -> repositoryStore.init())
- .isInstanceOf(ConfigurationException.class);
- }
-
- @Test
- public void configureShouldNotThrowOnEmptyConfiguration() throws Exception {
- repositoryStore = new InMemoryMailRepositoryStore(urlStore, Sets.newHashSet(
- new MailStoreRepositoryModule.FileMailRepositoryProvider(
- fileSystem)));
- repositoryStore.configure(new HierarchicalConfiguration());
-
- repositoryStore.init();
- }
-
- @Test
- public void getUrlsShouldBeEmptyIfNoSelectWerePerformed() {
- assertThat(repositoryStore.getUrls()).isEmpty();
- }
-
- @Test
- public void getUrlsShouldReturnUsedUrls() {
- MailRepositoryUrl url1 = MailRepositoryUrl.from("file://repo1");
- MailRepositoryUrl url2 = MailRepositoryUrl.from("file://repo2");
- MailRepositoryUrl url3 = MailRepositoryUrl.from("file://repo3");
- repositoryStore.select(url1);
- repositoryStore.select(url2);
- repositoryStore.select(url3);
- assertThat(repositoryStore.getUrls()).containsOnly(url1, url2, url3);
- }
-
- @Test
- public void getUrlsResultsShouldNotBeDuplicated() {
- repositoryStore.select(FILE_REPO);
- repositoryStore.select(FILE_REPO);
- assertThat(repositoryStore.getUrls()).containsExactly(FILE_REPO);
- }
-
- @Test
- public void getPathsShouldBeEmptyIfNoSelectWerePerformed() {
- assertThat(repositoryStore.getPaths()).isEmpty();
- }
-
- @Test
- public void getPathsShouldReturnUsedUrls() {
- MailRepositoryPath path1 = MailRepositoryPath.from("repo1");
- MailRepositoryPath path2 = MailRepositoryPath.from("repo1");
- MailRepositoryPath path3 = MailRepositoryPath.from("repo1");
- repositoryStore.select(MailRepositoryUrl.fromPathAndProtocol(path1, "file"));
- repositoryStore.select(MailRepositoryUrl.fromPathAndProtocol(path2, "file"));
- repositoryStore.select(MailRepositoryUrl.fromPathAndProtocol(path3, "file"));
- assertThat(repositoryStore.getPaths()).containsOnly(path1, path2, path3);
- }
-
- @Test
- public void getPathsResultsShouldNotBeDuplicatedWithTheSameProtocol() {
- repositoryStore.select(FILE_REPO);
- repositoryStore.select(FILE_REPO);
- assertThat(repositoryStore.getPaths()).containsExactly(PATH_REPO);
- }
-
- @Test
- public void getPathsResultsShouldNotBeDuplicatedWithDifferentProtocols() {
- repositoryStore.select(FILE_REPO);
- repositoryStore.select(MEMORY_REPO);
- assertThat(repositoryStore.getPaths()).containsExactly(PATH_REPO);
- }
-
- @Test
- public void getShouldReturnEmptyWhenUrlNotInUse() {
- assertThat(repositoryStore.get(FILE_REPO))
- .isEmpty();
- }
-
- @Test
- public void getShouldReturnRepositoryWhenUrlExists() {
- urlStore.add(FILE_REPO);
-
- assertThat(repositoryStore.get(FILE_REPO))
- .isNotEmpty();
- }
-
- @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);
-
- assertThat(repositoryStore.get(FILE_REPO))
- .contains(mailRepository);
- }
-
- @Test
- public void getByPathShouldReturnEmptyWhenUrlNotInUse() {
- assertThat(repositoryStore.getByPath(PATH_REPO))
- .isEmpty();
- }
-
- @Test
- public void getByPathShouldReturnPreviouslyCreatedMatchingMailRepository() {
- MailRepository mailRepository = repositoryStore.select(FILE_REPO);
-
- assertThat(repositoryStore.getByPath(PATH_REPO))
- .contains(mailRepository);
- }
-
- @Test
- public void getByPathShouldReturnPreviouslyCreatedMatchingMailRepositories() {
- MailRepository mailRepositoryFile = repositoryStore.select(FILE_REPO);
- MailRepository mailRepositoryArbitrary = repositoryStore.select(MEMORY_REPO);
-
- assertThat(repositoryStore.getByPath(PATH_REPO))
- .contains(mailRepositoryFile)
- .contains(mailRepositoryArbitrary);
- }
-
- @Test
- public void getByPathShouldReturnEmptyWhenNoMailRepositoriesAreMatching() {
- repositoryStore.select(FILE_REPO);
-
- assertThat(repositoryStore.getByPath(MailRepositoryPath.from("unknown")))
- .isEmpty();
- }
-
- @Test
- public void selectShouldNotReturnDifferentResultsWhenUsedInAConcurrentEnvironment() throws Exception {
- MailRepositoryUrl url = MailRepositoryUrl.from("memory://repo");
- int threadCount = 10;
-
- ConcurrentTestRunner concurrentTestRunner = ConcurrentTestRunner.builder()
- .threadCount(10)
- .build((threadNb, operationNb) -> repositoryStore.select(url)
- .store(FakeMail.builder()
- .name("name" + threadNb)
- .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
- .setText("Any body"))
- .build()));
- concurrentTestRunner.run().awaitTermination(1, TimeUnit.MINUTES);
- concurrentTestRunner.assertNoException();
-
- long actualSize = repositoryStore.get(url).get().size();
-
- assertThat(actualSize).isEqualTo(threadCount);
- }
-
- @Test
- public void selectShouldNotAddUrlWhenProtocolDoNotExist() {
- assertThatThrownBy(() -> repositoryStore.select(UNKNOWN_PROTOCOL_REPO));
-
- assertThat(urlStore.listDistinct()).isEmpty();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/container/guice/guice-common/src/test/resources/fakemailrepositorystore.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/test/resources/fakemailrepositorystore.xml b/server/container/guice/guice-common/src/test/resources/fakemailrepositorystore.xml
deleted file mode 100644
index 2d19a80..0000000
--- a/server/container/guice/guice-common/src/test/resources/fakemailrepositorystore.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.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.
- -->
-
-<mailrepositorystore>
- <mailrepositories>
- <mailrepository class="org.apache.james.mailrepository.None">
- <protocols>
- <protocol>file</protocol>
- </protocols>
- <config FIFO="false" CACHEKEYS="true"/>
- </mailrepository>
- </mailrepositories>
-</mailrepositorystore>
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/container/guice/guice-common/src/test/resources/mailrepositorystore.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/test/resources/mailrepositorystore.xml b/server/container/guice/guice-common/src/test/resources/mailrepositorystore.xml
deleted file mode 100644
index 736c1c6..0000000
--- a/server/container/guice/guice-common/src/test/resources/mailrepositorystore.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.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.
- -->
-
-<mailrepositorystore>
- <mailrepositories>
- <mailrepository class="org.apache.james.mailrepository.file.FileMailRepository">
- <protocols>
- <protocol>file</protocol>
- </protocols>
- <config FIFO="false" CACHEKEYS="true"/>
- </mailrepository>
- <mailrepository class="org.apache.james.mailrepository.memory.MemoryMailRepository">
- <protocols>
- <protocol>memory</protocol>
- </protocols>
- </mailrepository>
- </mailrepositories>
-</mailrepositorystore>
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepositoryProvider.java
----------------------------------------------------------------------
diff --git a/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepositoryProvider.java b/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepositoryProvider.java
new file mode 100644
index 0000000..b8d52ed
--- /dev/null
+++ b/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepositoryProvider.java
@@ -0,0 +1,49 @@
+/****************************************************************
+ * 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.mailrepository.file;
+
+import javax.inject.Inject;
+
+import org.apache.james.filesystem.api.FileSystem;
+import org.apache.james.mailrepository.api.MailRepository;
+import org.apache.james.mailrepository.api.MailRepositoryProvider;
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
+
+public class FileMailRepositoryProvider implements MailRepositoryProvider {
+
+ private final FileSystem fileSystem;
+
+ @Inject
+ public FileMailRepositoryProvider(FileSystem fileSystem) {
+ this.fileSystem = fileSystem;
+ }
+
+ @Override
+ public String canonicalName() {
+ return FileMailRepository.class.getCanonicalName();
+ }
+
+ @Override
+ public MailRepository provide(MailRepositoryUrl url) {
+ FileMailRepository fileMailRepository = new FileMailRepository();
+ fileMailRepository.setFileSystem(fileSystem);
+ return fileMailRepository;
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/data/data-library/src/test/java/org/apache/james/mailrepository/mock/MockMailRepositoryStore.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/test/java/org/apache/james/mailrepository/mock/MockMailRepositoryStore.java b/server/data/data-library/src/test/java/org/apache/james/mailrepository/mock/MockMailRepositoryStore.java
deleted file mode 100644
index 6cd742e..0000000
--- a/server/data/data-library/src/test/java/org/apache/james/mailrepository/mock/MockMailRepositoryStore.java
+++ /dev/null
@@ -1,64 +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.mailrepository.mock;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
-import java.util.stream.Stream;
-
-import org.apache.james.mailrepository.api.MailRepository;
-import org.apache.james.mailrepository.api.MailRepositoryPath;
-import org.apache.james.mailrepository.api.MailRepositoryStore;
-import org.apache.james.mailrepository.api.MailRepositoryUrl;
-
-public class MockMailRepositoryStore implements MailRepositoryStore {
-
- private final Map<MailRepositoryUrl, MailRepository> storedObjectMap = new HashMap<>();
-
- public void add(MailRepositoryUrl url, MailRepository obj) {
- storedObjectMap.put(url, obj);
- }
-
- @Override
- public MailRepository select(MailRepositoryUrl url) {
- return storedObjectMap.get(url);
- }
-
- @Override
- public Optional<MailRepository> get(MailRepositoryUrl url) {
- return Optional.ofNullable(storedObjectMap.get(url));
- }
-
- @Override
- public Stream<MailRepository> getByPath(MailRepositoryPath path) {
- return storedObjectMap
- .keySet()
- .stream()
- .filter((MailRepositoryUrl key) -> key.getPath().equals(path))
- .map(storedObjectMap::get);
- }
-
- @Override
- public Stream<MailRepositoryUrl> getUrls() {
- return storedObjectMap.keySet().stream();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/data/data-memory/pom.xml
----------------------------------------------------------------------
diff --git a/server/data/data-memory/pom.xml b/server/data/data-memory/pom.xml
index b2f2b5a..45fac4d 100644
--- a/server/data/data-memory/pom.xml
+++ b/server/data/data-memory/pom.xml
@@ -35,6 +35,11 @@
<dependencies>
<dependency>
<groupId>${james.groupId}</groupId>
+ <artifactId>apache-mailet-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>${james.groupId}</groupId>
<artifactId>event-sourcing-event-store-memory</artifactId>
<scope>test</scope>
</dependency>
@@ -64,6 +69,11 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>${james.groupId}</groupId>
+ <artifactId>james-server-mailrepository-memory</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<scope>test</scope>
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
----------------------------------------------------------------------
diff --git a/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java b/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
new file mode 100644
index 0000000..8da1b20
--- /dev/null
+++ b/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
@@ -0,0 +1,185 @@
+/****************************************************************
+ * 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.mailrepository.memory;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.stream.Stream;
+
+import javax.inject.Inject;
+
+import org.apache.commons.configuration.CombinedConfiguration;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.DefaultConfigurationBuilder;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.mailrepository.api.MailRepository;
+import org.apache.james.mailrepository.api.MailRepositoryPath;
+import org.apache.james.mailrepository.api.MailRepositoryProvider;
+import org.apache.james.mailrepository.api.MailRepositoryStore;
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
+import org.apache.james.mailrepository.api.MailRepositoryUrlStore;
+import org.apache.james.mailrepository.api.Protocol;
+import org.apache.james.repository.api.Initializable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.fge.lambdas.Throwing;
+import com.google.common.collect.ImmutableList;
+
+public class MemoryMailRepositoryStore implements MailRepositoryStore, Configurable {
+ private static final Logger LOGGER = LoggerFactory.getLogger(MemoryMailRepositoryStore.class);
+
+ private final MailRepositoryUrlStore urlStore;
+ private final Set<MailRepositoryProvider> mailRepositories;
+ private final ConcurrentMap<MailRepositoryUrl, MailRepository> destinationToRepositoryAssociations;
+ private final Map<Protocol, MailRepositoryProvider> protocolToRepositoryProvider;
+ private final Map<Protocol, HierarchicalConfiguration> perProtocolMailRepositoryDefaultConfiguration;
+ private HierarchicalConfiguration configuration;
+
+ @Inject
+ public MemoryMailRepositoryStore(MailRepositoryUrlStore urlStore, Set<MailRepositoryProvider> mailRepositories) {
+ this.urlStore = urlStore;
+ this.mailRepositories = mailRepositories;
+ this.destinationToRepositoryAssociations = new ConcurrentHashMap<>();
+ this.protocolToRepositoryProvider = new HashMap<>();
+ this.perProtocolMailRepositoryDefaultConfiguration = new HashMap<>();
+ }
+
+ @Override
+ public Stream<MailRepositoryUrl> getUrls() {
+ return urlStore.listDistinct();
+ }
+
+ @Override
+ public void configure(HierarchicalConfiguration configuration) {
+ this.configuration = configuration;
+ }
+
+ public void init() throws Exception {
+ LOGGER.info("JamesMailStore init... {}", this);
+ List<HierarchicalConfiguration> registeredClasses = retrieveRegisteredClassConfiguration();
+ for (HierarchicalConfiguration registeredClass : registeredClasses) {
+ readConfigurationEntry(registeredClass);
+ }
+ }
+
+ private List<HierarchicalConfiguration> retrieveRegisteredClassConfiguration() {
+ try {
+ return configuration.configurationsAt("mailrepositories.mailrepository");
+ } catch (Exception e) {
+ LOGGER.warn("Could not process configuration. Skipping Mail Repository initialization.", e);
+ return ImmutableList.of();
+ }
+ }
+
+ @Override
+ public Optional<MailRepository> get(MailRepositoryUrl url) {
+ if (urlStore.contains(url)) {
+ return Optional.of(select(url));
+ }
+ return Optional.empty();
+ }
+
+ @Override
+ public Stream<MailRepository> getByPath(MailRepositoryPath path) {
+ return urlStore.listDistinct()
+ .filter(url -> url.getPath().equals(path))
+ .map(this::select);
+ }
+
+ @Override
+ public MailRepository select(MailRepositoryUrl mailRepositoryUrl) {
+ return Optional.ofNullable(destinationToRepositoryAssociations.get(mailRepositoryUrl))
+ .orElseGet(Throwing.supplier(
+ () -> createNewMailRepository(mailRepositoryUrl))
+ .sneakyThrow());
+ }
+
+ private MailRepository createNewMailRepository(MailRepositoryUrl mailRepositoryUrl) throws MailRepositoryStoreException {
+ MailRepository newMailRepository = retrieveMailRepository(mailRepositoryUrl);
+ urlStore.add(mailRepositoryUrl);
+ newMailRepository = initializeNewRepository(newMailRepository, createRepositoryCombinedConfig(mailRepositoryUrl));
+ MailRepository previousRepository = destinationToRepositoryAssociations.putIfAbsent(mailRepositoryUrl, newMailRepository);
+ return Optional.ofNullable(previousRepository)
+ .orElse(newMailRepository);
+ }
+
+ private void readConfigurationEntry(HierarchicalConfiguration repositoryConfiguration) throws ConfigurationException {
+ String className = repositoryConfiguration.getString("[@class]");
+ MailRepositoryProvider usedMailRepository = mailRepositories.stream()
+ .filter(mailRepositoryProvider -> mailRepositoryProvider.canonicalName().equals(className))
+ .findAny()
+ .orElseThrow(() -> new ConfigurationException("MailRepository " + className + " has not been registered"));
+ for (String protocol : repositoryConfiguration.getStringArray("protocols.protocol")) {
+ protocolToRepositoryProvider.put(new Protocol(protocol), usedMailRepository);
+ registerRepositoryDefaultConfiguration(repositoryConfiguration, new Protocol(protocol));
+ }
+ }
+
+ private void registerRepositoryDefaultConfiguration(HierarchicalConfiguration repositoryConfiguration, Protocol protocol) {
+ HierarchicalConfiguration defConf = null;
+ if (repositoryConfiguration.getKeys("config").hasNext()) {
+ defConf = repositoryConfiguration.configurationAt("config");
+ }
+ if (defConf != null) {
+ perProtocolMailRepositoryDefaultConfiguration.put(protocol, defConf);
+ }
+ }
+
+ private CombinedConfiguration createRepositoryCombinedConfig(MailRepositoryUrl mailRepositoryUrl) {
+ CombinedConfiguration config = new CombinedConfiguration();
+ HierarchicalConfiguration defaultProtocolConfig = perProtocolMailRepositoryDefaultConfiguration.get(mailRepositoryUrl.getProtocol());
+ if (defaultProtocolConfig != null) {
+ config.addConfiguration(defaultProtocolConfig);
+ }
+ DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder();
+ builder.addProperty("[@destinationURL]", mailRepositoryUrl.asString());
+ config.addConfiguration(builder);
+ return config;
+ }
+
+ private MailRepository initializeNewRepository(MailRepository mailRepository, CombinedConfiguration config) throws MailRepositoryStoreException {
+ try {
+ if (mailRepository instanceof Configurable) {
+ ((Configurable) mailRepository).configure(config);
+ }
+ if (mailRepository instanceof Initializable) {
+ ((Initializable) mailRepository).init();
+ }
+ return mailRepository;
+ } catch (Exception e) {
+ throw new MailRepositoryStoreException("Cannot init mail repository", e);
+ }
+ }
+
+ private MailRepository retrieveMailRepository(MailRepositoryUrl mailRepositoryUrl) throws MailRepositoryStoreException {
+ Protocol protocol = mailRepositoryUrl.getProtocol();
+ return Optional.ofNullable(protocolToRepositoryProvider.get(protocol))
+ .orElseThrow(() -> new MailRepositoryStoreException("No Mail Repository associated with " + protocol.getValue()))
+ .provide(mailRepositoryUrl);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
----------------------------------------------------------------------
diff --git a/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java b/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
new file mode 100644
index 0000000..bf2d55a
--- /dev/null
+++ b/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
@@ -0,0 +1,257 @@
+/****************************************************************
+ * 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.mailrepository.memory;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.util.concurrent.TimeUnit;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.james.core.builder.MimeMessageBuilder;
+import org.apache.james.mailrepository.api.MailRepository;
+import org.apache.james.mailrepository.api.MailRepositoryPath;
+import org.apache.james.mailrepository.api.MailRepositoryStore;
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
+import org.apache.james.server.core.configuration.Configuration;
+import org.apache.james.server.core.configuration.FileConfigurationProvider;
+import org.apache.james.server.core.filesystem.FileSystemImpl;
+import org.apache.james.util.concurrency.ConcurrentTestRunner;
+import org.apache.mailet.base.test.FakeMail;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.common.collect.Sets;
+
+public class MemoryMailRepositoryStoreTest {
+ private static final MailRepositoryUrl MEMORY1_REPO = MailRepositoryUrl.from("memory1://repo");
+ private static final MailRepositoryUrl UNKNOWN_PROTOCOL_REPO = MailRepositoryUrl.from("toto://repo");
+ private static final MailRepositoryUrl MEMORY2_REPO = MailRepositoryUrl.from("memory2://repo");
+ private static final MailRepositoryPath PATH_REPO = MailRepositoryPath.from("repo");
+
+ private MemoryMailRepositoryUrlStore urlStore;
+
+ private MemoryMailRepositoryStore repositoryStore;
+ private FileSystemImpl fileSystem;
+ private Configuration configuration;
+
+ @Before
+ public void setUp() throws Exception {
+ configuration = Configuration.builder()
+ .workingDirectory("../")
+ .configurationFromClasspath()
+ .build();
+ fileSystem = new FileSystemImpl(configuration.directories());
+ urlStore = new MemoryMailRepositoryUrlStore();
+ repositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(
+ new MemoryMailRepositoryProvider(),
+ new MemoryMailRepositoryProvider()));
+ repositoryStore.configure(new FileConfigurationProvider(fileSystem, configuration)
+ .getConfiguration("mailrepositorystore"));
+ repositoryStore.init();
+ }
+
+ @Test(expected = MailRepositoryStore.MailRepositoryStoreException.class)
+ public void selectingANonRegisteredProtocolShouldFail() {
+ repositoryStore.select(MailRepositoryUrl.from("proto://repo"));
+ }
+
+ @Test
+ public void selectingARegisteredProtocolShouldWork() {
+ assertThat(repositoryStore.select(MEMORY1_REPO))
+ .isInstanceOf(MemoryMailRepository.class);
+ }
+
+ @Test
+ public void selectingTwiceARegisteredProtocolWithSameDestinationShouldReturnTheSameResult() {
+ assertThat(repositoryStore.select(MEMORY1_REPO))
+ .isEqualTo(repositoryStore.select(MEMORY1_REPO));
+ }
+
+ @Test
+ public void selectingTwiceARegisteredProtocolWithDifferentDestinationShouldReturnDifferentResults() {
+ assertThat(repositoryStore.select(MEMORY1_REPO))
+ .isNotEqualTo(repositoryStore.select(MailRepositoryUrl.from("memory1://repo1")));
+ }
+
+ @Test
+ public void configureShouldThrowWhenNonValidClassesAreProvided() throws Exception {
+ repositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(
+ new MemoryMailRepositoryProvider()));
+ repositoryStore.configure(new FileConfigurationProvider(fileSystem, configuration).getConfiguration("fakemailrepositorystore"));
+
+ assertThatThrownBy(() -> repositoryStore.init())
+ .isInstanceOf(ConfigurationException.class);
+ }
+
+ @Test
+ public void configureShouldNotThrowOnEmptyConfiguration() throws Exception {
+ repositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(
+ new MemoryMailRepositoryProvider()));
+ repositoryStore.configure(new HierarchicalConfiguration());
+
+ repositoryStore.init();
+ }
+
+ @Test
+ public void getUrlsShouldBeEmptyIfNoSelectWerePerformed() {
+ assertThat(repositoryStore.getUrls()).isEmpty();
+ }
+
+ @Test
+ public void getUrlsShouldReturnUsedUrls() {
+ MailRepositoryUrl url1 = MailRepositoryUrl.from("memory1://repo1");
+ MailRepositoryUrl url2 = MailRepositoryUrl.from("memory1://repo2");
+ MailRepositoryUrl url3 = MailRepositoryUrl.from("memory1://repo3");
+ repositoryStore.select(url1);
+ repositoryStore.select(url2);
+ repositoryStore.select(url3);
+ assertThat(repositoryStore.getUrls()).containsOnly(url1, url2, url3);
+ }
+
+ @Test
+ public void getUrlsResultsShouldNotBeDuplicated() {
+ repositoryStore.select(MEMORY1_REPO);
+ repositoryStore.select(MEMORY1_REPO);
+ assertThat(repositoryStore.getUrls()).containsExactly(MEMORY1_REPO);
+ }
+
+ @Test
+ public void getPathsShouldBeEmptyIfNoSelectWerePerformed() {
+ assertThat(repositoryStore.getPaths()).isEmpty();
+ }
+
+ @Test
+ public void getPathsShouldReturnUsedUrls() {
+ MailRepositoryPath path1 = MailRepositoryPath.from("repo1");
+ MailRepositoryPath path2 = MailRepositoryPath.from("repo1");
+ MailRepositoryPath path3 = MailRepositoryPath.from("repo1");
+ repositoryStore.select(MailRepositoryUrl.fromPathAndProtocol(path1, "memory1"));
+ repositoryStore.select(MailRepositoryUrl.fromPathAndProtocol(path2, "memory1"));
+ repositoryStore.select(MailRepositoryUrl.fromPathAndProtocol(path3, "memory1"));
+ assertThat(repositoryStore.getPaths()).containsOnly(path1, path2, path3);
+ }
+
+ @Test
+ public void getPathsResultsShouldNotBeDuplicatedWithTheSameProtocol() {
+ repositoryStore.select(MEMORY1_REPO);
+ repositoryStore.select(MEMORY1_REPO);
+ assertThat(repositoryStore.getPaths()).containsExactly(PATH_REPO);
+ }
+
+ @Test
+ public void getPathsResultsShouldNotBeDuplicatedWithDifferentProtocols() {
+ repositoryStore.select(MEMORY1_REPO);
+ repositoryStore.select(MEMORY2_REPO);
+ assertThat(repositoryStore.getPaths()).containsExactly(PATH_REPO);
+ }
+
+ @Test
+ public void getShouldReturnEmptyWhenUrlNotInUse() {
+ assertThat(repositoryStore.get(MEMORY1_REPO))
+ .isEmpty();
+ }
+
+ @Test
+ public void getShouldReturnRepositoryWhenUrlExists() {
+ urlStore.add(MEMORY1_REPO);
+
+ assertThat(repositoryStore.get(MEMORY1_REPO))
+ .isNotEmpty();
+ }
+
+ @Test
+ public void getByPathShouldReturnRepositoryWhenUrlExists() {
+ urlStore.add(MEMORY1_REPO);
+
+ assertThat(repositoryStore.getByPath(MEMORY1_REPO.getPath()))
+ .isNotEmpty();
+ }
+
+ @Test
+ public void getShouldReturnPreviouslyCreatedMailRepository() {
+ MailRepository mailRepository = repositoryStore.select(MEMORY1_REPO);
+
+ assertThat(repositoryStore.get(MEMORY1_REPO))
+ .contains(mailRepository);
+ }
+
+ @Test
+ public void getByPathShouldReturnEmptyWhenUrlNotInUse() {
+ assertThat(repositoryStore.getByPath(PATH_REPO))
+ .isEmpty();
+ }
+
+ @Test
+ public void getByPathShouldReturnPreviouslyCreatedMatchingMailRepository() {
+ MailRepository mailRepository = repositoryStore.select(MEMORY1_REPO);
+
+ assertThat(repositoryStore.getByPath(PATH_REPO))
+ .contains(mailRepository);
+ }
+
+ @Test
+ public void getByPathShouldReturnPreviouslyCreatedMatchingMailRepositories() {
+ MailRepository mailRepositoryFile = repositoryStore.select(MEMORY1_REPO);
+ MailRepository mailRepositoryArbitrary = repositoryStore.select(MEMORY2_REPO);
+
+ assertThat(repositoryStore.getByPath(PATH_REPO))
+ .contains(mailRepositoryFile)
+ .contains(mailRepositoryArbitrary);
+ }
+
+ @Test
+ public void getByPathShouldReturnEmptyWhenNoMailRepositoriesAreMatching() {
+ repositoryStore.select(MEMORY1_REPO);
+
+ assertThat(repositoryStore.getByPath(MailRepositoryPath.from("unknown")))
+ .isEmpty();
+ }
+
+ @Test
+ public void selectShouldNotReturnDifferentResultsWhenUsedInAConcurrentEnvironment() throws Exception {
+ MailRepositoryUrl url = MailRepositoryUrl.from("memory1://repo");
+ int threadCount = 10;
+
+ ConcurrentTestRunner concurrentTestRunner = ConcurrentTestRunner.builder()
+ .threadCount(10)
+ .build((threadNb, operationNb) -> repositoryStore.select(url)
+ .store(FakeMail.builder()
+ .name("name" + threadNb)
+ .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+ .setText("Any body"))
+ .build()));
+ concurrentTestRunner.run().awaitTermination(1, TimeUnit.MINUTES);
+ concurrentTestRunner.assertNoException();
+
+ long actualSize = repositoryStore.get(url).get().size();
+
+ assertThat(actualSize).isEqualTo(threadCount);
+ }
+
+ @Test
+ public void selectShouldNotAddUrlWhenProtocolDoNotExist() {
+ assertThatThrownBy(() -> repositoryStore.select(UNKNOWN_PROTOCOL_REPO));
+
+ assertThat(urlStore.listDistinct()).isEmpty();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/data/data-memory/src/test/resources/fakemailrepositorystore.xml
----------------------------------------------------------------------
diff --git a/server/data/data-memory/src/test/resources/fakemailrepositorystore.xml b/server/data/data-memory/src/test/resources/fakemailrepositorystore.xml
new file mode 100644
index 0000000..8894f8d
--- /dev/null
+++ b/server/data/data-memory/src/test/resources/fakemailrepositorystore.xml
@@ -0,0 +1,30 @@
+<?xml version="1.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.
+ -->
+
+<mailrepositorystore>
+ <mailrepositories>
+ <mailrepository class="org.apache.james.mailrepository.memory.None">
+ <protocols>
+ <protocol>memory</protocol>
+ </protocols>
+ </mailrepository>
+ </mailrepositories>
+</mailrepositorystore>
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/data/data-memory/src/test/resources/mailrepositorystore.xml
----------------------------------------------------------------------
diff --git a/server/data/data-memory/src/test/resources/mailrepositorystore.xml b/server/data/data-memory/src/test/resources/mailrepositorystore.xml
new file mode 100644
index 0000000..8e47947
--- /dev/null
+++ b/server/data/data-memory/src/test/resources/mailrepositorystore.xml
@@ -0,0 +1,35 @@
+<?xml version="1.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.
+ -->
+
+<mailrepositorystore>
+ <mailrepositories>
+ <mailrepository class="org.apache.james.mailrepository.memory.MemoryMailRepository">
+ <protocols>
+ <protocol>memory1</protocol>
+ </protocols>
+ </mailrepository>
+ <mailrepository class="org.apache.james.mailrepository.memory.MemoryMailRepository">
+ <protocols>
+ <protocol>memory2</protocol>
+ </protocols>
+ </mailrepository>
+ </mailrepositories>
+</mailrepositorystore>
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryTest.java
index 55c704a..37f7282 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryTest.java
@@ -32,8 +32,12 @@ import javax.mail.MessagingException;
import org.apache.james.mailrepository.api.MailRepository;
import org.apache.james.mailrepository.api.MailRepositoryStore;
import org.apache.james.mailrepository.api.MailRepositoryUrl;
-import org.apache.james.mailrepository.memory.MemoryMailRepository;
-import org.apache.james.mailrepository.mock.MockMailRepositoryStore;
+import org.apache.james.mailrepository.memory.MemoryMailRepositoryProvider;
+import org.apache.james.mailrepository.memory.MemoryMailRepositoryStore;
+import org.apache.james.mailrepository.memory.MemoryMailRepositoryUrlStore;
+import org.apache.james.server.core.configuration.Configuration;
+import org.apache.james.server.core.configuration.FileConfigurationProvider;
+import org.apache.james.server.core.filesystem.FileSystemImpl;
import org.apache.mailet.Mail;
import org.apache.mailet.base.MailAddressFixture;
import org.apache.mailet.base.test.FakeMail;
@@ -41,6 +45,8 @@ import org.apache.mailet.base.test.FakeMailetConfig;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import com.google.common.collect.Sets;
+
class ToSenderDomainRepositoryTest {
private static final String MEMORY_URL_PREFIX = "memory://var/mail/dlp/";
@@ -51,15 +57,29 @@ class ToSenderDomainRepositoryTest {
.build();
private ToSenderDomainRepository mailet;
- private MockMailRepositoryStore mailRepositoryStore;
+ private MemoryMailRepositoryStore mailRepositoryStore;
+ private FileSystemImpl fileSystem;
+ private Configuration configuration;
@BeforeEach
- void setup() {
- mailRepositoryStore = new MockMailRepositoryStore();
- mailRepositoryStore.add(JAMES_LOCAL_REPOSITORY_URL, new MemoryMailRepository());
+ void setup() throws Exception {
+ createMailRepositoryStore();
mailet = new ToSenderDomainRepository(mailRepositoryStore);
}
+ private void createMailRepositoryStore() throws Exception {
+ configuration = Configuration.builder()
+ .workingDirectory("../")
+ .configurationFromClasspath()
+ .build();
+ fileSystem = new FileSystemImpl(configuration.directories());
+ MemoryMailRepositoryUrlStore urlStore = new MemoryMailRepositoryUrlStore();
+ mailRepositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(new MemoryMailRepositoryProvider()));
+ mailRepositoryStore.configure(new FileConfigurationProvider(fileSystem, configuration)
+ .getConfiguration("mailrepositorystore"));
+ mailRepositoryStore.init();
+ }
+
@Test
void initShouldThrowExceptionWhenUrlPrefixIsAbsent() {
FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/mailet/mailets/src/test/resources/mailrepositorystore.xml
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/resources/mailrepositorystore.xml b/server/mailet/mailets/src/test/resources/mailrepositorystore.xml
new file mode 100644
index 0000000..ed3e003
--- /dev/null
+++ b/server/mailet/mailets/src/test/resources/mailrepositorystore.xml
@@ -0,0 +1,30 @@
+<?xml version="1.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.
+ -->
+
+<mailrepositorystore>
+ <mailrepositories>
+ <mailrepository class="org.apache.james.mailrepository.memory.MemoryMailRepository">
+ <protocols>
+ <protocol>memory</protocol>
+ </protocols>
+ </mailrepository>
+ </mailrepositories>
+</mailrepositorystore>
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryProvider.java
----------------------------------------------------------------------
diff --git a/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryProvider.java b/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryProvider.java
new file mode 100644
index 0000000..18ffa96
--- /dev/null
+++ b/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryProvider.java
@@ -0,0 +1,27 @@
+/****************************************************************
+ * 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.mailrepository.api;
+
+public interface MailRepositoryProvider {
+
+ String canonicalName();
+
+ MailRepository provide(MailRepositoryUrl url);
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryProvider.java
----------------------------------------------------------------------
diff --git a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryProvider.java b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryProvider.java
new file mode 100644
index 0000000..ddbd1ba
--- /dev/null
+++ b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryProvider.java
@@ -0,0 +1,52 @@
+/****************************************************************
+ * 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.mailrepository.cassandra;
+
+import javax.inject.Inject;
+
+import org.apache.james.blob.api.ObjectStore;
+import org.apache.james.mailrepository.api.MailRepository;
+import org.apache.james.mailrepository.api.MailRepositoryProvider;
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
+
+public class CassandraMailRepositoryProvider implements MailRepositoryProvider {
+ private final CassandraMailRepositoryKeysDAO keysDAO;
+ private final CassandraMailRepositoryCountDAO countDAO;
+ private final CassandraMailRepositoryMailDAO mailDAO;
+ private final ObjectStore objectStore;
+
+ @Inject
+ public CassandraMailRepositoryProvider(CassandraMailRepositoryKeysDAO keysDAO, CassandraMailRepositoryCountDAO countDAO, CassandraMailRepositoryMailDAO mailDAO, ObjectStore objectStore) {
+ this.keysDAO = keysDAO;
+ this.countDAO = countDAO;
+ this.mailDAO = mailDAO;
+ this.objectStore = objectStore;
+ }
+
+ @Override
+ public String canonicalName() {
+ return CassandraMailRepository.class.getCanonicalName();
+ }
+
+ @Override
+ public MailRepository provide(MailRepositoryUrl url) {
+ return new CassandraMailRepository(url, keysDAO, countDAO, mailDAO, objectStore);
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryProvider.java
----------------------------------------------------------------------
diff --git a/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryProvider.java b/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryProvider.java
new file mode 100644
index 0000000..cdde19d
--- /dev/null
+++ b/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryProvider.java
@@ -0,0 +1,36 @@
+/****************************************************************
+ * 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.mailrepository.memory;
+
+import org.apache.james.mailrepository.api.MailRepository;
+import org.apache.james.mailrepository.api.MailRepositoryProvider;
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
+
+public class MemoryMailRepositoryProvider implements MailRepositoryProvider {
+ @Override
+ public String canonicalName() {
+ return MemoryMailRepository.class.getCanonicalName();
+ }
+
+ @Override
+ public MailRepository provide(MailRepositoryUrl url) {
+ return new MemoryMailRepository();
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/protocols/protocols-smtp/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/pom.xml b/server/protocols/protocols-smtp/pom.xml
index 3a4f615..be02458 100644
--- a/server/protocols/protocols-smtp/pom.xml
+++ b/server/protocols/protocols-smtp/pom.xml
@@ -74,17 +74,6 @@
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
- <artifactId>james-server-data-library</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>${james.groupId}</groupId>
- <artifactId>james-server-data-library</artifactId>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>${james.groupId}</groupId>
<artifactId>james-server-data-memory</artifactId>
</dependency>
<dependency>
@@ -116,6 +105,11 @@
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
+ <artifactId>james-server-mailrepository-memory</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>${james.groupId}</groupId>
<artifactId>james-server-protocols-library</artifactId>
</dependency>
<dependency>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[09/17] james-project git commit: JAMES-2524 Update
org.mnode.ical4j:ical4j to 3.0.1
Posted by bt...@apache.org.
JAMES-2524 Update org.mnode.ical4j:ical4j to 3.0.1
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/b5e7d374
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b5e7d374
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b5e7d374
Branch: refs/heads/master
Commit: b5e7d3744ad9c53054b0a266785746b23c3ad50e
Parents: 9648a6a
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 15:33:09 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:13:16 2018 +0700
----------------------------------------------------------------------
mailet/icalendar/pom.xml | 2 +-
pom.xml | 1 -
2 files changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/b5e7d374/mailet/icalendar/pom.xml
----------------------------------------------------------------------
diff --git a/mailet/icalendar/pom.xml b/mailet/icalendar/pom.xml
index 767e9fb..40dd824 100644
--- a/mailet/icalendar/pom.xml
+++ b/mailet/icalendar/pom.xml
@@ -102,7 +102,7 @@
<dependency>
<groupId>org.mnode.ical4j</groupId>
<artifactId>ical4j</artifactId>
- <version>3.0.0</version>
+ <version>3.0.1</version>
</dependency>
<dependency>
<groupId>javax.cache</groupId>
http://git-wip-us.apache.org/repos/asf/james-project/blob/b5e7d374/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index c65c271..5e4f9d8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -649,7 +649,6 @@
<maven-reporting-impl.version>2.2</maven-reporting-impl.version>
<maven-reporting-api.version>3.0</maven-reporting-api.version>
<qdox.version>2.0-M9</qdox.version>
- <ical4j.version>2.0.2</ical4j.version>
<guavate.version>1.0.0</guavate.version>
<javax.activation.groupId>javax.activation</javax.activation.groupId>
<javax.activation.artifactId>activation</javax.activation.artifactId>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[03/17] james-project git commit: JAMES-2524 Update
nl.jqno.equalsverifier:equalsverifier to 2.5.1
Posted by bt...@apache.org.
JAMES-2524 Update nl.jqno.equalsverifier:equalsverifier to 2.5.1
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/5d0ba58f
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/5d0ba58f
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/5d0ba58f
Branch: refs/heads/master
Commit: 5d0ba58fb9d48b8c6953153542457b2d81e5d758
Parents: d4ad007
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 15:04:26 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:13:16 2018 +0700
----------------------------------------------------------------------
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/5d0ba58f/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index f5c2c9d..778c5e7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1952,7 +1952,7 @@
<dependency>
<groupId>nl.jqno.equalsverifier</groupId>
<artifactId>equalsverifier</artifactId>
- <version>2.4.8</version>
+ <version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[16/17] james-project git commit: JAMES-2522 Moving and renaming
classes
Posted by bt...@apache.org.
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
index 26acc87..4f492a5 100644
--- a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
+++ b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
@@ -49,9 +49,10 @@ import org.apache.james.dnsservice.api.DNSService;
import org.apache.james.domainlist.api.DomainList;
import org.apache.james.domainlist.memory.MemoryDomainList;
import org.apache.james.filesystem.api.FileSystem;
-import org.apache.james.filesystem.api.mock.MockFileSystem;
import org.apache.james.mailrepository.api.MailRepositoryStore;
-import org.apache.james.mailrepository.mock.MockMailRepositoryStore;
+import org.apache.james.mailrepository.memory.MemoryMailRepositoryProvider;
+import org.apache.james.mailrepository.memory.MemoryMailRepositoryStore;
+import org.apache.james.mailrepository.memory.MemoryMailRepositoryUrlStore;
import org.apache.james.metrics.api.Metric;
import org.apache.james.protocols.api.utils.ProtocolServerUtils;
import org.apache.james.protocols.lib.mock.MockProtocolHandlerLoader;
@@ -61,6 +62,9 @@ import org.apache.james.queue.api.RawMailQueueItemDecoratorFactory;
import org.apache.james.queue.memory.MemoryMailQueueFactory;
import org.apache.james.rrt.api.RecipientRewriteTable;
import org.apache.james.rrt.memory.MemoryRecipientRewriteTable;
+import org.apache.james.server.core.configuration.Configuration;
+import org.apache.james.server.core.configuration.FileConfigurationProvider;
+import org.apache.james.server.core.filesystem.FileSystemImpl;
import org.apache.james.smtpserver.netty.SMTPServer;
import org.apache.james.smtpserver.netty.SmtpMetricsImpl;
import org.apache.james.user.api.UsersRepository;
@@ -75,6 +79,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Sets;
public class SMTPServerTest {
@@ -167,9 +172,9 @@ public class SMTPServerTest {
protected HashedWheelTimer hashedWheelTimer;
protected final MemoryUsersRepository usersRepository = MemoryUsersRepository.withoutVirtualHosting();
protected AlterableDNSServer dnsServer;
- protected MockMailRepositoryStore store;
- protected MockFileSystem fileSystem;
- protected DNSService dnsService;
+ protected MemoryMailRepositoryStore mailRepositoryStore;
+ protected FileSystemImpl fileSystem;
+ protected Configuration configuration;
protected MockProtocolHandlerLoader chain;
protected MemoryMailQueueFactory queueFactory;
protected MemoryMailQueueFactory.MemoryMailQueue queue;
@@ -178,6 +183,8 @@ public class SMTPServerTest {
@Before
public void setUp() throws Exception {
+ createMailRepositoryStore();
+
setUpFakeLoader();
// slf4j can't set programmatically any log level. It's just a facade
// log.setLevel(SimpleLog.LOG_LEVEL_ALL);
@@ -186,6 +193,19 @@ public class SMTPServerTest {
setUpSMTPServer();
}
+ protected void createMailRepositoryStore() throws Exception {
+ configuration = Configuration.builder()
+ .workingDirectory("../")
+ .configurationFromClasspath()
+ .build();
+ fileSystem = new FileSystemImpl(configuration.directories());
+ MemoryMailRepositoryUrlStore urlStore = new MemoryMailRepositoryUrlStore();
+ mailRepositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(new MemoryMailRepositoryProvider()));
+ mailRepositoryStore.configure(new FileConfigurationProvider(fileSystem, configuration)
+ .getConfiguration("mailrepositorystore"));
+ mailRepositoryStore.init();
+ }
+
protected SMTPServer createSMTPServer(SmtpMetricsImpl smtpMetrics) {
return new SMTPServer(smtpMetrics);
}
@@ -221,10 +241,8 @@ public class SMTPServerTest {
dnsServer = new AlterableDNSServer();
chain.put("dnsservice", DNSService.class, dnsServer);
- store = new MockMailRepositoryStore();
- chain.put("mailStore", MailRepositoryStore.class, store);
- fileSystem = new MockFileSystem();
-
+ chain.put("mailStore", MailRepositoryStore.class, mailRepositoryStore);
+
chain.put("fileSystem", FileSystem.class, fileSystem);
MemoryRecipientRewriteTable rewriteTable = new MemoryRecipientRewriteTable();
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java
index 565d550..fa2831d 100644
--- a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java
+++ b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java
@@ -150,7 +150,7 @@ public class SMTPTestConfiguration extends DefaultConfigurationBuilder {
addProperty("addressBracketsEnforcement", addressBracketsEnforcement);
addProperty("tls.[@startTLS]", startTLS);
- addProperty("tls.keystore", "file://conf/test_keystore");
+ addProperty("tls.keystore", "test_keystore");
addProperty("tls.secret", "jamestest");
if (verifyIdentity) {
addProperty("verifyIdentity", verifyIdentity);
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/protocols/protocols-smtp/src/test/resources/mailrepositorystore.xml
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/test/resources/mailrepositorystore.xml b/server/protocols/protocols-smtp/src/test/resources/mailrepositorystore.xml
new file mode 100644
index 0000000..ed3e003
--- /dev/null
+++ b/server/protocols/protocols-smtp/src/test/resources/mailrepositorystore.xml
@@ -0,0 +1,30 @@
+<?xml version="1.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.
+ -->
+
+<mailrepositorystore>
+ <mailrepositories>
+ <mailrepository class="org.apache.james.mailrepository.memory.MemoryMailRepository">
+ <protocols>
+ <protocol>memory</protocol>
+ </protocols>
+ </mailrepository>
+ </mailrepositories>
+</mailrepositorystore>
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/protocols/webadmin/webadmin-mailrepository/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/pom.xml b/server/protocols/webadmin/webadmin-mailrepository/pom.xml
index 4d120ec..9c43eec 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/pom.xml
+++ b/server/protocols/webadmin/webadmin-mailrepository/pom.xml
@@ -44,6 +44,11 @@
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
+ <artifactId>james-server-data-memory</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>${james.groupId}</groupId>
<artifactId>james-server-mailrepository-api</artifactId>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
index 77b16b3..6cee9b7 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
@@ -29,19 +29,12 @@ import static org.apache.james.webadmin.WebAdminServer.NO_CONFIGURATION;
import static org.assertj.core.api.Assertions.assertThat;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.containsInAnyOrder;
-import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.isEmptyOrNullString;
import static org.hamcrest.Matchers.notNullValue;
import static org.hamcrest.Matchers.nullValue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.when;
import java.nio.charset.StandardCharsets;
import java.time.ZoneId;
@@ -50,8 +43,6 @@ import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
-import java.util.Optional;
-import java.util.stream.Stream;
import javax.mail.internet.MimeMessage;
@@ -59,15 +50,21 @@ import org.apache.james.core.MailAddress;
import org.apache.james.core.builder.MimeMessageBuilder;
import org.apache.james.core.builder.MimeMessageBuilder.BodyPartBuilder;
import org.apache.james.mailrepository.api.MailKey;
+import org.apache.james.mailrepository.api.MailRepository;
import org.apache.james.mailrepository.api.MailRepositoryPath;
-import org.apache.james.mailrepository.api.MailRepositoryStore;
import org.apache.james.mailrepository.api.MailRepositoryUrl;
import org.apache.james.mailrepository.memory.MemoryMailRepository;
+import org.apache.james.mailrepository.memory.MemoryMailRepositoryProvider;
+import org.apache.james.mailrepository.memory.MemoryMailRepositoryStore;
+import org.apache.james.mailrepository.memory.MemoryMailRepositoryUrlStore;
import org.apache.james.metrics.api.NoopMetricFactory;
import org.apache.james.queue.api.MailQueueFactory;
import org.apache.james.queue.api.ManageableMailQueue;
import org.apache.james.queue.api.RawMailQueueItemDecoratorFactory;
import org.apache.james.queue.memory.MemoryMailQueueFactory;
+import org.apache.james.server.core.configuration.Configuration;
+import org.apache.james.server.core.configuration.FileConfigurationProvider;
+import org.apache.james.server.core.filesystem.FileSystemImpl;
import org.apache.james.task.MemoryTaskManager;
import org.apache.james.util.ClassLoaderUtils;
import org.apache.james.webadmin.Constants;
@@ -87,10 +84,8 @@ import org.eclipse.jetty.http.HttpStatus;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import org.mockito.stubbing.Answer;
-import com.github.steveash.guavate.Guavate;
-import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Sets;
import io.restassured.RestAssured;
import io.restassured.builder.RequestSpecBuilder;
@@ -99,26 +94,24 @@ import io.restassured.parsing.Parser;
public class MailRepositoriesRoutesTest {
- private static final MailRepositoryUrl URL_MY_REPO = MailRepositoryUrl.from("url://myRepo");
+ private static final MailRepositoryUrl URL_MY_REPO = MailRepositoryUrl.from("memory://myRepo");
private static final MailRepositoryPath PATH_MY_REPO = MailRepositoryPath.from("myRepo");
private static final String PATH_ESCAPED_MY_REPO = "myRepo";
private static final String MY_REPO_MAILS = "myRepo/mails";
private static final String CUSTOM_QUEUE = "customQueue";
private static final String NAME_1 = "name1";
private static final String NAME_2 = "name2";
- private static final Answer<?> RETURN_NO_MAIL_REPOSITORY = (invocation) -> Stream.empty();
private WebAdminServer webAdminServer;
- private MailRepositoryStore mailRepositoryStore;
- private MemoryMailRepository mailRepository;
- private Answer<?> returnMailRepository;
+ private MemoryMailRepositoryStore mailRepositoryStore;
private ManageableMailQueue spoolQueue;
private ManageableMailQueue customQueue;
+ private FileSystemImpl fileSystem;
+ private Configuration configuration;
+
@Before
public void setUp() throws Exception {
- mailRepositoryStore = mock(MailRepositoryStore.class);
- mailRepository = new MemoryMailRepository();
- returnMailRepository = (invocation) -> Stream.of(mailRepository);
+ createMailRepositoryStore();
MemoryTaskManager taskManager = new MemoryTaskManager();
JsonTransformer jsonTransformer = new JsonTransformer();
@@ -150,59 +143,45 @@ public class MailRepositoriesRoutesTest {
}
@Test
- public void putMailRepositoryShouldReturnOkWhenRepositoryIsCreated() throws Exception {
+ public void putMailRepositoryShouldReturnOkWhenRepositoryIsCreated() {
given()
- .params("protocol", "url")
+ .params("protocol", "memory")
.when()
.put(PATH_ESCAPED_MY_REPO)
.then()
.statusCode(HttpStatus.NO_CONTENT_204);
- verify(mailRepositoryStore).create(URL_MY_REPO);
- verifyNoMoreInteractions(mailRepositoryStore);
+ assertThat(mailRepositoryStore.get(URL_MY_REPO))
+ .isNotEmpty()
+ .containsInstanceOf(MemoryMailRepository.class);
}
@Test
public void putMailRepositoryShouldReturnOkWhenRepositoryAlreadyExists() throws Exception {
given()
- .params("protocol", "url")
+ .params("protocol", "memory")
.when()
.put(PATH_ESCAPED_MY_REPO)
.then()
.statusCode(HttpStatus.NO_CONTENT_204);
given()
- .params("protocol", "url")
+ .params("protocol", "memory")
.when()
.put(PATH_ESCAPED_MY_REPO)
.then()
.statusCode(HttpStatus.NO_CONTENT_204);
- verify(mailRepositoryStore, times(2)).create(URL_MY_REPO);
- verifyNoMoreInteractions(mailRepositoryStore);
- }
-
- @Test
- public void putMailRepositoryShouldReturnServerErrorWhenCannotCreateRepository() throws Exception {
- when(mailRepositoryStore.create(any()))
- .thenThrow(new MailRepositoryStore.MailRepositoryStoreException("Error while selecting repository url://myRepo"));
+ assertThat(mailRepositoryStore.get(URL_MY_REPO))
+ .isNotEmpty()
+ .containsInstanceOf(MemoryMailRepository.class);
- given()
- .params("protocol", "url")
- .when()
- .put(PATH_ESCAPED_MY_REPO)
- .then()
- .statusCode(HttpStatus.INTERNAL_SERVER_ERROR_500)
- .body("statusCode", is(500))
- .body("type", is(ErrorResponder.ErrorType.SERVER_ERROR.getType()))
- .body("message", is("Error while creating a mail repository with path 'myRepo' and protocol 'url'"))
- .body("details", is("Error while selecting repository url://myRepo"));
+ assertThat(mailRepositoryStore.getByPath(PATH_MY_REPO))
+ .hasSize(1);
}
@Test
public void getMailRepositoriesShouldReturnEmptyWhenEmpty() {
- when(mailRepositoryStore.getPaths()).thenAnswer(RETURN_NO_MAIL_REPOSITORY);
-
List<Object> mailRepositories =
when()
.get()
@@ -218,9 +197,8 @@ public class MailRepositoriesRoutesTest {
}
@Test
- public void getMailRepositoriesShouldReturnRepositoryWhenOne() {
- when(mailRepositoryStore.getPaths())
- .thenAnswer((invocation) -> Stream.of(PATH_MY_REPO));
+ public void getMailRepositoriesShouldReturnRepositoryWhenOne() throws Exception {
+ mailRepositoryStore.create(URL_MY_REPO);
when()
.get()
@@ -232,10 +210,9 @@ public class MailRepositoriesRoutesTest {
}
@Test
- public void getMailRepositoriesShouldReturnTwoRepositoriesWhenTwo() {
- ImmutableList<MailRepositoryPath> myRepositories = ImmutableList.of(PATH_MY_REPO, MailRepositoryPath.from("mySecondRepo"));
- when(mailRepositoryStore.getPaths())
- .thenReturn(myRepositories.stream());
+ public void getMailRepositoriesShouldReturnTwoRepositoriesWhenTwo() throws Exception {
+ mailRepositoryStore.create(URL_MY_REPO);
+ mailRepositoryStore.create(MailRepositoryUrl.from("memory://mySecondRepo"));
List<String> mailRepositories =
when()
@@ -249,15 +226,11 @@ public class MailRepositoriesRoutesTest {
.getList("repository");
assertThat(mailRepositories)
- .containsOnlyElementsOf(myRepositories.stream()
- .map(MailRepositoryPath::asString)
- .collect(Guavate.toImmutableList()));
+ .containsOnly(PATH_ESCAPED_MY_REPO, "mySecondRepo");
}
@Test
- public void listingKeysShouldReturnNotFoundWhenNoRepository() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(RETURN_NO_MAIL_REPOSITORY);
-
+ public void listingKeysShouldReturnNotFoundWhenNoRepository() {
when()
.get(MY_REPO_MAILS)
.then()
@@ -267,7 +240,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void listingKeysShouldReturnEmptyWhenNoMail() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ mailRepositoryStore.create(URL_MY_REPO);
when()
.get(MY_REPO_MAILS)
@@ -278,7 +251,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void listingKeysShouldReturnContainedKeys() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
mailRepository.store(FakeMail.builder()
.name("name1")
@@ -297,7 +270,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void listingKeysShouldApplyLimitAndOffset() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
mailRepository.store(FakeMail.builder()
.name("name1")
@@ -321,21 +294,6 @@ public class MailRepositoriesRoutesTest {
}
@Test
- public void listingKeysShouldHandleErrorGracefully() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO))
- .thenThrow(new MailRepositoryStore.MailRepositoryStoreException("message"));
-
- when()
- .get(MY_REPO_MAILS)
- .then()
- .statusCode(HttpStatus.INTERNAL_SERVER_ERROR_500)
- .body("statusCode", is(500))
- .body("type", is(ErrorResponder.ErrorType.SERVER_ERROR.getType()))
- .body("message", is("Error while listing keys"))
- .body("details", containsString("message"));
- }
-
- @Test
public void listingKeysShouldReturnErrorOnInvalidOffset() {
given()
.param("offset", "invalid")
@@ -363,7 +321,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void listingKeysShouldReturnEmptyWhenOffsetExceedsSize() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
mailRepository.store(FakeMail.builder()
.name("name1")
@@ -412,7 +370,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void listingKeysShouldIgnoreZeroedOffset() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
mailRepository.store(FakeMail.builder()
.name(NAME_1)
@@ -445,9 +403,7 @@ public class MailRepositoriesRoutesTest {
}
@Test
- public void retrievingRepositoryShouldReturnNotFoundWhenNone() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(RETURN_NO_MAIL_REPOSITORY);
-
+ public void retrievingRepositoryShouldReturnNotFoundWhenNone() {
given()
.get(PATH_ESCAPED_MY_REPO)
.then()
@@ -456,7 +412,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void retrievingRepositoryShouldReturnBasicInformation() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ mailRepositoryStore.create(URL_MY_REPO);
given()
.get(PATH_ESCAPED_MY_REPO)
@@ -469,7 +425,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void retrievingRepositorySizeShouldReturnZeroWhenEmpty() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ mailRepositoryStore.create(URL_MY_REPO);
given()
.get(PATH_ESCAPED_MY_REPO)
@@ -481,7 +437,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void retrievingRepositorySizeShouldReturnNumberOfContainedMails() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
mailRepository.store(FakeMail.builder()
.name(NAME_1)
@@ -497,7 +453,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void retrievingAMailShouldDisplayItsInformation() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
String name = NAME_1;
String sender = "sender@domain";
@@ -536,7 +492,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void retrievingAMailShouldDisplayAllAdditionalFieldsWhenRequested() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
String name = NAME_1;
BodyPartBuilder textMessage = MimeMessageBuilder.bodyPartBuilder()
@@ -639,7 +595,8 @@ public class MailRepositoriesRoutesTest {
@Test
public void retrievingAMailShouldDisplayAllValidAdditionalFieldsWhenRequested() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
+
String name = NAME_1;
String sender = "sender@domain";
String recipient1 = "recipient1@domain";
@@ -669,7 +626,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void retrievingAMailShouldDisplayCorrectlyEncodedHeadersInValidAdditionalFieldsWhenRequested() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
String name = NAME_1;
String sender = "sender@domain";
String recipient1 = "recipient1@domain";
@@ -697,7 +654,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void retrievingAMailShouldDisplayAllValidAdditionalFieldsEvenTheDuplicatedOnesWhenRequested() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
String name = NAME_1;
String sender = "sender@domain";
String recipient1 = "recipient1@domain";
@@ -727,7 +684,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void retrievingAMailShouldFailWhenAnUnknownFieldIsRequested() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
String name = NAME_1;
String sender = "sender@domain";
String recipient1 = "recipient1@domain";
@@ -752,7 +709,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void retrievingAMailShouldNotFailWhenOnlyNameProperty() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
mailRepository.store(FakeMail.builder()
.name(NAME_1)
@@ -770,8 +727,8 @@ public class MailRepositoriesRoutesTest {
}
@Test
- public void retrievingAMailShouldFailWhenUnknown() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ public void retrievingAMailShouldFailWhenUnknown() throws Exception{
+ mailRepositoryStore.create(URL_MY_REPO);
String name = "name";
when()
@@ -790,7 +747,7 @@ public class MailRepositoriesRoutesTest {
.build();
RestAssured.registerParser(Constants.RFC822_CONTENT_TYPE, Parser.TEXT);
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
String name = NAME_1;
FakeMail mail = FakeMail.builder()
@@ -818,13 +775,13 @@ public class MailRepositoriesRoutesTest {
@Test
public void downloadingAMailShouldFailWhenUnknown() throws Exception {
+ mailRepositoryStore.create(URL_MY_REPO);
+
RestAssured.requestSpecification = new RequestSpecBuilder().setPort(webAdminServer.getPort().getValue())
.setBasePath(MailRepositoriesRoutes.MAIL_REPOSITORIES)
.build();
RestAssured.registerParser(Constants.RFC822_CONTENT_TYPE, Parser.TEXT);
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
-
String name = "name";
given()
.accept(Constants.RFC822_CONTENT_TYPE)
@@ -839,7 +796,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void deletingAMailShouldRemoveIt() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
mailRepository.store(FakeMail.builder()
.name(NAME_1)
@@ -861,7 +818,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void deletingAMailShouldReturnOkWhenExist() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
mailRepository.store(FakeMail.builder()
.name(NAME_1)
@@ -875,7 +832,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void deletingAMailShouldReturnOkWhenNotExist() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ mailRepositoryStore.create(URL_MY_REPO);
when()
.delete(PATH_ESCAPED_MY_REPO + "/mails/name")
@@ -885,7 +842,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void deletingAllMailsShouldCreateATask() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ mailRepositoryStore.create(URL_MY_REPO);
when()
.delete(PATH_ESCAPED_MY_REPO + "/mails")
@@ -897,7 +854,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void clearTaskShouldHaveDetails() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
mailRepository.store(FakeMail.builder()
.name(NAME_1)
@@ -929,7 +886,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void clearTaskShouldRemoveAllTheMailsFromTheMailRepository() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
mailRepository.store(FakeMail.builder()
.name(NAME_1)
@@ -955,9 +912,7 @@ public class MailRepositoriesRoutesTest {
}
@Test
- public void patchShouldReturnNotFoundWhenNoMailRepository() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(RETURN_NO_MAIL_REPOSITORY);
-
+ public void patchShouldReturnNotFoundWhenNoMailRepository() {
when()
.delete(PATH_ESCAPED_MY_REPO + "/mails")
.then()
@@ -968,9 +923,7 @@ public class MailRepositoriesRoutesTest {
}
@Test
- public void deleteShouldReturnNotFoundWhenNoMailRepository() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(RETURN_NO_MAIL_REPOSITORY);
-
+ public void deleteShouldReturnNotFoundWhenNoMailRepository() {
when()
.delete(PATH_ESCAPED_MY_REPO + "/mails/any")
.then()
@@ -982,7 +935,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void reprocessingAllTaskShouldCreateATask() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ mailRepositoryStore.create(URL_MY_REPO);
given()
.param("action", "reprocess")
@@ -995,9 +948,7 @@ public class MailRepositoriesRoutesTest {
}
@Test
- public void reprocessingAllTaskShouldRejectInvalidActions() throws Exception {
- when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
-
+ public void reprocessingAllTaskShouldRejectInvalidActions() {
given()
.param("action", "invalid")
.when()
@@ -1010,9 +961,7 @@ public class MailRepositoriesRoutesTest {
}
@Test
- public void reprocessingAllTaskShouldRequireAction() throws Exception {
- when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
-
+ public void reprocessingAllTaskShouldRequireAction() {
when()
.patch(PATH_ESCAPED_MY_REPO + "/mails")
.then()
@@ -1024,7 +973,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void reprocessingAllTaskShouldIncludeDetailsWhenDefaultValues() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
mailRepository.store(FakeMail.builder()
.name(NAME_1)
.build());
@@ -1058,7 +1007,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void reprocessingAllTaskShouldIncludeDetails() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
String name1 = "name1";
String name2 = "name2";
mailRepository.store(FakeMail.builder()
@@ -1097,7 +1046,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void reprocessingAllTaskShouldClearMailRepository() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
String name1 = "name1";
String name2 = "name2";
mailRepository.store(FakeMail.builder()
@@ -1125,7 +1074,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void reprocessingAllTaskShouldEnqueueMailsOnDefaultQueue() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
mailRepository.store(FakeMail.builder()
.name(NAME_1)
.build());
@@ -1151,7 +1100,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void reprocessingAllTaskShouldPreserveStateWhenProcessorIsNotSpecified() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
String state1 = "state1";
String state2 = "state2";
mailRepository.store(FakeMail.builder()
@@ -1181,7 +1130,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void reprocessingAllTaskShouldOverWriteStateWhenProcessorSpecified() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
String state1 = "state1";
String state2 = "state2";
mailRepository.store(FakeMail.builder()
@@ -1213,7 +1162,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void reprocessingAllTaskShouldEnqueueMailsOnSpecifiedQueue() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
mailRepository.store(FakeMail.builder()
.name(NAME_1)
.build());
@@ -1240,8 +1189,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void reprocessingOneTaskShouldCreateATask() throws Exception {
- when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
-
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
mailRepository.store(FakeMail.builder()
.name(NAME_1)
.build());
@@ -1258,8 +1206,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void reprocessingOneTaskShouldRejectInvalidActions() throws Exception {
- when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
-
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
mailRepository.store(FakeMail.builder()
.name(NAME_1)
.build());
@@ -1277,8 +1224,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void reprocessingOneTaskShouldRequireAction() throws Exception {
- when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
-
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
mailRepository.store(FakeMail.builder()
.name(NAME_1)
.build());
@@ -1294,7 +1240,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void reprocessingOneTaskShouldIncludeDetailsWhenDefaultValues() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
String name1 = "name1";
String name2 = "name2";
mailRepository.store(FakeMail.builder()
@@ -1329,7 +1275,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void reprocessingOneTaskShouldIncludeDetails() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
String name1 = "name1";
String name2 = "name2";
mailRepository.store(FakeMail.builder()
@@ -1367,7 +1313,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void reprocessingOneTaskShouldRemoveMailFromRepository() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
String name1 = "name1";
String name2 = "name2";
mailRepository.store(FakeMail.builder()
@@ -1396,7 +1342,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void reprocessingOneTaskShouldEnqueueMailsOnDefaultQueue() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
mailRepository.store(FakeMail.builder()
.name(NAME_1)
.build());
@@ -1422,7 +1368,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void reprocessingOneTaskShouldPreserveStateWhenProcessorIsNotSpecified() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
String state1 = "state1";
String state2 = "state2";
mailRepository.store(FakeMail.builder()
@@ -1452,7 +1398,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void reprocessingOneTaskShouldOverWriteStateWhenProcessorSpecified() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
String state1 = "state1";
String state2 = "state2";
mailRepository.store(FakeMail.builder()
@@ -1484,7 +1430,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void reprocessingOneTaskShouldEnqueueMailsOnSpecifiedQueue() throws Exception {
- when(mailRepositoryStore.getByPath(PATH_MY_REPO)).thenAnswer(returnMailRepository);
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
mailRepository.store(FakeMail.builder()
.name(NAME_1)
.build());
@@ -1511,7 +1457,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void reprocessingOneTaskShouldNotEnqueueUnknownMailKey() throws Exception {
- when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
mailRepository.store(FakeMail.builder()
.name(NAME_1)
.build());
@@ -1536,7 +1482,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void reprocessingOneTaskShouldNotRemoveMailFromRepositoryWhenUnknownMailKey() throws Exception {
- when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
mailRepository.store(FakeMail.builder()
.name(NAME_1)
.build());
@@ -1561,7 +1507,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void reprocessingOneTaskShouldFailWhenUnknownMailKey() throws Exception {
- when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+ MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO);
mailRepository.store(FakeMail.builder()
.name(NAME_1)
.build());
@@ -1584,4 +1530,16 @@ public class MailRepositoriesRoutesTest {
.body("status", is("failed"));
}
+ private void createMailRepositoryStore() throws Exception {
+ configuration = Configuration.builder()
+ .workingDirectory("../")
+ .configurationFromClasspath()
+ .build();
+ fileSystem = new FileSystemImpl(configuration.directories());
+ MemoryMailRepositoryUrlStore urlStore = new MemoryMailRepositoryUrlStore();
+ mailRepositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(new MemoryMailRepositoryProvider()));
+ mailRepositoryStore.configure(new FileConfigurationProvider(fileSystem, configuration)
+ .getConfiguration("mailrepositorystore"));
+ mailRepositoryStore.init();
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/0084a26e/server/protocols/webadmin/webadmin-mailrepository/src/test/resources/mailrepositorystore.xml
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/resources/mailrepositorystore.xml b/server/protocols/webadmin/webadmin-mailrepository/src/test/resources/mailrepositorystore.xml
new file mode 100644
index 0000000..ed3e003
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/resources/mailrepositorystore.xml
@@ -0,0 +1,30 @@
+<?xml version="1.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.
+ -->
+
+<mailrepositorystore>
+ <mailrepositories>
+ <mailrepository class="org.apache.james.mailrepository.memory.MemoryMailRepository">
+ <protocols>
+ <protocol>memory</protocol>
+ </protocols>
+ </mailrepository>
+ </mailrepositories>
+</mailrepositorystore>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[04/17] james-project git commit: JAMES-2524 Update
io.swagger:swagger-jaxrs to 1.5.21
Posted by bt...@apache.org.
JAMES-2524 Update io.swagger:swagger-jaxrs to 1.5.21
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d4ad007e
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d4ad007e
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d4ad007e
Branch: refs/heads/master
Commit: d4ad007ee4e4aab80dc06688814d00ff96add041
Parents: 97078c8
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 15:00:19 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:13:16 2018 +0700
----------------------------------------------------------------------
server/protocols/webadmin/webadmin-core/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/d4ad007e/server/protocols/webadmin/webadmin-core/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/pom.xml b/server/protocols/webadmin/webadmin-core/pom.xml
index 8df8461..6d27db4 100644
--- a/server/protocols/webadmin/webadmin-core/pom.xml
+++ b/server/protocols/webadmin/webadmin-core/pom.xml
@@ -99,7 +99,7 @@
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jaxrs</artifactId>
- <version>1.5.13</version>
+ <version>1.5.21</version>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[10/17] james-project git commit: JAMES-2524 Update
org.mariadb.jdbc:mariadb-java-client to 2.2.6
Posted by bt...@apache.org.
JAMES-2524 Update org.mariadb.jdbc:mariadb-java-client to 2.2.6
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9648a6a4
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9648a6a4
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9648a6a4
Branch: refs/heads/master
Commit: 9648a6a4af6a91ac352c7e75cc4906d61d3fd072
Parents: dd69b51
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 15:30:14 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:13:16 2018 +0700
----------------------------------------------------------------------
server/container/guice/jpa-smtp-mariadb/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/9648a6a4/server/container/guice/jpa-smtp-mariadb/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-smtp-mariadb/pom.xml b/server/container/guice/jpa-smtp-mariadb/pom.xml
index 74ad54c..88fb888 100644
--- a/server/container/guice/jpa-smtp-mariadb/pom.xml
+++ b/server/container/guice/jpa-smtp-mariadb/pom.xml
@@ -65,7 +65,7 @@
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
- <version>2.2.5</version>
+ <version>2.2.6</version>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[13/17] james-project git commit: JAMES-2523 MixedEventDelivery was
not shutting threads down the right way
Posted by bt...@apache.org.
JAMES-2523 MixedEventDelivery was not shutting threads down the right way
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/b7cd3751
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b7cd3751
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b7cd3751
Branch: refs/heads/master
Commit: b7cd37512b9f371defad5ec7deaabe9164ca466c
Parents: 9f6e768
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Mon Aug 20 10:11:27 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:15:05 2018 +0700
----------------------------------------------------------------------
.../org/apache/james/mailbox/store/event/MixedEventDelivery.java | 3 +++
1 file changed, 3 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/b7cd3751/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MixedEventDelivery.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MixedEventDelivery.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MixedEventDelivery.java
index bcbc044..1aab004 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MixedEventDelivery.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MixedEventDelivery.java
@@ -19,6 +19,8 @@
package org.apache.james.mailbox.store.event;
+import javax.annotation.PreDestroy;
+
import org.apache.james.mailbox.Event;
import org.apache.james.mailbox.MailboxListener;
@@ -42,6 +44,7 @@ public class MixedEventDelivery implements EventDelivery {
}
}
+ @PreDestroy
public void stop() {
asynchronousEventDelivery.stop();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[07/17] james-project git commit: JAMES-2524 Update org.jsoup:jsoup
to 1.11.3
Posted by bt...@apache.org.
JAMES-2524 Update org.jsoup:jsoup to 1.11.3
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/dd69b51e
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/dd69b51e
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/dd69b51e
Branch: refs/heads/master
Commit: dd69b51e6981ebbc5872db5d3b3d5cfe766a34c1
Parents: d319a48
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Aug 17 15:29:12 2018 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Aug 21 17:13:16 2018 +0700
----------------------------------------------------------------------
server/protocols/jmap/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/dd69b51e/server/protocols/jmap/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/pom.xml b/server/protocols/jmap/pom.xml
index 83514ff..1e11bfa 100644
--- a/server/protocols/jmap/pom.xml
+++ b/server/protocols/jmap/pom.xml
@@ -277,7 +277,7 @@
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
- <version>1.9.2</version>
+ <version>1.11.3</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org