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

Reply via email to