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:12 UTC

[01/16] james-project git commit: JAMES-2293 WebAdmin should allow to remove a mail from a mail repository

Repository: james-project
Updated Branches:
  refs/heads/master f3eb9b1fb -> b9ee90776


JAMES-2293 WebAdmin should allow to remove a mail from a mail repository


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

Branch: refs/heads/master
Commit: 9118fd0cba3694d21a8d1a003a284b23c5d4d5e8
Parents: 2fd2e22
Author: benwa <bt...@linagora.com>
Authored: Mon Jan 22 13:11:28 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Wed Jan 24 15:09:50 2018 +0700

----------------------------------------------------------------------
 .../webadmin/routes/MailRepositoriesRoutes.java | 32 ++++++++++++-
 .../service/MailRepositoryStoreService.java     |  6 +++
 .../routes/MailRepositoriesRoutesTest.java      | 49 ++++++++++++++++++++
 3 files changed, 86 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/9118fd0c/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 55dc43e..4f106b7 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
@@ -26,6 +26,7 @@ import java.util.Optional;
 
 import javax.inject.Inject;
 import javax.mail.MessagingException;
+import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
@@ -33,6 +34,7 @@ import javax.ws.rs.Produces;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.util.streams.Limit;
 import org.apache.james.util.streams.Offset;
+import org.apache.james.webadmin.Constants;
 import org.apache.james.webadmin.Routes;
 import org.apache.james.webadmin.dto.ExtendedMailRepositoryResponse;
 import org.apache.james.webadmin.service.MailRepositoryStoreService;
@@ -80,6 +82,8 @@ public class MailRepositoriesRoutes implements Routes {
         defineGetMailRepository();
 
         defineGetMail();
+
+        defineDeleteMail();
     }
 
     @GET
@@ -207,7 +211,33 @@ public class MailRepositoriesRoutes implements Routes {
         }, jsonTransformer);
     }
 
-    private Optional<Integer> assertPositiveInteger(Request request, String parameterName) {
+    @DELETE
+    @Path("/{encodedUrl}/mails/{mailKey}")
+    @ApiOperation(value = "Deleting a specific mail from that mailRepository")
+    @ApiResponses(value = {
+        @ApiResponse(code = HttpStatus.OK_200, message = "Mail is no more stored in the repository", response = List.class),
+        @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "Internal server error - Something went bad on the server side."),
+    })
+    public void defineDeleteMail() {
+        service.delete(MAIL_REPOSITORIES + "/:encodedUrl/mails/:mailKey", (request, response) -> {
+            String url = URLDecoder.decode(request.params("encodedUrl"), StandardCharsets.UTF_8.displayName());
+            String mailKey = request.params("mailKey");
+            try {
+                response.status(HttpStatus.NO_CONTENT_204);
+                repositoryStoreService.deleteMail(url, mailKey);
+                return Constants.EMPTY_BODY;
+            } catch (MailRepositoryStore.MailRepositoryStoreException | MessagingException e) {
+                throw ErrorResponder.builder()
+                    .statusCode(HttpStatus.INTERNAL_SERVER_ERROR_500)
+                    .type(ErrorResponder.ErrorType.SERVER_ERROR)
+                    .cause(e)
+                    .message("Error while deleting mail")
+                    .haltError();
+            }
+        });
+    }
+
+private Optional<Integer> assertPositiveInteger(Request request, String parameterName) {
         try {
             return Optional.ofNullable(request.queryParams(parameterName))
                 .filter(s -> !Strings.isNullOrEmpty(s))

http://git-wip-us.apache.org/repos/asf/james-project/blob/9118fd0c/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 d1117c5..d7ca74a 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
@@ -79,4 +79,10 @@ public class MailRepositoryStoreService {
         return Optional.ofNullable(mailRepository.retrieve(mailKey))
             .map(Throwing.function(MailDto::fromMail).sneakyThrow());
     }
+
+    public void deleteMail(String url, String mailKey) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
+        mailRepositoryStore.select(url)
+            .remove(mailKey);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/9118fd0c/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 56543ce..6a3f0ac 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
@@ -423,4 +423,53 @@ public class MailRepositoriesRoutesTest {
             .body("message", is("Could not retrieve " + name));
     }
 
+    @Test
+    public void deletingAMailShouldRemoveIt() throws Exception {
+        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+
+        String name1 = "name1";
+        String name2 = "name2";
+        mailRepository.store(FakeMail.builder()
+            .name(name1)
+            .build());
+        mailRepository.store(FakeMail.builder()
+            .name(name2)
+            .build());
+
+        given()
+            .delete(URL_ESCAPED_MY_REPO + "/mails/" + name1);
+
+        when()
+            .get(URL_ESCAPED_MY_REPO + "/mails")
+            .then()
+            .statusCode(HttpStatus.OK_200)
+            .body("", hasSize(1))
+            .body("mailKey", contains(name2));
+    }
+
+    @Test
+    public void deletingAMailShouldReturnOkWhenExist() throws Exception {
+        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+
+        String name1 = "name1";
+        mailRepository.store(FakeMail.builder()
+            .name(name1)
+            .build());
+
+        when()
+            .delete(URL_ESCAPED_MY_REPO + "/mails/" + name1)
+        .then()
+            .statusCode(HttpStatus.NO_CONTENT_204);
+    }
+
+    @Test
+    public void deletingAMailShouldReturnOkWhenNotExist() throws Exception {
+        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+
+        when()
+            .delete(URL_ESCAPED_MY_REPO + "/mails/name")
+        .then()
+            .statusCode(HttpStatus.NO_CONTENT_204);
+    }
+
 }


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


[06/16] james-project git commit: JAMES-2293 WebAdmin should allow to remove all mails from a mail repository

Posted by bt...@apache.org.
JAMES-2293 WebAdmin should allow to remove all mails from a mail repository

A task would be generated as the action can potentially be long.


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

Branch: refs/heads/master
Commit: f2d8f04ebd9cf7600466f054aaee24dec30198be
Parents: 3c2559c
Author: benwa <bt...@linagora.com>
Authored: Mon Jan 22 13:46:58 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jan 25 11:39:06 2018 +0700

----------------------------------------------------------------------
 .../webadmin/routes/MailRepositoriesRoutes.java |  68 +++++++++++-
 .../service/ClearMailRepositoryTask.java        |  97 +++++++++++++++++
 .../service/MailRepositoryStoreService.java     |   5 +
 .../routes/MailRepositoriesRoutesTest.java      | 109 ++++++++++++++++++-
 4 files changed, 275 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/f2d8f04e/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 4f106b7..5879de7 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
@@ -32,11 +32,15 @@ import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 
 import org.apache.james.mailrepository.api.MailRepositoryStore;
+import org.apache.james.task.Task;
+import org.apache.james.task.TaskId;
+import org.apache.james.task.TaskManager;
 import org.apache.james.util.streams.Limit;
 import org.apache.james.util.streams.Offset;
 import org.apache.james.webadmin.Constants;
 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.utils.ErrorResponder;
 import org.apache.james.webadmin.utils.ErrorResponder.ErrorType;
@@ -51,6 +55,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;
 
@@ -63,12 +68,14 @@ public class MailRepositoriesRoutes implements Routes {
 
     private final JsonTransformer jsonTransformer;
     private final MailRepositoryStoreService repositoryStoreService;
+    private final TaskManager taskManager;
     private Service service;
 
     @Inject
-    public MailRepositoriesRoutes(MailRepositoryStoreService repositoryStoreService, JsonTransformer jsonTransformer) {
+    public MailRepositoriesRoutes(MailRepositoryStoreService repositoryStoreService, JsonTransformer jsonTransformer, TaskManager taskManager) {
         this.repositoryStoreService = repositoryStoreService;
         this.jsonTransformer = jsonTransformer;
+        this.taskManager = taskManager;
     }
 
     @Override
@@ -84,6 +91,8 @@ public class MailRepositoriesRoutes implements Routes {
         defineGetMail();
 
         defineDeleteMail();
+
+        defineDeleteAll();
     }
 
     @GET
@@ -169,7 +178,7 @@ public class MailRepositoriesRoutes implements Routes {
                         .type(ErrorResponder.ErrorType.NOT_FOUND)
                         .message("Could not retrieve " + mailKey)
                         .haltError());
-            } catch (MailRepositoryStore.MailRepositoryStoreException| MessagingException e) {
+            } catch (MailRepositoryStore.MailRepositoryStoreException | MessagingException e) {
                 throw ErrorResponder.builder()
                     .statusCode(HttpStatus.INTERNAL_SERVER_ERROR_500)
                     .type(ErrorResponder.ErrorType.SERVER_ERROR)
@@ -237,7 +246,60 @@ public class MailRepositoriesRoutes implements Routes {
         });
     }
 
-private Optional<Integer> assertPositiveInteger(Request request, String parameterName) {
+    @PATCH
+    @Path("/{encodedUrl}/mails")
+    @ApiOperation(value = "Deleting all mails in that mailRepository")
+    @ApiImplicitParams({
+        @ApiImplicitParam(
+            required = true,
+            paramType = "query parameter",
+            dataType = "String",
+            example = "?action=clear",
+            value = "Specify the action. Only clear is supported. clear removes all mails from that mail repository.")
+    })
+    @ApiResponses(value = {
+        @ApiResponse(code = HttpStatus.CREATED_201, message = "All mails are deleted", 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 defineDeleteAll() {
+        service.patch(MAIL_REPOSITORIES + "/:encodedUrl/mails", (request, response) -> {
+            String url = URLDecoder.decode(request.params("encodedUrl"), StandardCharsets.UTF_8.displayName());
+            try {
+                ensureSpecifiedClearAction(request);
+                Task task = repositoryStoreService.createClearMailRepositoryTask(url);
+                TaskId taskId = taskManager.submit(task);
+                return TaskIdDto.respond(response, taskId);
+            } catch (MailRepositoryStore.MailRepositoryStoreException | MessagingException e) {
+                throw ErrorResponder.builder()
+                    .statusCode(HttpStatus.INTERNAL_SERVER_ERROR_500)
+                    .type(ErrorResponder.ErrorType.SERVER_ERROR)
+                    .cause(e)
+                    .message("Error while deleting all mails")
+                    .haltError();
+            }
+        }, jsonTransformer);
+    }
+
+    private void ensureSpecifiedClearAction(Request request) {
+        String action = request.queryParams("action");
+        if (Strings.isNullOrEmpty(action)) {
+            throw ErrorResponder.builder()
+                .statusCode(HttpStatus.BAD_REQUEST_400)
+                .type(ErrorResponder.ErrorType.INVALID_ARGUMENT)
+                .message("You need to specify an action. Currently only clear is supported.")
+                .haltError();
+        }
+        if (!action.equals("clear")) {
+            throw ErrorResponder.builder()
+                .statusCode(HttpStatus.BAD_REQUEST_400)
+                .type(ErrorResponder.ErrorType.INVALID_ARGUMENT)
+                .message("Unknown action " + action)
+                .haltError();
+        }
+    }
+
+    private Optional<Integer> assertPositiveInteger(Request request, String parameterName) {
         try {
             return Optional.ofNullable(request.queryParams(parameterName))
                 .filter(s -> !Strings.isNullOrEmpty(s))

http://git-wip-us.apache.org/repos/asf/james-project/blob/f2d8f04e/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ClearMailRepositoryTask.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ClearMailRepositoryTask.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ClearMailRepositoryTask.java
new file mode 100644
index 0000000..132e36c
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ClearMailRepositoryTask.java
@@ -0,0 +1,97 @@
+/****************************************************************
+ * 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.Supplier;
+
+import javax.mail.MessagingException;
+
+import org.apache.james.mailrepository.api.MailRepository;
+import org.apache.james.task.Task;
+import org.apache.james.task.TaskExecutionDetails;
+
+import com.google.common.base.Throwables;
+
+public class ClearMailRepositoryTask implements Task {
+
+    public static final String TYPE = "clearMailRepository";
+
+    public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation {
+        private final String repositoryUrl;
+        private final Supplier<Long> countSupplier;
+        private final long initialCount;
+
+        public AdditionalInformation(String repositoryUrl, Supplier<Long> countSupplier) {
+            this.repositoryUrl = repositoryUrl;
+            this.initialCount = countSupplier.get();
+            this.countSupplier = countSupplier;
+        }
+
+        public String getRepositoryUrl() {
+            return repositoryUrl;
+        }
+
+        public long getRemainingCount() {
+            return countSupplier.get();
+        }
+
+        public long getInitialCount() {
+            return initialCount;
+        }
+    }
+
+    private final MailRepository mailRepository;
+    private final AdditionalInformation additionalInformation;
+
+    public ClearMailRepositoryTask(MailRepository mailRepository, String url) {
+        this.mailRepository = mailRepository;
+        this.additionalInformation = new AdditionalInformation(url, this::getRemainingSize);
+    }
+
+    @Override
+    public Result run() {
+        try {
+            mailRepository.removeAll();
+            return Result.COMPLETED;
+        } catch (MessagingException e) {
+            LOGGER.error("Encountered error while clearing repository", e);
+            return Result.PARTIAL;
+        }
+    }
+
+    @Override
+    public String type() {
+        return TYPE;
+    }
+
+    @Override
+    public Optional<TaskExecutionDetails.AdditionalInformation> details() {
+        return Optional.of(additionalInformation);
+    }
+
+    public long getRemainingSize() {
+        try {
+            return mailRepository.size();
+        } catch (MessagingException e) {
+            throw Throwables.propagate(e);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/f2d8f04e/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 d7ca74a..fd17507 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
@@ -27,6 +27,7 @@ import javax.mail.MessagingException;
 
 import org.apache.james.mailrepository.api.MailRepository;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
+import org.apache.james.task.Task;
 import org.apache.james.util.streams.Iterators;
 import org.apache.james.util.streams.Limit;
 import org.apache.james.util.streams.Offset;
@@ -85,4 +86,8 @@ public class MailRepositoryStoreService {
             .remove(mailKey);
     }
 
+    public Task createClearMailRepositoryTask(String url) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
+        return new ClearMailRepositoryTask(mailRepositoryStore.select(url), url);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f2d8f04e/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 6a3f0ac..6829f22 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
@@ -21,6 +21,7 @@ package org.apache.james.webadmin.routes;
 
 import static com.jayway.restassured.RestAssured.given;
 import static com.jayway.restassured.RestAssured.when;
+import static com.jayway.restassured.RestAssured.with;
 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;
@@ -32,6 +33,7 @@ import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.hasSize;
 import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.isEmptyOrNullString;
+import static org.hamcrest.Matchers.notNullValue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -41,8 +43,10 @@ import java.util.List;
 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.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.utils.ErrorResponder;
 import org.apache.james.webadmin.utils.JsonTransformer;
@@ -71,9 +75,13 @@ public class MailRepositoriesRoutesTest {
         mailRepositoryStore = mock(MailRepositoryStore.class);
         mailRepository = new MemoryMailRepository();
 
+        MemoryTaskManager taskManager = new MemoryTaskManager();
+        JsonTransformer jsonTransformer = new JsonTransformer();
         webAdminServer = WebAdminUtils.createWebAdminServer(
                 new NoopMetricFactory(),
-                new MailRepositoriesRoutes(new MailRepositoryStoreService(mailRepositoryStore), new JsonTransformer()));
+                new MailRepositoriesRoutes(new MailRepositoryStoreService(mailRepositoryStore),
+                    jsonTransformer, taskManager),
+            new TasksRoutes(taskManager, jsonTransformer));
         webAdminServer.configure(NO_CONFIGURATION);
         webAdminServer.await();
 
@@ -472,4 +480,103 @@ public class MailRepositoriesRoutesTest {
             .statusCode(HttpStatus.NO_CONTENT_204);
     }
 
+    @Test
+    public void deletingAllMailsShouldCreateATask() throws Exception {
+        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+
+        when()
+            .patch(URL_ESCAPED_MY_REPO + "/mails?action=clear")
+        .then()
+            .statusCode(HttpStatus.CREATED_201)
+            .header("Location", is(notNullValue()))
+            .body("taskId", is(notNullValue()));
+    }
+
+    @Test
+    public void patchShouldOnlySupportClear() throws Exception {
+        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(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("Unknown action invalid"));
+    }
+
+    @Test
+    public void patchShouldRequireAnAction() throws Exception {
+        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(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("You need to specify an action. Currently only clear is supported."));
+    }
+
+    @Test
+    public void clearTaskShouldHaveDetails() throws Exception {
+        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(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?action=clear")
+            .jsonPath()
+            .get("taskId");
+
+        given()
+            .basePath(TasksRoutes.BASE)
+        .when()
+            .get(taskId + "/await")
+        .then()
+            .body("status", is("completed"))
+            .body("taskId", is(notNullValue()))
+            .body("type", is(ClearMailRepositoryTask.TYPE))
+            .body("additionalInformation.repositoryUrl", is(URL_MY_REPO))
+            .body("additionalInformation.initialCount", is(2))
+            .body("additionalInformation.remainingCount", is(0))
+            .body("startedDate", is(notNullValue()))
+            .body("submitDate", is(notNullValue()))
+            .body("completedDate", is(notNullValue()));
+    }
+
+    @Test
+    public void clearTaskShouldRemoveAllTheMailsFromTheMailRepository() throws Exception {
+        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+
+        mailRepository.store(FakeMail.builder()
+            .name("name1")
+            .build());
+        mailRepository.store(FakeMail.builder()
+            .name("name2")
+            .build());
+
+        String taskId = with()
+            .patch(URL_ESCAPED_MY_REPO + "/mails?action=clear")
+            .jsonPath()
+            .get("taskId");
+
+        given()
+            .basePath(TasksRoutes.BASE)
+            .get(taskId + "/await");
+
+        when()
+            .get(URL_ESCAPED_MY_REPO + "/mails")
+        .then()
+            .statusCode(HttpStatus.OK_200)
+            .body("", hasSize(0));
+    }
+
 }


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


[09/16] james-project git commit: JAMES-2293 Use DELETE rather than patch for clearing mail repository

Posted by bt...@apache.org.
JAMES-2293 Use DELETE rather than patch for clearing mail repository


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

Branch: refs/heads/master
Commit: e30179fabc53e27b4e95ed6fada5a68c683d51ef
Parents: e727433
Author: benwa <bt...@linagora.com>
Authored: Wed Jan 24 15:14:02 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jan 25 11:39:29 2018 +0700

----------------------------------------------------------------------
 .../webadmin/routes/MailRepositoriesRoutes.java | 32 ++----------------
 .../routes/MailRepositoriesRoutesTest.java      | 34 +++-----------------
 2 files changed, 6 insertions(+), 60 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/e30179fa/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 5879de7..1078206 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
@@ -55,7 +55,6 @@ 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;
 
@@ -246,27 +245,18 @@ public class MailRepositoriesRoutes implements Routes {
         });
     }
 
-    @PATCH
+    @DELETE
     @Path("/{encodedUrl}/mails")
     @ApiOperation(value = "Deleting all mails in that mailRepository")
-    @ApiImplicitParams({
-        @ApiImplicitParam(
-            required = true,
-            paramType = "query parameter",
-            dataType = "String",
-            example = "?action=clear",
-            value = "Specify the action. Only clear is supported. clear removes all mails from that mail repository.")
-    })
     @ApiResponses(value = {
         @ApiResponse(code = HttpStatus.CREATED_201, message = "All mails are deleted", 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 defineDeleteAll() {
-        service.patch(MAIL_REPOSITORIES + "/:encodedUrl/mails", (request, response) -> {
+        service.delete(MAIL_REPOSITORIES + "/:encodedUrl/mails", (request, response) -> {
             String url = URLDecoder.decode(request.params("encodedUrl"), StandardCharsets.UTF_8.displayName());
             try {
-                ensureSpecifiedClearAction(request);
                 Task task = repositoryStoreService.createClearMailRepositoryTask(url);
                 TaskId taskId = taskManager.submit(task);
                 return TaskIdDto.respond(response, taskId);
@@ -281,24 +271,6 @@ public class MailRepositoriesRoutes implements Routes {
         }, jsonTransformer);
     }
 
-    private void ensureSpecifiedClearAction(Request request) {
-        String action = request.queryParams("action");
-        if (Strings.isNullOrEmpty(action)) {
-            throw ErrorResponder.builder()
-                .statusCode(HttpStatus.BAD_REQUEST_400)
-                .type(ErrorResponder.ErrorType.INVALID_ARGUMENT)
-                .message("You need to specify an action. Currently only clear is supported.")
-                .haltError();
-        }
-        if (!action.equals("clear")) {
-            throw ErrorResponder.builder()
-                .statusCode(HttpStatus.BAD_REQUEST_400)
-                .type(ErrorResponder.ErrorType.INVALID_ARGUMENT)
-                .message("Unknown action " + action)
-                .haltError();
-        }
-    }
-
     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/e30179fa/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 14a6b8a..cbad2b4 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
@@ -482,7 +482,7 @@ public class MailRepositoriesRoutesTest {
         when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         when()
-            .patch(URL_ESCAPED_MY_REPO + "/mails?action=clear")
+            .delete(URL_ESCAPED_MY_REPO + "/mails")
         .then()
             .statusCode(HttpStatus.CREATED_201)
             .header("Location", is(notNullValue()))
@@ -490,32 +490,6 @@ public class MailRepositoriesRoutesTest {
     }
 
     @Test
-    public void patchShouldOnlySupportClear() 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("Unknown action invalid"));
-    }
-
-    @Test
-    public void patchShouldRequireAnAction() 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("You need to specify an action. Currently only clear is supported."));
-    }
-
-    @Test
     public void clearTaskShouldHaveDetails() throws Exception {
         when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
@@ -529,7 +503,7 @@ public class MailRepositoriesRoutesTest {
             .build());
 
         String taskId = with()
-            .patch(URL_ESCAPED_MY_REPO + "/mails?action=clear")
+            .delete(URL_ESCAPED_MY_REPO + "/mails")
             .jsonPath()
             .get("taskId");
 
@@ -561,7 +535,7 @@ public class MailRepositoriesRoutesTest {
             .build());
 
         String taskId = with()
-            .patch(URL_ESCAPED_MY_REPO + "/mails?action=clear")
+            .delete(URL_ESCAPED_MY_REPO + "/mails")
             .jsonPath()
             .get("taskId");
 
@@ -581,7 +555,7 @@ public class MailRepositoriesRoutesTest {
         when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.empty());
 
         when()
-            .patch(URL_ESCAPED_MY_REPO + "/mails?action=clear")
+            .delete(URL_ESCAPED_MY_REPO + "/mails")
         .then()
             .statusCode(HttpStatus.NOT_FOUND_404)
             .body("statusCode", is(404))


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


[14/16] james-project git commit: JAMES-2292 Introduce MailQueueItemDTO

Posted by bt...@apache.org.
JAMES-2292 Introduce MailQueueItemDTO


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

Branch: refs/heads/master
Commit: 8d77e62043bbac0ac72d2d02c6b0e874828b7997
Parents: 2ecbdea
Author: Antoine Duprat <ad...@linagora.com>
Authored: Tue Jan 23 14:54:27 2018 +0100
Committer: benwa <bt...@linagora.com>
Committed: Thu Jan 25 11:46:04 2018 +0700

----------------------------------------------------------------------
 .../james/webadmin/dto/MailQueueItemDTO.java    | 125 +++++++++++++++++++
 .../webadmin/dto/MailQueueItemDTOTest.java      |  67 ++++++++++
 2 files changed, 192 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/8d77e620/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueItemDTO.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueItemDTO.java b/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueItemDTO.java
new file mode 100644
index 0000000..d7ec0b8
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueItemDTO.java
@@ -0,0 +1,125 @@
+/****************************************************************
+ * 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 java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.Optional;
+
+import org.apache.james.core.MailAddress;
+import org.apache.james.queue.api.MailQueue.MailQueueException;
+import org.apache.james.queue.api.ManageableMailQueue;
+
+import com.github.steveash.guavate.Guavate;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
+
+public class MailQueueItemDTO {
+
+    private static final long NO_NEXT_DELIVERY = -1;
+
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    public static MailQueueItemDTO from(ManageableMailQueue.MailQueueItemView mailQueueItemView) throws MailQueueException {
+        return builder()
+                .name(mailQueueItemView.getMail().getName())
+                .sender(mailQueueItemView.getMail().getSender())
+                .recipients(mailQueueItemView.getMail().getRecipients())
+                .nextDelivery(nextDelivery(mailQueueItemView))
+                .build();
+    }
+
+    private static Optional<Date> nextDelivery(ManageableMailQueue.MailQueueItemView mailQueueItemView) {
+        long nextDelivery = mailQueueItemView.getNextDelivery();
+        if (nextDelivery == NO_NEXT_DELIVERY) {
+            return Optional.empty();
+        }
+        return Optional.of(new Date(nextDelivery));
+    }
+
+    public static class Builder {
+
+        private String name;
+        private String sender;
+        private List<String> recipients;
+        private Optional<Date> nextDelivery;
+
+        private Builder() {
+        }
+
+        public Builder name(String name) {
+            this.name = name;
+            return this;
+        }
+
+        public Builder sender(MailAddress sender) {
+            this.sender = sender.asString();
+            return this;
+        }
+
+        public Builder recipients(Collection<MailAddress> recipients) {
+            this.recipients = recipients.stream()
+                    .map(MailAddress::asString)
+                    .collect(Guavate.toImmutableList());
+            return this;
+        }
+
+        public Builder nextDelivery(Optional<Date> nextDelivery) {
+            this.nextDelivery = nextDelivery;
+            return this;
+        }
+
+        public MailQueueItemDTO build() {
+            Preconditions.checkArgument(!Strings.isNullOrEmpty(name), "name is mandatory");
+            return new MailQueueItemDTO(name, sender, recipients, nextDelivery);
+        }
+    }
+
+    private final String name;
+    private final String sender;
+    private final List<String> recipients;
+    private final Optional<Date> nextDelivery;
+
+    public MailQueueItemDTO(String name, String sender, List<String> recipients, Optional<Date> nextDelivery) {
+        this.name = name;
+        this.sender = sender;
+        this.recipients = recipients;
+        this.nextDelivery = nextDelivery;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getSender() {
+        return sender;
+    }
+
+    public List<String> getRecipients() {
+        return recipients;
+    }
+
+    public Optional<Date> getNextDelivery() {
+        return nextDelivery;
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/8d77e620/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueItemDTOTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueItemDTOTest.java b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueItemDTOTest.java
new file mode 100644
index 0000000..72d8ef7
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueItemDTOTest.java
@@ -0,0 +1,67 @@
+/****************************************************************
+ * 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.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.util.Date;
+import java.util.List;
+
+import org.apache.james.core.MailAddress;
+import org.apache.james.queue.api.Mails;
+import org.apache.james.queue.api.ManageableMailQueue.MailQueueItemView;
+import org.apache.mailet.base.test.FakeMail;
+import org.assertj.core.api.JUnitSoftAssertions;
+import org.junit.Rule;
+import org.junit.Test;
+
+import com.github.steveash.guavate.Guavate;
+
+public class MailQueueItemDTOTest {
+
+    @Rule
+    public final JUnitSoftAssertions softly = new JUnitSoftAssertions();
+
+    @Test
+    public void buildShouldThrowWhenNameIsNull() {
+        assertThatThrownBy(() -> MailQueueItemDTO.builder().build())
+            .isInstanceOf(IllegalArgumentException.class);
+    }
+
+    @Test
+    public void buildShouldThrowWhenNameIsEmpty() {
+        assertThatThrownBy(() -> MailQueueItemDTO.builder().name("").build())
+            .isInstanceOf(IllegalArgumentException.class);
+    }
+
+    @Test
+    public void fromShouldCreateTheRightObject() throws Exception {
+        FakeMail mail = Mails.defaultMail().build();
+        MailQueueItemView mailQueueItemView = new MailQueueItemView(mail, 4);
+        MailQueueItemDTO mailQueueItemDTO = MailQueueItemDTO.from(mailQueueItemView);
+        List<String> expectedRecipients = mail.getRecipients().stream()
+                .map(MailAddress::asString)
+                .collect(Guavate.toImmutableList());
+
+        softly.assertThat(mailQueueItemDTO.getName()).isEqualTo(mail.getName());
+        softly.assertThat(mailQueueItemDTO.getSender()).isEqualTo(mail.getSender().asString());
+        softly.assertThat(mailQueueItemDTO.getRecipients()).isEqualTo(expectedRecipients);
+        softly.assertThat(mailQueueItemDTO.getNextDelivery()).contains(new Date(4));
+    }
+}


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


[05/16] james-project git commit: JAMES-2293 Allow to clear a mail repository

Posted by bt...@apache.org.
JAMES-2293 Allow to clear a mail repository


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

Branch: refs/heads/master
Commit: 3c2559ca065bcfa25c49f79241f39514ecda11ec
Parents: 9118fd0
Author: benwa <bt...@linagora.com>
Authored: Mon Jan 22 11:49:04 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jan 25 11:39:06 2018 +0700

----------------------------------------------------------------------
 .../mailrepository/file/MBoxMailRepository.java |  8 ++++++
 .../lib/AbstractMailRepository.java             |  8 ++++++
 .../mailrepository/api/MailRepository.java      |  7 +++++
 .../mailrepository/MailRepositoryContract.java  | 30 +++++++++++++++++++-
 .../memory/MemoryMailRepository.java            |  5 ++++
 5 files changed, 57 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/3c2559ca/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/MBoxMailRepository.java
----------------------------------------------------------------------
diff --git a/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/MBoxMailRepository.java b/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/MBoxMailRepository.java
index b0b3992..fa9ba5d 100755
--- a/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/MBoxMailRepository.java
+++ b/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/MBoxMailRepository.java
@@ -77,6 +77,8 @@ import org.apache.mailet.Mail;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.github.fge.lambdas.Throwing;
+import com.google.common.collect.ImmutableList;
 import com.google.common.hash.Hashing;
 
 /**
@@ -699,4 +701,10 @@ public class MBoxMailRepository implements MailRepository, Configurable {
     public long size() throws MessagingException {
         return loadKeysAsArray().size();
     }
+
+    @Override
+    public void removeAll() throws MessagingException {
+        ImmutableList.copyOf(list())
+            .forEach(Throwing.<String>consumer(this::remove).sneakyThrow());
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3c2559ca/server/data/data-library/src/main/java/org/apache/james/mailrepository/lib/AbstractMailRepository.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/main/java/org/apache/james/mailrepository/lib/AbstractMailRepository.java b/server/data/data-library/src/main/java/org/apache/james/mailrepository/lib/AbstractMailRepository.java
index 11f3eb6..8f82041 100644
--- a/server/data/data-library/src/main/java/org/apache/james/mailrepository/lib/AbstractMailRepository.java
+++ b/server/data/data-library/src/main/java/org/apache/james/mailrepository/lib/AbstractMailRepository.java
@@ -33,6 +33,8 @@ import org.apache.mailet.Mail;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.github.fge.lambdas.Throwing;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterators;
 
 /**
@@ -163,4 +165,10 @@ public abstract class AbstractMailRepository implements MailRepository, Configur
     public long size() throws MessagingException {
         return Iterators.size(list());
     }
+
+    @Override
+    public void removeAll() throws MessagingException {
+        ImmutableList.copyOf(list())
+            .forEach(Throwing.<String>consumer(this::remove).sneakyThrow());
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3c2559ca/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepository.java
----------------------------------------------------------------------
diff --git a/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepository.java b/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepository.java
index 95d7a89..db5e267 100644
--- a/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepository.java
+++ b/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepository.java
@@ -90,6 +90,13 @@ public interface MailRepository {
     void remove(String key) throws MessagingException;
 
     /**
+     * Removes all mails from this repository
+     *
+     * @throws MessagingException
+     */
+    void removeAll() throws MessagingException;
+
+    /**
      * @deprecated This method is implementation dependent, it has been moved to org.apache.james.mailrepository.lib.AbstractMailRepository
      */
     @Deprecated

http://git-wip-us.apache.org/repos/asf/james-project/blob/3c2559ca/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
----------------------------------------------------------------------
diff --git a/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java b/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
index 7594fde..d52c8cc 100644
--- a/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
+++ b/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
@@ -150,7 +150,6 @@ public interface MailRepositoryContract {
         testee.store(mail);
     }
 
-
     @Test
     default void retrieveShouldGetStoredMail() throws Exception {
         MailRepository testee = retrieveRepository();
@@ -163,6 +162,35 @@ public interface MailRepositoryContract {
     }
 
     @Test
+    default void removeAllShouldRemoveStoredMails() throws Exception {
+        MailRepository testee = retrieveRepository();
+        testee.store(createMail("name"));
+
+        testee.removeAll();
+
+        assertThat(testee.size()).isEqualTo(0L);
+    }
+
+    @Test
+    default void removeAllShouldBeIdempotent() throws Exception {
+        MailRepository testee = retrieveRepository();
+        testee.store(createMail("name"));
+
+        testee.removeAll();
+        testee.removeAll();
+
+        assertThat(testee.size()).isEqualTo(0L);
+    }
+
+    @Test
+    default void removeAllShouldNotFailWhenEmpty() throws Exception {
+        MailRepository testee = retrieveRepository();
+        testee.store(createMail("name"));
+
+        testee.removeAll();
+    }
+
+    @Test
     default void retrieveShouldGetStoredEmojiMail() throws Exception {
         MailRepository testee = retrieveRepository();
         String key1 = "mail1";

http://git-wip-us.apache.org/repos/asf/james-project/blob/3c2559ca/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepository.java
----------------------------------------------------------------------
diff --git a/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepository.java b/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepository.java
index b201bc2..6d83596 100644
--- a/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepository.java
+++ b/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepository.java
@@ -78,4 +78,9 @@ public class MemoryMailRepository implements MailRepository {
     public long size() {
         return mails.size();
     }
+
+    @Override
+    public void removeAll() {
+        mails.clear();
+    }
 }


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


[04/16] james-project git commit: JAMES-2293 Guice products should expose webadmin routes

Posted by bt...@apache.org.
JAMES-2293 Guice products should expose webadmin routes


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

Branch: refs/heads/master
Commit: 1ab371ec9daa96c0e76dbdda96bff5247f72bdae
Parents: f2d8f04
Author: benwa <bt...@linagora.com>
Authored: Mon Jan 22 14:18:22 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jan 25 11:39:06 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/jpa-smtp/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                  |  6 ++
 .../protocols/webadmin-mailrepository/pom.xml   | 71 ++++++++++++++++++++
 .../server/MailRepositoriesRoutesModule.java    | 34 ++++++++++
 .../WebAdminServerIntegrationTest.java          | 17 +++++
 13 files changed, 157 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/1ab371ec/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 3b888f0..e8fbafc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1420,6 +1420,11 @@
             </dependency>
             <dependency>
                 <groupId>${project.groupId}</groupId>
+                <artifactId>james-server-webadmin-mailrepository</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>${project.groupId}</groupId>
                 <artifactId>james-server-webadmin-swagger</artifactId>
                 <version>${project.version}</version>
             </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/1ab371ec/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 db90008..fc3bd28 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-mailrepository</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
             <artifactId>james-server-guice-webadmin-swagger</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/1ab371ec/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 8a81e4c..2d4784a 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
@@ -42,6 +42,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.MailRepositoriesRoutesModule;
 import org.apache.james.modules.server.MailboxRoutesModule;
 import org.apache.james.modules.server.SwaggerRoutesModule;
 import org.apache.james.modules.server.WebAdminServerModule;
@@ -55,6 +56,7 @@ public class CassandraJamesServerMain {
         new CassandraRoutesModule(),
         new DataRoutesModules(),
         new MailboxRoutesModule(),
+        new MailRepositoriesRoutesModule(),
         new SwaggerRoutesModule(),
         new WebAdminServerModule());
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/1ab371ec/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 d61ec25..1cd7261 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-mailrepository</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
             <artifactId>james-server-guice-webadmin-swagger</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/1ab371ec/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 141df5f..d3e3e15 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.MailRepositoriesRoutesModule;
 import org.apache.james.modules.server.MailboxRoutesModule;
 import org.apache.james.modules.server.NoJwtModule;
 import org.apache.james.modules.server.RawPostDequeueDecoratorModule;
@@ -51,6 +52,7 @@ public class JPAJamesServerMain {
         new WebAdminServerModule(),
         new DataRoutesModules(),
         new MailboxRoutesModule(),
+        new MailRepositoriesRoutesModule(),
         new SwaggerRoutesModule());
 
     public static final Module PROTOCOLS = Modules.combine(

http://git-wip-us.apache.org/repos/asf/james-project/blob/1ab371ec/server/container/guice/jpa-smtp/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-smtp/pom.xml b/server/container/guice/jpa-smtp/pom.xml
index b69c6a8..1a43a4d 100644
--- a/server/container/guice/jpa-smtp/pom.xml
+++ b/server/container/guice/jpa-smtp/pom.xml
@@ -78,6 +78,10 @@
         </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
+            <artifactId>james-server-guice-webadmin-mailrepository</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
             <artifactId>james-server-jpa-common-guice</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/1ab371ec/server/container/guice/jpa-smtp/src/main/java/org/apache/james/JPAJamesServerMain.java
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-smtp/src/main/java/org/apache/james/JPAJamesServerMain.java b/server/container/guice/jpa-smtp/src/main/java/org/apache/james/JPAJamesServerMain.java
index 0c36736..45f3fba 100644
--- a/server/container/guice/jpa-smtp/src/main/java/org/apache/james/JPAJamesServerMain.java
+++ b/server/container/guice/jpa-smtp/src/main/java/org/apache/james/JPAJamesServerMain.java
@@ -28,6 +28,7 @@ import org.apache.james.modules.server.ActiveMQQueueModule;
 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.MailRepositoriesRoutesModule;
 import org.apache.james.modules.server.NoJwtModule;
 import org.apache.james.modules.server.RawPostDequeueDecoratorModule;
 import org.apache.james.modules.server.WebAdminServerModule;
@@ -43,6 +44,7 @@ public class JPAJamesServerMain {
         new SMTPServerModule(),
         new WebAdminServerModule(),
         new DataRoutesModules(),
+        new MailRepositoriesRoutesModule(),
         new NoJwtModule(),
         new DefaultProcessorsConfigurationProviderModule());
     

http://git-wip-us.apache.org/repos/asf/james-project/blob/1ab371ec/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 0436ea4..c9658e2 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-mailrepository</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
             <artifactId>james-server-guice-webadmin-swagger</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/1ab371ec/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 720b762..0e6108e 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.MailRepositoriesRoutesModule;
 import org.apache.james.modules.server.MailboxRoutesModule;
 import org.apache.james.modules.server.MemoryMailQueueModule;
 import org.apache.james.modules.server.RawPostDequeueDecoratorModule;
@@ -49,6 +50,7 @@ public class MemoryJamesServerMain {
         new WebAdminServerModule(),
         new DataRoutesModules(),
         new MailboxRoutesModule(),
+        new MailRepositoriesRoutesModule(),
         new SwaggerRoutesModule());
 
     public static final Module PROTOCOLS = Modules.combine(

http://git-wip-us.apache.org/repos/asf/james-project/blob/1ab371ec/server/container/guice/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/pom.xml b/server/container/guice/pom.xml
index 07380bf..ad8784d 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-mailrepository</module>
         <module>protocols/webadmin-swagger</module>
     </modules>
 
@@ -145,6 +146,11 @@
             </dependency>
             <dependency>
                 <groupId>${project.groupId}</groupId>
+                <artifactId>james-server-guice-webadmin-mailrepository</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>${project.groupId}</groupId>
                 <artifactId>james-server-guice-webadmin-swagger</artifactId>
                 <version>${project.version}</version>
             </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/1ab371ec/server/container/guice/protocols/webadmin-mailrepository/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/webadmin-mailrepository/pom.xml b/server/container/guice/protocols/webadmin-mailrepository/pom.xml
new file mode 100644
index 0000000..457a72a
--- /dev/null
+++ b/server/container/guice/protocols/webadmin-mailrepository/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-mailrepository</artifactId>
+
+    <name>Apache James :: Server :: Guice :: Webadmin :: MailRepository</name>
+    <description>Webadmin mailrepository 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-mailrepository</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>
\ No newline at end of file

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

http://git-wip-us.apache.org/repos/asf/james-project/blob/1ab371ec/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 7a14390..9ce9443 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
@@ -26,6 +26,7 @@ import static com.jayway.restassured.config.RestAssuredConfig.newConfig;
 import static org.apache.james.webadmin.Constants.JSON_CONTENT_TYPE;
 import static org.apache.james.webadmin.Constants.SEPARATOR;
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.hamcrest.Matchers.containsInAnyOrder;
 import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.Matchers.is;
 
@@ -41,6 +42,7 @@ import org.apache.james.probe.DataProbe;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.WebAdminGuiceProbe;
 import org.apache.james.webadmin.routes.DomainsRoutes;
+import org.apache.james.webadmin.routes.MailRepositoriesRoutes;
 import org.apache.james.webadmin.routes.UserMailboxesRoutes;
 import org.apache.james.webadmin.routes.UserRoutes;
 import org.apache.james.webadmin.swagger.routes.SwaggerRoutes;
@@ -111,6 +113,21 @@ public class WebAdminServerIntegrationTest {
     }
 
     @Test
+    public void mailRepositoriesRoutesShouldBeExposed() throws Exception {
+        given()
+            .port(webAdminGuiceProbe.getWebAdminPort())
+        .when()
+            .get(MailRepositoriesRoutes.MAIL_REPOSITORIES)
+        .then()
+            .statusCode(HttpStatus.OK_200)
+            .body("repository", containsInAnyOrder(
+                "file://var/mail/error/",
+                "file://var/mail/relay-denied/",
+                "file://var/mail/spam/",
+                "file://var/mail/address-error/"));
+    }
+
+    @Test
     public void deleteShouldRemoveTheGivenDomain() throws Exception {
         dataProbe.addDomain(DOMAIN);
 


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


[13/16] james-project git commit: JAMES-2292 GET mailQueue

Posted by bt...@apache.org.
JAMES-2292 GET mailQueue

change swagger documentation

we should not log + throw Exception

refactor getMailQueue


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

Branch: refs/heads/master
Commit: 2ecbdea32b8b76b796106a9752016b8e91f23782
Parents: 0e1719d
Author: Antoine Duprat <ad...@linagora.com>
Authored: Tue Jan 23 13:29:12 2018 +0100
Committer: benwa <bt...@linagora.com>
Committed: Thu Jan 25 11:46:04 2018 +0700

----------------------------------------------------------------------
 .../webadmin/webadmin-mailqueue/pom.xml         | 12 +++
 .../apache/james/webadmin/dto/MailQueueDTO.java | 80 ++++++++++++++++++++
 .../james/webadmin/routes/MailQueueRoutes.java  | 70 ++++++++++++++++-
 .../james/webadmin/dto/MailQueueDTOTest.java    | 57 ++++++++++++++
 .../webadmin/routes/MailQueueRoutesTest.java    | 32 +++++++-
 5 files changed, 247 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/2ecbdea3/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 4bcd366..bdb1860 100644
--- a/server/protocols/webadmin/webadmin-mailqueue/pom.xml
+++ b/server/protocols/webadmin/webadmin-mailqueue/pom.xml
@@ -35,10 +35,22 @@
     <dependencies>
         <dependency>
             <groupId>${project.groupId}</groupId>
+            <artifactId>apache-mailet-base</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
             <artifactId>james-server-queue-api</artifactId>
         </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
+            <artifactId>james-server-queue-api</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
             <artifactId>james-server-queue-memory</artifactId>
             <scope>test</scope>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/2ecbdea3/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueDTO.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueDTO.java b/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueDTO.java
new file mode 100644
index 0000000..39198d0
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueDTO.java
@@ -0,0 +1,80 @@
+/****************************************************************
+ * 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 org.apache.james.queue.api.MailQueue.MailQueueException;
+import org.apache.james.queue.api.ManageableMailQueue;
+
+import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
+
+public class MailQueueDTO {
+
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    public static MailQueueDTO from(ManageableMailQueue mailQueue) throws MailQueueException {
+        return builder()
+            .name(mailQueue.getName())
+            .size(mailQueue.getSize())
+            .build();
+    }
+
+    public static class Builder {
+
+        private String name;
+        private long size;
+
+        private Builder() {
+        }
+
+        public Builder name(String name) {
+            this.name = name;
+            return this;
+        }
+
+        public Builder size(long size) {
+            this.size = size;
+            return this;
+        }
+
+        public MailQueueDTO build() {
+            Preconditions.checkArgument(!Strings.isNullOrEmpty(name), "name is mandatory");
+            return new MailQueueDTO(name, size);
+        }
+    }
+
+    private final String name;
+    private final long size;
+
+    private MailQueueDTO(String name, long size) {
+        this.name = name;
+        this.size = size;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public long getSize() {
+        return size;
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/2ecbdea3/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 b2ef8f6..5a6aa15 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
@@ -19,27 +19,49 @@
 
 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;
+import javax.ws.rs.Path;
+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.webadmin.Routes;
+import org.apache.james.webadmin.dto.MailQueueDTO;
+import org.apache.james.webadmin.utils.ErrorResponder;
+import org.apache.james.webadmin.utils.ErrorResponder.ErrorType;
 import org.apache.james.webadmin.utils.JsonTransformer;
 import org.eclipse.jetty.http.HttpStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 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;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
+import spark.Request;
 import spark.Service;
 
+
+@Api(tags = "MailQueues")
+@Path(MailQueueRoutes.BASE_URL)
+@Produces("application/json")
 public class MailQueueRoutes implements Routes {
 
-    @VisibleForTesting  static final String BASE_URL = "/mailQueues";
+    @VisibleForTesting static final String BASE_URL = "/mailQueues";
+    @VisibleForTesting static final String MAIL_QUEUE_NAME = ":mailQueueName";
+    private static final Logger LOGGER = LoggerFactory.getLogger(MailQueueRoutes.class);
+
     private final MailQueueFactory<ManageableMailQueue> mailQueueFactory;
     private final JsonTransformer jsonTransformer;
 
@@ -52,6 +74,8 @@ public class MailQueueRoutes implements Routes {
     @Override
     public void define(Service service) {
         defineListQueues(service);
+
+        getMailQueue(service);
     }
 
     @GET
@@ -72,4 +96,48 @@ public class MailQueueRoutes implements Routes {
                     .collect(Guavate.toImmutableList()),
             jsonTransformer);
     }
+
+    @GET
+    @Path("/{mailQueueName}")
+    @ApiImplicitParams({
+        @ApiImplicitParam(required = true, dataType = "string", name = "mailQueueName", paramType = "path")
+    })
+    @ApiOperation(
+        value = "Get a MailQueue details"
+    )
+    @ApiResponses(value = {
+        @ApiResponse(code = HttpStatus.OK_200, message = "OK", response = MailQueueDTO.class),
+        @ApiResponse(code = HttpStatus.BAD_REQUEST_400, message = "Invalid request for getting the mail queue."),
+        @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 getMailQueue(Service service) {
+        service.get(BASE_URL + SEPARATOR + MAIL_QUEUE_NAME,
+            (request, response) -> getMailQueue(request),
+            jsonTransformer);
+    }
+
+    private MailQueueDTO getMailQueue(Request request) {
+        String mailQueueName = request.params(MAIL_QUEUE_NAME);
+        return mailQueueFactory.getQueue(mailQueueName).map(this::toDTO)
+            .orElseThrow(
+                () -> ErrorResponder.builder()
+                    .message(String.format("%s can not be found", mailQueueName))
+                    .statusCode(HttpStatus.NOT_FOUND_404)
+                    .type(ErrorResponder.ErrorType.NOT_FOUND)
+                    .haltError());
+    }
+
+    private MailQueueDTO toDTO(ManageableMailQueue queue) {
+        try {
+            return MailQueueDTO.from(queue);
+        } catch (MailQueueException 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/2ecbdea3/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueDTOTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueDTOTest.java b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueDTOTest.java
new file mode 100644
index 0000000..898b228
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueDTOTest.java
@@ -0,0 +1,57 @@
+/****************************************************************
+ * 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.assertj.core.api.Assertions.assertThatThrownBy;
+
+import org.assertj.core.api.JUnitSoftAssertions;
+import org.junit.Rule;
+import org.junit.Test;
+
+public class MailQueueDTOTest {
+
+    @Rule
+    public final JUnitSoftAssertions softly = new JUnitSoftAssertions();
+
+    @Test
+    public void buildShouldThrowWhenNameIsNull() {
+        assertThatThrownBy(() -> MailQueueDTO.builder().build())
+            .isInstanceOf(IllegalArgumentException.class);
+    }
+
+    @Test
+    public void buildShouldThrowWhenNameIsEmpty() {
+        assertThatThrownBy(() -> MailQueueDTO.builder().name("").build())
+            .isInstanceOf(IllegalArgumentException.class);
+    }
+
+    @Test
+    public void builderShouldCreateTheRightObject() {
+        String name = "name";
+        int size = 123;
+
+        MailQueueDTO mailQueueDTO = MailQueueDTO.builder()
+            .name(name)
+            .size(size)
+            .build();
+
+        softly.assertThat(mailQueueDTO.getName()).isEqualTo(name);
+        softly.assertThat(mailQueueDTO.getSize()).isEqualTo(size);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/2ecbdea3/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 73a24a7..d45a438 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
@@ -19,17 +19,21 @@
 
 package org.apache.james.webadmin.routes;
 
+import static com.jayway.restassured.RestAssured.when;
 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.equalTo;
 
 import java.nio.charset.StandardCharsets;
 import java.util.List;
 
 import org.apache.james.metrics.api.NoopMetricFactory;
+import org.apache.james.queue.api.Mails;
 import org.apache.james.queue.api.RawMailQueueItemDecoratorFactory;
 import org.apache.james.queue.memory.MemoryMailQueueFactory;
+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;
@@ -77,6 +81,7 @@ public class MailQueueRoutesTest {
         mailQueueFactory = new MemoryMailQueueFactory(new RawMailQueueItemDecoratorFactory());
         webAdminServer = createServer(mailQueueFactory);
         RestAssured.requestSpecification = buildRequestSpecification(webAdminServer);
+        RestAssured.enableLoggingOfRequestAndResponseIfValidationFails();
     }
 
     @After
@@ -86,7 +91,7 @@ public class MailQueueRoutesTest {
 
     @Test
     public void listAllMailQueuesShouldReturnEmptyWhenNone() {
-        List<String> actual = RestAssured.when()
+        List<String> actual = when()
             .get()
         .then()
             .statusCode(HttpStatus.OK_200)
@@ -103,7 +108,7 @@ public class MailQueueRoutesTest {
     public void listAllMailQueuesShouldReturnSingleElementListWhenOnlyOneMailQueue() {
         mailQueueFactory.createQueue(FIRST_QUEUE);
 
-        List<String> actual = RestAssured.when()
+        List<String> actual = when()
             .get()
         .then()
             .statusCode(HttpStatus.OK_200)
@@ -123,7 +128,7 @@ public class MailQueueRoutesTest {
         mailQueueFactory.createQueue(THIRD_QUEUE);
         mailQueueFactory.createQueue(FOURTH_QUEUE);
 
-        List<String> actual = RestAssured.when()
+        List<String> actual = when()
             .get()
         .then()
             .statusCode(HttpStatus.OK_200)
@@ -136,4 +141,25 @@ public class MailQueueRoutesTest {
         assertThat(actual).containsOnly(FIRST_QUEUE, SECOND_QUEUE, THIRD_QUEUE, FOURTH_QUEUE);
     }
 
+    @Test
+    public void getMailQueueShouldReturnTheMailQueueDataWhenMailQueueExists() throws Exception {
+        MemoryMailQueue queue = mailQueueFactory.createQueue(FIRST_QUEUE);
+        queue.enQueue(Mails.defaultMail().build());
+
+        when()
+            .get(FIRST_QUEUE)
+        .then()
+            .statusCode(HttpStatus.OK_200)
+            .body("name", equalTo(FIRST_QUEUE))
+            .body("size", equalTo(1));
+    }
+
+    @Test
+    public void getMailQueueShouldReturnNotFoundWhenMailQueueDoesntExist() {
+        when()
+            .get(FIRST_QUEUE)
+        .then()
+            .statusCode(HttpStatus.NOT_FOUND_404);
+    }
+
 }


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


[11/16] james-project git commit: JAMES-2292 Add GET /mailQueues WebAdmin endpoint

Posted by bt...@apache.org.
JAMES-2292 Add GET /mailQueues WebAdmin 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/0e1719da
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/0e1719da
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/0e1719da

Branch: refs/heads/master
Commit: 0e1719da47fb67828633cd05c69cd38153a0ffef
Parents: bef10ee
Author: Antoine Duprat <ad...@linagora.com>
Authored: Mon Jan 22 14:59:52 2018 +0100
Committer: benwa <bt...@linagora.com>
Committed: Thu Jan 25 11:44:44 2018 +0700

----------------------------------------------------------------------
 .../webadmin/webadmin-mailqueue/pom.xml         |  33 +++++
 .../james/webadmin/routes/MailQueueRoutes.java  |  75 ++++++++++
 .../webadmin/routes/MailQueueRoutesTest.java    | 139 +++++++++++++++++++
 3 files changed, 247 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/0e1719da/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 3507c7f..4bcd366 100644
--- a/server/protocols/webadmin/webadmin-mailqueue/pom.xml
+++ b/server/protocols/webadmin/webadmin-mailqueue/pom.xml
@@ -33,6 +33,39 @@
     <name>Apache James :: Server :: Web Admin :: MailQueue</name>
 
     <dependencies>
+        <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-webadmin-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>james-server-webadmin-core</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.jayway.restassured</groupId>
+            <artifactId>rest-assured</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>

http://git-wip-us.apache.org/repos/asf/james-project/blob/0e1719da/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
new file mode 100644
index 0000000..b2ef8f6
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/routes/MailQueueRoutes.java
@@ -0,0 +1,75 @@
+/****************************************************************
+ * 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 java.util.List;
+
+import javax.inject.Inject;
+import javax.ws.rs.GET;
+
+import org.apache.james.queue.api.MailQueueFactory;
+import org.apache.james.queue.api.ManageableMailQueue;
+import org.apache.james.webadmin.Routes;
+import org.apache.james.webadmin.utils.JsonTransformer;
+import org.eclipse.jetty.http.HttpStatus;
+
+import com.github.steveash.guavate.Guavate;
+import com.google.common.annotations.VisibleForTesting;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import spark.Service;
+
+public class MailQueueRoutes implements Routes {
+
+    @VisibleForTesting  static final String BASE_URL = "/mailQueues";
+    private final MailQueueFactory<ManageableMailQueue> mailQueueFactory;
+    private final JsonTransformer jsonTransformer;
+
+    @Inject
+    @VisibleForTesting MailQueueRoutes(MailQueueFactory<ManageableMailQueue> mailQueueFactory, JsonTransformer jsonTransformer) {
+        this.mailQueueFactory = mailQueueFactory;
+        this.jsonTransformer = jsonTransformer;
+    }
+
+    @Override
+    public void define(Service service) {
+        defineListQueues(service);
+    }
+
+    @GET
+    @ApiOperation(
+        value = "Listing existing MailQueues"
+    )
+    @ApiResponses(value = {
+        @ApiResponse(code = HttpStatus.OK_200, message = "OK", response = List.class),
+        @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "Internal server error - Something went bad on the server side.")
+    })
+    public void defineListQueues(Service service) {
+        service.get(BASE_URL,
+            (request, response) ->
+                mailQueueFactory
+                    .listCreatedMailQueues()
+                    .stream()
+                    .map(ManageableMailQueue::getName)
+                    .collect(Guavate.toImmutableList()),
+            jsonTransformer);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0e1719da/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
new file mode 100644
index 0000000..73a24a7
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesTest.java
@@ -0,0 +1,139 @@
+/****************************************************************
+ * 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 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 java.nio.charset.StandardCharsets;
+import java.util.List;
+
+import org.apache.james.metrics.api.NoopMetricFactory;
+import org.apache.james.queue.api.RawMailQueueItemDecoratorFactory;
+import org.apache.james.queue.memory.MemoryMailQueueFactory;
+import org.apache.james.webadmin.WebAdminServer;
+import org.apache.james.webadmin.WebAdminUtils;
+import org.apache.james.webadmin.utils.JsonTransformer;
+import org.eclipse.jetty.http.HttpStatus;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.jayway.restassured.RestAssured;
+import com.jayway.restassured.builder.RequestSpecBuilder;
+import com.jayway.restassured.http.ContentType;
+import com.jayway.restassured.specification.RequestSpecification;
+
+public class MailQueueRoutesTest {
+
+    static final String FIRST_QUEUE = "first one";
+    static final String SECOND_QUEUE = "second one";
+    static final String THIRD_QUEUE = "third one";
+    static final String FOURTH_QUEUE = "fourth one";
+    WebAdminServer webAdminServer;
+    MemoryMailQueueFactory mailQueueFactory;
+
+
+    WebAdminServer createServer(MemoryMailQueueFactory mailQueueFactory) throws Exception {
+        WebAdminServer server = WebAdminUtils.createWebAdminServer(
+            new NoopMetricFactory(),
+            new MailQueueRoutes(mailQueueFactory, new JsonTransformer()));
+        server.configure(NO_CONFIGURATION);
+        server.await();
+        return server;
+    }
+
+    RequestSpecification buildRequestSpecification(WebAdminServer server) {
+        return new RequestSpecBuilder()
+            .setContentType(ContentType.JSON)
+            .setAccept(ContentType.JSON)
+            .setBasePath(MailQueueRoutes.BASE_URL)
+            .setPort(server.getPort().get().getValue())
+            .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)))
+            .build();
+    }
+
+    @Before
+    public void setUp() throws Exception {
+        mailQueueFactory = new MemoryMailQueueFactory(new RawMailQueueItemDecoratorFactory());
+        webAdminServer = createServer(mailQueueFactory);
+        RestAssured.requestSpecification = buildRequestSpecification(webAdminServer);
+    }
+
+    @After
+    public void tearDown() {
+        webAdminServer.destroy();
+    }
+
+    @Test
+    public void listAllMailQueuesShouldReturnEmptyWhenNone() {
+        List<String> actual = RestAssured.when()
+            .get()
+        .then()
+            .statusCode(HttpStatus.OK_200)
+            .contentType(ContentType.JSON)
+        .extract()
+            .body()
+            .jsonPath()
+            .getList(".");
+
+        assertThat(actual).isEmpty();
+    }
+
+    @Test
+    public void listAllMailQueuesShouldReturnSingleElementListWhenOnlyOneMailQueue() {
+        mailQueueFactory.createQueue(FIRST_QUEUE);
+
+        List<String> actual = RestAssured.when()
+            .get()
+        .then()
+            .statusCode(HttpStatus.OK_200)
+            .contentType(ContentType.JSON)
+        .extract()
+            .body()
+            .jsonPath()
+            .getList(".");
+
+        assertThat(actual).containsOnly(FIRST_QUEUE);
+    }
+
+    @Test
+    public void listAllMailQueuesShouldReturnListWhenSeveralMailQueues() {
+        mailQueueFactory.createQueue(FIRST_QUEUE);
+        mailQueueFactory.createQueue(SECOND_QUEUE);
+        mailQueueFactory.createQueue(THIRD_QUEUE);
+        mailQueueFactory.createQueue(FOURTH_QUEUE);
+
+        List<String> actual = RestAssured.when()
+            .get()
+        .then()
+            .statusCode(HttpStatus.OK_200)
+            .contentType(ContentType.JSON)
+        .extract()
+            .body()
+            .jsonPath()
+            .getList(".");
+
+        assertThat(actual).containsOnly(FIRST_QUEUE, SECOND_QUEUE, THIRD_QUEUE, FOURTH_QUEUE);
+    }
+
+}


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


[03/16] james-project git commit: JAMES-2293 Factorize webAdmin request specification definitions

Posted by bt...@apache.org.
JAMES-2293 Factorize webAdmin request specification definitions


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

Branch: refs/heads/master
Commit: 3cdb5adf9d5e337d7384c48f4190c17b165a21d7
Parents: 1ab371e
Author: benwa <bt...@linagora.com>
Authored: Mon Jan 22 14:48:37 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jan 25 11:39:06 2018 +0700

----------------------------------------------------------------------
 .../webadmin/routes/CassandraMigrationRoutesTest.java | 11 ++---------
 .../java/org/apache/james/webadmin/WebAdminUtils.java | 14 ++++++++++++++
 .../apache/james/webadmin/routes/TasksRoutesTest.java | 11 +----------
 .../james/webadmin/routes/DomainsRoutesTest.java      | 10 +---------
 .../james/webadmin/routes/GroupsRoutesTest.java       | 10 +---------
 .../apache/james/webadmin/routes/UsersRoutesTest.java | 10 +---------
 .../james/webadmin/routes/GlobalQuotaRoutesTest.java  | 10 +---------
 .../webadmin/routes/UserMailboxesRoutesTest.java      | 10 +---------
 .../webadmin/routes/MailRepositoriesRoutesTest.java   | 10 +---------
 9 files changed, 23 insertions(+), 73 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/3cdb5adf/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java b/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java
index d3b3046..7b145af 100644
--- a/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java
@@ -22,8 +22,6 @@ package org.apache.james.webadmin.routes;
 import static com.jayway.restassured.RestAssured.given;
 import static com.jayway.restassured.RestAssured.when;
 import static com.jayway.restassured.RestAssured.with;
-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.is;
@@ -35,7 +33,6 @@ import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
-import java.nio.charset.StandardCharsets;
 import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.CompletableFuture;
@@ -58,7 +55,6 @@ import org.junit.Test;
 
 import com.google.common.collect.ImmutableMap;
 import com.jayway.restassured.RestAssured;
-import com.jayway.restassured.builder.RequestSpecBuilder;
 import com.jayway.restassured.http.ContentType;
 
 public class CassandraMigrationRoutesTest {
@@ -91,12 +87,9 @@ public class CassandraMigrationRoutesTest {
         webAdminServer.configure(NO_CONFIGURATION);
         webAdminServer.await();
 
-        RestAssured.requestSpecification = new RequestSpecBuilder()
-            .setContentType(ContentType.JSON)
-            .setAccept(ContentType.JSON)
+
+        RestAssured.requestSpecification = WebAdminUtils.defineRequestSpecification(webAdminServer)
             .setBasePath(CassandraMigrationRoutes.VERSION_BASE)
-            .setPort(webAdminServer.getPort().get().getValue())
-            .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)))
             .build();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/3cdb5adf/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
index 89a5310..1d312a0 100644
--- a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
+++ b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
@@ -19,12 +19,18 @@
 
 package org.apache.james.webadmin;
 
+import static com.jayway.restassured.config.EncoderConfig.encoderConfig;
+import static com.jayway.restassured.config.RestAssuredConfig.newConfig;
+
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 
 import org.apache.james.metrics.api.MetricFactory;
 import org.apache.james.webadmin.authentication.NoAuthenticationFilter;
 
 import com.google.common.collect.ImmutableSet;
+import com.jayway.restassured.builder.RequestSpecBuilder;
+import com.jayway.restassured.http.ContentType;
 
 public class WebAdminUtils {
 
@@ -42,4 +48,12 @@ public class WebAdminUtils {
             metricFactory);
     }
 
+    public static RequestSpecBuilder defineRequestSpecification(WebAdminServer webAdminServer) {
+        return new RequestSpecBuilder()
+            .setContentType(ContentType.JSON)
+            .setAccept(ContentType.JSON)
+            .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)))
+            .setPort(webAdminServer.getPort().get().getValue());
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3cdb5adf/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 cc18b42..1c1ff85 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
@@ -22,8 +22,6 @@ package org.apache.james.webadmin.routes;
 import static com.jayway.restassured.RestAssured.given;
 import static com.jayway.restassured.RestAssured.when;
 import static com.jayway.restassured.RestAssured.with;
-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.hamcrest.Matchers.empty;
 import static org.hamcrest.Matchers.hasSize;
@@ -46,11 +44,8 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-import com.google.common.base.Charsets;
 import com.google.common.base.Throwables;
 import com.jayway.restassured.RestAssured;
-import com.jayway.restassured.builder.RequestSpecBuilder;
-import com.jayway.restassured.http.ContentType;
 
 public class TasksRoutesTest {
 
@@ -68,12 +63,8 @@ public class TasksRoutesTest {
         webAdminServer.configure(NO_CONFIGURATION);
         webAdminServer.await();
 
-        RestAssured.requestSpecification = new RequestSpecBuilder()
-            .setContentType(ContentType.JSON)
-            .setAccept(ContentType.JSON)
+        RestAssured.requestSpecification = WebAdminUtils.defineRequestSpecification(webAdminServer)
             .setBasePath(TasksRoutes.BASE)
-            .setPort(webAdminServer.getPort().get().getValue())
-            .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(Charsets.UTF_8)))
             .build();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/3cdb5adf/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
index 26dbf47..137a187 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
@@ -22,8 +22,6 @@ package org.apache.james.webadmin.routes;
 import static com.jayway.restassured.RestAssured.given;
 import static com.jayway.restassured.RestAssured.when;
 import static com.jayway.restassured.RestAssured.with;
-import static com.jayway.restassured.config.EncoderConfig.encoderConfig;
-import static com.jayway.restassured.config.RestAssuredConfig.newConfig;
 import static org.apache.james.webadmin.Constants.SEPARATOR;
 import static org.apache.james.webadmin.WebAdminServer.NO_CONFIGURATION;
 import static org.assertj.core.api.Assertions.assertThat;
@@ -33,7 +31,6 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import java.net.InetAddress;
-import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.Map;
 
@@ -52,7 +49,6 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 
 import com.jayway.restassured.RestAssured;
-import com.jayway.restassured.builder.RequestSpecBuilder;
 import com.jayway.restassured.http.ContentType;
 
 import de.bechte.junit.runners.context.HierarchicalContextRunner;
@@ -70,11 +66,7 @@ public class DomainsRoutesTest {
         webAdminServer.configure(NO_CONFIGURATION);
         webAdminServer.await();
 
-        RestAssured.requestSpecification = new RequestSpecBuilder()
-            .setContentType(ContentType.JSON)
-            .setAccept(ContentType.JSON)
-            .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)))
-            .setPort(webAdminServer.getPort().get().getValue())
+        RestAssured.requestSpecification = WebAdminUtils.defineRequestSpecification(webAdminServer)
             .setBasePath(DomainsRoutes.DOMAINS)
             .build();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3cdb5adf/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
index ccbe64a..1b6aa7e 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
@@ -21,8 +21,6 @@ package org.apache.james.webadmin.routes;
 
 import static com.jayway.restassured.RestAssured.given;
 import static com.jayway.restassured.RestAssured.when;
-import static com.jayway.restassured.config.EncoderConfig.encoderConfig;
-import static com.jayway.restassured.config.RestAssuredConfig.newConfig;
 import static org.apache.james.webadmin.Constants.SEPARATOR;
 import static org.apache.james.webadmin.WebAdminServer.NO_CONFIGURATION;
 import static org.assertj.core.api.Assertions.assertThat;
@@ -32,7 +30,6 @@ import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
 
-import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.Map;
 
@@ -58,7 +55,6 @@ import org.junit.runner.RunWith;
 import org.mockito.Mockito;
 
 import com.jayway.restassured.RestAssured;
-import com.jayway.restassured.builder.RequestSpecBuilder;
 import com.jayway.restassured.filter.log.LogDetail;
 import com.jayway.restassured.http.ContentType;
 
@@ -86,11 +82,7 @@ public class GroupsRoutesTest {
         webAdminServer.configure(NO_CONFIGURATION);
         webAdminServer.await();
 
-        RestAssured.requestSpecification = new RequestSpecBuilder()
-            .setContentType(ContentType.JSON)
-            .setAccept(ContentType.JSON)
-            .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)))
-            .setPort(webAdminServer.getPort().get().getValue())
+        RestAssured.requestSpecification = WebAdminUtils.defineRequestSpecification(webAdminServer)
             .setBasePath(GroupsRoutes.ROOT_PATH)
             .log(LogDetail.ALL)
             .build();

http://git-wip-us.apache.org/repos/asf/james-project/blob/3cdb5adf/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UsersRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UsersRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UsersRoutesTest.java
index a3d1072..086d4c9 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UsersRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UsersRoutesTest.java
@@ -22,8 +22,6 @@ package org.apache.james.webadmin.routes;
 import static com.jayway.restassured.RestAssured.given;
 import static com.jayway.restassured.RestAssured.when;
 import static com.jayway.restassured.RestAssured.with;
-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.mockito.Matchers.any;
@@ -31,7 +29,6 @@ import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.Map;
 
@@ -53,7 +50,6 @@ import org.junit.runner.RunWith;
 
 import com.google.common.collect.ImmutableMap;
 import com.jayway.restassured.RestAssured;
-import com.jayway.restassured.builder.RequestSpecBuilder;
 import com.jayway.restassured.http.ContentType;
 
 import de.bechte.junit.runners.context.HierarchicalContextRunner;
@@ -72,11 +68,7 @@ public class UsersRoutesTest {
         webAdminServer.configure(NO_CONFIGURATION);
         webAdminServer.await();
 
-        RestAssured.requestSpecification = new RequestSpecBuilder()
-            .setContentType(ContentType.JSON)
-            .setAccept(ContentType.JSON)
-            .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)))
-            .setPort(webAdminServer.getPort().get().getValue())
+        RestAssured.requestSpecification = WebAdminUtils.defineRequestSpecification(webAdminServer)
             .setBasePath(UserRoutes.USERS)
             .build();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3cdb5adf/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/GlobalQuotaRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/GlobalQuotaRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/GlobalQuotaRoutesTest.java
index 825e24a..45869fe 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/GlobalQuotaRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/GlobalQuotaRoutesTest.java
@@ -20,12 +20,9 @@
 package org.apache.james.webadmin.routes;
 
 import static com.jayway.restassured.RestAssured.given;
-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 java.nio.charset.StandardCharsets;
 import java.util.Map;
 
 import org.apache.james.mailbox.inmemory.quota.InMemoryPerUserMaxQuotaManager;
@@ -40,7 +37,6 @@ import org.junit.Before;
 import org.junit.Test;
 
 import com.jayway.restassured.RestAssured;
-import com.jayway.restassured.builder.RequestSpecBuilder;
 import com.jayway.restassured.http.ContentType;
 import com.jayway.restassured.path.json.JsonPath;
 
@@ -58,11 +54,7 @@ public class GlobalQuotaRoutesTest {
         webAdminServer.configure(NO_CONFIGURATION);
         webAdminServer.await();
 
-        RestAssured.requestSpecification = new RequestSpecBuilder()
-            .setContentType(ContentType.JSON)
-            .setAccept(ContentType.JSON)
-            .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)))
-            .setPort(webAdminServer.getPort().get().getValue())
+        RestAssured.requestSpecification = WebAdminUtils.defineRequestSpecification(webAdminServer)
             .build();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/3cdb5adf/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
index 4d7d166..ef8fccd 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
@@ -21,8 +21,6 @@ package org.apache.james.webadmin.routes;
 
 import static com.jayway.restassured.RestAssured.when;
 import static com.jayway.restassured.RestAssured.with;
-import static com.jayway.restassured.config.EncoderConfig.encoderConfig;
-import static com.jayway.restassured.config.RestAssuredConfig.newConfig;
 import static org.apache.james.webadmin.Constants.SEPARATOR;
 import static org.apache.james.webadmin.WebAdminServer.NO_CONFIGURATION;
 import static org.apache.james.webadmin.routes.UserMailboxesRoutes.USERS_BASE;
@@ -34,7 +32,6 @@ import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.Map;
 
@@ -65,7 +62,6 @@ import org.junit.runner.RunWith;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.jayway.restassured.RestAssured;
-import com.jayway.restassured.builder.RequestSpecBuilder;
 import com.jayway.restassured.http.ContentType;
 
 import de.bechte.junit.runners.context.HierarchicalContextRunner;
@@ -88,12 +84,8 @@ public class UserMailboxesRoutesTest {
         webAdminServer.configure(NO_CONFIGURATION);
         webAdminServer.await();
 
-        RestAssured.requestSpecification = new RequestSpecBuilder()
-            .setContentType(ContentType.JSON)
-            .setAccept(ContentType.JSON)
+        RestAssured.requestSpecification = WebAdminUtils.defineRequestSpecification(webAdminServer)
             .setBasePath(USERS_BASE + SEPARATOR + USERNAME + SEPARATOR + UserMailboxesRoutes.MAILBOXES)
-            .setPort(webAdminServer.getPort().get().getValue())
-            .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)))
             .build();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/3cdb5adf/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 6829f22..6a616b6 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
@@ -22,8 +22,6 @@ package org.apache.james.webadmin.routes;
 import static com.jayway.restassured.RestAssured.given;
 import static com.jayway.restassured.RestAssured.when;
 import static com.jayway.restassured.RestAssured.with;
-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.contains;
@@ -37,7 +35,6 @@ import static org.hamcrest.Matchers.notNullValue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-import java.nio.charset.StandardCharsets;
 import java.util.List;
 
 import org.apache.james.mailrepository.api.MailRepositoryStore;
@@ -58,7 +55,6 @@ import org.junit.Test;
 
 import com.google.common.collect.ImmutableList;
 import com.jayway.restassured.RestAssured;
-import com.jayway.restassured.builder.RequestSpecBuilder;
 import com.jayway.restassured.http.ContentType;
 
 public class MailRepositoriesRoutesTest {
@@ -85,12 +81,8 @@ public class MailRepositoriesRoutesTest {
         webAdminServer.configure(NO_CONFIGURATION);
         webAdminServer.await();
 
-        RestAssured.requestSpecification = new RequestSpecBuilder()
-            .setContentType(ContentType.JSON)
-            .setAccept(ContentType.JSON)
+        RestAssured.requestSpecification = WebAdminUtils.defineRequestSpecification(webAdminServer)
             .setBasePath(MailRepositoriesRoutes.MAIL_REPOSITORIES)
-            .setPort(webAdminServer.getPort().get().getValue())
-            .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)))
             .build();
     }
 


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


[12/16] james-project git commit: JAMES-2292 Introduce GET mail queue messages endpoint

Posted by bt...@apache.org.
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


[02/16] james-project git commit: JAMES-2293 Webadmin allow inspecting mail detail

Posted by bt...@apache.org.
JAMES-2293 Webadmin allow inspecting mail detail

Note that an offset and a limit can be specified.


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

Branch: refs/heads/master
Commit: 2fd2e228e3f9bf4150e243f276bdc5a3b49d7f1f
Parents: f3eb9b1
Author: benwa <bt...@linagora.com>
Authored: Mon Jan 22 11:29:14 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Wed Jan 24 15:09:50 2018 +0700

----------------------------------------------------------------------
 .../org/apache/james/webadmin/dto/MailDto.java  | 95 ++++++++++++++++++++
 .../webadmin/routes/MailRepositoriesRoutes.java | 31 +++++++
 .../service/MailRepositoryStoreService.java     |  9 ++
 .../routes/MailRepositoriesRoutesTest.java      | 65 ++++++++++++++
 4 files changed, 200 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/2fd2e228/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailDto.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailDto.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailDto.java
new file mode 100644
index 0000000..4587412
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailDto.java
@@ -0,0 +1,95 @@
+/****************************************************************
+ * 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 java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+
+import javax.mail.MessagingException;
+
+import org.apache.james.core.MailAddress;
+import org.apache.mailet.Mail;
+
+import com.github.steveash.guavate.Guavate;
+
+public class MailDto {
+    public static MailDto fromMail(Mail mail) throws MessagingException {
+        return new MailDto(mail.getName(),
+            Optional.ofNullable(mail.getSender()).map(MailAddress::asString),
+            mail.getRecipients().stream().map(MailAddress::asString).collect(Guavate.toImmutableList()),
+            Optional.ofNullable(mail.getErrorMessage()),
+            Optional.ofNullable(mail.getState()));
+    }
+
+    private final String name;
+    private final Optional<String> sender;
+    private final List<String> recipients;
+    private final Optional<String> error;
+    private final Optional<String> state;
+
+    public MailDto(String name, Optional<String> sender, List<String> recipients, Optional<String> error,
+                   Optional<String> state) {
+        this.name = name;
+        this.sender = sender;
+        this.recipients = recipients;
+        this.error = error;
+        this.state = state;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public Optional<String> getSender() {
+        return sender;
+    }
+
+    public List<String> getRecipients() {
+        return recipients;
+    }
+
+    public Optional<String> getError() {
+        return error;
+    }
+
+    public Optional<String> getState() {
+        return state;
+    }
+
+    @Override
+    public final boolean equals(Object o) {
+        if (o instanceof MailDto) {
+            MailDto mailDto = (MailDto) o;
+
+            return Objects.equals(this.name, mailDto.name)
+                && Objects.equals(this.sender, mailDto.sender)
+                && Objects.equals(this.recipients, mailDto.recipients)
+                && Objects.equals(this.error, mailDto.error)
+                && Objects.equals(this.state, mailDto.state);
+        }
+        return false;
+    }
+
+    @Override
+    public final int hashCode() {
+        return Objects.hash(name, sender, recipients, error, state);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/2fd2e228/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 9250946..55dc43e 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
@@ -78,6 +78,8 @@ public class MailRepositoriesRoutes implements Routes {
         defineListMails();
 
         defineGetMailRepository();
+
+        defineGetMail();
     }
 
     @GET
@@ -145,6 +147,35 @@ public class MailRepositoriesRoutes implements Routes {
             jsonTransformer);
     }
 
+    @Path("/{encodedUrl}/mails/{mailKey}")
+    @ApiOperation(value = "Retrieving a specific mail details")
+    @ApiResponses(value = {
+        @ApiResponse(code = HttpStatus.OK_200, message = "The list of all mails in a repository", response = List.class),
+        @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "Internal server error - Something went bad on the server side."),
+        @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "Not found - Could not retrieve the given mail.")
+    })
+    public void defineGetMail() {
+        service.get(MAIL_REPOSITORIES + "/:encodedUrl/mails/:mailKey", (request, response) -> {
+            String url = URLDecoder.decode(request.params("encodedUrl"), StandardCharsets.UTF_8.displayName());
+            String mailKey = request.params("mailKey");
+            try {
+                return repositoryStoreService.retrieveMail(url, mailKey)
+                    .orElseThrow(() -> ErrorResponder.builder()
+                        .statusCode(HttpStatus.NOT_FOUND_404)
+                        .type(ErrorResponder.ErrorType.NOT_FOUND)
+                        .message("Could not retrieve " + mailKey)
+                        .haltError());
+            } catch (MailRepositoryStore.MailRepositoryStoreException| MessagingException e) {
+                throw ErrorResponder.builder()
+                    .statusCode(HttpStatus.INTERNAL_SERVER_ERROR_500)
+                    .type(ErrorResponder.ErrorType.SERVER_ERROR)
+                    .cause(e)
+                    .message("Error while retrieving mail")
+                    .haltError();
+            }
+        }, jsonTransformer);
+    }
+
     @GET
     @Path("/{encodedUrl}")
     @ApiOperation(value = "Reading the information of a repository, such as size (can take some time to compute)")

http://git-wip-us.apache.org/repos/asf/james-project/blob/2fd2e228/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 996b0a2..d1117c5 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
@@ -30,6 +30,7 @@ import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.util.streams.Iterators;
 import org.apache.james.util.streams.Limit;
 import org.apache.james.util.streams.Offset;
+import org.apache.james.webadmin.dto.MailDto;
 import org.apache.james.webadmin.dto.MailKey;
 import org.apache.james.webadmin.dto.MailRepositoryResponse;
 
@@ -66,8 +67,16 @@ public class MailRepositoryStoreService {
                 .collect(Guavate.toImmutableList());
     }
 
+
     public Optional<Long> size(String url) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
         Optional<MailRepository> mailRepository = Optional.ofNullable(mailRepositoryStore.select(url));
         return mailRepository.map(Throwing.function(MailRepository::size).sneakyThrow());
     }
+
+    public Optional<MailDto> retrieveMail(String url, String mailKey) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
+        MailRepository mailRepository = mailRepositoryStore.select(url);
+
+        return Optional.ofNullable(mailRepository.retrieve(mailKey))
+            .map(Throwing.function(MailDto::fromMail).sneakyThrow());
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/2fd2e228/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 433eeaa..56543ce 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
@@ -31,6 +31,7 @@ import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.hasSize;
 import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.isEmptyOrNullString;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -358,4 +359,68 @@ public class MailRepositoriesRoutesTest {
             .contentType(ContentType.JSON)
             .body("size", equalTo(1));
     }
+
+    @Test
+    public void retrievingAMailShouldDisplayItsInformation() throws Exception {
+        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+
+        String name = "name1";
+        String sender = "sender@domain";
+        String recipient1 = "recipient1@domain";
+        String recipient2 = "recipient2@domain";
+        String state = "state";
+        String errorMessage = "Error: why this mail is stored";
+        mailRepository.store(FakeMail.builder()
+            .name(name)
+            .sender(sender)
+            .recipients(recipient1, recipient2)
+            .state(state)
+            .errorMessage(errorMessage)
+            .build());
+
+        when()
+            .get(URL_ESCAPED_MY_REPO + "/mails/" + name)
+        .then()
+            .statusCode(HttpStatus.OK_200)
+            .body("name", is(name))
+            .body("sender", is(sender))
+            .body("state", is(state))
+            .body("error", is(errorMessage))
+            .body("recipients", containsInAnyOrder(recipient1, recipient2));
+    }
+
+    @Test
+    public void retrievingAMailShouldNotFailWhenOnlyNameProperty() throws Exception {
+        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+
+        String name = "name1";
+        mailRepository.store(FakeMail.builder()
+            .name(name)
+            .build());
+
+        when()
+            .get(URL_ESCAPED_MY_REPO + "/mails/" + name)
+        .then()
+            .statusCode(HttpStatus.OK_200)
+            .body("name", is(name))
+            .body("sender", isEmptyOrNullString())
+            .body("state", isEmptyOrNullString())
+            .body("error", isEmptyOrNullString())
+            .body("recipients", hasSize(0));
+    }
+
+    @Test
+    public void retrievingAMailShouldFailWhenUnknown() throws Exception {
+        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+
+        String name = "name";
+        when()
+            .get(URL_ESCAPED_MY_REPO + "/mails/" + name)
+        .then()
+            .statusCode(HttpStatus.NOT_FOUND_404)
+            .body("statusCode", is(404))
+            .body("type", is(ErrorResponder.ErrorType.NOT_FOUND.getType()))
+            .body("message", is("Could not retrieve " + name));
+    }
+
 }


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


[07/16] james-project git commit: JAMES-2293 Reading a non-existing mailRepository should not create it

Posted by bt...@apache.org.
JAMES-2293 Reading a non-existing mailRepository should not create it


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

Branch: refs/heads/master
Commit: e72743323ba94107fb86e40fe86251c416167df9
Parents: abf91be
Author: benwa <bt...@linagora.com>
Authored: Tue Jan 23 11:04:53 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jan 25 11:39:29 2018 +0700

----------------------------------------------------------------------
 .../utils/InMemoryMailRepositoryStore.java      |  6 ++
 .../utils/InMemoryMailRepositoryStoreTest.java  | 16 +++++
 .../MailRepositoryStoreBeanFactory.java         |  6 ++
 .../mailrepository/api/MailRepositoryStore.java |  9 ++-
 .../mock/MockMailRepositoryStore.java           |  9 +--
 .../WebAdminServerIntegrationTest.java          | 16 +++++
 .../service/MailRepositoryStoreService.java     | 23 +++++--
 .../routes/MailRepositoriesRoutesTest.java      | 71 ++++++++++++++------
 .../service/MailRepositoryStoreServiceTest.java | 10 +--
 9 files changed, 131 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/e7274332/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
index dd6bcf1..abf63a6 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
@@ -22,6 +22,7 @@ package org.apache.james.utils;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
@@ -86,6 +87,11 @@ public class InMemoryMailRepositoryStore implements MailRepositoryStore, Configu
     }
 
     @Override
+    public Optional<MailRepository> get(String url) throws MailRepositoryStoreException {
+        return Optional.ofNullable(destinationToRepositoryAssociations.get(url));
+    }
+
+    @Override
     public MailRepository select(String destination) throws MailRepositoryStoreException {
         MailRepository mailRepository = destinationToRepositoryAssociations.get(destination);
         if (mailRepository != null) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/e7274332/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java b/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
index 6aa89a2..ceec2cd 100644
--- a/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
+++ b/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
@@ -25,6 +25,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.filesystem.api.FileSystem;
+import org.apache.james.mailrepository.api.MailRepository;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.mailrepository.file.FileMailRepository;
 import org.apache.james.modules.server.MailStoreRepositoryModule;
@@ -116,4 +117,19 @@ public class InMemoryMailRepositoryStoreTest {
         assertThat(repositoryStore.getUrls()).containsExactly(url1);
     }
 
+    @Test
+    public void getShouldReturnEmptyWhenUrlNotInUse() throws Exception {
+        assertThat(repositoryStore.get("file://repo"))
+            .isEmpty();
+    }
+
+    @Test
+    public void getShouldReturnPreviouslyCreatedMailRepository() throws Exception {
+        String url = "file://repo";
+        MailRepository mailRepository = repositoryStore.select(url);
+
+        assertThat(repositoryStore.get(url))
+            .contains(mailRepository);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/e7274332/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailrepositorystore/MailRepositoryStoreBeanFactory.java
----------------------------------------------------------------------
diff --git a/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailrepositorystore/MailRepositoryStoreBeanFactory.java b/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailrepositorystore/MailRepositoryStoreBeanFactory.java
index 5e48cf4..404ac21 100644
--- a/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailrepositorystore/MailRepositoryStoreBeanFactory.java
+++ b/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailrepositorystore/MailRepositoryStoreBeanFactory.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 import javax.annotation.PostConstruct;
 
@@ -88,6 +89,11 @@ public class MailRepositoryStoreBeanFactory extends AbstractBeanFactory implemen
 
     }
 
+    @Override
+    public Optional<MailRepository> get(String url) throws MailRepositoryStoreException {
+        return Optional.ofNullable(repositories.get(url));
+    }
+
     /**
      * <p>
      * Registers a new mail repository type in the mail store's registry based

http://git-wip-us.apache.org/repos/asf/james-project/blob/e7274332/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
----------------------------------------------------------------------
diff --git a/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java b/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
index d44d669..a454767 100644
--- a/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
+++ b/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
@@ -20,11 +20,12 @@
 package org.apache.james.mailrepository.api;
 
 import java.util.List;
+import java.util.Optional;
 
 public interface MailRepositoryStore {
 
     /**
-     * Select the {@link MailRepository} for the given url
+     * Select the {@link MailRepository} for the given url. Repository will be created if it does not exist already.
      * 
      * @param url
      * @return repository
@@ -33,6 +34,12 @@ public interface MailRepositoryStore {
     MailRepository select(String url) throws MailRepositoryStoreException;
 
     /**
+     * Returns the {@link MailRepository} for the given url.
+     * This mail repository will not be created if it does not exist.
+     */
+    Optional<MailRepository> get(String url) throws MailRepositoryStoreException;
+
+    /**
      * Return a {@link List} which contains all urls of the selected
      * {@link MailRepository}'s
      * 

http://git-wip-us.apache.org/repos/asf/james-project/blob/e7274332/server/data/data-library/src/test/java/org/apache/james/mailrepository/mock/MockMailRepositoryStore.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/test/java/org/apache/james/mailrepository/mock/MockMailRepositoryStore.java b/server/data/data-library/src/test/java/org/apache/james/mailrepository/mock/MockMailRepositoryStore.java
index 6d16b4c..ef9e085 100644
--- a/server/data/data-library/src/test/java/org/apache/james/mailrepository/mock/MockMailRepositoryStore.java
+++ b/server/data/data-library/src/test/java/org/apache/james/mailrepository/mock/MockMailRepositoryStore.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 import org.apache.james.mailrepository.api.MailRepository;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
@@ -37,12 +38,12 @@ public class MockMailRepositoryStore implements MailRepositoryStore {
 
     @Override
     public MailRepository select(String url) throws MailRepositoryStoreException {
-        return get(url);
+        return storedObjectMap.get(url);
     }
 
-    private MailRepository get(String key) {
-        System.out.println(key);
-        return storedObjectMap.get(key);
+    @Override
+    public Optional<MailRepository> get(String url) throws MailRepositoryStoreException {
+        return Optional.ofNullable(storedObjectMap.get(url));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/e7274332/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 96d488d..eb8236e 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
@@ -118,6 +118,22 @@ public class WebAdminServerIntegrationTest {
     }
 
     @Test
+    public void gettingANonExistingMailRepositoryShouldNotCreateIt() throws Exception {
+        given()
+            .get(MailRepositoriesRoutes.MAIL_REPOSITORIES + "file%3A%2F%2Fvar%2Fmail%2Fcustom%2F");
+
+        when()
+            .get(MailRepositoriesRoutes.MAIL_REPOSITORIES)
+        .then()
+            .statusCode(HttpStatus.OK_200)
+            .body("repository", containsInAnyOrder(
+                "file://var/mail/error/",
+                "file://var/mail/relay-denied/",
+                "file://var/mail/spam/",
+                "file://var/mail/address-error/"));
+    }
+
+    @Test
     public void deleteShouldRemoveTheGivenDomain() throws Exception {
         dataProbe.addDomain(DOMAIN);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/e7274332/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 fd17507..0f7c752 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
@@ -34,6 +34,8 @@ import org.apache.james.util.streams.Offset;
 import org.apache.james.webadmin.dto.MailDto;
 import org.apache.james.webadmin.dto.MailKey;
 import org.apache.james.webadmin.dto.MailRepositoryResponse;
+import org.apache.james.webadmin.utils.ErrorResponder;
+import org.eclipse.jetty.http.HttpStatus;
 
 import com.github.fge.lambdas.Throwing;
 import com.github.fge.lambdas.functions.ThrowingFunction;
@@ -54,8 +56,9 @@ public class MailRepositoryStoreService {
             .collect(Guavate.toImmutableList());
     }
 
+
     public Optional<List<MailKey>> listMails(String url, Offset offset, Limit limit) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
-        Optional<MailRepository> mailRepository = Optional.ofNullable(mailRepositoryStore.select(url));
+        Optional<MailRepository> mailRepository = Optional.ofNullable(getRepository(url));
         ThrowingFunction<MailRepository, List<MailKey>> list = repository -> list(repository, offset, limit);
         return mailRepository.map(Throwing.function(list).sneakyThrow());
     }
@@ -68,26 +71,34 @@ public class MailRepositoryStoreService {
                 .collect(Guavate.toImmutableList());
     }
 
-
     public Optional<Long> size(String url) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
-        Optional<MailRepository> mailRepository = Optional.ofNullable(mailRepositoryStore.select(url));
+        Optional<MailRepository> mailRepository = Optional.ofNullable(getRepository(url));
         return mailRepository.map(Throwing.function(MailRepository::size).sneakyThrow());
     }
 
     public Optional<MailDto> retrieveMail(String url, String mailKey) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
-        MailRepository mailRepository = mailRepositoryStore.select(url);
+        MailRepository mailRepository = getRepository(url);
 
         return Optional.ofNullable(mailRepository.retrieve(mailKey))
             .map(Throwing.function(MailDto::fromMail).sneakyThrow());
     }
 
     public void deleteMail(String url, String mailKey) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
-        mailRepositoryStore.select(url)
+        getRepository(url)
             .remove(mailKey);
     }
 
     public Task createClearMailRepositoryTask(String url) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
-        return new ClearMailRepositoryTask(mailRepositoryStore.select(url), url);
+        return new ClearMailRepositoryTask(getRepository(url), url);
+    }
+
+    private MailRepository getRepository(String url) throws MailRepositoryStore.MailRepositoryStoreException {
+        return mailRepositoryStore.get(url)
+            .orElseThrow(() -> ErrorResponder.builder()
+                .statusCode(HttpStatus.NOT_FOUND_404)
+                .type(ErrorResponder.ErrorType.NOT_FOUND)
+                .message(url + "does not exist")
+                .haltError());
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/e7274332/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 34edfdf..14a6b8a 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
@@ -36,6 +36,7 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import java.util.List;
+import java.util.Optional;
 
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.mailrepository.memory.MemoryMailRepository;
@@ -143,6 +144,8 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldReturnNotFoundWhenNoRepository() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.empty());
+
         when()
             .get(MY_REPO_MAILS)
         .then()
@@ -151,7 +154,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldReturnEmptyWhenNoMail() throws Exception {
-        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         when()
             .get(MY_REPO_MAILS)
@@ -162,7 +165,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldReturnContainedKeys() throws Exception {
-        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         mailRepository.store(FakeMail.builder()
             .name("name1")
@@ -181,7 +184,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldApplyLimitAndOffset() throws Exception {
-        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         mailRepository.store(FakeMail.builder()
             .name("name1")
@@ -203,7 +206,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldHandleErrorGracefully() throws Exception {
-        when(mailRepositoryStore.select(URL_MY_REPO))
+        when(mailRepositoryStore.get(URL_MY_REPO))
             .thenThrow(new MailRepositoryStore.MailRepositoryStoreException("message"));
 
         when()
@@ -240,7 +243,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldReturnEmptyWhenOffsetExceedsSize() throws Exception {
-        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         mailRepository.store(FakeMail.builder()
             .name("name1")
@@ -283,7 +286,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldIgnoreZeroedOffset() throws Exception {
-        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         mailRepository.store(FakeMail.builder()
             .name("name1")
@@ -313,6 +316,8 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingRepositoryShouldReturnNotFoundWhenNone() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.empty());
+
         given()
             .get(URL_ESCAPED_MY_REPO)
         .then()
@@ -321,7 +326,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingRepositoryShouldReturnBasicInformation() throws Exception {
-        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         given()
             .get(URL_ESCAPED_MY_REPO)
@@ -334,7 +339,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingRepositorySizeShouldReturnZeroWhenEmpty() throws Exception {
-        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         given()
             .get(URL_ESCAPED_MY_REPO)
@@ -346,7 +351,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingRepositorySizeShouldReturnNumberOfContainedMails() throws Exception {
-        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         mailRepository.store(FakeMail.builder()
             .name("name1")
@@ -362,7 +367,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingAMailShouldDisplayItsInformation() throws Exception {
-        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         String name = "name1";
         String sender = "sender@domain";
@@ -391,7 +396,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingAMailShouldNotFailWhenOnlyNameProperty() throws Exception {
-        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         String name = "name1";
         mailRepository.store(FakeMail.builder()
@@ -411,7 +416,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingAMailShouldFailWhenUnknown() throws Exception {
-        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         String name = "name";
         when()
@@ -425,7 +430,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void deletingAMailShouldRemoveIt() throws Exception {
-        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         String name1 = "name1";
         String name2 = "name2";
@@ -449,7 +454,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void deletingAMailShouldReturnOkWhenExist() throws Exception {
-        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         String name1 = "name1";
         mailRepository.store(FakeMail.builder()
@@ -464,7 +469,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void deletingAMailShouldReturnOkWhenNotExist() throws Exception {
-        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         when()
             .delete(URL_ESCAPED_MY_REPO + "/mails/name")
@@ -474,7 +479,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void deletingAllMailsShouldCreateATask() throws Exception {
-        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         when()
             .patch(URL_ESCAPED_MY_REPO + "/mails?action=clear")
@@ -486,7 +491,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void patchShouldOnlySupportClear() throws Exception {
-        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         when()
             .patch(URL_ESCAPED_MY_REPO + "/mails?action=invalid")
@@ -499,7 +504,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void patchShouldRequireAnAction() throws Exception {
-        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         when()
             .patch(URL_ESCAPED_MY_REPO + "/mails")
@@ -512,7 +517,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void clearTaskShouldHaveDetails() throws Exception {
-        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         String name1 = "name1";
         String name2 = "name2";
@@ -546,7 +551,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void clearTaskShouldRemoveAllTheMailsFromTheMailRepository() throws Exception {
-        when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         mailRepository.store(FakeMail.builder()
             .name("name1")
@@ -571,4 +576,30 @@ public class MailRepositoriesRoutesTest {
             .body("", hasSize(0));
     }
 
+    @Test
+    public void patchShouldReturnNotFoundWhenNoMailRepository() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.empty());
+
+        when()
+            .patch(URL_ESCAPED_MY_REPO + "/mails?action=clear")
+        .then()
+            .statusCode(HttpStatus.NOT_FOUND_404)
+            .body("statusCode", is(404))
+            .body("type", is(ErrorResponder.ErrorType.NOT_FOUND.getType()))
+            .body("message", is(URL_MY_REPO + "does not exist"));
+    }
+
+    @Test
+    public void deleteShouldReturnNotFoundWhenNoMailRepository() throws Exception {
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.empty());
+
+        when()
+            .delete(URL_ESCAPED_MY_REPO + "/mails/any")
+        .then()
+            .statusCode(HttpStatus.NOT_FOUND_404)
+            .body("statusCode", is(404))
+            .body("type", is(ErrorResponder.ErrorType.NOT_FOUND.getType()))
+            .body("message", is(URL_MY_REPO + "does not exist"));
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/e7274332/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
index 505d5ca..fb6fd66 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
@@ -23,6 +23,8 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.util.Optional;
+
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.mailrepository.memory.MemoryMailRepository;
 import org.apache.james.util.streams.Limit;
@@ -77,7 +79,7 @@ public class MailRepositoryStoreServiceTest {
 
     @Test
     public void listMailsShouldThrowWhenMailRepositoryStoreThrows() throws Exception {
-        when(mailRepositoryStore.select(FIRST_REPOSITORY))
+        when(mailRepositoryStore.get(FIRST_REPOSITORY))
             .thenThrow(new MailRepositoryStore.MailRepositoryStoreException("message"));
 
         assertThatThrownBy(() -> testee.listMails(FIRST_REPOSITORY, Offset.none(), Limit.unlimited()))
@@ -86,7 +88,7 @@ public class MailRepositoryStoreServiceTest {
 
     @Test
     public void listMailsShouldReturnEmptyWhenMailRepositoryIsEmpty() throws Exception {
-        when(mailRepositoryStore.select(FIRST_REPOSITORY)).thenReturn(repository);
+        when(mailRepositoryStore.get(FIRST_REPOSITORY)).thenReturn(Optional.of(repository));
 
         assertThat(testee.listMails(FIRST_REPOSITORY, Offset.none(), Limit.unlimited()).get())
             .isEmpty();
@@ -94,7 +96,7 @@ public class MailRepositoryStoreServiceTest {
 
     @Test
     public void listMailsShouldReturnContainedMailKeys() throws Exception {
-        when(mailRepositoryStore.select(FIRST_REPOSITORY)).thenReturn(repository);
+        when(mailRepositoryStore.get(FIRST_REPOSITORY)).thenReturn(Optional.of(repository));
 
         repository.store(FakeMail.builder()
             .name(NAME_1)
@@ -109,7 +111,7 @@ public class MailRepositoryStoreServiceTest {
 
     @Test
     public void listMailsShouldApplyLimitAndOffset() throws Exception {
-        when(mailRepositoryStore.select(FIRST_REPOSITORY)).thenReturn(repository);
+        when(mailRepositoryStore.get(FIRST_REPOSITORY)).thenReturn(Optional.of(repository));
 
         repository.store(FakeMail.builder()
             .name(NAME_1)


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


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

Posted by bt...@apache.org.
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


[16/16] james-project git commit: JAMES-2292 Limit the number of messages

Posted by bt...@apache.org.
JAMES-2292 Limit the number of 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/b9ee9077
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b9ee9077
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b9ee9077

Branch: refs/heads/master
Commit: b9ee9077638b169839014602f7ff343aa5d3ef4f
Parents: 60b743a
Author: Antoine Duprat <ad...@linagora.com>
Authored: Tue Jan 23 16:55:09 2018 +0100
Committer: benwa <bt...@linagora.com>
Committed: Thu Jan 25 11:46:42 2018 +0700

----------------------------------------------------------------------
 .../james/webadmin/routes/MailQueueRoutes.java  | 69 ++++++++++----
 .../webadmin/routes/MailQueueRoutesTest.java    | 96 +++++++++++++++-----
 .../routes/MailQueueRoutesUnitTest.java         | 34 +++++++
 3 files changed, 158 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/b9ee9077/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 bcaee97..6e67340 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
@@ -33,6 +33,7 @@ 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.util.streams.Limit;
 import org.apache.james.webadmin.Routes;
 import org.apache.james.webadmin.dto.MailQueueDTO;
 import org.apache.james.webadmin.dto.MailQueueItemDTO;
@@ -40,8 +41,6 @@ import org.apache.james.webadmin.utils.ErrorResponder;
 import org.apache.james.webadmin.utils.ErrorResponder.ErrorType;
 import org.apache.james.webadmin.utils.JsonTransformer;
 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;
@@ -53,6 +52,7 @@ import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
+import spark.HaltException;
 import spark.Request;
 import spark.Service;
 
@@ -64,12 +64,12 @@ 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";
+    @VisibleForTesting static final String MAILS = "/mails";
     
     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 Logger LOGGER = LoggerFactory.getLogger(MailQueueRoutes.class);
-
     private final MailQueueFactory<ManageableMailQueue> mailQueueFactory;
     private final JsonTransformer jsonTransformer;
 
@@ -85,7 +85,7 @@ public class MailQueueRoutes implements Routes {
 
         getMailQueue(service);
         
-        listMessages(service);
+        listMails(service);
     }
 
     @GET
@@ -152,29 +152,44 @@ public class MailQueueRoutes implements Routes {
     }
 
     @GET
-    @Path("/{mailQueueName}/messages")
+    @Path("/{mailQueueName}/mails")
     @ApiImplicitParams({
         @ApiImplicitParam(required = true, dataType = "string", name = "mailQueueName", paramType = "path"),
-        @ApiImplicitParam(required = false, dataType = "boolean", name = DELAYED_QUERY_PARAM, paramType = "query")
+        @ApiImplicitParam(
+                required = false, 
+                dataType = "boolean", 
+                name = DELAYED_QUERY_PARAM, 
+                paramType = "query",
+                example = "?delayed=true",
+                value = "Whether the mails are delayed in the mail queue or not (already sent)."),
+        @ApiImplicitParam(
+                required = false, 
+                dataType = "int", 
+                name = LIMIT_QUERY_PARAM, 
+                paramType = "query",
+                example = "?limit=100",
+                defaultValue = "100",
+                value = "Limits the maximum number of mails returned by this endpoint")
     })
     @ApiOperation(
-        value = "List the messages of the MailQueue"
+        value = "List the mails 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.BAD_REQUEST_400, message = "Invalid request for listing the 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 listMessages(Service service) {
-        service.get(BASE_URL + SEPARATOR + MAIL_QUEUE_NAME + MESSAGES, 
-                (request, response) -> listMessages(request), 
+    public void listMails(Service service) {
+        service.get(BASE_URL + SEPARATOR + MAIL_QUEUE_NAME + MAILS, 
+                (request, response) -> listMails(request), 
                 jsonTransformer);
     }
 
-    private List<MailQueueItemDTO> listMessages(Request request) {
+    private List<MailQueueItemDTO> listMails(Request request) {
         String mailQueueName = request.params(MAIL_QUEUE_NAME);
         return mailQueueFactory.getQueue(mailQueueName)
-                .map(name -> listMessages(name, isDelayed(request.queryParams(DELAYED_QUERY_PARAM))))
+                .map(name -> listMails(name, isDelayed(request.queryParams(DELAYED_QUERY_PARAM)), limit(request.queryParams(LIMIT_QUERY_PARAM))))
                 .orElseThrow(
                     () -> ErrorResponder.builder()
                         .message(String.format("%s can not be found", mailQueueName))
@@ -188,25 +203,39 @@ public class MailQueueRoutes implements Routes {
                 .map(Boolean::parseBoolean);
     }
 
-    private List<MailQueueItemDTO> listMessages(ManageableMailQueue queue, Optional<Boolean> isDelayed) {
+    @VisibleForTesting Limit limit(String limitAsString) throws HaltException {
         try {
-            return Iterators.toStream(queue.browse())
-                    .map(Throwing.function(MailQueueItemDTO::from))
+            return Optional.ofNullable(limitAsString)
+                    .map(Integer::parseInt)
+                    .map(Limit::limit)
+                    .orElseGet(() -> Limit.from(DEFAULT_LIMIT_VALUE));
+        } catch (IllegalArgumentException e) {
+            throw ErrorResponder.builder()
+                .message(String.format("limit can't be less or equals to zero"))
+                .statusCode(HttpStatus.BAD_REQUEST_400)
+                .type(ErrorResponder.ErrorType.NOT_FOUND)
+                .haltError();
+        }
+    }
+
+    private List<MailQueueItemDTO> listMails(ManageableMailQueue queue, Optional<Boolean> isDelayed, Limit limit) {
+        try {
+            return limit.applyOnStream(Iterators.toStream(queue.browse()))
+                    .map(Throwing.function(MailQueueItemDTO::from).sneakyThrow())
                     .filter(item -> filter(item, isDelayed))
                     .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)
+                .message("Invalid request for listing the mails from the mail queue " + queue)
                 .cause(e)
                 .haltError();
         }
     }
 
     private boolean filter(MailQueueItemDTO item, Optional<Boolean> isDelayed) {
-        return isDelayed.map(delayed -> delayed == item.isDelayed())
+        return isDelayed.map(delayed -> delayed == item.getNextDelivery().isPresent())
             .orElse(true);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/b9ee9077/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 1e0f942..291c6b1 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
@@ -19,6 +19,7 @@
 
 package org.apache.james.webadmin.routes;
 
+import static com.jayway.restassured.RestAssured.given;
 import static com.jayway.restassured.RestAssured.when;
 import static com.jayway.restassured.config.EncoderConfig.encoderConfig;
 import static com.jayway.restassured.config.RestAssuredConfig.newConfig;
@@ -170,11 +171,11 @@ public class MailQueueRoutesTest {
     }
 
     @Test
-    public void listMessagesShouldReturnEmptyListWhenNoMessages() {
+    public void listMailsShouldReturnEmptyListWhenNoMails() {
         mailQueueFactory.createQueue(FIRST_QUEUE);
 
         when()
-            .get(FIRST_QUEUE + "/messages")
+            .get(FIRST_QUEUE + "/mails")
         .then()
             .statusCode(HttpStatus.OK_200)
             .contentType(ContentType.JSON)
@@ -182,13 +183,13 @@ public class MailQueueRoutesTest {
     }
 
     @Test
-    public void listMessagesShouldReturnMessagesWhenSome() throws Exception {
+    public void listMailsShouldReturnMailsWhenSome() throws Exception {
         MemoryMailQueue queue = mailQueueFactory.createQueue(FIRST_QUEUE);
         queue.enQueue(Mails.defaultMail().build());
         queue.enQueue(Mails.defaultMail().build());
 
         when()
-            .get(FIRST_QUEUE + "/messages")
+            .get(FIRST_QUEUE + "/mails")
         .then()
             .statusCode(HttpStatus.OK_200)
             .contentType(ContentType.JSON)
@@ -196,38 +197,37 @@ public class MailQueueRoutesTest {
     }
 
     @Test
-    public void listMessagesShouldReturnMessageDetailWhenSome() throws Exception {
+    public void listMailsShouldReturnMailDetailsWhenSome() throws Exception {
         MemoryMailQueue queue = mailQueueFactory.createQueue(FIRST_QUEUE);
         FakeMail mail = Mails.defaultMail().build();
         queue.enQueue(mail);
 
-        String firstMessage = "[0]";
+        String firstMail = "[0]";
         List<String> expectedRecipients = mail.getRecipients().stream()
-                .map(MailAddress::asPrettyString)
+                .map(MailAddress::asString)
                 .collect(Guavate.toImmutableList());
 
         when()
-            .get(FIRST_QUEUE + "/messages")
+            .get(FIRST_QUEUE + "/mails")
         .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));
+            .body(firstMail + ".name", equalTo(mail.getName()))
+            .body(firstMail + ".sender", equalTo(mail.getSender().asString()))
+            .body(firstMail + ".recipients", equalTo(expectedRecipients));
     }
 
     @Test
-    public void listMessagesShouldReturnEmptyWhenNoDelayedMessagesAndAskFor() throws Exception {
+    public void listMailsShouldReturnEmptyWhenNoDelayedMailsAndAskFor() throws Exception {
         MemoryMailQueue queue = mailQueueFactory.createQueue(FIRST_QUEUE);
         FakeMail mail = Mails.defaultMail().build();
         queue.enQueue(mail);
 
-        RestAssured.given()
+        given()
             .param("delayed", "true")
         .when()
-            .get(FIRST_QUEUE + "/messages")
+            .get(FIRST_QUEUE + "/mails")
         .then()
             .statusCode(HttpStatus.OK_200)
             .contentType(ContentType.JSON)
@@ -235,15 +235,15 @@ public class MailQueueRoutesTest {
     }
 
     @Test
-    public void listMessagesShouldReturnCurrentMessagesWhenMessagesAndAskForNotDelayed() throws Exception {
+    public void listMailsShouldReturnCurrentMailsWhenMailsAndAskForNotDelayed() throws Exception {
         MemoryMailQueue queue = mailQueueFactory.createQueue(FIRST_QUEUE);
         FakeMail mail = Mails.defaultMail().build();
         queue.enQueue(mail);
 
-        RestAssured.given()
+        given()
             .param("delayed", "false")
         .when()
-            .get(FIRST_QUEUE + "/messages")
+            .get(FIRST_QUEUE + "/mails")
         .then()
             .statusCode(HttpStatus.OK_200)
             .contentType(ContentType.JSON)
@@ -252,18 +252,72 @@ public class MailQueueRoutesTest {
 
     @Ignore("MemoryMailQueueFactory doesn't support delay")
     @Test
-    public void listMessagesShouldReturnDelayedMessagesAndAskFor() throws Exception {
+    public void listMailsShouldReturnDelayedMailsWhenAskFor() throws Exception {
         MemoryMailQueue queue = mailQueueFactory.createQueue(FIRST_QUEUE);
         FakeMail mail = Mails.defaultMail().build();
         queue.enQueue(mail, 10, TimeUnit.MINUTES);
 
-        RestAssured.given()
+        given()
             .param("delayed", "true")
         .when()
-            .get(FIRST_QUEUE + "/messages")
+            .get(FIRST_QUEUE + "/mails")
         .then()
             .statusCode(HttpStatus.OK_200)
             .contentType(ContentType.JSON)
             .body(".", hasSize(1));
     }
+
+    @Test
+    public void listMailsShouldReturnOneMailWhenMailsAndAskForALimitOfOne() throws Exception {
+        MemoryMailQueue queue = mailQueueFactory.createQueue(FIRST_QUEUE);
+        FakeMail mail = Mails.defaultMail().build();
+        queue.enQueue(mail);
+        queue.enQueue(mail);
+        queue.enQueue(mail);
+
+        given()
+            .param("limit", "1")
+        .when()
+            .get(FIRST_QUEUE + "/mails")
+        .then()
+            .statusCode(HttpStatus.OK_200)
+            .contentType(ContentType.JSON)
+            .body(".", hasSize(1));
+    }
+
+    @Test
+    public void listMailsShouldReturnBadRequestWhenLimitIsLessThanZero() throws Exception {
+        mailQueueFactory.createQueue(FIRST_QUEUE);
+
+        given()
+            .param("limit", "-1")
+        .when()
+            .get(FIRST_QUEUE + "/mails")
+        .then()
+            .statusCode(HttpStatus.BAD_REQUEST_400);
+    }
+
+    @Test
+    public void listMailsShouldReturnBadRequestWhenLimitEqualsToZero() throws Exception {
+        mailQueueFactory.createQueue(FIRST_QUEUE);
+
+        given()
+            .param("limit", "0")
+        .when()
+            .get(FIRST_QUEUE + "/mails")
+        .then()
+            .statusCode(HttpStatus.BAD_REQUEST_400);
+    }
+
+    @Test
+    public void listMailsShouldReturnBadRequestWhenLimitIsInvalid() throws Exception {
+        mailQueueFactory.createQueue(FIRST_QUEUE);
+
+        given()
+            .param("limit", "abc")
+        .when()
+            .get(FIRST_QUEUE + "/mails")
+        .then()
+            .statusCode(HttpStatus.BAD_REQUEST_400);
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/b9ee9077/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
index 859f52e..16d534e 100644
--- 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
@@ -20,15 +20,19 @@
 package org.apache.james.webadmin.routes;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import java.util.Optional;
 
 import org.apache.james.queue.api.MailQueueFactory;
 import org.apache.james.queue.api.ManageableMailQueue;
+import org.apache.james.util.streams.Limit;
 import org.apache.james.webadmin.utils.JsonTransformer;
 import org.junit.Before;
 import org.junit.Test;
 
+import spark.HaltException;
+
 public class MailQueueRoutesUnitTest {
 
     MailQueueRoutes testee;
@@ -62,4 +66,34 @@ public class MailQueueRoutesUnitTest {
         Optional<Boolean> delayed = testee.isDelayed("abc");
         assertThat(delayed).contains(false);
     }
+
+    @Test
+    public void limitShouldBeEqualsToDefaultValueWhenNull() {
+        Limit limit = testee.limit(null);
+        assertThat(limit.getLimit()).contains(MailQueueRoutes.DEFAULT_LIMIT_VALUE);
+    }
+
+    @Test
+    public void limitShouldBeEqualsToTheValueWhenOne() {
+        Limit limit = testee.limit("123");
+        assertThat(limit.getLimit()).contains(123);
+    }
+
+    @Test
+    public void limitShouldThrowWhenOtherValue() {
+        assertThatThrownBy(() -> testee.limit("abc"))
+            .isInstanceOf(HaltException.class);
+    }
+
+    @Test
+    public void limitShouldThrowWhenEqualsToZero() {
+        assertThatThrownBy(() -> testee.limit("0"))
+            .isInstanceOf(HaltException.class);
+    }
+
+    @Test
+    public void limitShouldThrowWhenLessThanZero() {
+        assertThatThrownBy(() -> testee.limit("-1"))
+            .isInstanceOf(HaltException.class);
+    }
 }


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


[08/16] james-project git commit: JAMES-2293 Webadmin utils should return a ready to use webadmin server

Posted by bt...@apache.org.
JAMES-2293 Webadmin utils should return a ready to use webadmin server


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

Branch: refs/heads/master
Commit: abf91be4c6cd82bcad087157f072c09e7db1bfe4
Parents: 3cdb5ad
Author: benwa <bt...@linagora.com>
Authored: Mon Jan 22 15:22:29 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jan 25 11:39:29 2018 +0700

----------------------------------------------------------------------
 server/container/guice/cassandra-guice/pom.xml  |  6 ++
 .../apache/james/FixingGhostMailboxTest.java    | 22 +++---
 .../apache/james/utils/WebAdminGuiceProbe.java  |  5 +-
 .../transport/mailets/GroupMappingTest.java     | 65 +++++++++--------
 .../integration/JwtFilterIntegrationTest.java   | 15 +---
 .../WebAdminServerIntegrationTest.java          | 73 +++++---------------
 .../routes/CassandraMigrationRoutesTest.java    |  2 +-
 .../apache/james/webadmin/WebAdminUtils.java    |  8 ++-
 .../james/webadmin/routes/TasksRoutesTest.java  |  2 +-
 .../webadmin/routes/DomainsRoutesTest.java      |  2 +-
 .../james/webadmin/routes/GroupsRoutesTest.java |  2 +-
 .../james/webadmin/routes/UsersRoutesTest.java  |  2 +-
 .../webadmin/routes/GlobalQuotaRoutesTest.java  |  2 +-
 .../routes/UserMailboxesRoutesTest.java         |  2 +-
 .../routes/MailRepositoriesRoutesTest.java      |  2 +-
 15 files changed, 88 insertions(+), 122 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/abf91be4/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 fc3bd28..77c4239 100644
--- a/server/container/guice/cassandra-guice/pom.xml
+++ b/server/container/guice/cassandra-guice/pom.xml
@@ -190,6 +190,12 @@
         </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
+            <artifactId>james-server-webadmin-core</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
             <artifactId>metrics-es-reporter</artifactId>
             <version>${project.version}</version>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/abf91be4/server/container/guice/cassandra-guice/src/test/java/org/apache/james/FixingGhostMailboxTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/FixingGhostMailboxTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/FixingGhostMailboxTest.java
index 9b3220b..036ee10 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/FixingGhostMailboxTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/FixingGhostMailboxTest.java
@@ -69,6 +69,7 @@ import org.apache.james.utils.JmapGuiceProbe;
 import org.apache.james.utils.WebAdminGuiceProbe;
 import org.apache.james.webadmin.RandomPortSupplier;
 import org.apache.james.webadmin.WebAdminConfiguration;
+import org.apache.james.webadmin.WebAdminUtils;
 import org.apache.james.webadmin.routes.CassandraMailboxMergingRoutes;
 import org.apache.james.webadmin.routes.TasksRoutes;
 import org.junit.After;
@@ -84,6 +85,7 @@ import com.google.common.base.Charsets;
 import com.jayway.restassured.RestAssured;
 import com.jayway.restassured.builder.RequestSpecBuilder;
 import com.jayway.restassured.http.ContentType;
+import com.jayway.restassured.specification.RequestSpecification;
 
 public class FixingGhostMailboxTest {
 
@@ -119,6 +121,7 @@ public class FixingGhostMailboxTest {
     private MailboxPath aliceInboxPath;
     private ComposedMessageId message2;
     private WebAdminGuiceProbe webAdminProbe;
+    private RequestSpecification webadminSpecification;
 
     @Before
     public void setup() throws Throwable {
@@ -140,6 +143,8 @@ public class FixingGhostMailboxTest {
             .setPort(jmapServer.getProbe(JmapGuiceProbe.class).getJmapPort())
             .build();
         RestAssured.enableLoggingOfRequestAndResponseIfValidationFails();
+        webadminSpecification = WebAdminUtils.buildRequestSpecification(webAdminProbe.getWebAdminPort())
+            .build();
 
         domain = "domain.tld";
         alice = "alice@" + domain;
@@ -298,8 +303,8 @@ public class FixingGhostMailboxTest {
 
         String taskId = fixGhostMailboxes(newAliceInbox);
 
-        given()
-            .port(webAdminProbe.getWebAdminPort())
+        with()
+            .spec(webadminSpecification)
             .basePath(TasksRoutes.BASE)
         .when()
             .get(taskId + "/await")
@@ -315,22 +320,21 @@ public class FixingGhostMailboxTest {
             .body("submitDate", is(not(nullValue())))
             .body("startedDate", is(not(nullValue())))
             .body("completedDate", is(not(nullValue())));
-
     }
 
     private String fixGhostMailboxes(Mailbox newAliceInbox) {
-        String taskId = with()
-            .port(webAdminProbe.getWebAdminPort())
-            .basePath(CassandraMailboxMergingRoutes.BASE)
+        String taskId = given()
+            .spec(webadminSpecification)
             .body("{" +
                 "    \"mergeOrigin\":\"" + aliceGhostInboxId.serialize() + "\"," +
                 "    \"mergeDestination\":\"" + newAliceInbox.getMailboxId().serialize() + "\"" +
                 "}")
-            .post()
+            .post(CassandraMailboxMergingRoutes.BASE)
             .jsonPath()
             .getString("taskId");
-        with()
-            .port(webAdminProbe.getWebAdminPort())
+
+        given()
+            .spec(webadminSpecification)
             .basePath(TasksRoutes.BASE)
             .get(taskId + "/await");
         rule.await();

http://git-wip-us.apache.org/repos/asf/james-project/blob/abf91be4/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/utils/WebAdminGuiceProbe.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/utils/WebAdminGuiceProbe.java b/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/utils/WebAdminGuiceProbe.java
index 9caa85f..7b0528b 100644
--- a/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/utils/WebAdminGuiceProbe.java
+++ b/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/utils/WebAdminGuiceProbe.java
@@ -21,6 +21,7 @@ package org.apache.james.utils;
 
 import javax.inject.Inject;
 
+import org.apache.james.webadmin.PortSupplier;
 import org.apache.james.webadmin.WebAdminServer;
 
 public class WebAdminGuiceProbe implements GuiceProbe {
@@ -31,8 +32,8 @@ public class WebAdminGuiceProbe implements GuiceProbe {
         this.webAdminServer = webAdminServer;
     }
 
-    public int getWebAdminPort() {
-        return webAdminServer.getPort().get().getValue();
+    public PortSupplier getWebAdminPort() {
+        return webAdminServer.getPort();
     }
 
     public void await() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/abf91be4/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 dbcdf8e..1ccaf61 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
@@ -19,6 +19,7 @@
 
 package org.apache.james.transport.mailets;
 
+import static com.jayway.restassured.RestAssured.given;
 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;
@@ -47,6 +48,7 @@ import org.apache.james.utils.FakeSmtp;
 import org.apache.james.utils.IMAPMessageReader;
 import org.apache.james.utils.SMTPMessageSender;
 import org.apache.james.utils.WebAdminGuiceProbe;
+import org.apache.james.webadmin.WebAdminUtils;
 import org.apache.james.webadmin.routes.GroupsRoutes;
 import org.apache.mailet.base.test.FakeMail;
 import org.junit.After;
@@ -55,7 +57,6 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 
-import com.jayway.restassured.RestAssured;
 import com.jayway.restassured.specification.RequestSpecification;
 
 public class GroupMappingTest {
@@ -73,7 +74,7 @@ public class GroupMappingTest {
     private TemporaryJamesServer jamesServer;
     private MimeMessage message;
     private DataProbe dataProbe;
-    private RequestSpecification restApiRequest;
+    private RequestSpecification webAdminApi;
 
     @Rule
     public final FakeSmtp fakeSmtp = new FakeSmtp();
@@ -119,8 +120,8 @@ public class GroupMappingTest {
 
         WebAdminGuiceProbe webAdminGuiceProbe = jamesServer.getProbe(WebAdminGuiceProbe.class);
         webAdminGuiceProbe.await();
-        restApiRequest = RestAssured.given()
-            .port(webAdminGuiceProbe.getWebAdminPort());
+        webAdminApi = given()
+            .spec(WebAdminUtils.buildRequestSpecification(webAdminGuiceProbe.getWebAdminPort()).build());
 
         message = MimeMessageBuilder.mimeMessageBuilder()
             .setSubject("test")
@@ -135,7 +136,7 @@ public class GroupMappingTest {
 
     @Test
     public void messageShouldRedirectToUserWhenBelongingToGroup() throws Exception {
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN1);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN1);
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FakeMail.builder()
@@ -153,7 +154,7 @@ public class GroupMappingTest {
 
     @Test
     public void messageShouldRedirectToUserDoesNotHaveSameDomainWhenBelongingToGroup() throws Exception {
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN2);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN2);
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FakeMail.builder()
@@ -171,9 +172,9 @@ public class GroupMappingTest {
 
     @Test
     public void messageShouldRedirectToAllUsersBelongingToGroup() throws Exception {
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN1);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN1);
 
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN2);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN2);
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FakeMail.builder()
@@ -194,9 +195,9 @@ public class GroupMappingTest {
 
     @Test
     public void messageShouldRedirectWhenGroupBelongingToAnotherGroup() throws Exception {
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN2 + "/" + USER_DOMAIN2);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN2 + "/" + USER_DOMAIN2);
 
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + GROUP_ON_DOMAIN2);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + GROUP_ON_DOMAIN2);
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FakeMail.builder()
@@ -214,11 +215,11 @@ public class GroupMappingTest {
 
     @Test
     public void messageShouldNotBeDuplicatedWhenUserBelongingToTwoGroups() throws Exception {
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN1);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN1);
 
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN2 + "/" + USER_DOMAIN1);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN2 + "/" + USER_DOMAIN1);
 
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + GROUP_ON_DOMAIN2);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + GROUP_ON_DOMAIN2);
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FakeMail.builder()
@@ -235,7 +236,7 @@ public class GroupMappingTest {
 
     @Test
     public void messageShouldNotBeDuplicatedWhenRecipientIsAlsoPartOfGroup() throws Exception {
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN1);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN1);
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FakeMail.builder()
@@ -252,11 +253,11 @@ public class GroupMappingTest {
 
     @Test
     public void groupMappingShouldSupportTreeStructure() throws Exception {
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN1);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN1);
 
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN2 + "/" + USER_DOMAIN2);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN2 + "/" + USER_DOMAIN2);
 
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + GROUP_ON_DOMAIN2);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + GROUP_ON_DOMAIN2);
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FakeMail.builder()
@@ -278,13 +279,13 @@ public class GroupMappingTest {
 
     @Test
     public void messageShouldNotBeSentWhenGroupLoopMapping() throws Exception {
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN1);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN1);
 
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN2 + "/" + USER_DOMAIN2);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN2 + "/" + USER_DOMAIN2);
 
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + GROUP_ON_DOMAIN2);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + GROUP_ON_DOMAIN2);
 
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN2 + "/" + GROUP_ON_DOMAIN1);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN2 + "/" + GROUP_ON_DOMAIN1);
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FakeMail.builder()
@@ -308,7 +309,7 @@ public class GroupMappingTest {
     public void messageShouldRedirectToUserWhenDomainMapping() throws Exception {
         dataProbe.addDomainAliasMapping(DOMAIN1, DOMAIN2);
 
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN1);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN1);
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FakeMail.builder()
@@ -327,7 +328,7 @@ public class GroupMappingTest {
     public void messageShouldNotSendToUserBelongingToGroupWhenDomainMapping() throws Exception {
         dataProbe.addDomainAliasMapping(DOMAIN1, DOMAIN2);
 
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN1);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN1);
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FakeMail.builder()
@@ -346,7 +347,7 @@ public class GroupMappingTest {
     public void messageShouldRedirectToGroupWhenDomainMapping() throws Exception {
         dataProbe.addDomainAliasMapping(DOMAIN1, DOMAIN2);
 
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN2 + "/" + USER_DOMAIN2);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN2 + "/" + USER_DOMAIN2);
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FakeMail.builder()
@@ -365,7 +366,7 @@ public class GroupMappingTest {
     public void messageShouldRedirectToGroupContainingSlash() throws Exception {
         String groupWithSlash = "a/a@" + DOMAIN1;
         String groupWithEncodedSlash = "a%2Fa@" + DOMAIN1;
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + groupWithEncodedSlash + "/" + USER_DOMAIN1);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + groupWithEncodedSlash + "/" + USER_DOMAIN1);
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FakeMail.builder()
@@ -385,7 +386,7 @@ public class GroupMappingTest {
         String userWithSlash = "a/a@" + DOMAIN1;
         dataProbe.addUser(userWithSlash, PASSWORD);
         String userWithEncodedSlash = "a%2Fa@" + DOMAIN1;
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + userWithEncodedSlash);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + userWithEncodedSlash);
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FakeMail.builder()
@@ -404,7 +405,7 @@ public class GroupMappingTest {
     public void messageShouldRedirectToUserWhenEncodingAt() throws Exception {
         String userWithEncodedAt = "user%40" + DOMAIN1;
         String groupWithEncodedAt = "group%40" + DOMAIN1;
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + groupWithEncodedAt + "/" + userWithEncodedAt);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + groupWithEncodedAt + "/" + userWithEncodedAt);
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FakeMail.builder()
@@ -422,7 +423,7 @@ public class GroupMappingTest {
     @Test
     public void sendMessageShouldSendAMessageToAnExternalGroupMember() throws Exception {
         String externalMail = "ray@yopmail.com";
-        restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + externalMail);
+        webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + externalMail);
 
         messageSender.connect(LOCALHOST_IP, SMTP_PORT)
             .sendMessage(FakeMail.builder()
@@ -432,10 +433,8 @@ public class GroupMappingTest {
             .awaitSent(awaitOneMinute);
 
         fakeSmtp.isReceived(response -> response
-                            .body("[0].from", equalTo(SENDER))
-                            .body("[0].to[0]", equalTo(externalMail))
-                            .body("[0].text", equalTo(MESSAGE_CONTENT)));
-
-
+            .body("[0].from", equalTo(SENDER))
+            .body("[0].to[0]", equalTo(externalMail))
+            .body("[0].text", equalTo(MESSAGE_CONTENT)));
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/abf91be4/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/JwtFilterIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/JwtFilterIntegrationTest.java b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/JwtFilterIntegrationTest.java
index 4ba097c..116f849 100644
--- a/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/JwtFilterIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/JwtFilterIntegrationTest.java
@@ -20,12 +20,9 @@
 package org.apache.james.webadmin.integration;
 
 import static com.jayway.restassured.RestAssured.given;
-import static com.jayway.restassured.config.EncoderConfig.encoderConfig;
-import static com.jayway.restassured.config.RestAssuredConfig.newConfig;
 import static org.apache.james.webadmin.Constants.SEPARATOR;
 import static org.assertj.core.api.Assertions.assertThat;
 
-import java.nio.charset.StandardCharsets;
 import java.util.Optional;
 
 import org.apache.james.CassandraJmapTestRule;
@@ -35,6 +32,7 @@ import org.apache.james.jwt.JwtConfiguration;
 import org.apache.james.util.ClassLoaderUtils;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.WebAdminGuiceProbe;
+import org.apache.james.webadmin.WebAdminUtils;
 import org.apache.james.webadmin.authentication.AuthenticationFilter;
 import org.apache.james.webadmin.authentication.JwtFilter;
 import org.apache.james.webadmin.routes.DomainsRoutes;
@@ -46,8 +44,6 @@ import org.junit.Rule;
 import org.junit.Test;
 
 import com.jayway.restassured.RestAssured;
-import com.jayway.restassured.builder.RequestSpecBuilder;
-import com.jayway.restassured.http.ContentType;
 import com.jayway.restassured.response.Header;
 
 public class JwtFilterIntegrationTest {
@@ -88,11 +84,7 @@ public class JwtFilterIntegrationTest {
         dataProbe = guiceJamesServer.getProbe(DataProbeImpl.class);
         webAdminGuiceProbe = guiceJamesServer.getProbe(WebAdminGuiceProbe.class);
 
-        RestAssured.requestSpecification = new RequestSpecBuilder()
-            .setContentType(ContentType.JSON)
-            .setAccept(ContentType.JSON)
-            .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)))
-            .build();
+        RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminGuiceProbe.getWebAdminPort()).build();
     }
 
     @After
@@ -103,7 +95,6 @@ public class JwtFilterIntegrationTest {
     @Test
     public void jwtAuthenticationShouldWork() throws Exception {
         given()
-            .port(webAdminGuiceProbe.getWebAdminPort())
             .header(new Header("Authorization", "Bearer " + VALID_TOKEN_ADMIN_TRUE))
         .when()
             .put(SPECIFIC_DOMAIN)
@@ -117,7 +108,6 @@ public class JwtFilterIntegrationTest {
     @Test
     public void jwtShouldRejectNonAdminRequests() throws Exception {
         given()
-            .port(webAdminGuiceProbe.getWebAdminPort())
             .header(new Header("Authorization", "Bearer " + VALID_TOKEN_ADMIN_FALSE))
         .when()
             .put(SPECIFIC_DOMAIN)
@@ -131,7 +121,6 @@ public class JwtFilterIntegrationTest {
     @Test
     public void jwtShouldRejectInvalidRequests() throws Exception {
         given()
-            .port(webAdminGuiceProbe.getWebAdminPort())
             .header(new Header("Authorization", "Bearer invalid"))
         .when()
             .put(SPECIFIC_DOMAIN)

http://git-wip-us.apache.org/repos/asf/james-project/blob/abf91be4/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 9ce9443..96d488d 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
@@ -20,9 +20,8 @@
 package org.apache.james.webadmin.integration;
 
 import static com.jayway.restassured.RestAssured.given;
+import static com.jayway.restassured.RestAssured.when;
 import static com.jayway.restassured.RestAssured.with;
-import static com.jayway.restassured.config.EncoderConfig.encoderConfig;
-import static com.jayway.restassured.config.RestAssuredConfig.newConfig;
 import static org.apache.james.webadmin.Constants.JSON_CONTENT_TYPE;
 import static org.apache.james.webadmin.Constants.SEPARATOR;
 import static org.assertj.core.api.Assertions.assertThat;
@@ -30,7 +29,6 @@ import static org.hamcrest.Matchers.containsInAnyOrder;
 import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.Matchers.is;
 
-import java.nio.charset.StandardCharsets;
 import java.util.List;
 
 import org.apache.james.CassandraJmapTestRule;
@@ -41,6 +39,7 @@ import org.apache.james.modules.MailboxProbeImpl;
 import org.apache.james.probe.DataProbe;
 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.MailRepositoriesRoutes;
 import org.apache.james.webadmin.routes.UserMailboxesRoutes;
@@ -54,8 +53,6 @@ import org.junit.Rule;
 import org.junit.Test;
 
 import com.jayway.restassured.RestAssured;
-import com.jayway.restassured.builder.RequestSpecBuilder;
-import com.jayway.restassured.http.ContentType;
 
 public class WebAdminServerIntegrationTest {
 
@@ -88,11 +85,8 @@ public class WebAdminServerIntegrationTest {
         dataProbe = guiceJamesServer.getProbe(DataProbeImpl.class);
         webAdminGuiceProbe = guiceJamesServer.getProbe(WebAdminGuiceProbe.class);
 
-        RestAssured.requestSpecification = new RequestSpecBuilder()
-                .setContentType(ContentType.JSON)
-                .setAccept(ContentType.JSON)
-                .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)))
-                .build();
+        RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminGuiceProbe.getWebAdminPort())
+            .build();
     }
 
     @After
@@ -102,9 +96,7 @@ public class WebAdminServerIntegrationTest {
 
     @Test
     public void postShouldAddTheGivenDomain() throws Exception {
-        given()
-            .port(webAdminGuiceProbe.getWebAdminPort())
-        .when()
+        when()
             .put(SPECIFIC_DOMAIN)
         .then()
             .statusCode(HttpStatus.NO_CONTENT_204);
@@ -114,9 +106,7 @@ public class WebAdminServerIntegrationTest {
 
     @Test
     public void mailRepositoriesRoutesShouldBeExposed() throws Exception {
-        given()
-            .port(webAdminGuiceProbe.getWebAdminPort())
-        .when()
+        when()
             .get(MailRepositoriesRoutes.MAIL_REPOSITORIES)
         .then()
             .statusCode(HttpStatus.OK_200)
@@ -131,9 +121,7 @@ public class WebAdminServerIntegrationTest {
     public void deleteShouldRemoveTheGivenDomain() throws Exception {
         dataProbe.addDomain(DOMAIN);
 
-        given()
-            .port(webAdminGuiceProbe.getWebAdminPort())
-        .when()
+        when()
             .delete(SPECIFIC_DOMAIN)
         .then()
             .statusCode(HttpStatus.NO_CONTENT_204);
@@ -146,7 +134,6 @@ public class WebAdminServerIntegrationTest {
         dataProbe.addDomain(DOMAIN);
 
         given()
-            .port(webAdminGuiceProbe.getWebAdminPort())
             .body("{\"password\":\"password\"}")
         .when()
             .put(SPECIFIC_USER)
@@ -162,7 +149,6 @@ public class WebAdminServerIntegrationTest {
         dataProbe.addUser(USERNAME, "anyPassword");
 
         given()
-            .port(webAdminGuiceProbe.getWebAdminPort())
             .body("{\"username\":\"" + USERNAME + "\",\"password\":\"password\"}")
         .when()
             .delete(SPECIFIC_USER)
@@ -177,9 +163,7 @@ public class WebAdminServerIntegrationTest {
         dataProbe.addDomain(DOMAIN);
         dataProbe.addUser(USERNAME, "anyPassword");
 
-        given()
-            .port(webAdminGuiceProbe.getWebAdminPort())
-        .when()
+        when()
             .get(UserRoutes.USERS)
         .then()
             .statusCode(HttpStatus.OK_200)
@@ -192,9 +176,7 @@ public class WebAdminServerIntegrationTest {
         dataProbe.addDomain(DOMAIN);
         dataProbe.addUser(USERNAME, "anyPassword");
 
-        given()
-            .port(webAdminGuiceProbe.getWebAdminPort())
-        .when()
+        when()
             .put(SPECIFIC_MAILBOX)
         .then()
             .statusCode(HttpStatus.NO_CONTENT_204);
@@ -208,9 +190,7 @@ public class WebAdminServerIntegrationTest {
         dataProbe.addUser(USERNAME, "anyPassword");
         guiceJamesServer.getProbe(MailboxProbeImpl.class).createMailbox("#private", USERNAME, MAILBOX);
 
-        given()
-            .port(webAdminGuiceProbe.getWebAdminPort())
-        .when()
+        when()
             .delete(SPECIFIC_MAILBOX)
         .then()
             .statusCode(HttpStatus.NO_CONTENT_204);
@@ -220,9 +200,7 @@ public class WebAdminServerIntegrationTest {
 
     @Test
     public void getCurrentVersionShouldReturnNullForCurrentVersionAsBeginning() throws Exception {
-        given()
-            .port(webAdminGuiceProbe.getWebAdminPort())
-        .when()
+        when()
             .get(VERSION)
         .then()
             .statusCode(HttpStatus.OK_200)
@@ -232,9 +210,7 @@ public class WebAdminServerIntegrationTest {
 
     @Test
     public void getLatestVersionShouldReturnTheConfiguredLatestVersion() throws Exception {
-        given()
-            .port(webAdminGuiceProbe.getWebAdminPort())
-        .when()
+        when()
             .get(VERSION_LATEST)
         .then()
             .statusCode(HttpStatus.OK_200)
@@ -245,19 +221,15 @@ public class WebAdminServerIntegrationTest {
     @Test
     public void postShouldDoMigrationAndUpdateCurrentVersion() throws Exception {
         String taskId = with()
-            .port(webAdminGuiceProbe.getWebAdminPort())
             .body(String.valueOf(CassandraSchemaVersionManager.MAX_VERSION.getValue()))
         .post(UPGRADE_VERSION)
             .jsonPath()
             .get("taskId");
 
         with()
-            .port(webAdminGuiceProbe.getWebAdminPort())
             .get("/task/" + taskId + "/await");
 
-        given()
-            .port(webAdminGuiceProbe.getWebAdminPort())
-        .when()
+        when()
             .get(VERSION)
         .then()
             .statusCode(HttpStatus.OK_200)
@@ -267,19 +239,14 @@ public class WebAdminServerIntegrationTest {
 
     @Test
     public void postShouldDoMigrationAndUpdateToTheLatestVersion() throws Exception {
-        String taskId = with()
-            .port(webAdminGuiceProbe.getWebAdminPort())
-        .post(UPGRADE_TO_LATEST_VERSION)
+        String taskId = with().post(UPGRADE_TO_LATEST_VERSION)
             .jsonPath()
             .get("taskId");
 
         with()
-            .port(webAdminGuiceProbe.getWebAdminPort())
             .get("/task/" + taskId + "/await");
 
-        given()
-            .port(webAdminGuiceProbe.getWebAdminPort())
-        .when()
+        when()
             .get(VERSION)
         .then()
             .statusCode(HttpStatus.OK_200)
@@ -292,11 +259,9 @@ public class WebAdminServerIntegrationTest {
         dataProbe.addAddressMapping("group", "domain.com", "user1@domain.com");
         dataProbe.addAddressMapping("group", "domain.com", "user2@domain.com");
 
-        List<String> members = given()
-            .port(webAdminGuiceProbe.getWebAdminPort())
-            .when()
+        List<String> members = when()
             .get("/address/groups/group@domain.com")
-            .then()
+        .then()
             .statusCode(HttpStatus.OK_200)
             .contentType(JSON_CONTENT_TYPE)
             .extract()
@@ -307,9 +272,7 @@ public class WebAdminServerIntegrationTest {
 
     @Test
     public void getSwaggerShouldReturnJsonDataForSwagger() throws Exception {
-        given()
-            .port(webAdminGuiceProbe.getWebAdminPort())
-        .when()
+        when()
             .get(SwaggerRoutes.SWAGGER_ENDPOINT)
         .then()
             .statusCode(HttpStatus.OK_200)

http://git-wip-us.apache.org/repos/asf/james-project/blob/abf91be4/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java b/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java
index 7b145af..b016ffe 100644
--- a/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java
@@ -88,7 +88,7 @@ public class CassandraMigrationRoutesTest {
         webAdminServer.await();
 
 
-        RestAssured.requestSpecification = WebAdminUtils.defineRequestSpecification(webAdminServer)
+        RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminServer)
             .setBasePath(CassandraMigrationRoutes.VERSION_BASE)
             .build();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/abf91be4/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
index 1d312a0..5b4e147 100644
--- a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
+++ b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
@@ -48,12 +48,16 @@ public class WebAdminUtils {
             metricFactory);
     }
 
-    public static RequestSpecBuilder defineRequestSpecification(WebAdminServer webAdminServer) {
+    public static RequestSpecBuilder buildRequestSpecification(WebAdminServer webAdminServer) {
+        return buildRequestSpecification(webAdminServer.getPort());
+    }
+
+    public static RequestSpecBuilder buildRequestSpecification(PortSupplier portSupplier) {
         return new RequestSpecBuilder()
             .setContentType(ContentType.JSON)
             .setAccept(ContentType.JSON)
             .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)))
-            .setPort(webAdminServer.getPort().get().getValue());
+            .setPort(portSupplier.get().getValue());
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/abf91be4/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 1c1ff85..ea56a6c 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
@@ -63,7 +63,7 @@ public class TasksRoutesTest {
         webAdminServer.configure(NO_CONFIGURATION);
         webAdminServer.await();
 
-        RestAssured.requestSpecification = WebAdminUtils.defineRequestSpecification(webAdminServer)
+        RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminServer)
             .setBasePath(TasksRoutes.BASE)
             .build();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/abf91be4/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
index 137a187..683fc91 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
@@ -66,7 +66,7 @@ public class DomainsRoutesTest {
         webAdminServer.configure(NO_CONFIGURATION);
         webAdminServer.await();
 
-        RestAssured.requestSpecification = WebAdminUtils.defineRequestSpecification(webAdminServer)
+        RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminServer)
             .setBasePath(DomainsRoutes.DOMAINS)
             .build();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/abf91be4/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
index 1b6aa7e..fee6ba0 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
@@ -82,7 +82,7 @@ public class GroupsRoutesTest {
         webAdminServer.configure(NO_CONFIGURATION);
         webAdminServer.await();
 
-        RestAssured.requestSpecification = WebAdminUtils.defineRequestSpecification(webAdminServer)
+        RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminServer)
             .setBasePath(GroupsRoutes.ROOT_PATH)
             .log(LogDetail.ALL)
             .build();

http://git-wip-us.apache.org/repos/asf/james-project/blob/abf91be4/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UsersRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UsersRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UsersRoutesTest.java
index 086d4c9..028a198 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UsersRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UsersRoutesTest.java
@@ -68,7 +68,7 @@ public class UsersRoutesTest {
         webAdminServer.configure(NO_CONFIGURATION);
         webAdminServer.await();
 
-        RestAssured.requestSpecification = WebAdminUtils.defineRequestSpecification(webAdminServer)
+        RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminServer)
             .setBasePath(UserRoutes.USERS)
             .build();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/abf91be4/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/GlobalQuotaRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/GlobalQuotaRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/GlobalQuotaRoutesTest.java
index 45869fe..60029c1 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/GlobalQuotaRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/GlobalQuotaRoutesTest.java
@@ -54,7 +54,7 @@ public class GlobalQuotaRoutesTest {
         webAdminServer.configure(NO_CONFIGURATION);
         webAdminServer.await();
 
-        RestAssured.requestSpecification = WebAdminUtils.defineRequestSpecification(webAdminServer)
+        RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminServer)
             .build();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/abf91be4/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
index ef8fccd..08f63e7 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
@@ -84,7 +84,7 @@ public class UserMailboxesRoutesTest {
         webAdminServer.configure(NO_CONFIGURATION);
         webAdminServer.await();
 
-        RestAssured.requestSpecification = WebAdminUtils.defineRequestSpecification(webAdminServer)
+        RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminServer)
             .setBasePath(USERS_BASE + SEPARATOR + USERNAME + SEPARATOR + UserMailboxesRoutes.MAILBOXES)
             .build();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/abf91be4/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 6a616b6..34edfdf 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
@@ -81,7 +81,7 @@ public class MailRepositoriesRoutesTest {
         webAdminServer.configure(NO_CONFIGURATION);
         webAdminServer.await();
 
-        RestAssured.requestSpecification = WebAdminUtils.defineRequestSpecification(webAdminServer)
+        RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminServer)
             .setBasePath(MailRepositoriesRoutes.MAIL_REPOSITORIES)
             .build();
     }


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


[10/16] james-project git commit: JAMES-2292 Introduce WebAdmin Mailqueue module

Posted by bt...@apache.org.
JAMES-2292 Introduce WebAdmin Mailqueue module


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

Branch: refs/heads/master
Commit: bef10eefbdc1ea76af97934dda4545472e36e2b0
Parents: e30179f
Author: Antoine Duprat <ad...@linagora.com>
Authored: Mon Jan 22 10:28:25 2018 +0100
Committer: benwa <bt...@linagora.com>
Committed: Thu Jan 25 11:44:44 2018 +0700

----------------------------------------------------------------------
 server/protocols/webadmin/pom.xml               |  1 +
 .../webadmin/webadmin-mailqueue/pom.xml         | 69 ++++++++++++++++++++
 2 files changed, 70 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/bef10eef/server/protocols/webadmin/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/pom.xml b/server/protocols/webadmin/pom.xml
index eefbf4a..ced8364 100644
--- a/server/protocols/webadmin/pom.xml
+++ b/server/protocols/webadmin/pom.xml
@@ -37,6 +37,7 @@
         <module>webadmin-core</module>
         <module>webadmin-data</module>
         <module>webadmin-mailbox</module>
+        <module>webadmin-mailqueue</module>
         <module>webadmin-mailrepository</module>
         <module>webadmin-swagger</module>
     </modules>

http://git-wip-us.apache.org/repos/asf/james-project/blob/bef10eef/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
new file mode 100644
index 0000000..3507c7f
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailqueue/pom.xml
@@ -0,0 +1,69 @@
+<?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/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.james</groupId>
+        <artifactId>james-server</artifactId>
+        <version>3.1.0-SNAPSHOT</version>
+        <relativePath>../../../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>james-server-webadmin-mailqueue</artifactId>
+    <packaging>jar</packaging>
+
+    <name>Apache James :: Server :: Web Admin :: MailQueue</name>
+
+    <dependencies>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>com.github.kongchen</groupId>
+                <artifactId>swagger-maven-plugin</artifactId>
+                <configuration>
+                    <apiSources>
+                        <apiSource>
+                            <springmvc>false</springmvc>
+                            <locations>org.apache.james.webadmin</locations>
+                            <info>
+                                <title>Swagger Maven Plugin</title>
+                                <version>v1</version>
+                            </info>
+                            <swaggerDirectory>${project.build.directory}</swaggerDirectory>
+                            <swaggerFileName>webadmin-mailbox</swaggerFileName>
+                        </apiSource>
+                    </apiSources>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>


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