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