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/01/26 01:13:45 UTC

[01/10] james-project git commit: JAMES-2294 Fix taskIdDTO Location header

Repository: james-project
Updated Branches:
  refs/heads/master dec2685fa -> 866d09e24


JAMES-2294 Fix taskIdDTO Location header


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

Branch: refs/heads/master
Commit: fac7e596baf4e54ec94a5d612bf2e6c9da91c1fa
Parents: dec2685
Author: benwa <bt...@linagora.com>
Authored: Thu Jan 25 10:22:00 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Fri Jan 26 08:12:00 2018 +0700

----------------------------------------------------------------------
 .../apache/james/webadmin/dto/TaskIdDto.java    |  2 +-
 .../james/webadmin/dto/TaskIdDtoTest.java       | 50 ++++++++++++++++++++
 2 files changed, 51 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/fac7e596/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/TaskIdDto.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/TaskIdDto.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/TaskIdDto.java
index 64c4321..35f88e9 100644
--- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/TaskIdDto.java
+++ b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/TaskIdDto.java
@@ -33,7 +33,7 @@ public class TaskIdDto {
 
     public static TaskIdDto respond(Response response, TaskId taskId) {
         response.status(HttpStatus.CREATED_201);
-        response.header(LOCATION.asString(), TasksRoutes.BASE + "/" + taskId.toString());
+        response.header(LOCATION.asString(), TasksRoutes.BASE + "/" + taskId.getValue());
         return TaskIdDto.from(taskId);
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/fac7e596/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/dto/TaskIdDtoTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/dto/TaskIdDtoTest.java b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/dto/TaskIdDtoTest.java
new file mode 100644
index 0000000..5f85a54
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/dto/TaskIdDtoTest.java
@@ -0,0 +1,50 @@
+/****************************************************************
+ * 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.webadmin.dto;
+
+import static org.eclipse.jetty.http.HttpHeader.LOCATION;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+
+import java.util.UUID;
+
+import org.apache.james.task.TaskId;
+import org.eclipse.jetty.http.HttpStatus;
+import org.junit.Test;
+
+import spark.Response;
+
+public class TaskIdDtoTest {
+    private static final String UID_VALUE = "ce5316cb-c924-40eb-9ca0-c5828e276297";
+
+    @Test
+    public void respondShouldReturnCreatedWithTaskIdHeader() {
+        Response response = mock(Response.class);
+        TaskId taskId = new TaskId(UUID.fromString(UID_VALUE));
+
+        TaskIdDto.respond(response, taskId);
+
+        verify(response).status(HttpStatus.CREATED_201);
+        verify(response).header(LOCATION.asString(), "/tasks/" + UID_VALUE);
+        verifyNoMoreInteractions(response);
+    }
+
+}
\ No newline at end of file


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


[04/10] james-project git commit: JAMES-2292 Bind MailQueueRoutes

Posted by bt...@apache.org.
JAMES-2292 Bind MailQueueRoutes


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

Branch: refs/heads/master
Commit: a5abe3554d7c53f1ea83a195e1d8236171b811cc
Parents: d45cf81
Author: Antoine Duprat <ad...@linagora.com>
Authored: Thu Jan 25 11:54:16 2018 +0100
Committer: benwa <bt...@linagora.com>
Committed: Fri Jan 26 08:12:21 2018 +0700

----------------------------------------------------------------------
 pom.xml                                         |  5 ++
 server/container/guice/cassandra-guice/pom.xml  |  4 ++
 .../apache/james/CassandraJamesServerMain.java  |  2 +
 server/container/guice/jpa-guice/pom.xml        |  4 ++
 .../org/apache/james/JPAJamesServerMain.java    |  2 +
 server/container/guice/memory-guice/pom.xml     |  4 ++
 .../org/apache/james/MemoryJamesServerMain.java |  2 +
 server/container/guice/pom.xml                  |  8 ++-
 .../guice/protocols/webadmin-mailqueue/pom.xml  | 71 ++++++++++++++++++++
 .../modules/server/MailQueueRoutesModule.java   | 34 ++++++++++
 .../WebAdminServerIntegrationTest.java          |  9 +++
 .../james/webadmin/routes/MailQueueRoutes.java  |  7 +-
 12 files changed, 148 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/a5abe355/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 3294ff4..3411bd5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1425,6 +1425,11 @@
             </dependency>
             <dependency>
                 <groupId>${project.groupId}</groupId>
+                <artifactId>james-server-webadmin-mailqueue</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>${project.groupId}</groupId>
                 <artifactId>james-server-webadmin-mailrepository</artifactId>
                 <version>${project.version}</version>
             </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5abe355/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 7babc31..a0e6b14 100644
--- a/server/container/guice/cassandra-guice/pom.xml
+++ b/server/container/guice/cassandra-guice/pom.xml
@@ -170,6 +170,10 @@
         </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
+            <artifactId>james-server-guice-webadmin-mailqueue</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
             <artifactId>james-server-guice-webadmin-mailrepository</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5abe355/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
index 063ff7c..d117d9b 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
@@ -43,6 +43,7 @@ import org.apache.james.modules.server.CassandraRoutesModule;
 import org.apache.james.modules.server.DataRoutesModules;
 import org.apache.james.modules.server.ElasticSearchMetricReporterModule;
 import org.apache.james.modules.server.JMXServerModule;
+import org.apache.james.modules.server.MailQueueRoutesModule;
 import org.apache.james.modules.server.MailRepositoriesRoutesModule;
 import org.apache.james.modules.server.MailboxRoutesModule;
 import org.apache.james.modules.server.SwaggerRoutesModule;
@@ -57,6 +58,7 @@ public class CassandraJamesServerMain {
         new CassandraRoutesModule(),
         new DataRoutesModules(),
         new MailboxRoutesModule(),
+        new MailQueueRoutesModule(),
         new MailRepositoriesRoutesModule(),
         new SwaggerRoutesModule(),
         new WebAdminServerModule());

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5abe355/server/container/guice/jpa-guice/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-guice/pom.xml b/server/container/guice/jpa-guice/pom.xml
index 1cd7261..26f8f20 100644
--- a/server/container/guice/jpa-guice/pom.xml
+++ b/server/container/guice/jpa-guice/pom.xml
@@ -113,6 +113,10 @@
         </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
+            <artifactId>james-server-guice-webadmin-mailqueue</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
             <artifactId>james-server-guice-webadmin-mailrepository</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5abe355/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAJamesServerMain.java
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAJamesServerMain.java b/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAJamesServerMain.java
index d3e3e15..fbf4d13 100644
--- a/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAJamesServerMain.java
+++ b/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAJamesServerMain.java
@@ -36,6 +36,7 @@ import org.apache.james.modules.server.DataRoutesModules;
 import org.apache.james.modules.server.DefaultProcessorsConfigurationProviderModule;
 import org.apache.james.modules.server.ElasticSearchMetricReporterModule;
 import org.apache.james.modules.server.JMXServerModule;
+import org.apache.james.modules.server.MailQueueRoutesModule;
 import org.apache.james.modules.server.MailRepositoriesRoutesModule;
 import org.apache.james.modules.server.MailboxRoutesModule;
 import org.apache.james.modules.server.NoJwtModule;
@@ -52,6 +53,7 @@ public class JPAJamesServerMain {
         new WebAdminServerModule(),
         new DataRoutesModules(),
         new MailboxRoutesModule(),
+        new MailQueueRoutesModule(),
         new MailRepositoriesRoutesModule(),
         new SwaggerRoutesModule());
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5abe355/server/container/guice/memory-guice/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/memory-guice/pom.xml b/server/container/guice/memory-guice/pom.xml
index c9658e2..b3f4c83 100644
--- a/server/container/guice/memory-guice/pom.xml
+++ b/server/container/guice/memory-guice/pom.xml
@@ -112,6 +112,10 @@
         </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
+            <artifactId>james-server-guice-webadmin-mailqueue</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
             <artifactId>james-server-guice-webadmin-mailrepository</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5abe355/server/container/guice/memory-guice/src/main/java/org/apache/james/MemoryJamesServerMain.java
----------------------------------------------------------------------
diff --git a/server/container/guice/memory-guice/src/main/java/org/apache/james/MemoryJamesServerMain.java b/server/container/guice/memory-guice/src/main/java/org/apache/james/MemoryJamesServerMain.java
index 0e6108e..3170cf4 100644
--- a/server/container/guice/memory-guice/src/main/java/org/apache/james/MemoryJamesServerMain.java
+++ b/server/container/guice/memory-guice/src/main/java/org/apache/james/MemoryJamesServerMain.java
@@ -34,6 +34,7 @@ import org.apache.james.modules.protocols.SMTPServerModule;
 import org.apache.james.modules.server.CamelMailetContainerModule;
 import org.apache.james.modules.server.DataRoutesModules;
 import org.apache.james.modules.server.JMXServerModule;
+import org.apache.james.modules.server.MailQueueRoutesModule;
 import org.apache.james.modules.server.MailRepositoriesRoutesModule;
 import org.apache.james.modules.server.MailboxRoutesModule;
 import org.apache.james.modules.server.MemoryMailQueueModule;
@@ -50,6 +51,7 @@ public class MemoryJamesServerMain {
         new WebAdminServerModule(),
         new DataRoutesModules(),
         new MailboxRoutesModule(),
+        new MailQueueRoutesModule(),
         new MailRepositoriesRoutesModule(),
         new SwaggerRoutesModule());
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5abe355/server/container/guice/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/pom.xml b/server/container/guice/pom.xml
index ad8784d..61efd7b 100644
--- a/server/container/guice/pom.xml
+++ b/server/container/guice/pom.xml
@@ -57,6 +57,7 @@
         <module>protocols/webadmin-cassandra</module>
         <module>protocols/webadmin-data</module>
         <module>protocols/webadmin-mailbox</module>
+        <module>protocols/webadmin-mailqueue</module>
         <module>protocols/webadmin-mailrepository</module>
         <module>protocols/webadmin-swagger</module>
     </modules>
@@ -146,6 +147,11 @@
             </dependency>
             <dependency>
                 <groupId>${project.groupId}</groupId>
+                <artifactId>james-server-guice-webadmin-mailqueue</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>${project.groupId}</groupId>
                 <artifactId>james-server-guice-webadmin-mailrepository</artifactId>
                 <version>${project.version}</version>
             </dependency>
@@ -173,4 +179,4 @@
         </dependencies>
     </dependencyManagement>
 
-</project>
\ No newline at end of file
+</project>

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5abe355/server/container/guice/protocols/webadmin-mailqueue/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/webadmin-mailqueue/pom.xml b/server/container/guice/protocols/webadmin-mailqueue/pom.xml
new file mode 100644
index 0000000..287f197
--- /dev/null
+++ b/server/container/guice/protocols/webadmin-mailqueue/pom.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <artifactId>james-server-guice</artifactId>
+        <groupId>org.apache.james</groupId>
+        <version>3.1.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>james-server-guice-webadmin-mailqueue</artifactId>
+
+    <name>Apache James :: Server :: Guice :: Webadmin :: MailQueue</name>
+    <description>Webadmin mailqueue modules for Guice implementation of James server</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>james-server-guice-configuration</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>james-server-webadmin-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>james-server-webadmin-mailqueue</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.inject</groupId>
+            <artifactId>guice</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.inject.extensions</groupId>
+            <artifactId>guice-multibindings</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5abe355/server/container/guice/protocols/webadmin-mailqueue/src/main/java/org/apache/james/modules/server/MailQueueRoutesModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/webadmin-mailqueue/src/main/java/org/apache/james/modules/server/MailQueueRoutesModule.java b/server/container/guice/protocols/webadmin-mailqueue/src/main/java/org/apache/james/modules/server/MailQueueRoutesModule.java
new file mode 100644
index 0000000..127c53a
--- /dev/null
+++ b/server/container/guice/protocols/webadmin-mailqueue/src/main/java/org/apache/james/modules/server/MailQueueRoutesModule.java
@@ -0,0 +1,34 @@
+/****************************************************************
+ * 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.modules.server;
+
+import org.apache.james.webadmin.Routes;
+import org.apache.james.webadmin.routes.MailQueueRoutes;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.multibindings.Multibinder;
+
+public class MailQueueRoutesModule extends AbstractModule {
+    @Override
+    protected void configure() {
+        Multibinder<Routes> routesMultibinder = Multibinder.newSetBinder(binder(), Routes.class);
+        routesMultibinder.addBinding().to(MailQueueRoutes.class);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5abe355/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
index eb8236e..f2d0d7f 100644
--- a/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
@@ -41,6 +41,7 @@ import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.WebAdminGuiceProbe;
 import org.apache.james.webadmin.WebAdminUtils;
 import org.apache.james.webadmin.routes.DomainsRoutes;
+import org.apache.james.webadmin.routes.MailQueueRoutes;
 import org.apache.james.webadmin.routes.MailRepositoriesRoutes;
 import org.apache.james.webadmin.routes.UserMailboxesRoutes;
 import org.apache.james.webadmin.routes.UserRoutes;
@@ -105,6 +106,14 @@ public class WebAdminServerIntegrationTest {
     }
 
     @Test
+    public void mailQueueRoutesShouldBeExposed() throws Exception {
+        when()
+            .get(MailQueueRoutes.BASE_URL)
+        .then()
+            .statusCode(HttpStatus.OK_200);
+    }
+
+    @Test
     public void mailRepositoriesRoutesShouldBeExposed() throws Exception {
         when()
             .get(MailRepositoriesRoutes.MAIL_REPOSITORIES)

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5abe355/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/routes/MailQueueRoutes.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/routes/MailQueueRoutes.java b/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/routes/MailQueueRoutes.java
index 6e67340..58a5576 100644
--- a/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/routes/MailQueueRoutes.java
+++ b/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/routes/MailQueueRoutes.java
@@ -62,7 +62,7 @@ import spark.Service;
 @Produces("application/json")
 public class MailQueueRoutes implements Routes {
 
-    @VisibleForTesting static final String BASE_URL = "/mailQueues";
+    public static final String BASE_URL = "/mailQueues";
     @VisibleForTesting static final String MAIL_QUEUE_NAME = ":mailQueueName";
     @VisibleForTesting static final String MAILS = "/mails";
     
@@ -74,8 +74,9 @@ public class MailQueueRoutes implements Routes {
     private final JsonTransformer jsonTransformer;
 
     @Inject
-    @VisibleForTesting MailQueueRoutes(MailQueueFactory<ManageableMailQueue> mailQueueFactory, JsonTransformer jsonTransformer) {
-        this.mailQueueFactory = mailQueueFactory;
+    @SuppressWarnings("unchecked")
+    @VisibleForTesting MailQueueRoutes(MailQueueFactory<?> mailQueueFactory, JsonTransformer jsonTransformer) {
+        this.mailQueueFactory = (MailQueueFactory<ManageableMailQueue>) mailQueueFactory;
         this.jsonTransformer = jsonTransformer;
     }
 


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


[03/10] james-project git commit: JAMES-2294 Introduce reprocessing tasks

Posted by bt...@apache.org.
JAMES-2294 Introduce reprocessing tasks


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

Branch: refs/heads/master
Commit: e6fdeae70fc38390289f70726084dcce3adfa872
Parents: fac7e59
Author: benwa <bt...@linagora.com>
Authored: Thu Jan 25 10:35:24 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Fri Jan 26 08:12:05 2018 +0700

----------------------------------------------------------------------
 .../webadmin/webadmin-mailrepository/pom.xml    |   9 ++
 .../service/MailRepositoryStoreService.java     |   2 +-
 .../service/ReprocessingAllMailsTask.java       | 115 +++++++++++++++++++
 .../service/ReprocessingOneMailTask.java        | 102 ++++++++++++++++
 .../webadmin/service/ReprocessingService.java   |  76 ++++++++++++
 5 files changed, 303 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/e6fdeae7/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 367ea83..72b374a 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/pom.xml
+++ b/server/protocols/webadmin/webadmin-mailrepository/pom.xml
@@ -54,6 +54,15 @@
         </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
+            <artifactId>james-server-queue-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>james-server-queue-memory</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
             <artifactId>james-server-util-java8</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/e6fdeae7/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
index 0f7c752..7df346b 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
@@ -92,7 +92,7 @@ public class MailRepositoryStoreService {
         return new ClearMailRepositoryTask(getRepository(url), url);
     }
 
-    private MailRepository getRepository(String url) throws MailRepositoryStore.MailRepositoryStoreException {
+    public MailRepository getRepository(String url) throws MailRepositoryStore.MailRepositoryStoreException {
         return mailRepositoryStore.get(url)
             .orElseThrow(() -> ErrorResponder.builder()
                 .statusCode(HttpStatus.NOT_FOUND_404)

http://git-wip-us.apache.org/repos/asf/james-project/blob/e6fdeae7/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingAllMailsTask.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingAllMailsTask.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingAllMailsTask.java
new file mode 100644
index 0000000..6f75e2e
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingAllMailsTask.java
@@ -0,0 +1,115 @@
+/****************************************************************
+ * 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.webadmin.service;
+
+import java.util.Optional;
+import java.util.concurrent.atomic.AtomicLong;
+
+import javax.mail.MessagingException;
+
+import org.apache.james.mailrepository.api.MailRepositoryStore;
+import org.apache.james.task.Task;
+import org.apache.james.task.TaskExecutionDetails;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+public class ReprocessingAllMailsTask implements Task {
+
+    public static final String TYPE = "reprocessingAllTask";
+
+    public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation {
+        private final String repositoryUrl;
+        private final String targetQueue;
+        private final Optional<String> targetProcessor;
+        private final long initialCount;
+        private final AtomicLong processedCount;
+
+        public AdditionalInformation(String repositoryUrl, String targetQueue, Optional<String> targetProcessor, long initialCount) {
+            this.repositoryUrl = repositoryUrl;
+            this.targetQueue = targetQueue;
+            this.targetProcessor = targetProcessor;
+            this.initialCount = initialCount;
+            this.processedCount = new AtomicLong(0);
+        }
+
+        public String getTargetQueue() {
+            return targetQueue;
+        }
+
+        public Optional<String> getTargetProcessor() {
+            return targetProcessor;
+        }
+
+        public String getRepositoryUrl() {
+            return repositoryUrl;
+        }
+
+        public long getRemainingCount() {
+            return initialCount - processedCount.get();
+        }
+
+        public long getInitialCount() {
+            return initialCount;
+        }
+
+        @JsonIgnore
+        public void notifyProgress(String key) {
+            processedCount.incrementAndGet();
+        }
+    }
+
+    private final ReprocessingService reprocessingService;
+    private final String repositoryUrl;
+    private final String targetQueue;
+    private final Optional<String> targetProcessor;
+    private final AdditionalInformation additionalInformation;
+
+    public ReprocessingAllMailsTask(ReprocessingService reprocessingService, long repositorySize,
+                                    String repositoryUrl, String targetQueue, Optional<String> targetProcessor) {
+        this.reprocessingService = reprocessingService;
+        this.repositoryUrl = repositoryUrl;
+        this.targetQueue = targetQueue;
+        this.targetProcessor = targetProcessor;
+        this.additionalInformation = new AdditionalInformation(
+            repositoryUrl, targetQueue, targetProcessor, repositorySize);
+    }
+
+    @Override
+    public Result run() {
+        try {
+            reprocessingService.reprocessAll(repositoryUrl, targetProcessor, targetQueue, additionalInformation::notifyProgress);
+            return Result.COMPLETED;
+        } catch (MessagingException | MailRepositoryStore.MailRepositoryStoreException e) {
+            LOGGER.error("Encountered error while reprocessing repository", e);
+            return Result.PARTIAL;
+        }
+    }
+
+    @Override
+    public String type() {
+        return TYPE;
+    }
+
+    @Override
+    public Optional<TaskExecutionDetails.AdditionalInformation> details() {
+        return Optional.of(additionalInformation);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/e6fdeae7/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingOneMailTask.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingOneMailTask.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingOneMailTask.java
new file mode 100644
index 0000000..d476bfc
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingOneMailTask.java
@@ -0,0 +1,102 @@
+/****************************************************************
+ * 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.webadmin.service;
+
+import java.util.Optional;
+
+import javax.mail.MessagingException;
+
+import org.apache.james.mailrepository.api.MailRepositoryStore;
+import org.apache.james.task.Task;
+import org.apache.james.task.TaskExecutionDetails;
+
+public class ReprocessingOneMailTask implements Task {
+
+    public static final String TYPE = "reprocessingOneTask";
+
+    public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation {
+        private final String repositoryUrl;
+        private final String targetQueue;
+        private final String mailKey;
+        private final Optional<String> targetProcessor;
+
+        public AdditionalInformation(String repositoryUrl, String targetQueue, String mailKey, Optional<String> targetProcessor) {
+            this.repositoryUrl = repositoryUrl;
+            this.targetQueue = targetQueue;
+            this.mailKey = mailKey;
+            this.targetProcessor = targetProcessor;
+        }
+
+        public String getMailKey() {
+            return mailKey;
+        }
+
+        public String getTargetQueue() {
+            return targetQueue;
+        }
+
+        public Optional<String> getTargetProcessor() {
+            return targetProcessor;
+        }
+
+        public String getRepositoryUrl() {
+            return repositoryUrl;
+        }
+    }
+
+    private final ReprocessingService reprocessingService;
+    private final String repositoryUrl;
+    private final String targetQueue;
+    private final String mailKey;
+    private final Optional<String> targetProcessor;
+    private final AdditionalInformation additionalInformation;
+
+    public ReprocessingOneMailTask(ReprocessingService reprocessingService,
+                                   String repositoryUrl, String targetQueue, String mailKey, Optional<String> targetProcessor) {
+        this.reprocessingService = reprocessingService;
+        this.repositoryUrl = repositoryUrl;
+        this.targetQueue = targetQueue;
+        this.mailKey = mailKey;
+        this.targetProcessor = targetProcessor;
+        this.additionalInformation = new AdditionalInformation(repositoryUrl, targetQueue, mailKey, targetProcessor);
+    }
+
+    @Override
+    public Result run() {
+        try {
+            reprocessingService.reprocess(repositoryUrl, mailKey, targetProcessor, targetQueue);
+            return Result.COMPLETED;
+        } catch (MessagingException | MailRepositoryStore.MailRepositoryStoreException e) {
+            LOGGER.error("Encountered error while reprocessing repository", e);
+            return Result.PARTIAL;
+        }
+    }
+
+    @Override
+    public String type() {
+        return TYPE;
+    }
+
+    @Override
+    public Optional<TaskExecutionDetails.AdditionalInformation> details() {
+        return Optional.of(additionalInformation);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/e6fdeae7/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingService.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingService.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingService.java
new file mode 100644
index 0000000..8eee51b
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingService.java
@@ -0,0 +1,76 @@
+/****************************************************************
+ * 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.webadmin.service;
+
+import java.util.Optional;
+import java.util.function.Consumer;
+
+import javax.inject.Inject;
+import javax.mail.MessagingException;
+
+import org.apache.james.mailrepository.api.MailRepository;
+import org.apache.james.mailrepository.api.MailRepositoryStore;
+import org.apache.james.queue.api.MailQueue;
+import org.apache.james.queue.api.MailQueueFactory;
+import org.apache.james.util.streams.Iterators;
+import org.apache.mailet.Mail;
+
+import com.github.fge.lambdas.Throwing;
+
+public class ReprocessingService {
+
+    private final MailQueueFactory<?> mailQueueFactory;
+    private final MailRepositoryStoreService mailRepositoryStoreService;
+
+    @Inject
+    public ReprocessingService(MailQueueFactory<?> mailQueueFactory,
+                               MailRepositoryStoreService mailRepositoryStoreService) {
+        this.mailQueueFactory = mailQueueFactory;
+        this.mailRepositoryStoreService = mailRepositoryStoreService;
+    }
+
+    public void reprocessAll(String url, Optional<String> targetProcessor, String targetQueue, Consumer<String> keyListener) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
+        MailRepository repository = mailRepositoryStoreService.getRepository(url);
+        MailQueue mailQueue = getMailQueue(targetQueue);
+
+        Iterators.toStream(repository.list())
+            .peek(keyListener)
+            .forEach(Throwing.consumer(key -> reprocess(repository, mailQueue, key, targetProcessor)));
+    }
+
+    public void reprocess(String url, String key, Optional<String> targetProcessor, String targetQueue) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
+        MailRepository repository = mailRepositoryStoreService.getRepository(url);
+        MailQueue mailQueue = getMailQueue(targetQueue);
+
+        reprocess(repository, mailQueue, key, targetProcessor);
+    }
+
+    private void reprocess(MailRepository repository, MailQueue mailQueue, String key, Optional<String> targetProcessor) throws MessagingException {
+        Mail mail = repository.retrieve(key);
+        targetProcessor.ifPresent(mail::setState);
+        mailQueue.enQueue(mail);
+        repository.remove(key);
+    }
+
+    private MailQueue getMailQueue(String targetQueue) {
+        return mailQueueFactory.getQueue(targetQueue)
+            .orElseThrow(() -> new RuntimeException("Can not find queue " + targetQueue));
+    }
+}


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


[10/10] james-project git commit: JAMES-2317 Simplify code by using a multimap and copy the result of get to handle concurrency

Posted by bt...@apache.org.
JAMES-2317 Simplify code by using a multimap and copy the result of get to handle concurrency


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

Branch: refs/heads/master
Commit: 866d09e2424c813cb7f6b643556d2ef45762f1fc
Parents: f9df417
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Thu Jan 25 17:32:00 2018 +0100
Committer: benwa <bt...@linagora.com>
Committed: Fri Jan 26 08:12:21 2018 +0700

----------------------------------------------------------------------
 .../user/InMemorySubscriptionMapper.java        | 36 ++++++--------------
 1 file changed, 10 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/866d09e2/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java
index 7ef4d62..48679ea 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java
@@ -18,36 +18,31 @@
  ****************************************************************/
 package org.apache.james.mailbox.inmemory.user;
 
-import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.james.mailbox.store.transaction.NonTransactionalMapper;
 import org.apache.james.mailbox.store.user.SubscriptionMapper;
 import org.apache.james.mailbox.store.user.model.Subscription;
 
+import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ListMultimap;
+import com.google.common.collect.Multimaps;
 
 public class InMemorySubscriptionMapper extends NonTransactionalMapper implements SubscriptionMapper {
     
-    private static final int INITIAL_SIZE = 64;
-    private final Map<String, List<Subscription>> subscriptionsByUser;
+    private final ListMultimap<String, Subscription> subscriptionsByUser;
     
     public InMemorySubscriptionMapper() {
-        subscriptionsByUser = new ConcurrentHashMap<>(INITIAL_SIZE);
+        subscriptionsByUser = Multimaps.synchronizedListMultimap(ArrayListMultimap.create());
     }
 
     public synchronized void delete(Subscription subscription) {
-        final String user = subscription.getUser();
-        final List<Subscription> subscriptions = subscriptionsByUser.get(user);
-        if (subscriptions != null) {
-            subscriptions.remove(subscription);
-        }
+        subscriptionsByUser.remove(subscription.getUser(), subscription);
     }
 
     public Subscription findMailboxSubscriptionForUser(String user, String mailbox) {
-        final List<Subscription> subscriptions = subscriptionsByUser.get(user);
+        final List<Subscription> subscriptions = ImmutableList.copyOf(subscriptionsByUser.get(user));
         if (subscriptions != null) {
             return subscriptions.stream()
                 .filter(subscription -> subscription.getMailbox().equals(mailbox))
@@ -59,25 +54,14 @@ public class InMemorySubscriptionMapper extends NonTransactionalMapper implement
 
     public List<Subscription> findSubscriptionsForUser(String user) {
         final List<Subscription> subcriptions = subscriptionsByUser.get(user);
-        final List<Subscription> results;
         if (subcriptions == null) {
-            results = ImmutableList.of();
-        } else {
-            results = ImmutableList.copyOf(subcriptions);
+            return ImmutableList.of();
         }
-        return results;
+        return ImmutableList.copyOf(subcriptions);
     }
 
     public synchronized void save(Subscription subscription) {
-        final String user = subscription.getUser();
-        final List<Subscription> subscriptions = subscriptionsByUser.get(user);
-        if (subscriptions == null) {
-            final List<Subscription> newSubscriptions  = new ArrayList<>();
-            newSubscriptions.add(subscription);
-            subscriptionsByUser.put(user, newSubscriptions);
-        } else {
-            subscriptions.add(subscription);
-        }
+        subscriptionsByUser.put(subscription.getUser(), subscription);
     }
     
     public void deleteAll() {


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


[07/10] james-project git commit: JAMES-2294 Rename awaitOneMinute to awaitAtMostOneMinute

Posted by bt...@apache.org.
JAMES-2294 Rename awaitOneMinute to awaitAtMostOneMinute


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

Branch: refs/heads/master
Commit: d45cf8109b35298d1c928bc01db88ce2837e40a7
Parents: 1d14ccb
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Thu Jan 25 18:11:18 2018 +0100
Committer: benwa <bt...@linagora.com>
Committed: Fri Jan 26 08:12:21 2018 +0700

----------------------------------------------------------------------
 .../james/mailets/AddDeliveredToHeaderTest.java |  6 +-
 .../james/mailets/BounceIntegrationTest.java    | 16 ++---
 .../mailets/CommonMailetConfigurationTest.java  |  6 +-
 .../GatewayRemoteDeliveryIntegrationTest.java   | 20 +++---
 .../apache/james/mailets/MailetErrorsTest.java  | 38 +++++------
 .../mailets/NetworkMatcherIntegrationTest.java  | 34 +++++-----
 .../RecipientRewriteTableIntegrationTest.java   | 26 ++++----
 .../org/apache/james/mailets/SieveDelivery.java |  6 +-
 .../james/mailets/SmtpAuthIntegrationTest.java  | 10 +--
 .../james/mailets/configuration/Constants.java  |  2 +-
 .../crypto/SMIMEDecryptIntegrationTest.java     | 14 ++--
 .../crypto/SMIMESignIntegrationTest.java        | 10 +--
 .../james/smtp/SmtpAuthorizedAddressesTest.java | 18 +++---
 .../james/smtp/SmtpBracketEnforcementTest.java  | 10 +--
 .../smtp/SmtpIdentityVerificationTest.java      |  8 +--
 .../james/smtp/SmtpSizeLimitationTest.java      |  6 +-
 .../james/transport/mailets/AddFooterTest.java  | 10 +--
 .../mailets/AmqpForwardAttachmentTest.java      |  6 +-
 .../transport/mailets/ContactExtractorTest.java |  6 +-
 .../transport/mailets/GroupMappingTest.java     | 68 ++++++++++----------
 .../mailets/ICSAttachmentWorkflowTest.java      | 42 ++++++------
 .../transport/mailets/SpamAssassinTest.java     | 14 ++--
 .../transport/mailets/StripAttachmentTest.java  |  6 +-
 .../transport/mailets/ToRepositoryTest.java     | 28 ++++----
 24 files changed, 205 insertions(+), 205 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/AddDeliveredToHeaderTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/AddDeliveredToHeaderTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/AddDeliveredToHeaderTest.java
index e95be9e..f173489 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/AddDeliveredToHeaderTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/AddDeliveredToHeaderTest.java
@@ -26,7 +26,7 @@ import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
 import static org.apache.james.mailets.configuration.Constants.RECIPIENT;
 import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import org.apache.james.probe.DataProbe;
@@ -68,12 +68,12 @@ public class AddDeliveredToHeaderTest {
     public void receivedMessagesShouldContainDeliveredToHeaders() throws Exception {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FROM, RECIPIENT)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
         assertThat(imapMessageReader.readFirstMessageHeaders())
             .contains(AddDeliveredToHeader.DELIVERED_TO + ": " + RECIPIENT);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/BounceIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/BounceIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/BounceIntegrationTest.java
index 120f5d3..295bdd6 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/BounceIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/BounceIntegrationTest.java
@@ -25,7 +25,7 @@ import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
 import static org.apache.james.mailets.configuration.Constants.RECIPIENT;
 import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 
 import org.apache.james.MemoryJamesServerMain;
 import org.apache.james.mailets.configuration.MailetConfiguration;
@@ -91,7 +91,7 @@ public class BounceIntegrationTest {
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(BOUNCE_RECEIVER, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -116,7 +116,7 @@ public class BounceIntegrationTest {
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(BOUNCE_RECEIVER, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -141,7 +141,7 @@ public class BounceIntegrationTest {
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(BOUNCE_RECEIVER, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -167,7 +167,7 @@ public class BounceIntegrationTest {
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(BOUNCE_RECEIVER, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -193,7 +193,7 @@ public class BounceIntegrationTest {
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(BOUNCE_RECEIVER, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -218,7 +218,7 @@ public class BounceIntegrationTest {
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(BOUNCE_RECEIVER, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -243,7 +243,7 @@ public class BounceIntegrationTest {
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(POSTMASTER, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     private MailetContainer.Builder generateMailetContainerConfiguration(MailetConfiguration.Builder redirectionMailetConfiguration) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/CommonMailetConfigurationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/CommonMailetConfigurationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/CommonMailetConfigurationTest.java
index cb6a182..d45f29c 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/CommonMailetConfigurationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/CommonMailetConfigurationTest.java
@@ -26,7 +26,7 @@ import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
 import static org.apache.james.mailets.configuration.Constants.RECIPIENT;
 import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 
 import org.apache.james.probe.DataProbe;
 import org.apache.james.utils.DataProbeImpl;
@@ -70,11 +70,11 @@ public class CommonMailetConfigurationTest {
     public void simpleMailShouldBeSent() throws Exception {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FROM, RECIPIENT)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
index 5e780f1..cb4cf10 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
@@ -26,7 +26,7 @@ import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
 import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.hasSize;
@@ -70,7 +70,7 @@ public class GatewayRemoteDeliveryIntegrationTest {
 
     @Before
     public void setup() throws Exception {
-        fakeSmtp.awaitStarted(awaitOneMinute);
+        fakeSmtp.awaitStarted(awaitAtMostOneMinute);
 
         inMemoryDNSService = new InMemoryDNSService()
             .registerMxRecord(JAMES_ANOTHER_DOMAIN, fakeSmtp.getContainer().getContainerIp());
@@ -99,7 +99,7 @@ public class GatewayRemoteDeliveryIntegrationTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FROM, RECIPIENT);
 
-        awaitOneMinute.until(this::messageIsReceivedByTheSmtpServer);
+        awaitAtMostOneMinute.until(this::messageIsReceivedByTheSmtpServer);
     }
 
     @Test
@@ -118,7 +118,7 @@ public class GatewayRemoteDeliveryIntegrationTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FROM, RECIPIENT);
 
-        awaitOneMinute.until(this::messageIsReceivedByTheSmtpServer);
+        awaitAtMostOneMinute.until(this::messageIsReceivedByTheSmtpServer);
     }
 
     @Test
@@ -137,7 +137,7 @@ public class GatewayRemoteDeliveryIntegrationTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FROM, RECIPIENT);
 
-        awaitOneMinute.until(this::messageIsReceivedByTheSmtpServer);
+        awaitAtMostOneMinute.until(this::messageIsReceivedByTheSmtpServer);
     }
 
     @Test
@@ -156,7 +156,7 @@ public class GatewayRemoteDeliveryIntegrationTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FROM, RECIPIENT);
 
-        awaitOneMinute.until(this::messageIsReceivedByTheSmtpServer);
+        awaitAtMostOneMinute.until(this::messageIsReceivedByTheSmtpServer);
     }
 
     @Test
@@ -180,7 +180,7 @@ public class GatewayRemoteDeliveryIntegrationTest {
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
         assertThat(fakeSmtp.isReceived(response -> response.body("", hasSize(0))))
             .isTrue();
     }
@@ -205,7 +205,7 @@ public class GatewayRemoteDeliveryIntegrationTest {
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -234,7 +234,7 @@ public class GatewayRemoteDeliveryIntegrationTest {
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -256,7 +256,7 @@ public class GatewayRemoteDeliveryIntegrationTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FROM, RECIPIENT);
 
-        awaitOneMinute.until(this::messageIsReceivedByTheSmtpServer);
+        awaitAtMostOneMinute.until(this::messageIsReceivedByTheSmtpServer);
     }
 
     private boolean messageIsReceivedByTheSmtpServer() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/MailetErrorsTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/MailetErrorsTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/MailetErrorsTest.java
index 763f908..ffd8013 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/MailetErrorsTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/MailetErrorsTest.java
@@ -25,7 +25,7 @@ import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
 import static org.apache.james.mailets.configuration.Constants.FROM;
 import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 
 import org.apache.james.mailets.configuration.CommonProcessors;
 import org.apache.james.mailets.configuration.MailetConfiguration;
@@ -81,7 +81,7 @@ public class MailetErrorsTest {
 
         smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
 
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(ERROR_REPOSITORY) == 1);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(ERROR_REPOSITORY) == 1);
     }
 
     @Test
@@ -100,7 +100,7 @@ public class MailetErrorsTest {
 
         smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
 
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(ERROR_REPOSITORY) == 1);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(ERROR_REPOSITORY) == 1);
     }
 
     @Test
@@ -121,7 +121,7 @@ public class MailetErrorsTest {
 
         smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
 
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
 
     }
 
@@ -143,7 +143,7 @@ public class MailetErrorsTest {
 
         smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
 
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
 
     @Test
@@ -168,7 +168,7 @@ public class MailetErrorsTest {
 
         smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
 
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
 
     @Test
@@ -193,7 +193,7 @@ public class MailetErrorsTest {
 
         smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
 
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
 
     @Test
@@ -212,7 +212,7 @@ public class MailetErrorsTest {
 
         smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
 
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(ERROR_REPOSITORY) == 1);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(ERROR_REPOSITORY) == 1);
     }
 
     @Test
@@ -231,7 +231,7 @@ public class MailetErrorsTest {
 
         smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
 
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(ERROR_REPOSITORY) == 1);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(ERROR_REPOSITORY) == 1);
     }
 
     @Test
@@ -252,7 +252,7 @@ public class MailetErrorsTest {
 
         smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
 
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
 
     @Test
@@ -273,7 +273,7 @@ public class MailetErrorsTest {
 
         smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
 
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
 
     @Test
@@ -298,7 +298,7 @@ public class MailetErrorsTest {
 
         smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
 
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
 
     @Test
@@ -323,7 +323,7 @@ public class MailetErrorsTest {
 
         smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
 
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
 
     @Test
@@ -348,7 +348,7 @@ public class MailetErrorsTest {
 
         smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
 
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
 
     @Test
@@ -373,7 +373,7 @@ public class MailetErrorsTest {
 
         smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
 
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
 
     @Test
@@ -402,7 +402,7 @@ public class MailetErrorsTest {
 
         smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
 
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
     
     @Test
@@ -431,7 +431,7 @@ public class MailetErrorsTest {
 
         smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
 
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(ERROR_REPOSITORY) == 1);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(ERROR_REPOSITORY) == 1);
     }
     
     @Test
@@ -460,7 +460,7 @@ public class MailetErrorsTest {
 
         smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
 
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
     
     @Test
@@ -489,7 +489,7 @@ public class MailetErrorsTest {
 
         smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
 
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(ERROR_REPOSITORY) == 1);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(ERROR_REPOSITORY) == 1);
     }
     
     private ProcessorConfiguration.Builder errorProcessor() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/NetworkMatcherIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/NetworkMatcherIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/NetworkMatcherIntegrationTest.java
index 362f5af..e844d54 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/NetworkMatcherIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/NetworkMatcherIntegrationTest.java
@@ -24,7 +24,7 @@ import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
 import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import org.apache.james.MemoryJamesServerMain;
@@ -98,12 +98,12 @@ public class NetworkMatcherIntegrationTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, FROM)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -119,12 +119,12 @@ public class NetworkMatcherIntegrationTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, FROM)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -140,12 +140,12 @@ public class NetworkMatcherIntegrationTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, FROM)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -161,12 +161,12 @@ public class NetworkMatcherIntegrationTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, FROM)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -182,12 +182,12 @@ public class NetworkMatcherIntegrationTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, FROM)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -203,12 +203,12 @@ public class NetworkMatcherIntegrationTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, FROM)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -224,10 +224,10 @@ public class NetworkMatcherIntegrationTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, FROM)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         MailRepositoryProbeImpl repositoryProbe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
-        awaitOneMinute.until(() -> repositoryProbe.getRepositoryMailCount(DROPPED_MAILS) == 1);
+        awaitAtMostOneMinute.until(() -> repositoryProbe.getRepositoryMailCount(DROPPED_MAILS) == 1);
         assertThat(
             imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
                 .login(FROM, PASSWORD)
@@ -249,10 +249,10 @@ public class NetworkMatcherIntegrationTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, FROM)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         MailRepositoryProbeImpl repositoryProbe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
-        awaitOneMinute.until(() -> repositoryProbe.getRepositoryMailCount(DROPPED_MAILS) == 1);
+        awaitAtMostOneMinute.until(() -> repositoryProbe.getRepositoryMailCount(DROPPED_MAILS) == 1);
         assertThat(
             imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
                 .login(FROM, PASSWORD)

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RecipientRewriteTableIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RecipientRewriteTableIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RecipientRewriteTableIntegrationTest.java
index d6d1162..c176fba 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RecipientRewriteTableIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RecipientRewriteTableIntegrationTest.java
@@ -24,7 +24,7 @@ import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
 import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 
 import org.apache.james.probe.DataProbe;
 import org.apache.james.utils.DataProbeImpl;
@@ -80,16 +80,16 @@ public class RecipientRewriteTableIntegrationTest {
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FROM, RECIPIENT)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(ANY_AT_JAMES, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(OTHER_AT_JAMES, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -99,12 +99,12 @@ public class RecipientRewriteTableIntegrationTest {
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FROM, RECIPIENT)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitNoMessage(awaitOneMinute);
+            .awaitNoMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -118,16 +118,16 @@ public class RecipientRewriteTableIntegrationTest {
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FROM, RECIPIENT)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(localUser, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(OTHER_AT_JAMES, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -137,12 +137,12 @@ public class RecipientRewriteTableIntegrationTest {
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FROM, ANY_AT_JAMES)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(ANY_AT_ANOTHER_DOMAIN, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -152,12 +152,12 @@ public class RecipientRewriteTableIntegrationTest {
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FROM, ANY_AT_JAMES)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(ANY_AT_JAMES, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitNoMessage(awaitOneMinute);
+            .awaitNoMessage(awaitAtMostOneMinute);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SieveDelivery.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SieveDelivery.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SieveDelivery.java
index 1b7b524..cfe116b 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SieveDelivery.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SieveDelivery.java
@@ -26,7 +26,7 @@ import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
 import static org.apache.james.mailets.configuration.Constants.RECIPIENT;
 import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 
 import org.apache.james.mailbox.model.MailboxConstants;
 import org.apache.james.modules.MailboxProbeImpl;
@@ -79,11 +79,11 @@ public class SieveDelivery {
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FROM, RECIPIENT)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(TARGETED_MAILBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SmtpAuthIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SmtpAuthIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SmtpAuthIntegrationTest.java
index 19a3b5d..89dee69 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SmtpAuthIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SmtpAuthIntegrationTest.java
@@ -24,7 +24,7 @@ import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
 import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import org.apache.james.MemoryJamesServerMain;
@@ -104,21 +104,21 @@ public class SmtpAuthIntegrationTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, FROM)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
     public void nonAuthenticatedSmtpSessionsShouldNotBeDelivered() throws Exception {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FROM, FROM)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
-        awaitOneMinute.until(() -> repositoryProbe.getRepositoryMailCount(DROPPED_MAILS) == 1);
+        awaitAtMostOneMinute.until(() -> repositoryProbe.getRepositoryMailCount(DROPPED_MAILS) == 1);
         assertThat(
             imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
                 .login(FROM, PASSWORD)

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/Constants.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/Constants.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/Constants.java
index c4c902b..0bdfb82 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/Constants.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/Constants.java
@@ -34,7 +34,7 @@ public class Constants {
         .with()
         .pollDelay(slowPacedPollInterval)
         .await();
-    public static ConditionFactory awaitOneMinute = calmlyAwait.atMost(ONE_MINUTE);
+    public static ConditionFactory awaitAtMostOneMinute = calmlyAwait.atMost(ONE_MINUTE);
 
     public static final String DEFAULT_DOMAIN = "james.org";
     public static final String LOCALHOST_IP = "127.0.0.1";

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMEDecryptIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMEDecryptIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMEDecryptIntegrationTest.java
index cb821ef..e1b2d57 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMEDecryptIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMEDecryptIntegrationTest.java
@@ -22,7 +22,7 @@ package org.apache.james.mailets.crypto;
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
 import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import java.time.ZonedDateTime;
@@ -100,12 +100,12 @@ public class SMIMEDecryptIntegrationTest {
             .authenticate(FROM, PASSWORD)
             .sendMessageWithHeaders(FROM, FROM,
                 ClassLoaderUtils.getSystemResourceAsString("eml/crypted.eml"))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
         assertThat(imapMessageReader.readFirstMessage()).containsSequence("Crypted content");
     }
 
@@ -115,12 +115,12 @@ public class SMIMEDecryptIntegrationTest {
             .authenticate(FROM, PASSWORD)
             .sendMessageWithHeaders(FROM, FROM,
                 ClassLoaderUtils.getSystemResourceAsString("eml/crypted_with_attachment.eml"))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
         assertThat(imapMessageReader.readFirstMessage())
             .containsSequence("Crypted Content with attachment");
     }
@@ -131,12 +131,12 @@ public class SMIMEDecryptIntegrationTest {
             .authenticate(FROM, PASSWORD)
             .sendMessageWithHeaders(FROM, FROM,
                 ClassLoaderUtils.getSystemResourceAsString("eml/bad_crypted.eml"))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
         assertThat(imapMessageReader.readFirstMessage())
             .containsSequence("MIAGCSqGSIb3DQEHA6CAMIACAQAxggKpMIICpQIBADCBjDCBhjELMAkGA1UE");
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMESignIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMESignIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMESignIntegrationTest.java
index 3bf2eb6..859ee94 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMESignIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMESignIntegrationTest.java
@@ -23,7 +23,7 @@ import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
 import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import java.time.ZonedDateTime;
@@ -115,12 +115,12 @@ public class SMIMESignIntegrationTest {
         messageSender.connect(LOCALHOST_IP, SMTP_SECURE_PORT)
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, RECIPIENT)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX);
-        awaitOneMinute.until(imapMessageReader::hasAMessage);
+        awaitAtMostOneMinute.until(imapMessageReader::hasAMessage);
         assertThat(imapMessageReader.readFirstMessage())
             .containsSequence("Content-Description: S/MIME Cryptographic Signature");
     }
@@ -129,12 +129,12 @@ public class SMIMESignIntegrationTest {
     public void nonAuthenticatedMessagesShouldNotBeSigned() throws Exception {
         messageSender.connect(LOCALHOST_IP, SMTP_SECURE_PORT)
             .sendMessage(FROM, RECIPIENT)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX);
-        awaitOneMinute.until(imapMessageReader::hasAMessage);
+        awaitAtMostOneMinute.until(imapMessageReader::hasAMessage);
         assertThat(imapMessageReader.readFirstMessage())
             .doesNotContain("Content-Description: S/MIME Cryptographic Signature");
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
index db71574..bdc6e39 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
@@ -24,7 +24,7 @@ import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
 import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.hasSize;
 
@@ -64,7 +64,7 @@ public class SmtpAuthorizedAddressesTest {
 
     @Before
     public void setup() throws Exception {
-        fakeSmtp.awaitStarted(awaitOneMinute);
+        fakeSmtp.awaitStarted(awaitAtMostOneMinute);
     }
 
     private void createJamesServer(SmtpConfiguration.Builder smtpConfiguration) throws Exception {
@@ -102,9 +102,9 @@ public class SmtpAuthorizedAddressesTest {
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FROM, TO)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
-        awaitOneMinute.until(() -> fakeSmtp.isReceived(response -> response
+        awaitAtMostOneMinute.until(() -> fakeSmtp.isReceived(response -> response
             .body("", hasSize(1))
             .body("[0].from", equalTo(FROM))
             .body("[0].subject", equalTo("test"))));
@@ -118,7 +118,7 @@ public class SmtpAuthorizedAddressesTest {
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FROM, TO)
-            .awaitSentFail(awaitOneMinute);
+            .awaitSentFail(awaitAtMostOneMinute);
     }
 
     @Test
@@ -130,9 +130,9 @@ public class SmtpAuthorizedAddressesTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, TO)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
-        awaitOneMinute.until(() -> fakeSmtp.isReceived(response -> response
+        awaitAtMostOneMinute.until(() -> fakeSmtp.isReceived(response -> response
             .body("", hasSize(1))
             .body("[0].from", equalTo(FROM))
             .body("[0].subject", equalTo("test"))));
@@ -146,12 +146,12 @@ public class SmtpAuthorizedAddressesTest {
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(TO, FROM)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpBracketEnforcementTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpBracketEnforcementTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpBracketEnforcementTest.java
index aeed2bb..4f2832b 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpBracketEnforcementTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpBracketEnforcementTest.java
@@ -23,7 +23,7 @@ import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
 import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
 import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 
 import org.apache.james.mailets.TemporaryJamesServer;
 import org.apache.james.mailets.configuration.SmtpConfiguration;
@@ -70,7 +70,7 @@ public class SmtpBracketEnforcementTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .authenticate(USER, PASSWORD)
             .sendMessage(USER, USER)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
     }
 
     @Test
@@ -81,7 +81,7 @@ public class SmtpBracketEnforcementTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .authenticate(USER, PASSWORD)
             .sendMessageNoBracket(USER, USER)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
     }
 
     @Test
@@ -92,7 +92,7 @@ public class SmtpBracketEnforcementTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .authenticate(USER, PASSWORD)
             .sendMessage(USER, USER)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
     }
 
     @Test
@@ -103,6 +103,6 @@ public class SmtpBracketEnforcementTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .authenticate(USER, PASSWORD)
             .sendMessageNoBracket(USER, USER)
-            .awaitSentFail(awaitOneMinute);
+            .awaitSentFail(awaitAtMostOneMinute);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpIdentityVerificationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpIdentityVerificationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpIdentityVerificationTest.java
index 1c652d6..5a8582d 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpIdentityVerificationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpIdentityVerificationTest.java
@@ -23,7 +23,7 @@ import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
 import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
 import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 
 import org.apache.james.mailets.TemporaryJamesServer;
 import org.apache.james.mailets.configuration.SmtpConfiguration;
@@ -74,7 +74,7 @@ public class SmtpIdentityVerificationTest {
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .authenticate(USER, PASSWORD).sendMessage(USER, USER)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
     }
 
     @Test
@@ -86,7 +86,7 @@ public class SmtpIdentityVerificationTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .authenticate(ATTACKER, ATTACKER_PASSWORD)
             .sendMessage(USER, USER)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
     }
 
     @Test
@@ -98,7 +98,7 @@ public class SmtpIdentityVerificationTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .authenticate(ATTACKER, ATTACKER_PASSWORD)
             .sendMessage(USER, USER)
-            .awaitSentFail(awaitOneMinute);
+            .awaitSentFail(awaitAtMostOneMinute);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpSizeLimitationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpSizeLimitationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpSizeLimitationTest.java
index ff8bed4..28b31ea 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpSizeLimitationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpSizeLimitationTest.java
@@ -23,7 +23,7 @@ import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
 import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
 import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 
 import org.apache.james.mailets.TemporaryJamesServer;
 import org.apache.james.mailets.configuration.SmtpConfiguration;
@@ -73,7 +73,7 @@ public class SmtpSizeLimitationTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .authenticate(USER, PASSWORD)
             .sendMessageWithHeaders(USER, USER, Strings.repeat("Long message", 1024))
-            .awaitSentFail(awaitOneMinute);
+            .awaitSentFail(awaitAtMostOneMinute);
     }
 
     @Test
@@ -85,6 +85,6 @@ public class SmtpSizeLimitationTest {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .authenticate(USER, PASSWORD)
             .sendMessageWithHeaders(USER, USER,"Short message")
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AddFooterTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AddFooterTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AddFooterTest.java
index 5caac02..3e35051 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AddFooterTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AddFooterTest.java
@@ -26,7 +26,7 @@ import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
 import static org.apache.james.mailets.configuration.Constants.RECIPIENT;
 import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import org.apache.james.core.builder.MimeMessageBuilder;
@@ -91,12 +91,12 @@ public class AddFooterTest {
                     .setSubject("test"))
                 .sender(FROM)
                 .recipient(RECIPIENT))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
         String processedMessage = imapMessageReader.readFirstMessage();
         assertThat(processedMessage).contains(MATCH_ME);
     }
@@ -116,12 +116,12 @@ public class AddFooterTest {
                     .setSubject("test"))
                 .sender(FROM)
                 .recipient(RECIPIENT))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
         String processedMessage = imapMessageReader.readFirstMessage();
         assertThat(processedMessage).contains(MATCH_ME);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
index dd35211..b67d4eb 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
@@ -24,7 +24,7 @@ import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
 import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import java.nio.charset.StandardCharsets;
@@ -131,12 +131,12 @@ public class AmqpForwardAttachmentTest {
                 .mimeMessage(message)
                 .sender(FROM)
                 .recipient(RECIPIENT))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
 
         assertThat(amqpRule.readContentAsBytes()).contains(TEST_ATTACHMENT_CONTENT);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
index 06cfa0d..ba6bda2 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
@@ -24,7 +24,7 @@ import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
 import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.Optional;
@@ -126,12 +126,12 @@ public class ContactExtractorTest {
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipients(TO, TO2, CC, CC2, BCC, BCC2))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(TO, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
 
         Optional<String> actual = amqpRule.readContent();
         assertThat(actual).isNotEmpty();

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
index 1ccaf61..d1c71a8 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
@@ -25,7 +25,7 @@ import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
 import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.hamcrest.Matchers.equalTo;
 
@@ -104,7 +104,7 @@ public class GroupMappingTest {
             .withMailetContainer(mailetContainer)
             .build(temporaryFolder);
 
-        fakeSmtp.awaitStarted(awaitOneMinute);
+        fakeSmtp.awaitStarted(awaitAtMostOneMinute);
 
         dataProbe = jamesServer.getProbe(DataProbeImpl.class);
         dataProbe.addDomain(DOMAIN1);
@@ -143,12 +143,12 @@ public class GroupMappingTest {
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(USER_DOMAIN1, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
         assertThat(imapMessageReader.readFirstMessage()).contains(MESSAGE_CONTENT);
     }
 
@@ -161,12 +161,12 @@ public class GroupMappingTest {
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(USER_DOMAIN2, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
         assertThat(imapMessageReader.readFirstMessage()).contains(MESSAGE_CONTENT);
     }
 
@@ -181,16 +181,16 @@ public class GroupMappingTest {
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(USER_DOMAIN1, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(USER_DOMAIN2, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -204,12 +204,12 @@ public class GroupMappingTest {
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(USER_DOMAIN2, PASSWORD)
             .select(IMAPMessageReader.INBOX);
-        awaitOneMinute.until(imapMessageReader::hasAMessage);
+        awaitAtMostOneMinute.until(imapMessageReader::hasAMessage);
         assertThat(imapMessageReader.readFirstMessage()).contains(MESSAGE_CONTENT);
     }
 
@@ -226,12 +226,12 @@ public class GroupMappingTest {
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(USER_DOMAIN1, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -243,12 +243,12 @@ public class GroupMappingTest {
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipients(GROUP_ON_DOMAIN1, USER_DOMAIN1))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(USER_DOMAIN1, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -264,17 +264,17 @@ public class GroupMappingTest {
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(USER_DOMAIN2, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(USER_DOMAIN1, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -292,17 +292,17 @@ public class GroupMappingTest {
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1))
-            .awaitSentFail(awaitOneMinute);
+            .awaitSentFail(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(USER_DOMAIN1, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitNoMessage(awaitOneMinute);
+            .awaitNoMessage(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(USER_DOMAIN1, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitNoMessage(awaitOneMinute);
+            .awaitNoMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -316,12 +316,12 @@ public class GroupMappingTest {
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(USER_DOMAIN2, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -335,12 +335,12 @@ public class GroupMappingTest {
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(USER_DOMAIN1, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitNoMessage(awaitOneMinute);
+            .awaitNoMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -354,12 +354,12 @@ public class GroupMappingTest {
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient((GROUP_ON_DOMAIN1)))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(USER_DOMAIN2, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -373,12 +373,12 @@ public class GroupMappingTest {
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(groupWithSlash))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(USER_DOMAIN1, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -393,12 +393,12 @@ public class GroupMappingTest {
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(userWithSlash, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -412,12 +412,12 @@ public class GroupMappingTest {
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(USER_DOMAIN1, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
     }
 
     @Test
@@ -430,7 +430,7 @@ public class GroupMappingTest {
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         fakeSmtp.isReceived(response -> response
             .body("[0].from", equalTo(SENDER))

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
index a7d0a5e..d3e68e6 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
@@ -24,7 +24,7 @@ import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
 import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import java.nio.charset.StandardCharsets;
@@ -559,12 +559,12 @@ public class ICSAttachmentWorkflowTest {
                 .mimeMessage(messageWithoutICSAttached)
                 .sender(FROM)
                 .recipient(RECIPIENT))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
 
         assertThat(amqpRule.readContent()).isEmpty();
     }
@@ -576,12 +576,12 @@ public class ICSAttachmentWorkflowTest {
                 .mimeMessage(messageWithICSAttached)
                 .sender(FROM)
                 .recipient(RECIPIENT))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
 
         Optional<String> content = amqpRule.readContent();
         assertThat(content).isPresent();
@@ -609,12 +609,12 @@ public class ICSAttachmentWorkflowTest {
                 .mimeMessage(messageWithoutICSAttached)
                 .sender(FROM)
                 .recipient(RECIPIENT))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
 
         String receivedHeaders = imapMessageReader.readFirstMessageHeaders();
         assertThat(receivedHeaders).doesNotContain("X-MEETING-UID");
@@ -631,12 +631,12 @@ public class ICSAttachmentWorkflowTest {
                 .mimeMessage(messageWithICSAttached)
                 .sender(FROM)
                 .recipient(RECIPIENT))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
 
         String receivedHeaders = imapMessageReader.readFirstMessageHeaders();
         assertThat(receivedHeaders).contains("X-MEETING-UID: " + ICS_UID);
@@ -652,12 +652,12 @@ public class ICSAttachmentWorkflowTest {
                 .mimeMessage(messageWithICSBase64Attached)
                 .sender(FROM)
                 .recipient(RECIPIENT))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
 
         String receivedHeaders = imapMessageReader.readFirstMessageHeaders();
         assertThat(receivedHeaders).contains("X-MEETING-UID: " + ICS_BASE64_UID);
@@ -673,12 +673,12 @@ public class ICSAttachmentWorkflowTest {
                 .mimeMessage(messageWithICSBase64Attached)
                 .sender(FROM)
                 .recipient(RECIPIENT))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
 
         Optional<String> content = amqpRule.readContent();
         assertThat(content).isPresent();
@@ -699,12 +699,12 @@ public class ICSAttachmentWorkflowTest {
                 .mimeMessage(yahooInvitationMessage)
                 .sender(FROM)
                 .recipient(RECIPIENT))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
 
         Optional<String> content = amqpRule.readContent();
         assertThat(content).isPresent();
@@ -726,12 +726,12 @@ public class ICSAttachmentWorkflowTest {
                 .mimeMessage(messageWithThreeICSAttached)
                 .sender(FROM)
                 .recipient(RECIPIENT))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
 
         String receivedHeaders = imapMessageReader.readFirstMessageHeaders();
         assertThat(receivedHeaders).contains("X-MEETING-UID: " + ICS_UID);
@@ -747,12 +747,12 @@ public class ICSAttachmentWorkflowTest {
                 .mimeMessage(messageWithThreeICSAttached)
                 .sender(FROM)
                 .recipient(RECIPIENT))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
 
         Optional<String> content1 = amqpRule.readContent();
         assertThat(content1).isPresent();
@@ -786,12 +786,12 @@ public class ICSAttachmentWorkflowTest {
                 .mimeMessage(calendarMessage)
                 .sender(FROM)
                 .recipient(RECIPIENT))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
         assertThat(imapMessageReader.readFirstMessage())
             .containsSequence("Content-Type: multipart/mixed", "Content-Disposition: attachment");
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
index f97bf1d..bd1d74b 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
@@ -26,7 +26,7 @@ import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
 import static org.apache.james.mailets.configuration.Constants.RECIPIENT;
 import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import javax.mail.MessagingException;
@@ -106,12 +106,12 @@ public class SpamAssassinTest {
     public void spamAssassinShouldAppendNewHeaderOnMessage() throws Exception {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(mailWithContent("This is the content"))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         messageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
 
         assertThat(messageReader.readFirstMessageHeaders())
             .contains(
@@ -123,12 +123,12 @@ public class SpamAssassinTest {
     public void spamAssassinShouldAppendNewHeaderWhichDetectIsSpamWhenSpamMessage() throws Exception {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(mailWithContent(SPAM_CONTENT))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         messageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
 
         String receivedHeaders = messageReader.readFirstMessageHeaders();
         assertThat(receivedHeaders).contains(SpamAssassinInvoker.FLAG_MAIL_ATTRIBUTE_NAME + ": YES");
@@ -139,12 +139,12 @@ public class SpamAssassinTest {
     public void spamAssassinShouldAppendNewHeaderWhichNoWhenNonSpamMessage() throws Exception {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(mailWithContent("This is the content"))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         messageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
 
         String receivedHeaders = messageReader.readFirstMessageHeaders();
         assertThat(receivedHeaders).contains(SpamAssassinInvoker.FLAG_MAIL_ATTRIBUTE_NAME + ": NO");

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
index 967ce53..9e35168 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
@@ -24,7 +24,7 @@ import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
 import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import javax.mail.internet.MimeMessage;
@@ -123,12 +123,12 @@ public class StripAttachmentTest {
                 .mimeMessage(message)
                 .sender(FROM)
                 .recipient(RECIPIENT))
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute);
+            .awaitMessage(awaitAtMostOneMinute);
         assertThat(imapMessageReader.readFirstMessage()).contains("Matching attachment");
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d45cf810/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToRepositoryTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToRepositoryTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToRepositoryTest.java
index 3f821fa..4a4edb5 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToRepositoryTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToRepositoryTest.java
@@ -25,7 +25,7 @@ import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
 import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
-import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
@@ -99,22 +99,22 @@ public class ToRepositoryTest {
     public void incomingShouldBeStoredInProcessorByDefault() throws Exception {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(RECIPIENT, RECIPIENT)
-            .awaitSent(awaitOneMinute)
+            .awaitSent(awaitAtMostOneMinute)
             .sendMessage(RECIPIENT, RECIPIENT)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 2);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 2);
     }
 
     @Test
     public void userShouldBeAbleToAccessReprocessedMails() throws Exception {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(RECIPIENT, RECIPIENT)
-            .awaitSent(awaitOneMinute)
+            .awaitSent(awaitAtMostOneMinute)
             .sendMessage(RECIPIENT, RECIPIENT)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 2);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 2);
 
         with()
             .spec(webAdminAPI)
@@ -129,20 +129,20 @@ public class ToRepositoryTest {
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute)
+            .awaitMessage(awaitAtMostOneMinute)
             .hasMessageCount(2);
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 0);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 0);
     }
 
     @Test
     public void userShouldBeAbleToAccessReprocessedMail() throws Exception {
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(RECIPIENT, RECIPIENT)
-            .awaitSent(awaitOneMinute)
+            .awaitSent(awaitAtMostOneMinute)
             .sendMessage(RECIPIENT, RECIPIENT)
-            .awaitSent(awaitOneMinute);
+            .awaitSent(awaitAtMostOneMinute);
 
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 2);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 2);
         String key = probe.listMailKeys(CUSTOM_REPOSITORY).get(0);
 
         with()
@@ -158,8 +158,8 @@ public class ToRepositoryTest {
         imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
-            .awaitMessage(awaitOneMinute)
+            .awaitMessage(awaitAtMostOneMinute)
             .hasMessageCount(1);
-        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
+        awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
 }


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


[02/10] james-project git commit: JAMES-2294 Routes for mail reprocessing

Posted by bt...@apache.org.
JAMES-2294 Routes for mail reprocessing


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

Branch: refs/heads/master
Commit: c73d5de8df02bc638dbcfe5916e63163dd3b5111
Parents: e6fdeae
Author: benwa <bt...@linagora.com>
Authored: Thu Jan 25 10:57:41 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Fri Jan 26 08:12:05 2018 +0700

----------------------------------------------------------------------
 .../webadmin/routes/MailRepositoriesRoutes.java | 139 +++-
 .../routes/MailRepositoriesRoutesTest.java      | 646 ++++++++++++++++++-
 2 files changed, 755 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/c73d5de8/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
index 1078206..a90323b 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.webadmin.routes;
 
+import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
@@ -32,6 +33,7 @@ import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 
 import org.apache.james.mailrepository.api.MailRepositoryStore;
+import org.apache.james.queue.api.MailQueueFactory;
 import org.apache.james.task.Task;
 import org.apache.james.task.TaskId;
 import org.apache.james.task.TaskManager;
@@ -42,6 +44,9 @@ import org.apache.james.webadmin.Routes;
 import org.apache.james.webadmin.dto.ExtendedMailRepositoryResponse;
 import org.apache.james.webadmin.dto.TaskIdDto;
 import org.apache.james.webadmin.service.MailRepositoryStoreService;
+import org.apache.james.webadmin.service.ReprocessingAllMailsTask;
+import org.apache.james.webadmin.service.ReprocessingOneMailTask;
+import org.apache.james.webadmin.service.ReprocessingService;
 import org.apache.james.webadmin.utils.ErrorResponder;
 import org.apache.james.webadmin.utils.ErrorResponder.ErrorType;
 import org.apache.james.webadmin.utils.JsonTransformer;
@@ -55,6 +60,7 @@ import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
+import io.swagger.jaxrs.PATCH;
 import spark.Request;
 import spark.Service;
 
@@ -67,13 +73,15 @@ public class MailRepositoriesRoutes implements Routes {
 
     private final JsonTransformer jsonTransformer;
     private final MailRepositoryStoreService repositoryStoreService;
+    private final ReprocessingService reprocessingService;
     private final TaskManager taskManager;
     private Service service;
 
     @Inject
-    public MailRepositoriesRoutes(MailRepositoryStoreService repositoryStoreService, JsonTransformer jsonTransformer, TaskManager taskManager) {
+    public MailRepositoriesRoutes(MailRepositoryStoreService repositoryStoreService, JsonTransformer jsonTransformer, ReprocessingService reprocessingService, TaskManager taskManager) {
         this.repositoryStoreService = repositoryStoreService;
         this.jsonTransformer = jsonTransformer;
+        this.reprocessingService = reprocessingService;
         this.taskManager = taskManager;
     }
 
@@ -92,6 +100,10 @@ public class MailRepositoriesRoutes implements Routes {
         defineDeleteMail();
 
         defineDeleteAll();
+
+        defineReprocessAll();
+
+        defineReprocessOne();
     }
 
     @GET
@@ -168,7 +180,7 @@ public class MailRepositoriesRoutes implements Routes {
     })
     public void defineGetMail() {
         service.get(MAIL_REPOSITORIES + "/:encodedUrl/mails/:mailKey", (request, response) -> {
-            String url = URLDecoder.decode(request.params("encodedUrl"), StandardCharsets.UTF_8.displayName());
+            String url = decodedRepositoryUrl(request);
             String mailKey = request.params("mailKey");
             try {
                 return repositoryStoreService.retrieveMail(url, mailKey)
@@ -228,7 +240,7 @@ public class MailRepositoriesRoutes implements Routes {
     })
     public void defineDeleteMail() {
         service.delete(MAIL_REPOSITORIES + "/:encodedUrl/mails/:mailKey", (request, response) -> {
-            String url = URLDecoder.decode(request.params("encodedUrl"), StandardCharsets.UTF_8.displayName());
+            String url = decodedRepositoryUrl(request);
             String mailKey = request.params("mailKey");
             try {
                 response.status(HttpStatus.NO_CONTENT_204);
@@ -255,7 +267,7 @@ public class MailRepositoriesRoutes implements Routes {
     })
     public void defineDeleteAll() {
         service.delete(MAIL_REPOSITORIES + "/:encodedUrl/mails", (request, response) -> {
-            String url = URLDecoder.decode(request.params("encodedUrl"), StandardCharsets.UTF_8.displayName());
+            String url = decodedRepositoryUrl(request);
             try {
                 Task task = repositoryStoreService.createClearMailRepositoryTask(url);
                 TaskId taskId = taskManager.submit(task);
@@ -271,6 +283,125 @@ public class MailRepositoriesRoutes implements Routes {
         }, jsonTransformer);
     }
 
+    @PATCH
+    @Path("/{encodedUrl}/mails")
+    @ApiOperation(value = "Reprocessing all mails in that mailRepository")
+    @ApiImplicitParams({
+        @ApiImplicitParam(
+            required = true,
+            name = "action",
+            paramType = "query parameter",
+            dataType = "String",
+            defaultValue = "none",
+            example = "?action=reprocess",
+            value = "Compulsory. Only supported value is `reprocess`"),
+        @ApiImplicitParam(
+            required = false,
+            name = "queue",
+            paramType = "query parameter",
+            dataType = "String",
+            defaultValue = "spool",
+            example = "?queue=outgoing",
+            value = "Indicates in which queue the mails stored in the repository should be re-enqueued"),
+        @ApiImplicitParam(
+            required = false,
+            paramType = "query parameter",
+            name = "processor",
+            dataType = "String",
+            defaultValue = "absent",
+            example = "?processor=transport",
+            value = "If present, modifies the state property of the mail to allow their processing by a specific mail container processor.")
+    })
+    @ApiResponses(value = {
+        @ApiResponse(code = HttpStatus.CREATED_201, message = "Task is created", response = TaskIdDto.class),
+        @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "Internal server error - Something went bad on the server side."),
+        @ApiResponse(code = HttpStatus.BAD_REQUEST_400, message = "Bad request - unknown action")
+    })
+    public void defineReprocessAll() {
+        service.patch(MAIL_REPOSITORIES + "/:encodedUrl/mails", (request, response) -> {
+            Task task = toAllMailReprocessingTask(request);
+            TaskId taskId = taskManager.submit(task);
+            return TaskIdDto.respond(response, taskId);
+        }, jsonTransformer);
+    }
+
+    private Task toAllMailReprocessingTask(Request request) throws UnsupportedEncodingException, MailRepositoryStore.MailRepositoryStoreException, MessagingException {
+        String url = decodedRepositoryUrl(request);
+        enforceActionParameter(request);
+        Optional<String> targetProcessor = Optional.ofNullable(request.queryParams("processor"));
+        String targetQueue = Optional.ofNullable(request.queryParams("queue")).orElse(MailQueueFactory.SPOOL);
+
+        Long repositorySize = repositoryStoreService.size(url).orElse(0L);
+        return new ReprocessingAllMailsTask(reprocessingService, repositorySize, url, targetQueue, targetProcessor);
+    }
+
+    @PATCH
+    @Path("/{encodedUrl}/mails/{key}")
+    @ApiOperation(value = "Reprocessing a single mail in that mailRepository")
+    @ApiImplicitParams({
+        @ApiImplicitParam(
+            required = true,
+            name = "action",
+            paramType = "query parameter",
+            dataType = "String",
+            defaultValue = "none",
+            example = "?action=reprocess",
+            value = "Compulsory. Only supported value is `reprocess`"),
+        @ApiImplicitParam(
+            required = false,
+            name = "queue",
+            paramType = "query parameter",
+            dataType = "String",
+            defaultValue = "spool",
+            example = "?queue=outgoing",
+            value = "Indicates in which queue the mails stored in the repository should be re-enqueued"),
+        @ApiImplicitParam(
+            required = false,
+            paramType = "query parameter",
+            name = "processor",
+            dataType = "String",
+            defaultValue = "absent",
+            example = "?processor=transport",
+            value = "If present, modifies the state property of the mail to allow their processing by a specific mail container processor.")
+    })
+    @ApiResponses(value = {
+        @ApiResponse(code = HttpStatus.CREATED_201, message = "Task is created", response = TaskIdDto.class),
+        @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "Internal server error - Something went bad on the server side."),
+        @ApiResponse(code = HttpStatus.BAD_REQUEST_400, message = "Bad request - unknown action")
+    })
+    public void defineReprocessOne() {
+        service.patch(MAIL_REPOSITORIES + "/:encodedUrl/mails/:key", (request, response) -> {
+            Task task = toOneMailReprocessingTask(request);
+            TaskId taskId = taskManager.submit(task);
+            return TaskIdDto.respond(response, taskId);
+        }, jsonTransformer);
+    }
+
+    private Task toOneMailReprocessingTask(Request request) throws UnsupportedEncodingException {
+        String url = decodedRepositoryUrl(request);
+        String key = request.params("key");
+        enforceActionParameter(request);
+        Optional<String> targetProcessor = Optional.ofNullable(request.queryParams("processor"));
+        String targetQueue = Optional.ofNullable(request.queryParams("queue")).orElse(MailQueueFactory.SPOOL);
+
+        return new ReprocessingOneMailTask(reprocessingService, url, targetQueue, key, targetProcessor);
+    }
+
+    private void enforceActionParameter(Request request) {
+        String action = request.queryParams("action");
+        if (!"reprocess".equals(action)) {
+            throw ErrorResponder.builder()
+                .statusCode(HttpStatus.BAD_REQUEST_400)
+                .type(ErrorType.INVALID_ARGUMENT)
+                .message("action query parameter is mandatory. The only supported value is `reprocess`")
+                .haltError();
+        }
+    }
+
+    private String decodedRepositoryUrl(Request request) throws UnsupportedEncodingException {
+        return URLDecoder.decode(request.params("encodedUrl"), StandardCharsets.UTF_8.displayName());
+    }
+
     private Optional<Integer> assertPositiveInteger(Request request, String parameterName) {
         try {
             return Optional.ofNullable(request.queryParams(parameterName))

http://git-wip-us.apache.org/repos/asf/james-project/blob/c73d5de8/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 cbad2b4..a6dd4de 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
@@ -41,13 +41,21 @@ import java.util.Optional;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.mailrepository.memory.MemoryMailRepository;
 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.task.MemoryTaskManager;
 import org.apache.james.webadmin.WebAdminServer;
 import org.apache.james.webadmin.WebAdminUtils;
 import org.apache.james.webadmin.service.ClearMailRepositoryTask;
 import org.apache.james.webadmin.service.MailRepositoryStoreService;
+import org.apache.james.webadmin.service.ReprocessingAllMailsTask;
+import org.apache.james.webadmin.service.ReprocessingOneMailTask;
+import org.apache.james.webadmin.service.ReprocessingService;
 import org.apache.james.webadmin.utils.ErrorResponder;
 import org.apache.james.webadmin.utils.JsonTransformer;
+import org.apache.mailet.Mail;
 import org.apache.mailet.base.test.FakeMail;
 import org.eclipse.jetty.http.HttpStatus;
 import org.junit.After;
@@ -63,9 +71,14 @@ public class MailRepositoriesRoutesTest {
     public static final String URL_MY_REPO = "url://myRepo";
     public static final String URL_ESCAPED_MY_REPO = "url%3A%2F%2FmyRepo";
     public static final String MY_REPO_MAILS = "url%3A%2F%2FmyRepo/mails";
+    public static final String CUSTOM_QUEUE = "customQueue";
+    public static final String NAME_1 = "name1";
+    public static final String NAME_2 = "name2";
     private WebAdminServer webAdminServer;
     private MailRepositoryStore mailRepositoryStore;
     private MemoryMailRepository mailRepository;
+    private ManageableMailQueue spoolQueue;
+    private ManageableMailQueue customQueue;
 
     @Before
     public void setUp() throws Exception {
@@ -74,10 +87,18 @@ public class MailRepositoriesRoutesTest {
 
         MemoryTaskManager taskManager = new MemoryTaskManager();
         JsonTransformer jsonTransformer = new JsonTransformer();
+        MailQueueFactory<ManageableMailQueue> queueFactory = new MemoryMailQueueFactory(new RawMailQueueItemDecoratorFactory());
+        spoolQueue = queueFactory.createQueue(MailQueueFactory.SPOOL);
+        customQueue = queueFactory.createQueue(CUSTOM_QUEUE);
+
+        MailRepositoryStoreService repositoryStoreService = new MailRepositoryStoreService(mailRepositoryStore);
+
+        ReprocessingService reprocessingService = new ReprocessingService(queueFactory, repositoryStoreService);
+
         webAdminServer = WebAdminUtils.createWebAdminServer(
                 new NoopMetricFactory(),
-                new MailRepositoriesRoutes(new MailRepositoryStoreService(mailRepositoryStore),
-                    jsonTransformer, taskManager),
+                new MailRepositoriesRoutes(repositoryStoreService,
+                    jsonTransformer, reprocessingService, taskManager),
             new TasksRoutes(taskManager, jsonTransformer));
         webAdminServer.configure(NO_CONFIGURATION);
         webAdminServer.await();
@@ -289,10 +310,10 @@ public class MailRepositoriesRoutesTest {
         when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         mailRepository.store(FakeMail.builder()
-            .name("name1")
+            .name(NAME_1)
             .build());
         mailRepository.store(FakeMail.builder()
-            .name("name2")
+            .name(NAME_2)
             .build());
 
         when()
@@ -300,7 +321,7 @@ public class MailRepositoriesRoutesTest {
         .then()
             .statusCode(HttpStatus.OK_200)
             .body("", hasSize(2))
-            .body("mailKey", containsInAnyOrder("name1", "name2"));
+            .body("mailKey", containsInAnyOrder(NAME_1, NAME_2));
     }
 
     @Test
@@ -354,7 +375,7 @@ public class MailRepositoriesRoutesTest {
         when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         mailRepository.store(FakeMail.builder()
-            .name("name1")
+            .name(NAME_1)
             .build());
 
         given()
@@ -369,7 +390,7 @@ public class MailRepositoriesRoutesTest {
     public void retrievingAMailShouldDisplayItsInformation() throws Exception {
         when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
-        String name = "name1";
+        String name = NAME_1;
         String sender = "sender@domain";
         String recipient1 = "recipient1@domain";
         String recipient2 = "recipient2@domain";
@@ -398,16 +419,15 @@ public class MailRepositoriesRoutesTest {
     public void retrievingAMailShouldNotFailWhenOnlyNameProperty() throws Exception {
         when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
-        String name = "name1";
         mailRepository.store(FakeMail.builder()
-            .name(name)
+            .name(NAME_1)
             .build());
 
         when()
-            .get(URL_ESCAPED_MY_REPO + "/mails/" + name)
+            .get(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1)
         .then()
             .statusCode(HttpStatus.OK_200)
-            .body("name", is(name))
+            .body("name", is(NAME_1))
             .body("sender", isEmptyOrNullString())
             .body("state", isEmptyOrNullString())
             .body("error", isEmptyOrNullString())
@@ -432,37 +452,34 @@ public class MailRepositoriesRoutesTest {
     public void deletingAMailShouldRemoveIt() throws Exception {
         when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
-        String name1 = "name1";
-        String name2 = "name2";
         mailRepository.store(FakeMail.builder()
-            .name(name1)
+            .name(NAME_1)
             .build());
         mailRepository.store(FakeMail.builder()
-            .name(name2)
+            .name(NAME_2)
             .build());
 
         given()
-            .delete(URL_ESCAPED_MY_REPO + "/mails/" + name1);
+            .delete(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1);
 
         when()
             .get(URL_ESCAPED_MY_REPO + "/mails")
             .then()
             .statusCode(HttpStatus.OK_200)
             .body("", hasSize(1))
-            .body("mailKey", contains(name2));
+            .body("mailKey", contains(NAME_2));
     }
 
     @Test
     public void deletingAMailShouldReturnOkWhenExist() throws Exception {
         when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
-        String name1 = "name1";
         mailRepository.store(FakeMail.builder()
-            .name(name1)
+            .name(NAME_1)
             .build());
 
         when()
-            .delete(URL_ESCAPED_MY_REPO + "/mails/" + name1)
+            .delete(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1)
         .then()
             .statusCode(HttpStatus.NO_CONTENT_204);
     }
@@ -493,13 +510,11 @@ public class MailRepositoriesRoutesTest {
     public void clearTaskShouldHaveDetails() throws Exception {
         when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
-        String name1 = "name1";
-        String name2 = "name2";
         mailRepository.store(FakeMail.builder()
-            .name(name1)
+            .name(NAME_1)
             .build());
         mailRepository.store(FakeMail.builder()
-            .name(name2)
+            .name(NAME_2)
             .build());
 
         String taskId = with()
@@ -528,10 +543,10 @@ public class MailRepositoriesRoutesTest {
         when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         mailRepository.store(FakeMail.builder()
-            .name("name1")
+            .name(NAME_1)
             .build());
         mailRepository.store(FakeMail.builder()
-            .name("name2")
+            .name(NAME_2)
             .build());
 
         String taskId = with()
@@ -576,4 +591,583 @@ public class MailRepositoriesRoutesTest {
             .body("message", is(URL_MY_REPO + "does not exist"));
     }
 
+    @Test
+    public void reprocessingAllTaskShouldCreateATask() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+
+        when()
+            .patch(URL_ESCAPED_MY_REPO + "/mails?action=reprocess")
+        .then()
+            .statusCode(HttpStatus.CREATED_201)
+            .header("Location", is(notNullValue()))
+            .body("taskId", is(notNullValue()));
+    }
+
+    @Test
+    public void reprocessingAllTaskShouldRejectInvalidActions() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+
+        when()
+            .patch(URL_ESCAPED_MY_REPO + "/mails?action=invalid")
+        .then()
+            .statusCode(HttpStatus.BAD_REQUEST_400)
+            .body("statusCode", is(400))
+            .body("type", is(ErrorResponder.ErrorType.INVALID_ARGUMENT.getType()))
+            .body("message", is("action query parameter is mandatory. The only supported value is `reprocess`"));
+    }
+
+    @Test
+    public void reprocessingAllTaskShouldRequireAction() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+
+        when()
+            .patch(URL_ESCAPED_MY_REPO + "/mails")
+        .then()
+            .statusCode(HttpStatus.BAD_REQUEST_400)
+            .body("statusCode", is(400))
+            .body("type", is(ErrorResponder.ErrorType.INVALID_ARGUMENT.getType()))
+            .body("message", is("action query parameter is mandatory. The only supported value is `reprocess`"));
+    }
+
+    @Test
+    public void reprocessingAllTaskShouldIncludeDetailsWhenDefaultValues() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_1)
+            .build());
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_2)
+            .build());
+
+        String taskId = with()
+            .patch(URL_ESCAPED_MY_REPO + "/mails?action=reprocess")
+            .jsonPath()
+            .get("taskId");
+
+        given()
+            .basePath(TasksRoutes.BASE)
+        .when()
+            .get(taskId + "/await")
+        .then()
+            .body("status", is("completed"))
+            .body("taskId", is(notNullValue()))
+            .body("type", is(ReprocessingAllMailsTask.TYPE))
+            .body("additionalInformation.repositoryUrl", is(URL_MY_REPO))
+            .body("additionalInformation.initialCount", is(2))
+            .body("additionalInformation.remainingCount", is(0))
+            .body("additionalInformation.targetProcessor", isEmptyOrNullString())
+            .body("additionalInformation.targetQueue", is(MailQueueFactory.SPOOL))
+            .body("startedDate", is(notNullValue()))
+            .body("submitDate", is(notNullValue()))
+            .body("completedDate", is(notNullValue()));
+    }
+
+    @Test
+    public void reprocessingAllTaskShouldIncludeDetails() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+        String name1 = "name1";
+        String name2 = "name2";
+        mailRepository.store(FakeMail.builder()
+            .name(name1)
+            .build());
+        mailRepository.store(FakeMail.builder()
+            .name(name2)
+            .build());
+
+        String transport = "transport";
+        String taskId = with()
+            .patch(URL_ESCAPED_MY_REPO + "/mails?action=reprocess" +
+                "&queue=" + CUSTOM_QUEUE +
+                "&processor=" + transport)
+            .jsonPath()
+            .get("taskId");
+
+        given()
+            .basePath(TasksRoutes.BASE)
+        .when()
+            .get(taskId + "/await")
+        .then()
+            .body("status", is("completed"))
+            .body("taskId", is(notNullValue()))
+            .body("type", is(ReprocessingAllMailsTask.TYPE))
+            .body("additionalInformation.repositoryUrl", is(URL_MY_REPO))
+            .body("additionalInformation.initialCount", is(2))
+            .body("additionalInformation.remainingCount", is(0))
+            .body("additionalInformation.targetProcessor", is(transport))
+            .body("additionalInformation.targetQueue", is(CUSTOM_QUEUE))
+            .body("startedDate", is(notNullValue()))
+            .body("submitDate", is(notNullValue()))
+            .body("completedDate", is(notNullValue()));
+    }
+
+    @Test
+    public void reprocessingAllTaskShouldClearMailRepository() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+        String name1 = "name1";
+        String name2 = "name2";
+        mailRepository.store(FakeMail.builder()
+            .name(name1)
+            .build());
+        mailRepository.store(FakeMail.builder()
+            .name(name2)
+            .build());
+
+        String transport = "transport";
+        String taskId = with()
+            .patch(URL_ESCAPED_MY_REPO + "/mails?action=reprocess" +
+                "&queue=" + CUSTOM_QUEUE +
+                "&processor=" + transport)
+            .jsonPath()
+            .get("taskId");
+
+        with()
+            .basePath(TasksRoutes.BASE)
+            .get(taskId + "/await");
+
+        assertThat(mailRepository.list()).isEmpty();
+    }
+
+    @Test
+    public void reprocessingAllTaskShouldEnqueueMailsOnDefaultQueue() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_1)
+            .build());
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_2)
+            .build());
+
+        String taskId = with()
+            .patch(URL_ESCAPED_MY_REPO + "/mails?action=reprocess")
+            .jsonPath()
+            .get("taskId");
+
+        with()
+            .basePath(TasksRoutes.BASE)
+            .get(taskId + "/await");
+
+        assertThat(spoolQueue.browse())
+            .extracting(ManageableMailQueue.MailQueueItemView::getMail)
+            .extracting(Mail::getName)
+            .containsOnly(NAME_1, NAME_2);
+    }
+
+    @Test
+    public void reprocessingAllTaskShouldPreserveStateWhenProcessorIsNotSpecified() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+        String state1 = "state1";
+        String state2 = "state2";
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_1)
+            .state(state1)
+            .build());
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_2)
+            .state(state2)
+            .build());
+
+        String taskId = with()
+            .patch(URL_ESCAPED_MY_REPO + "/mails?action=reprocess")
+            .jsonPath()
+            .get("taskId");
+
+        with()
+            .basePath(TasksRoutes.BASE)
+            .get(taskId + "/await");
+
+        assertThat(spoolQueue.browse())
+            .extracting(ManageableMailQueue.MailQueueItemView::getMail)
+            .extracting(Mail::getState)
+            .containsOnly(state1, state2);
+    }
+
+    @Test
+    public void reprocessingAllTaskShouldOverWriteStateWhenProcessorSpecified() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+        String state1 = "state1";
+        String state2 = "state2";
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_1)
+            .state(state1)
+            .build());
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_2)
+            .state(state2)
+            .build());
+
+        String transport = "transport";
+        String taskId = with()
+            .patch(URL_ESCAPED_MY_REPO + "/mails?action=reprocess"
+                + "&processor=" + transport)
+            .jsonPath()
+            .get("taskId");
+
+        with()
+            .basePath(TasksRoutes.BASE)
+            .get(taskId + "/await");
+
+        assertThat(spoolQueue.browse())
+            .extracting(ManageableMailQueue.MailQueueItemView::getMail)
+            .extracting(Mail::getState)
+            .containsOnly(transport, transport);
+    }
+
+    @Test
+    public void reprocessingAllTaskShouldEnqueueMailsOnSpecifiedQueue() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_1)
+            .build());
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_2)
+            .build());
+
+        String taskId = with()
+            .patch(URL_ESCAPED_MY_REPO + "/mails?action=reprocess"
+                + "&queue=" + CUSTOM_QUEUE)
+            .jsonPath()
+            .get("taskId");
+
+        with()
+            .basePath(TasksRoutes.BASE)
+            .get(taskId + "/await");
+
+        assertThat(customQueue.browse())
+            .extracting(ManageableMailQueue.MailQueueItemView::getMail)
+            .extracting(Mail::getName)
+            .containsOnly(NAME_1, NAME_2);
+    }
+
+    @Test
+    public void reprocessingOneTaskShouldCreateATask() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_1)
+            .build());
+
+        when()
+            .patch(URL_ESCAPED_MY_REPO + "/mails/name1?action=reprocess")
+        .then()
+            .statusCode(HttpStatus.CREATED_201)
+            .header("Location", is(notNullValue()))
+            .body("taskId", is(notNullValue()));
+    }
+
+    @Test
+    public void reprocessingOneTaskShouldRejectInvalidActions() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_1)
+            .build());
+
+        when()
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1 + "?action=invalid")
+        .then()
+            .statusCode(HttpStatus.BAD_REQUEST_400)
+            .body("statusCode", is(400))
+            .body("type", is(ErrorResponder.ErrorType.INVALID_ARGUMENT.getType()))
+            .body("message", is("action query parameter is mandatory. The only supported value is `reprocess`"));
+    }
+
+    @Test
+    public void reprocessingOneTaskShouldRequireAction() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_1)
+            .build());
+
+        when()
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1)
+        .then()
+            .statusCode(HttpStatus.BAD_REQUEST_400)
+            .body("statusCode", is(400))
+            .body("type", is(ErrorResponder.ErrorType.INVALID_ARGUMENT.getType()))
+            .body("message", is("action query parameter is mandatory. The only supported value is `reprocess`"));
+    }
+
+    @Test
+    public void reprocessingOneTaskShouldIncludeDetailsWhenDefaultValues() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+        String name1 = "name1";
+        String name2 = "name2";
+        mailRepository.store(FakeMail.builder()
+            .name(name1)
+            .build());
+        mailRepository.store(FakeMail.builder()
+            .name(name2)
+            .build());
+
+        String taskId = with()
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1 + "?action=reprocess")
+            .jsonPath()
+            .get("taskId");
+
+        given()
+            .basePath(TasksRoutes.BASE)
+        .when()
+            .get(taskId + "/await")
+        .then()
+            .body("status", is("completed"))
+            .body("taskId", is(notNullValue()))
+            .body("type", is(ReprocessingOneMailTask.TYPE))
+            .body("additionalInformation.repositoryUrl", is(URL_MY_REPO))
+            .body("additionalInformation.mailKey", is(NAME_1))
+            .body("additionalInformation.targetProcessor", isEmptyOrNullString())
+            .body("additionalInformation.targetQueue", is(MailQueueFactory.SPOOL))
+            .body("startedDate", is(notNullValue()))
+            .body("submitDate", is(notNullValue()))
+            .body("completedDate", is(notNullValue()));
+    }
+
+    @Test
+    public void reprocessingOneTaskShouldIncludeDetails() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+        String name1 = "name1";
+        String name2 = "name2";
+        mailRepository.store(FakeMail.builder()
+            .name(name1)
+            .build());
+        mailRepository.store(FakeMail.builder()
+            .name(name2)
+            .build());
+
+        String transport = "transport";
+        String taskId = with()
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1 + "?action=reprocess" +
+                "&queue=" + CUSTOM_QUEUE +
+                "&processor=" + transport)
+            .jsonPath()
+            .get("taskId");
+
+        given()
+            .basePath(TasksRoutes.BASE)
+        .when()
+            .get(taskId + "/await")
+        .then()
+            .body("status", is("completed"))
+            .body("taskId", is(notNullValue()))
+            .body("type", is(ReprocessingOneMailTask.TYPE))
+            .body("additionalInformation.repositoryUrl", is(URL_MY_REPO))
+            .body("additionalInformation.mailKey", is(NAME_1))
+            .body("additionalInformation.targetProcessor", is(transport))
+            .body("additionalInformation.targetQueue", is(CUSTOM_QUEUE))
+            .body("startedDate", is(notNullValue()))
+            .body("submitDate", is(notNullValue()))
+            .body("completedDate", is(notNullValue()));
+    }
+
+    @Test
+    public void reprocessingOneTaskShouldRemoveMailFromRepository() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+        String name1 = "name1";
+        String name2 = "name2";
+        mailRepository.store(FakeMail.builder()
+            .name(name1)
+            .build());
+        mailRepository.store(FakeMail.builder()
+            .name(name2)
+            .build());
+
+        String transport = "transport";
+        String taskId = with()
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1 + "?action=reprocess" +
+                "&queue=" + CUSTOM_QUEUE +
+                "&processor=" + transport)
+            .jsonPath()
+            .get("taskId");
+
+        with()
+            .basePath(TasksRoutes.BASE)
+            .get(taskId + "/await");
+
+        assertThat(mailRepository.list())
+            .containsOnly(NAME_2);
+    }
+
+    @Test
+    public void reprocessingOneTaskShouldEnqueueMailsOnDefaultQueue() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_1)
+            .build());
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_2)
+            .build());
+
+        String taskId = with()
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1 + "?action=reprocess")
+            .jsonPath()
+            .get("taskId");
+
+        with()
+            .basePath(TasksRoutes.BASE)
+            .get(taskId + "/await");
+
+        assertThat(spoolQueue.browse())
+            .extracting(ManageableMailQueue.MailQueueItemView::getMail)
+            .extracting(Mail::getName)
+            .containsOnly(NAME_1);
+    }
+
+    @Test
+    public void reprocessingOneTaskShouldPreserveStateWhenProcessorIsNotSpecified() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+        String state1 = "state1";
+        String state2 = "state2";
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_1)
+            .state(state1)
+            .build());
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_2)
+            .state(state2)
+            .build());
+
+        String taskId = with()
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1 + "?action=reprocess")
+            .jsonPath()
+            .get("taskId");
+
+        with()
+            .basePath(TasksRoutes.BASE)
+            .get(taskId + "/await");
+
+        assertThat(spoolQueue.browse())
+            .extracting(ManageableMailQueue.MailQueueItemView::getMail)
+            .extracting(Mail::getState)
+            .containsOnly(state1);
+    }
+
+    @Test
+    public void reprocessingOneTaskShouldOverWriteStateWhenProcessorSpecified() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+        String state1 = "state1";
+        String state2 = "state2";
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_1)
+            .state(state1)
+            .build());
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_2)
+            .state(state2)
+            .build());
+
+        String transport = "transport";
+        String taskId = with()
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1 + "?action=reprocess"
+                + "&processor=" + transport)
+            .jsonPath()
+            .get("taskId");
+
+        with()
+            .basePath(TasksRoutes.BASE)
+            .get(taskId + "/await");
+
+        assertThat(spoolQueue.browse())
+            .extracting(ManageableMailQueue.MailQueueItemView::getMail)
+            .extracting(Mail::getState)
+            .containsOnly(transport);
+    }
+
+    @Test
+    public void reprocessingOneTaskShouldEnqueueMailsOnSpecifiedQueue() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_1)
+            .build());
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_2)
+            .build());
+
+        String taskId = with()
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1 + "?action=reprocess"
+                + "&queue=" + CUSTOM_QUEUE)
+            .jsonPath()
+            .get("taskId");
+
+        with()
+            .basePath(TasksRoutes.BASE)
+            .get(taskId + "/await");
+
+        assertThat(customQueue.browse())
+            .extracting(ManageableMailQueue.MailQueueItemView::getMail)
+            .extracting(Mail::getName)
+            .containsOnly(NAME_1);
+    }
+
+    @Test
+    public void reprocessingOneTaskShouldNotEnqueueUnknownMailKey() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_1)
+            .build());
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_2)
+            .build());
+
+        String taskId = with()
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + "unknown" + "?action=reprocess"
+                + "&queue=" + CUSTOM_QUEUE)
+            .jsonPath()
+            .get("taskId");
+
+        with()
+            .basePath(TasksRoutes.BASE)
+            .get(taskId + "/await");
+
+        assertThat(customQueue.browse())
+            .isEmpty();
+    }
+
+    @Test
+    public void reprocessingOneTaskShouldNotRemoveMailFromRepositoryWhenUnknownMailKey() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_1)
+            .build());
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_2)
+            .build());
+
+        String taskId = with()
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + "unknown" + "?action=reprocess"
+                + "&queue=" + CUSTOM_QUEUE)
+            .jsonPath()
+            .get("taskId");
+
+        with()
+            .basePath(TasksRoutes.BASE)
+            .get(taskId + "/await");
+
+        assertThat(mailRepository.size())
+            .isEqualTo(2);
+    }
+
+    @Test
+    public void reprocessingOneTaskShouldFailWhenUnknownMailKey() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_1)
+            .build());
+        mailRepository.store(FakeMail.builder()
+            .name(NAME_2)
+            .build());
+
+        String taskId = with()
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + "unknown" + "?action=reprocess"
+                + "&queue=" + CUSTOM_QUEUE)
+            .jsonPath()
+            .get("taskId");
+
+        given()
+            .basePath(TasksRoutes.BASE)
+        .when()
+            .get(taskId + "/await")
+            .then()
+            .body("status", is("failed"));
+    }
+
 }


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


[09/10] james-project git commit: JAMES-2294 Rely on RestAssured for query parameters in tests

Posted by bt...@apache.org.
JAMES-2294 Rely on RestAssured for query parameters in tests


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

Branch: refs/heads/master
Commit: 1d14ccbf8c10fb5df64d0d6c0b288cc80513dba7
Parents: 3562155
Author: benwa <bt...@linagora.com>
Authored: Thu Jan 25 17:03:16 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Fri Jan 26 08:12:21 2018 +0700

----------------------------------------------------------------------
 .../routes/MailRepositoriesRoutesTest.java      | 154 ++++++++++++-------
 1 file changed, 98 insertions(+), 56 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/1d14ccbf/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 a6dd4de..6bb564b 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
@@ -217,8 +217,11 @@ public class MailRepositoriesRoutesTest {
             .name("name3")
             .build());
 
-        when()
-            .get(MY_REPO_MAILS + "?offset=1&limit=1")
+        given()
+            .param("limit", "1")
+            .param("offset", "1")
+        .when()
+            .get(MY_REPO_MAILS)
         .then()
             .statusCode(HttpStatus.OK_200)
             .body("", hasSize(1))
@@ -242,8 +245,10 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldReturnErrorOnInvalidOffset() throws Exception {
-        when()
-            .get(MY_REPO_MAILS + "?offset=invalid")
+        given()
+            .param("offset", "invalid")
+        .when()
+            .get(MY_REPO_MAILS)
         .then()
             .statusCode(HttpStatus.BAD_REQUEST_400)
             .body("statusCode", is(400))
@@ -253,8 +258,10 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldReturnErrorOnNegativeOffset() throws Exception {
-        when()
-            .get(MY_REPO_MAILS + "?offset=-1")
+        given()
+            .param("offset", "-1")
+        .when()
+            .get(MY_REPO_MAILS)
         .then()
             .statusCode(HttpStatus.BAD_REQUEST_400)
             .body("statusCode", is(400))
@@ -276,8 +283,10 @@ public class MailRepositoriesRoutesTest {
             .name("name3")
             .build());
 
-        when()
-            .get(MY_REPO_MAILS + "?offset=5")
+        given()
+            .param("offset", "5")
+        .when()
+            .get(MY_REPO_MAILS)
             .then()
             .statusCode(HttpStatus.OK_200)
             .body("", hasSize(0));
@@ -285,8 +294,10 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldReturnErrorOnInvalidLimit() throws Exception {
-        when()
-            .get(MY_REPO_MAILS + "?limit=invalid")
+        given()
+            .param("limit", "invalid")
+        .when()
+            .get(MY_REPO_MAILS)
         .then()
             .statusCode(HttpStatus.BAD_REQUEST_400)
             .body("statusCode", is(400))
@@ -296,8 +307,10 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldReturnErrorOnNegativeLimit() throws Exception {
-        when()
-            .get(MY_REPO_MAILS + "?limit=-1")
+        given()
+            .param("limit", "-1")
+        .when()
+            .get(MY_REPO_MAILS)
         .then()
             .statusCode(HttpStatus.BAD_REQUEST_400)
             .body("statusCode", is(400))
@@ -316,8 +329,10 @@ public class MailRepositoriesRoutesTest {
             .name(NAME_2)
             .build());
 
-        when()
-            .get(MY_REPO_MAILS + "?offset=0")
+        given()
+            .param("offset", "0")
+        .when()
+            .get(MY_REPO_MAILS)
         .then()
             .statusCode(HttpStatus.OK_200)
             .body("", hasSize(2))
@@ -326,8 +341,10 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void zeroLimitShouldNotBeValid() throws Exception {
-        when()
-            .get(MY_REPO_MAILS + "?limit=0")
+        given()
+            .param("limit", "0")
+        .when()
+            .get(MY_REPO_MAILS)
         .then()
             .statusCode(HttpStatus.BAD_REQUEST_400)
             .body("statusCode", is(400))
@@ -595,8 +612,10 @@ public class MailRepositoriesRoutesTest {
     public void reprocessingAllTaskShouldCreateATask() throws Exception {
         when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
-        when()
-            .patch(URL_ESCAPED_MY_REPO + "/mails?action=reprocess")
+        given()
+            .param("action", "reprocess")
+        .when()
+            .patch(URL_ESCAPED_MY_REPO + "/mails")
         .then()
             .statusCode(HttpStatus.CREATED_201)
             .header("Location", is(notNullValue()))
@@ -607,8 +626,10 @@ public class MailRepositoriesRoutesTest {
     public void reprocessingAllTaskShouldRejectInvalidActions() throws Exception {
         when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
-        when()
-            .patch(URL_ESCAPED_MY_REPO + "/mails?action=invalid")
+        given()
+            .param("action", "invalid")
+        .when()
+            .patch(URL_ESCAPED_MY_REPO + "/mails")
         .then()
             .statusCode(HttpStatus.BAD_REQUEST_400)
             .body("statusCode", is(400))
@@ -640,7 +661,8 @@ public class MailRepositoriesRoutesTest {
             .build());
 
         String taskId = with()
-            .patch(URL_ESCAPED_MY_REPO + "/mails?action=reprocess")
+            .param("action", "reprocess")
+            .patch(URL_ESCAPED_MY_REPO + "/mails")
             .jsonPath()
             .get("taskId");
 
@@ -676,9 +698,10 @@ public class MailRepositoriesRoutesTest {
 
         String transport = "transport";
         String taskId = with()
-            .patch(URL_ESCAPED_MY_REPO + "/mails?action=reprocess" +
-                "&queue=" + CUSTOM_QUEUE +
-                "&processor=" + transport)
+            .param("action", "reprocess")
+            .param("queue", CUSTOM_QUEUE)
+            .param("processor", transport)
+            .patch(URL_ESCAPED_MY_REPO + "/mails")
             .jsonPath()
             .get("taskId");
 
@@ -714,9 +737,10 @@ public class MailRepositoriesRoutesTest {
 
         String transport = "transport";
         String taskId = with()
-            .patch(URL_ESCAPED_MY_REPO + "/mails?action=reprocess" +
-                "&queue=" + CUSTOM_QUEUE +
-                "&processor=" + transport)
+            .param("action", "reprocess")
+            .param("queue", CUSTOM_QUEUE)
+            .param("processor", transport)
+            .patch(URL_ESCAPED_MY_REPO + "/mails")
             .jsonPath()
             .get("taskId");
 
@@ -738,7 +762,8 @@ public class MailRepositoriesRoutesTest {
             .build());
 
         String taskId = with()
-            .patch(URL_ESCAPED_MY_REPO + "/mails?action=reprocess")
+            .param("action", "reprocess")
+            .patch(URL_ESCAPED_MY_REPO + "/mails")
             .jsonPath()
             .get("taskId");
 
@@ -767,7 +792,8 @@ public class MailRepositoriesRoutesTest {
             .build());
 
         String taskId = with()
-            .patch(URL_ESCAPED_MY_REPO + "/mails?action=reprocess")
+            .param("action", "reprocess")
+            .patch(URL_ESCAPED_MY_REPO + "/mails")
             .jsonPath()
             .get("taskId");
 
@@ -797,8 +823,9 @@ public class MailRepositoriesRoutesTest {
 
         String transport = "transport";
         String taskId = with()
-            .patch(URL_ESCAPED_MY_REPO + "/mails?action=reprocess"
-                + "&processor=" + transport)
+            .param("action", "reprocess")
+            .param("processor", transport)
+            .patch(URL_ESCAPED_MY_REPO + "/mails")
             .jsonPath()
             .get("taskId");
 
@@ -823,8 +850,9 @@ public class MailRepositoriesRoutesTest {
             .build());
 
         String taskId = with()
-            .patch(URL_ESCAPED_MY_REPO + "/mails?action=reprocess"
-                + "&queue=" + CUSTOM_QUEUE)
+            .param("action", "reprocess")
+            .param("queue", CUSTOM_QUEUE)
+            .patch(URL_ESCAPED_MY_REPO + "/mails")
             .jsonPath()
             .get("taskId");
 
@@ -846,8 +874,10 @@ public class MailRepositoriesRoutesTest {
             .name(NAME_1)
             .build());
 
-        when()
-            .patch(URL_ESCAPED_MY_REPO + "/mails/name1?action=reprocess")
+        given()
+            .param("action", "reprocess")
+        .when()
+            .patch(URL_ESCAPED_MY_REPO + "/mails/name1")
         .then()
             .statusCode(HttpStatus.CREATED_201)
             .header("Location", is(notNullValue()))
@@ -862,8 +892,10 @@ public class MailRepositoriesRoutesTest {
             .name(NAME_1)
             .build());
 
-        when()
-            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1 + "?action=invalid")
+        given()
+            .param("action", "invalid")
+        .when()
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1)
         .then()
             .statusCode(HttpStatus.BAD_REQUEST_400)
             .body("statusCode", is(400))
@@ -901,7 +933,8 @@ public class MailRepositoriesRoutesTest {
             .build());
 
         String taskId = with()
-            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1 + "?action=reprocess")
+            .param("action", "reprocess")
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1)
             .jsonPath()
             .get("taskId");
 
@@ -936,9 +969,10 @@ public class MailRepositoriesRoutesTest {
 
         String transport = "transport";
         String taskId = with()
-            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1 + "?action=reprocess" +
-                "&queue=" + CUSTOM_QUEUE +
-                "&processor=" + transport)
+            .param("action", "reprocess")
+            .param("queue", CUSTOM_QUEUE)
+            .param("processor", transport)
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1)
             .jsonPath()
             .get("taskId");
 
@@ -973,9 +1007,10 @@ public class MailRepositoriesRoutesTest {
 
         String transport = "transport";
         String taskId = with()
-            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1 + "?action=reprocess" +
-                "&queue=" + CUSTOM_QUEUE +
-                "&processor=" + transport)
+            .param("action", "reprocess")
+            .param("queue", CUSTOM_QUEUE)
+            .param("processor", transport)
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1)
             .jsonPath()
             .get("taskId");
 
@@ -998,7 +1033,8 @@ public class MailRepositoriesRoutesTest {
             .build());
 
         String taskId = with()
-            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1 + "?action=reprocess")
+            .param("action", "reprocess")
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1)
             .jsonPath()
             .get("taskId");
 
@@ -1027,7 +1063,8 @@ public class MailRepositoriesRoutesTest {
             .build());
 
         String taskId = with()
-            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1 + "?action=reprocess")
+            .param("action", "reprocess")
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1)
             .jsonPath()
             .get("taskId");
 
@@ -1057,8 +1094,9 @@ public class MailRepositoriesRoutesTest {
 
         String transport = "transport";
         String taskId = with()
-            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1 + "?action=reprocess"
-                + "&processor=" + transport)
+            .param("action", "reprocess")
+            .param("processor", transport)
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1)
             .jsonPath()
             .get("taskId");
 
@@ -1083,8 +1121,9 @@ public class MailRepositoriesRoutesTest {
             .build());
 
         String taskId = with()
-            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1 + "?action=reprocess"
-                + "&queue=" + CUSTOM_QUEUE)
+            .param("action", "reprocess")
+            .param("queue", CUSTOM_QUEUE)
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + NAME_1)
             .jsonPath()
             .get("taskId");
 
@@ -1109,8 +1148,9 @@ public class MailRepositoriesRoutesTest {
             .build());
 
         String taskId = with()
-            .patch(URL_ESCAPED_MY_REPO + "/mails/" + "unknown" + "?action=reprocess"
-                + "&queue=" + CUSTOM_QUEUE)
+            .param("action", "reprocess")
+            .param("queue", CUSTOM_QUEUE)
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + "unknown")
             .jsonPath()
             .get("taskId");
 
@@ -1133,8 +1173,9 @@ public class MailRepositoriesRoutesTest {
             .build());
 
         String taskId = with()
-            .patch(URL_ESCAPED_MY_REPO + "/mails/" + "unknown" + "?action=reprocess"
-                + "&queue=" + CUSTOM_QUEUE)
+            .param("action", "reprocess")
+            .param("queue", CUSTOM_QUEUE)
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + "unknown")
             .jsonPath()
             .get("taskId");
 
@@ -1157,8 +1198,9 @@ public class MailRepositoriesRoutesTest {
             .build());
 
         String taskId = with()
-            .patch(URL_ESCAPED_MY_REPO + "/mails/" + "unknown" + "?action=reprocess"
-                + "&queue=" + CUSTOM_QUEUE)
+            .param("action", "reprocess")
+            .param("queue", CUSTOM_QUEUE)
+            .patch(URL_ESCAPED_MY_REPO + "/mails/" + "unknown")
             .jsonPath()
             .get("taskId");
 


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


[05/10] james-project git commit: JAMES-2294 Integration test for mail reprocessing

Posted by bt...@apache.org.
JAMES-2294 Integration test for mail reprocessing


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

Branch: refs/heads/master
Commit: d5594ae7d0e8369528c197887b38616138b02f42
Parents: c73d5de
Author: benwa <bt...@linagora.com>
Authored: Thu Jan 25 11:35:16 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Fri Jan 26 08:12:21 2018 +0700

----------------------------------------------------------------------
 .../james/utils/MailRepositoryProbeImpl.java    |  15 +-
 server/mailet/integration-testing/pom.xml       |   5 +
 .../transport/mailets/ToRepositoryTest.java     | 165 +++++++++++++++++++
 .../apache/james/utils/IMAPMessageReader.java   |   6 +-
 .../apache/james/utils/SMTPMessageSender.java   |   3 +-
 5 files changed, 187 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/d5594ae7/server/container/guice/guice-common/src/main/java/org/apache/james/utils/MailRepositoryProbeImpl.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/MailRepositoryProbeImpl.java b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/MailRepositoryProbeImpl.java
index baac629..e3143f2 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/MailRepositoryProbeImpl.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/MailRepositoryProbeImpl.java
@@ -19,11 +19,13 @@
 
 package org.apache.james.utils;
 
+import java.util.List;
+
 import javax.inject.Inject;
 
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 
-import com.google.common.collect.Iterators;
+import com.google.common.collect.ImmutableList;
 
 public class MailRepositoryProbeImpl implements GuiceProbe {
 
@@ -37,9 +39,14 @@ public class MailRepositoryProbeImpl implements GuiceProbe {
     /**
      * Get the count of email currently stored in a given repository
      */
-    public int getRepositoryMailCount(String url) throws Exception {
-        return Iterators.size(repositoryStore.select(url)
-            .list());
+    public long getRepositoryMailCount(String url) throws Exception {
+        return repositoryStore.select(url).size();
+    }
+
+    public List<String> listMailKeys(String url) throws Exception {
+        return ImmutableList.copyOf(
+            repositoryStore.select(url)
+                .list());
     }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/d5594ae7/server/mailet/integration-testing/pom.xml
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/pom.xml b/server/mailet/integration-testing/pom.xml
index 30e083a..58b2f3f 100644
--- a/server/mailet/integration-testing/pom.xml
+++ b/server/mailet/integration-testing/pom.xml
@@ -145,6 +145,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/d5594ae7/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToRepositoryTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToRepositoryTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToRepositoryTest.java
new file mode 100644
index 0000000..3f821fa
--- /dev/null
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToRepositoryTest.java
@@ -0,0 +1,165 @@
+/****************************************************************
+ * 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.transport.mailets;
+
+import static com.jayway.restassured.RestAssured.with;
+import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
+import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
+import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
+import static org.apache.james.mailets.configuration.Constants.PASSWORD;
+import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
+import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+
+import org.apache.james.mailets.TemporaryJamesServer;
+import org.apache.james.mailets.configuration.MailetConfiguration;
+import org.apache.james.mailets.configuration.MailetContainer;
+import org.apache.james.mailets.configuration.ProcessorConfiguration;
+import org.apache.james.probe.DataProbe;
+import org.apache.james.transport.matchers.All;
+import org.apache.james.utils.DataProbeImpl;
+import org.apache.james.utils.IMAPMessageReader;
+import org.apache.james.utils.MailRepositoryProbeImpl;
+import org.apache.james.utils.SMTPMessageSender;
+import org.apache.james.utils.WebAdminGuiceProbe;
+import org.apache.james.webadmin.WebAdminUtils;
+import org.apache.james.webadmin.routes.MailRepositoriesRoutes;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import com.jayway.restassured.specification.RequestSpecification;
+
+public class ToRepositoryTest {
+    private static final String RECIPIENT = "touser@" + DEFAULT_DOMAIN;
+    public static final String CUSTOM_REPOSITORY = "file://var/mail/custom/";
+
+    @Rule
+    public TemporaryFolder temporaryFolder = new TemporaryFolder();
+    @Rule
+    public IMAPMessageReader imapMessageReader = new IMAPMessageReader();
+    @Rule
+    public SMTPMessageSender messageSender = new SMTPMessageSender(DEFAULT_DOMAIN);
+
+    private TemporaryJamesServer jamesServer;
+    private MailRepositoryProbeImpl probe;
+    private RequestSpecification webAdminAPI;
+
+    @Before
+    public void setup() throws Exception {
+        MailetContainer.Builder mailetContainer = TemporaryJamesServer.SIMPLE_MAILET_CONTAINER_CONFIGURATION
+            .putProcessor(ProcessorConfiguration.root()
+                .addMailet(MailetConfiguration.builder()
+                    .matcher(All.class)
+                    .mailet(ToRepository.class)
+                    .addProperty("repositoryPath", CUSTOM_REPOSITORY)));
+
+        jamesServer = TemporaryJamesServer.builder()
+            .withMailetContainer(mailetContainer)
+            .build(temporaryFolder);
+
+        DataProbe dataProbe = jamesServer.getProbe(DataProbeImpl.class);
+        dataProbe.addDomain(DEFAULT_DOMAIN);
+        dataProbe.addUser(RECIPIENT, PASSWORD);
+
+        probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
+        webAdminAPI = WebAdminUtils.buildRequestSpecification(
+            jamesServer.getProbe(WebAdminGuiceProbe.class)
+                .getWebAdminPort())
+            .build();
+    }
+
+    @After
+    public void tearDown() {
+        jamesServer.shutdown();
+    }
+
+    @Test
+    public void incomingShouldBeStoredInProcessorByDefault() throws Exception {
+        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+            .sendMessage(RECIPIENT, RECIPIENT)
+            .awaitSent(awaitOneMinute)
+            .sendMessage(RECIPIENT, RECIPIENT)
+            .awaitSent(awaitOneMinute);
+
+        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 2);
+    }
+
+    @Test
+    public void userShouldBeAbleToAccessReprocessedMails() throws Exception {
+        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+            .sendMessage(RECIPIENT, RECIPIENT)
+            .awaitSent(awaitOneMinute)
+            .sendMessage(RECIPIENT, RECIPIENT)
+            .awaitSent(awaitOneMinute);
+
+        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 2);
+
+        with()
+            .spec(webAdminAPI)
+            .queryParam("processor", ProcessorConfiguration.STATE_TRANSPORT)
+            .queryParam("action", "reprocess")
+            .patch(MailRepositoriesRoutes.MAIL_REPOSITORIES
+                + "/" + URLEncoder.encode(CUSTOM_REPOSITORY, StandardCharsets.UTF_8.displayName())
+                + "/mails")
+            .jsonPath()
+            .get("taskId");
+
+        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+            .login(RECIPIENT, PASSWORD)
+            .select(IMAPMessageReader.INBOX)
+            .awaitMessage(awaitOneMinute)
+            .hasMessageCount(2);
+        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 0);
+    }
+
+    @Test
+    public void userShouldBeAbleToAccessReprocessedMail() throws Exception {
+        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+            .sendMessage(RECIPIENT, RECIPIENT)
+            .awaitSent(awaitOneMinute)
+            .sendMessage(RECIPIENT, RECIPIENT)
+            .awaitSent(awaitOneMinute);
+
+        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 2);
+        String key = probe.listMailKeys(CUSTOM_REPOSITORY).get(0);
+
+        with()
+            .spec(webAdminAPI)
+            .queryParam("processor", ProcessorConfiguration.STATE_TRANSPORT)
+            .queryParam("action", "reprocess")
+            .patch(MailRepositoriesRoutes.MAIL_REPOSITORIES
+                + "/" + URLEncoder.encode(CUSTOM_REPOSITORY, StandardCharsets.UTF_8.displayName())
+                + "/mails/" + key)
+            .jsonPath()
+            .get("taskId");
+
+        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+            .login(RECIPIENT, PASSWORD)
+            .select(IMAPMessageReader.INBOX)
+            .awaitMessage(awaitOneMinute)
+            .hasMessageCount(1);
+        awaitOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/d5594ae7/server/testing/src/main/java/org/apache/james/utils/IMAPMessageReader.java
----------------------------------------------------------------------
diff --git a/server/testing/src/main/java/org/apache/james/utils/IMAPMessageReader.java b/server/testing/src/main/java/org/apache/james/utils/IMAPMessageReader.java
index 14a1fad..277fe6d 100644
--- a/server/testing/src/main/java/org/apache/james/utils/IMAPMessageReader.java
+++ b/server/testing/src/main/java/org/apache/james/utils/IMAPMessageReader.java
@@ -72,12 +72,14 @@ public class IMAPMessageReader extends ExternalResource implements Closeable {
             .contains("OK FETCH completed");
     }
 
-    public void awaitMessage(ConditionFactory conditionFactory) throws IOException {
+    public IMAPMessageReader awaitMessage(ConditionFactory conditionFactory) throws IOException {
         conditionFactory.until(this::hasAMessage);
+        return this;
     }
 
-    public void awaitNoMessage(ConditionFactory conditionFactory) throws IOException {
+    public IMAPMessageReader awaitNoMessage(ConditionFactory conditionFactory) throws IOException {
         conditionFactory.until(this::userDoesNotReceiveMessage);
+        return this;
     }
 
     public boolean hasAMessageWithFlags(String flags) throws IOException {

http://git-wip-us.apache.org/repos/asf/james-project/blob/d5594ae7/server/testing/src/main/java/org/apache/james/utils/SMTPMessageSender.java
----------------------------------------------------------------------
diff --git a/server/testing/src/main/java/org/apache/james/utils/SMTPMessageSender.java b/server/testing/src/main/java/org/apache/james/utils/SMTPMessageSender.java
index bb8d982..cc35a0a 100644
--- a/server/testing/src/main/java/org/apache/james/utils/SMTPMessageSender.java
+++ b/server/testing/src/main/java/org/apache/james/utils/SMTPMessageSender.java
@@ -164,8 +164,9 @@ public class SMTPMessageSender extends ExternalResource implements Closeable {
             .contains("250 2.6.0 Message received");
     }
 
-    public void awaitSent(ConditionFactory conditionFactory) {
+    public SMTPMessageSender awaitSent(ConditionFactory conditionFactory) {
         conditionFactory.until(this::messageHasBeenSent);
+        return this;
     }
 
     public void awaitSentFail(ConditionFactory conditionFactory) {


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


[08/10] james-project git commit: JAMES-2292 Add DELETE /mailQueues/{mailQueueName}/mails endpoint

Posted by bt...@apache.org.
JAMES-2292 Add DELETE /mailQueues/{mailQueueName}/mails endpoint


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

Branch: refs/heads/master
Commit: f9df417d3679e6e5b902d916523f07c0d16dd097
Parents: a5abe35
Author: Antoine Duprat <ad...@linagora.com>
Authored: Wed Jan 24 14:52:04 2018 +0100
Committer: benwa <bt...@linagora.com>
Committed: Fri Jan 26 08:12:21 2018 +0700

----------------------------------------------------------------------
 .../webadmin/webadmin-mailqueue/pom.xml         |   4 +
 .../james/webadmin/routes/MailQueueRoutes.java  | 118 +++++++++++-
 .../webadmin/routes/MailQueueRoutesTest.java    | 183 +++++++++++++++++++
 3 files changed, 304 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/f9df417d/server/protocols/webadmin/webadmin-mailqueue/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailqueue/pom.xml b/server/protocols/webadmin/webadmin-mailqueue/pom.xml
index 92402e5..6e4cfd1 100644
--- a/server/protocols/webadmin/webadmin-mailqueue/pom.xml
+++ b/server/protocols/webadmin/webadmin-mailqueue/pom.xml
@@ -56,6 +56,10 @@
         </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
+            <artifactId>james-server-task</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
             <artifactId>james-server-webadmin-core</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/f9df417d/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/routes/MailQueueRoutes.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/routes/MailQueueRoutes.java b/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/routes/MailQueueRoutes.java
index 58a5576..933bc38 100644
--- a/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/routes/MailQueueRoutes.java
+++ b/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/routes/MailQueueRoutes.java
@@ -25,15 +25,19 @@ import java.util.List;
 import java.util.Optional;
 
 import javax.inject.Inject;
+import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 
+import org.apache.james.core.MailAddress;
 import org.apache.james.queue.api.MailQueue.MailQueueException;
 import org.apache.james.queue.api.MailQueueFactory;
 import org.apache.james.queue.api.ManageableMailQueue;
+import org.apache.james.queue.api.ManageableMailQueue.Type;
 import org.apache.james.util.streams.Iterators;
 import org.apache.james.util.streams.Limit;
+import org.apache.james.webadmin.Constants;
 import org.apache.james.webadmin.Routes;
 import org.apache.james.webadmin.dto.MailQueueDTO;
 import org.apache.james.webadmin.dto.MailQueueItemDTO;
@@ -45,6 +49,7 @@ import org.eclipse.jetty.http.HttpStatus;
 import com.github.fge.lambdas.Throwing;
 import com.github.steveash.guavate.Guavate;
 import com.google.common.annotations.VisibleForTesting;
+import com.google.common.primitives.Booleans;
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -54,6 +59,7 @@ import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
 import spark.HaltException;
 import spark.Request;
+import spark.Response;
 import spark.Service;
 
 
@@ -69,6 +75,10 @@ public class MailQueueRoutes implements Routes {
     private static final String DELAYED_QUERY_PARAM = "delayed";
     private static final String LIMIT_QUERY_PARAM = "limit";
     @VisibleForTesting static final int DEFAULT_LIMIT_VALUE = 100;
+   
+    private static final String SENDER_QUERY_PARAM = "sender";
+    private static final String NAME_QUERY_PARAM = "name";
+    private static final String RECIPIENT_QUERY_PARAM = "recipient";
     
     private final MailQueueFactory<ManageableMailQueue> mailQueueFactory;
     private final JsonTransformer jsonTransformer;
@@ -85,8 +95,10 @@ public class MailQueueRoutes implements Routes {
         defineListQueues(service);
 
         getMailQueue(service);
-        
+
         listMails(service);
+
+        deleteMails(service);
     }
 
     @GET
@@ -239,4 +251,108 @@ public class MailQueueRoutes implements Routes {
         return isDelayed.map(delayed -> delayed == item.getNextDelivery().isPresent())
             .orElse(true);
     }
+
+    @DELETE
+    @Path("/{mailQueueName}/mails")
+    @ApiImplicitParams({
+        @ApiImplicitParam(required = true, dataType = "string", name = "mailQueueName", paramType = "path"),
+        @ApiImplicitParam(
+                required = false, 
+                dataType = "MailAddress", 
+                name = SENDER_QUERY_PARAM, 
+                paramType = "query",
+                example = "?sender=sender@james.org",
+                value = "The sender of the mails to be deleted should be equals to this query parameter."),
+        @ApiImplicitParam(
+                required = false, 
+                dataType = "String", 
+                name = NAME_QUERY_PARAM,
+                paramType = "query",
+                example = "?name=mailName",
+                value = "The name of the mails to be deleted should be equals to this query parameter."),
+        @ApiImplicitParam(
+                required = false, 
+                dataType = "MailAddress", 
+                name = RECIPIENT_QUERY_PARAM, 
+                paramType = "query",
+                example = "?recipient=recipient@james.org",
+                value = "The recipients of the mails to be deleted should contain this query parameter."),
+    })
+    @ApiOperation(
+        value = "Delete mails from the MailQueue"
+    )
+    @ApiResponses(value = {
+        @ApiResponse(code = HttpStatus.NO_CONTENT_204, message = "OK, the request is being processed"),
+        @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "The MailQueue does not exist."),
+        @ApiResponse(code = HttpStatus.BAD_REQUEST_400, message = "Invalid request for deleting mails from the mail queue."),
+        @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "Internal server error - Something went bad on the server side.")
+    })
+    public void deleteMails(Service service) {
+        service.delete(BASE_URL + SEPARATOR + MAIL_QUEUE_NAME + MAILS, 
+                (request, response) -> deleteMails(request, response));
+    }
+
+    private Object deleteMails(Request request, Response response) {
+        String mailQueueName = request.params(MAIL_QUEUE_NAME);
+        Object bodyResponse = mailQueueFactory.getQueue(mailQueueName)
+            .map(name -> deleteMails(name, 
+                    sender(request.queryParams(SENDER_QUERY_PARAM)),
+                    name(request.queryParams(NAME_QUERY_PARAM)),
+                    recipient(request.queryParams(RECIPIENT_QUERY_PARAM))))
+            .orElseThrow(
+                () -> ErrorResponder.builder()
+                    .message(String.format("%s can not be found", mailQueueName))
+                    .statusCode(HttpStatus.NOT_FOUND_404)
+                    .type(ErrorResponder.ErrorType.NOT_FOUND)
+                    .haltError());
+        response.status(HttpStatus.NO_CONTENT_204);
+        return bodyResponse;
+    }
+
+    private Optional<MailAddress> sender(String senderAsString) throws HaltException {
+        try {
+            return Optional.ofNullable(senderAsString)
+                    .map(Throwing.function((String sender) -> new MailAddress(sender)).sneakyThrow());
+        } catch (Exception e) {
+            throw ErrorResponder.builder()
+                .statusCode(HttpStatus.BAD_REQUEST_400)
+                .type(ErrorType.INVALID_ARGUMENT)
+                .message("'sender' should be a mail address (i.e. sender@james.org)")
+                .cause(e)
+                .haltError();
+        }
+    }
+
+    private Optional<String> name(String nameAsString) {
+        return Optional.ofNullable(nameAsString);
+    }
+
+    private Optional<MailAddress> recipient(String recipientAsString) throws HaltException {
+        try {
+            return Optional.ofNullable(recipientAsString)
+                    .map(Throwing.function((String recipient) -> new MailAddress(recipient)).sneakyThrow());
+        } catch (Exception e) {
+            throw ErrorResponder.builder()
+                .statusCode(HttpStatus.BAD_REQUEST_400)
+                .type(ErrorType.INVALID_ARGUMENT)
+                .message("'recipient' should be a mail address (i.e. recipient@james.org)")
+                .cause(e)
+                .haltError();
+        }
+    }
+
+    private Object deleteMails(ManageableMailQueue queue, Optional<MailAddress> maybeSender, Optional<String> maybeName, Optional<MailAddress> maybeRecipient) {
+        if (Booleans.countTrue(maybeSender.isPresent(), maybeName.isPresent(), maybeRecipient.isPresent()) != 1) {
+            throw ErrorResponder.builder()
+                .statusCode(HttpStatus.BAD_REQUEST_400)
+                .type(ErrorType.INVALID_ARGUMENT)
+                .message("You should provide one and only one of the query parameters 'sender', 'name' or 'recipient'.")
+                .haltError();
+        }
+        
+        maybeSender.ifPresent(Throwing.consumer((MailAddress sender) -> queue.remove(Type.Sender, sender.asString())).sneakyThrow());
+        maybeName.ifPresent(Throwing.consumer((String name) -> queue.remove(Type.Name, name)).sneakyThrow());
+        maybeRecipient.ifPresent(Throwing.consumer((MailAddress recipient) -> queue.remove(Type.Recipient, recipient.asString())).sneakyThrow());
+        return Constants.EMPTY_BODY;
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f9df417d/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesTest.java b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesTest.java
index 291c6b1..f8e69b7 100644
--- a/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesTest.java
@@ -36,6 +36,7 @@ import java.util.concurrent.TimeUnit;
 import org.apache.james.core.MailAddress;
 import org.apache.james.metrics.api.NoopMetricFactory;
 import org.apache.james.queue.api.Mails;
+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.queue.memory.MemoryMailQueueFactory.MemoryMailQueue;
@@ -320,4 +321,186 @@ public class MailQueueRoutesTest {
         .then()
             .statusCode(HttpStatus.BAD_REQUEST_400);
     }
+
+    @Test
+    public void deleteMailsShouldReturnNotFoundWhenMailQueueDoesntExist() {
+        when()
+            .delete(FIRST_QUEUE + "/mails")
+        .then()
+            .statusCode(HttpStatus.NOT_FOUND_404);
+    }
+
+    @Test
+    public void deleteMailsShouldReturnBadRequestWhenSenderIsInvalid() {
+        mailQueueFactory.createQueue(FIRST_QUEUE);
+
+        given()
+            .param("sender", "123")
+        .when()
+            .delete(FIRST_QUEUE + "/mails")
+        .then()
+            .statusCode(HttpStatus.BAD_REQUEST_400);
+    }
+
+    @Test
+    public void deleteMailsShouldReturnBadRequestWhenRecipientIsInvalid() {
+        mailQueueFactory.createQueue(FIRST_QUEUE);
+
+        given()
+            .param("recipient", "123")
+        .when()
+            .delete(FIRST_QUEUE + "/mails")
+        .then()
+            .statusCode(HttpStatus.BAD_REQUEST_400);
+    }
+
+    @Test
+    public void deleteMailsShouldReturnNoContentWhenSenderIsValid() {
+        mailQueueFactory.createQueue(FIRST_QUEUE);
+
+        given()
+            .param("sender", "sender@james.org")
+        .when()
+            .delete(FIRST_QUEUE + "/mails")
+        .then()
+            .statusCode(HttpStatus.NO_CONTENT_204);
+    }
+
+    @Test
+    public void deleteMailsShouldReturnNoContentWhenNameIsValid() {
+        mailQueueFactory.createQueue(FIRST_QUEUE);
+
+        given()
+            .param("name", "mailName")
+        .when()
+            .delete(FIRST_QUEUE + "/mails")
+        .then()
+            .statusCode(HttpStatus.NO_CONTENT_204);
+    }
+
+    @Test
+    public void deleteMailsShouldReturnNoContentWhenRecipientIsValid() {
+        mailQueueFactory.createQueue(FIRST_QUEUE);
+
+        given()
+            .param("recipient", "recipient@james.org")
+        .when()
+            .delete(FIRST_QUEUE + "/mails")
+        .then()
+            .statusCode(HttpStatus.NO_CONTENT_204);
+    }
+
+    @Test
+    public void deleteMailsShouldReturnBadRequestWhenNoQueryParameters() {
+        mailQueueFactory.createQueue(FIRST_QUEUE);
+
+        when()
+            .delete(FIRST_QUEUE + "/mails")
+        .then()
+            .statusCode(HttpStatus.BAD_REQUEST_400);
+    }
+
+    @Test
+    public void deleteMailsShouldDeleteMailsWhenSenderIsGiven() throws Exception {
+        MemoryMailQueue queue = mailQueueFactory.createQueue(FIRST_QUEUE);
+        String sender = "sender@james.org";
+        queue.enQueue(Mails.defaultMail()
+                .sender(sender)
+                .build());
+
+        given()
+            .param("sender", sender)
+        .when()
+            .delete(FIRST_QUEUE + "/mails")
+        .then()
+            .statusCode(HttpStatus.NO_CONTENT_204);
+
+        assertThat(queue.browse()).isEmpty();
+    }
+
+    @Test
+    public void deleteMailsShouldDeleteMailsWhenNameIsGiven() throws Exception {
+        MemoryMailQueue queue = mailQueueFactory.createQueue(FIRST_QUEUE);
+        String name = "mailName";
+        queue.enQueue(Mails.defaultMail()
+                .name(name)
+                .build());
+
+        given()
+            .param("name", name)
+        .when()
+            .delete(FIRST_QUEUE + "/mails")
+        .then()
+            .statusCode(HttpStatus.NO_CONTENT_204);
+
+        assertThat(queue.browse()).isEmpty();
+    }
+
+    @Test
+    public void deleteMailsShouldDeleteMailsWhenRecipientIsGiven() throws Exception {
+        MemoryMailQueue queue = mailQueueFactory.createQueue(FIRST_QUEUE);
+        String recipient = "recipient@james.org";
+        queue.enQueue(Mails.defaultMail()
+                .recipient(recipient)
+                .build());
+
+        given()
+            .param("recipient", recipient)
+        .when()
+            .delete(FIRST_QUEUE + "/mails")
+        .then()
+            .statusCode(HttpStatus.NO_CONTENT_204);
+
+        assertThat(queue.browse()).isEmpty();
+    }
+
+    @Test
+    public void deleteMailsShouldReturnBadRequestWhenAllParametersAreGiven() throws Exception {
+        mailQueueFactory.createQueue(FIRST_QUEUE);
+        given()
+            .param("sender", "sender@james.org")
+            .param("name", "mailName")
+            .param("recipient", "recipient@james.org")
+        .when()
+            .delete(FIRST_QUEUE + "/mails")
+        .then()
+            .statusCode(HttpStatus.BAD_REQUEST_400);
+    }
+
+    @Test
+    public void deleteMailsShouldReturnBadRequestWhenTwoParametersAreGiven() throws Exception {
+        mailQueueFactory.createQueue(FIRST_QUEUE);
+        given()
+            .param("sender", "sender@james.org")
+            .param("name", "mailName")
+        .when()
+            .delete(FIRST_QUEUE + "/mails")
+        .then()
+            .statusCode(HttpStatus.BAD_REQUEST_400);
+    }
+
+    @Test
+    public void deleteMailsShouldDeleteMailsWhenTheyAreMatching() throws Exception {
+        MemoryMailQueue queue = mailQueueFactory.createQueue(FIRST_QUEUE);
+        String recipient = "recipient@james.org";
+        queue.enQueue(Mails.defaultMail()
+                .recipient(recipient)
+                .build());
+        queue.enQueue(Mails.defaultMail().build());
+        queue.enQueue(Mails.defaultMail().build());
+
+        given()
+            .param("recipient", recipient)
+        .when()
+            .delete(FIRST_QUEUE + "/mails")
+        .then()
+            .statusCode(HttpStatus.NO_CONTENT_204);
+
+        MailAddress deletedRecipientMailAddress = new MailAddress(recipient);
+        assertThat(queue.browse())
+            .hasSize(2)
+            .allSatisfy((ManageableMailQueue.MailQueueItemView item) -> {
+                assertThat(item.getMail().getRecipients()).doesNotContain(deletedRecipientMailAddress);
+            });
+    }
 }


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


[06/10] james-project git commit: JAMES-2264 Correct TaskRoute test synchronisation

Posted by bt...@apache.org.
JAMES-2264 Correct TaskRoute test synchronisation


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

Branch: refs/heads/master
Commit: 35621556c54b277edc950fa0f64d3f8444eb6ab8
Parents: d5594ae
Author: benwa <bt...@linagora.com>
Authored: Sat Jan 20 08:49:25 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Fri Jan 26 08:12:21 2018 +0700

----------------------------------------------------------------------
 .../java/org/apache/james/webadmin/routes/TasksRoutesTest.java | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/35621556/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/TasksRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/TasksRoutesTest.java b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/TasksRoutesTest.java
index ea56a6c..4317035 100644
--- a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/TasksRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/TasksRoutesTest.java
@@ -131,12 +131,16 @@ public class TasksRoutesTest {
     }
 
     @Test
-    public void listShouldReturnEmptyWhenNonMatchingStatusFilter() {
+    public void listShouldReturnEmptyWhenNonMatchingStatusFilter() throws Exception {
+        CountDownLatch inProgressLatch = new CountDownLatch(1);
         taskManager.submit(() -> {
+            inProgressLatch.countDown();
             await();
             return Task.Result.COMPLETED;
         });
 
+        inProgressLatch.await();
+
         given()
             .param("status", TaskManager.Status.WAITING.getValue())
         .when()


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