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