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/25 05:02:26 UTC

[15/16] james-project git commit: JAMES-2292 Filter delayed messages

JAMES-2292 Filter delayed messages


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

Branch: refs/heads/master
Commit: 60b743a291df597f4577deebf50fac14cb2df420
Parents: 3a01417
Author: Antoine Duprat <ad...@linagora.com>
Authored: Tue Jan 23 16:41:04 2018 +0100
Committer: benwa <bt...@linagora.com>
Committed: Thu Jan 25 11:46:05 2018 +0700

----------------------------------------------------------------------
 .../james/webadmin/routes/MailQueueRoutes.java  | 35 ++++++++---
 .../webadmin/routes/MailQueueRoutesTest.java    | 51 +++++++++++++++
 .../routes/MailQueueRoutesUnitTest.java         | 65 ++++++++++++++++++++
 3 files changed, 142 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/60b743a2/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 c44ee91..bcaee97 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
@@ -22,6 +22,7 @@ package org.apache.james.webadmin.routes;
 import static org.apache.james.webadmin.Constants.SEPARATOR;
 
 import java.util.List;
+import java.util.Optional;
 
 import javax.inject.Inject;
 import javax.ws.rs.GET;
@@ -64,6 +65,9 @@ public class MailQueueRoutes implements Routes {
     @VisibleForTesting static final String BASE_URL = "/mailQueues";
     @VisibleForTesting static final String MAIL_QUEUE_NAME = ":mailQueueName";
     @VisibleForTesting static final String MESSAGES = "/messages";
+    
+    private static final String DELAYED_QUERY_PARAM = "delayed";
+    
     private static final Logger LOGGER = LoggerFactory.getLogger(MailQueueRoutes.class);
 
     private final MailQueueFactory<ManageableMailQueue> mailQueueFactory;
@@ -150,7 +154,8 @@ public class MailQueueRoutes implements Routes {
     @GET
     @Path("/{mailQueueName}/messages")
     @ApiImplicitParams({
-        @ApiImplicitParam(required = true, dataType = "string", name = "mailQueueName", paramType = "path")
+        @ApiImplicitParam(required = true, dataType = "string", name = "mailQueueName", paramType = "path"),
+        @ApiImplicitParam(required = false, dataType = "boolean", name = DELAYED_QUERY_PARAM, paramType = "query")
     })
     @ApiOperation(
         value = "List the messages of the MailQueue"
@@ -168,19 +173,26 @@ public class MailQueueRoutes implements Routes {
 
     private List<MailQueueItemDTO> listMessages(Request request) {
         String mailQueueName = request.params(MAIL_QUEUE_NAME);
-        return mailQueueFactory.getQueue(mailQueueName).map(this::listMessages)
-            .orElseThrow(
-                () -> ErrorResponder.builder()
-                    .message(String.format("%s can not be found", mailQueueName))
-                    .statusCode(HttpStatus.NOT_FOUND_404)
-                    .type(ErrorResponder.ErrorType.NOT_FOUND)
-                    .haltError());
+        return mailQueueFactory.getQueue(mailQueueName)
+                .map(name -> listMessages(name, isDelayed(request.queryParams(DELAYED_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());
+    }
+
+    @VisibleForTesting Optional<Boolean> isDelayed(String delayedAsString) {
+        return Optional.ofNullable(delayedAsString)
+                .map(Boolean::parseBoolean);
     }
 
-    private List<MailQueueItemDTO> listMessages(ManageableMailQueue queue) {
+    private List<MailQueueItemDTO> listMessages(ManageableMailQueue queue, Optional<Boolean> isDelayed) {
         try {
             return Iterators.toStream(queue.browse())
                     .map(Throwing.function(MailQueueItemDTO::from))
+                    .filter(item -> filter(item, isDelayed))
                     .collect(Guavate.toImmutableList());
         } catch (MailQueueException e) {
             LOGGER.info("Invalid request for getting the mail queue " + queue, e);
@@ -192,4 +204,9 @@ public class MailQueueRoutes implements Routes {
                 .haltError();
         }
     }
+
+    private boolean filter(MailQueueItemDTO item, Optional<Boolean> isDelayed) {
+        return isDelayed.map(delayed -> delayed == item.isDelayed())
+            .orElse(true);
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b743a2/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 44fc597..1e0f942 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
@@ -30,6 +30,7 @@ import static org.hamcrest.Matchers.hasSize;
 
 import java.nio.charset.StandardCharsets;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.james.core.MailAddress;
 import org.apache.james.metrics.api.NoopMetricFactory;
@@ -44,6 +45,7 @@ import org.apache.mailet.base.test.FakeMail;
 import org.eclipse.jetty.http.HttpStatus;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import com.github.steveash.guavate.Guavate;
@@ -215,4 +217,53 @@ public class MailQueueRoutesTest {
             .body(firstMessage + ".recipients", equalTo(expectedRecipients))
             .body(firstMessage + ".delayed", equalTo(false));
     }
+
+    @Test
+    public void listMessagesShouldReturnEmptyWhenNoDelayedMessagesAndAskFor() throws Exception {
+        MemoryMailQueue queue = mailQueueFactory.createQueue(FIRST_QUEUE);
+        FakeMail mail = Mails.defaultMail().build();
+        queue.enQueue(mail);
+
+        RestAssured.given()
+            .param("delayed", "true")
+        .when()
+            .get(FIRST_QUEUE + "/messages")
+        .then()
+            .statusCode(HttpStatus.OK_200)
+            .contentType(ContentType.JSON)
+            .body(".", empty());
+    }
+
+    @Test
+    public void listMessagesShouldReturnCurrentMessagesWhenMessagesAndAskForNotDelayed() throws Exception {
+        MemoryMailQueue queue = mailQueueFactory.createQueue(FIRST_QUEUE);
+        FakeMail mail = Mails.defaultMail().build();
+        queue.enQueue(mail);
+
+        RestAssured.given()
+            .param("delayed", "false")
+        .when()
+            .get(FIRST_QUEUE + "/messages")
+        .then()
+            .statusCode(HttpStatus.OK_200)
+            .contentType(ContentType.JSON)
+            .body(".", hasSize(1));
+    }
+
+    @Ignore("MemoryMailQueueFactory doesn't support delay")
+    @Test
+    public void listMessagesShouldReturnDelayedMessagesAndAskFor() throws Exception {
+        MemoryMailQueue queue = mailQueueFactory.createQueue(FIRST_QUEUE);
+        FakeMail mail = Mails.defaultMail().build();
+        queue.enQueue(mail, 10, TimeUnit.MINUTES);
+
+        RestAssured.given()
+            .param("delayed", "true")
+        .when()
+            .get(FIRST_QUEUE + "/messages")
+        .then()
+            .statusCode(HttpStatus.OK_200)
+            .contentType(ContentType.JSON)
+            .body(".", hasSize(1));
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b743a2/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesUnitTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesUnitTest.java b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesUnitTest.java
new file mode 100644
index 0000000..859f52e
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesUnitTest.java
@@ -0,0 +1,65 @@
+/****************************************************************
+ * 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.routes;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.Optional;
+
+import org.apache.james.queue.api.MailQueueFactory;
+import org.apache.james.queue.api.ManageableMailQueue;
+import org.apache.james.webadmin.utils.JsonTransformer;
+import org.junit.Before;
+import org.junit.Test;
+
+public class MailQueueRoutesUnitTest {
+
+    MailQueueRoutes testee;
+
+    @Before
+    public void setup() { 
+        MailQueueFactory<ManageableMailQueue> mailQueueFactory = null;
+        testee = new MailQueueRoutes(mailQueueFactory, new JsonTransformer());
+    }
+
+    @Test
+    public void isDelayedShouldReturnEmptyWhenNull() {
+        Optional<Boolean> delayed = testee.isDelayed(null);
+        assertThat(delayed).isEmpty();
+    }
+
+    @Test
+    public void isDelayedShouldBeEqualsToTrueWhenTrue() {
+        Optional<Boolean> delayed = testee.isDelayed("true");
+        assertThat(delayed).contains(true);
+    }
+
+    @Test
+    public void isDelayedShouldBeEqualsToFalseWhenFalse() {
+        Optional<Boolean> delayed = testee.isDelayed("false");
+        assertThat(delayed).contains(false);
+    }
+
+    @Test
+    public void isDelayedShouldBeEqualsToFalseWhenOtherValue() {
+        Optional<Boolean> delayed = testee.isDelayed("abc");
+        assertThat(delayed).contains(false);
+    }
+}


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