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:23 UTC
[12/16] james-project git commit: JAMES-2292 Introduce GET mail queue
messages endpoint
JAMES-2292 Introduce GET mail queue messages 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/3a014174
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/3a014174
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/3a014174
Branch: refs/heads/master
Commit: 3a014174946dbb440333ede3737290370c5b6351
Parents: 8d77e62
Author: Antoine Duprat <ad...@linagora.com>
Authored: Tue Jan 23 15:35:11 2018 +0100
Committer: benwa <bt...@linagora.com>
Committed: Thu Jan 25 11:46:04 2018 +0700
----------------------------------------------------------------------
.../webadmin/webadmin-mailqueue/pom.xml | 5 ++
.../james/webadmin/routes/MailQueueRoutes.java | 54 +++++++++++++++++++-
.../webadmin/routes/MailQueueRoutesTest.java | 53 +++++++++++++++++++
3 files changed, 111 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/3a014174/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 bdb1860..92402e5 100644
--- a/server/protocols/webadmin/webadmin-mailqueue/pom.xml
+++ b/server/protocols/webadmin/webadmin-mailqueue/pom.xml
@@ -78,6 +78,11 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>java-hamcrest</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
http://git-wip-us.apache.org/repos/asf/james-project/blob/3a014174/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 5a6aa15..c44ee91 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,7 +22,6 @@ 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;
@@ -32,8 +31,10 @@ import javax.ws.rs.Produces;
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.util.streams.Iterators;
import org.apache.james.webadmin.Routes;
import org.apache.james.webadmin.dto.MailQueueDTO;
+import org.apache.james.webadmin.dto.MailQueueItemDTO;
import org.apache.james.webadmin.utils.ErrorResponder;
import org.apache.james.webadmin.utils.ErrorResponder.ErrorType;
import org.apache.james.webadmin.utils.JsonTransformer;
@@ -41,8 +42,10 @@ import org.eclipse.jetty.http.HttpStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.github.fge.lambdas.Throwing;
import com.github.steveash.guavate.Guavate;
import com.google.common.annotations.VisibleForTesting;
+
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@@ -60,6 +63,7 @@ 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 Logger LOGGER = LoggerFactory.getLogger(MailQueueRoutes.class);
private final MailQueueFactory<ManageableMailQueue> mailQueueFactory;
@@ -76,6 +80,8 @@ public class MailQueueRoutes implements Routes {
defineListQueues(service);
getMailQueue(service);
+
+ listMessages(service);
}
@GET
@@ -140,4 +146,50 @@ public class MailQueueRoutes implements Routes {
.haltError();
}
}
+
+ @GET
+ @Path("/{mailQueueName}/messages")
+ @ApiImplicitParams({
+ @ApiImplicitParam(required = true, dataType = "string", name = "mailQueueName", paramType = "path")
+ })
+ @ApiOperation(
+ value = "List the messages of the MailQueue"
+ )
+ @ApiResponses(value = {
+ @ApiResponse(code = HttpStatus.OK_200, message = "OK", response = List.class),
+ @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "The MailQueue does not exist."),
+ @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "Internal server error - Something went bad on the server side.")
+ })
+ public void listMessages(Service service) {
+ service.get(BASE_URL + SEPARATOR + MAIL_QUEUE_NAME + MESSAGES,
+ (request, response) -> listMessages(request),
+ jsonTransformer);
+ }
+
+ 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());
+ }
+
+ private List<MailQueueItemDTO> listMessages(ManageableMailQueue queue) {
+ try {
+ return Iterators.toStream(queue.browse())
+ .map(Throwing.function(MailQueueItemDTO::from))
+ .collect(Guavate.toImmutableList());
+ } catch (MailQueueException e) {
+ LOGGER.info("Invalid request for getting the mail queue " + queue, e);
+ throw ErrorResponder.builder()
+ .statusCode(HttpStatus.BAD_REQUEST_400)
+ .type(ErrorType.INVALID_ARGUMENT)
+ .message("Invalid request for getting the mail queue " + queue)
+ .cause(e)
+ .haltError();
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/3a014174/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 d45a438..44fc597 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
@@ -24,11 +24,14 @@ import static com.jayway.restassured.config.EncoderConfig.encoderConfig;
import static com.jayway.restassured.config.RestAssuredConfig.newConfig;
import static org.apache.james.webadmin.WebAdminServer.NO_CONFIGURATION;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.hamcrest.Matchers.empty;
import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasSize;
import java.nio.charset.StandardCharsets;
import java.util.List;
+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.RawMailQueueItemDecoratorFactory;
@@ -37,11 +40,13 @@ import org.apache.james.queue.memory.MemoryMailQueueFactory.MemoryMailQueue;
import org.apache.james.webadmin.WebAdminServer;
import org.apache.james.webadmin.WebAdminUtils;
import org.apache.james.webadmin.utils.JsonTransformer;
+import org.apache.mailet.base.test.FakeMail;
import org.eclipse.jetty.http.HttpStatus;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import com.github.steveash.guavate.Guavate;
import com.jayway.restassured.RestAssured;
import com.jayway.restassured.builder.RequestSpecBuilder;
import com.jayway.restassured.http.ContentType;
@@ -162,4 +167,52 @@ public class MailQueueRoutesTest {
.statusCode(HttpStatus.NOT_FOUND_404);
}
+ @Test
+ public void listMessagesShouldReturnEmptyListWhenNoMessages() {
+ mailQueueFactory.createQueue(FIRST_QUEUE);
+
+ when()
+ .get(FIRST_QUEUE + "/messages")
+ .then()
+ .statusCode(HttpStatus.OK_200)
+ .contentType(ContentType.JSON)
+ .body(".", empty());
+ }
+
+ @Test
+ public void listMessagesShouldReturnMessagesWhenSome() throws Exception {
+ MemoryMailQueue queue = mailQueueFactory.createQueue(FIRST_QUEUE);
+ queue.enQueue(Mails.defaultMail().build());
+ queue.enQueue(Mails.defaultMail().build());
+
+ when()
+ .get(FIRST_QUEUE + "/messages")
+ .then()
+ .statusCode(HttpStatus.OK_200)
+ .contentType(ContentType.JSON)
+ .body(".", hasSize(2));
+ }
+
+ @Test
+ public void listMessagesShouldReturnMessageDetailWhenSome() throws Exception {
+ MemoryMailQueue queue = mailQueueFactory.createQueue(FIRST_QUEUE);
+ FakeMail mail = Mails.defaultMail().build();
+ queue.enQueue(mail);
+
+ String firstMessage = "[0]";
+ List<String> expectedRecipients = mail.getRecipients().stream()
+ .map(MailAddress::asPrettyString)
+ .collect(Guavate.toImmutableList());
+
+ when()
+ .get(FIRST_QUEUE + "/messages")
+ .then()
+ .statusCode(HttpStatus.OK_200)
+ .contentType(ContentType.JSON)
+ .body(".", hasSize(1))
+ .body(firstMessage + ".name", equalTo(mail.getName()))
+ .body(firstMessage + ".sender", equalTo(mail.getSender().asPrettyString()))
+ .body(firstMessage + ".recipients", equalTo(expectedRecipients))
+ .body(firstMessage + ".delayed", equalTo(false));
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org