This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 7780931c51b8c6055a6225b2e8355891809416c6 Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Tue Feb 19 14:32:11 2019 +0700 JAMES-2661 WebAdmin for EventDeadLetter: List failed events --- .../webadmin/routes/EventDeadLettersRoutes.java | 30 ++++++++++ .../routes/EventDeadLettersRoutesTest.java | 65 ++++++++++++++++++++++ 2 files changed, 95 insertions(+) diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/EventDeadLettersRoutes.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/EventDeadLettersRoutes.java index 2121312..601ff86 100644 --- a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/EventDeadLettersRoutes.java +++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/EventDeadLettersRoutes.java @@ -19,12 +19,17 @@ package org.apache.james.webadmin.routes; +import java.util.UUID; + import javax.inject.Inject; +import org.apache.james.mailbox.events.Event; import org.apache.james.mailbox.events.EventDeadLetters; import org.apache.james.mailbox.events.Group; import org.apache.james.webadmin.Routes; +import org.apache.james.webadmin.utils.ErrorResponder; import org.apache.james.webadmin.utils.JsonTransformer; +import org.eclipse.jetty.http.HttpStatus; import com.github.steveash.guavate.Guavate; @@ -34,6 +39,7 @@ import spark.Service; public class EventDeadLettersRoutes implements Routes { private static final String BASE_PATH = "/events/deadLetter"; + private static final String GROUP_PARAM = ":group"; private final EventDeadLetters deadLetters; private final JsonTransformer jsonTransformer; @@ -52,6 +58,7 @@ public class EventDeadLettersRoutes implements Routes { @Override public void define(Service service) { service.get(BASE_PATH + "/groups", this::listGroups, jsonTransformer); + service.get(BASE_PATH + "/groups/" + GROUP_PARAM + "/events", this::listFailedEvents, jsonTransformer); } private Iterable<String> listGroups(Request request, Response response) { @@ -60,4 +67,27 @@ public class EventDeadLettersRoutes implements Routes { .collect(Guavate.toImmutableList()) .block(); } + + private Iterable<String> listFailedEvents(Request request, Response response) { + Group group = parseGroup(request); + return deadLetters.failedEventIds(group) + .map(Event.EventId::getId) + .map(UUID::toString) + .collect(Guavate.toImmutableList()) + .block(); + } + + private Group parseGroup(Request request) { + String groupAsString = request.params(GROUP_PARAM); + try { + return Group.deserialize(groupAsString); + } catch (Group.GroupDeserializationException e) { + throw ErrorResponder.builder() + .statusCode(HttpStatus.BAD_REQUEST_400) + .message("Can not deserialize the supplied group: " + groupAsString) + .cause(e) + .type(ErrorResponder.ErrorType.INVALID_ARGUMENT) + .haltError(); + } + } } diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/EventDeadLettersRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/EventDeadLettersRoutesTest.java index d05c1bb..fa2b911 100644 --- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/EventDeadLettersRoutesTest.java +++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/EventDeadLettersRoutesTest.java @@ -24,6 +24,7 @@ import static org.apache.james.webadmin.WebAdminServer.NO_CONFIGURATION; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.containsInAnyOrder; import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.Matchers.is; import org.apache.james.core.User; import org.apache.james.mailbox.MailboxSession; @@ -38,6 +39,7 @@ import org.apache.james.mailbox.store.event.EventFactory; import org.apache.james.metrics.logger.DefaultMetricFactory; import org.apache.james.webadmin.WebAdminServer; import org.apache.james.webadmin.WebAdminUtils; +import org.apache.james.webadmin.utils.ErrorResponder; import org.apache.james.webadmin.utils.JsonTransformer; import org.eclipse.jetty.http.HttpStatus; import org.junit.jupiter.api.AfterEach; @@ -142,4 +144,67 @@ class EventDeadLettersRoutesTest { .body(".", containsInAnyOrder(EventBusTestFixture.GroupA.class.getName(), EventBusTestFixture.GroupB.class.getName())); } } + + @Nested + class ListEvents { + @Test + void listEventsShouldFailWhenInvalidGroup() { + when() + .get("/events/deadLetter/groups/invalid/events") + .then() + .statusCode(HttpStatus.BAD_REQUEST_400) + .contentType(ContentType.JSON) + .body("statusCode", is(400)) + .body("type", is(ErrorResponder.ErrorType.INVALID_ARGUMENT.getType())) + .body("message", is("Can not deserialize the supplied group: invalid")); + } + + @Test + void listEventsShouldReturnEmptyWhenNone() { + when() + .get("/events/deadLetter/groups/" + new EventBusTestFixture.GroupA().asString() + "/events") + .then() + .statusCode(HttpStatus.OK_200) + .contentType(ContentType.JSON) + .body(".", hasSize(0)); + } + + @Test + void listEventsShouldReturnContainedEvents() { + deadLetters.store(new EventBusTestFixture.GroupA(), EVENT_1).block(); + + when() + .get("/events/deadLetter/groups/" + new EventBusTestFixture.GroupA().asString() + "/events") + .then() + .statusCode(HttpStatus.OK_200) + .contentType(ContentType.JSON) + .body(".", contains(UUID_1)); + } + + @Test + void listEventsShouldNotReturnEventsOfOtherGroups() { + deadLetters.store(new EventBusTestFixture.GroupA(), EVENT_1).block(); + deadLetters.store(new EventBusTestFixture.GroupB(), EVENT_2).block(); + + when() + .get("/events/deadLetter/groups/" + new EventBusTestFixture.GroupA().asString() + "/events") + .then() + .statusCode(HttpStatus.OK_200) + .contentType(ContentType.JSON) + .body(".", contains(UUID_1)); + } + + @Test + void listEventsShouldReturnAllEvents() { + deadLetters.store(new EventBusTestFixture.GroupA(), EVENT_1).block(); + deadLetters.store(new EventBusTestFixture.GroupA(), EVENT_2).block(); + + when() + .get("/events/deadLetter/groups/" + new EventBusTestFixture.GroupA().asString() + "/events") + .then() + .statusCode(HttpStatus.OK_200) + .contentType(ContentType.JSON) + .body(".", containsInAnyOrder(UUID_1, UUID_2)); + } + } } \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org