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 70785f49d192968f2a3e82e57e5e0aa9300d60b5 Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Tue Feb 19 14:33:30 2019 +0700 JAMES-2661 WebAdmin for EventDeadLetter: Get event details --- server/protocols/webadmin/webadmin-mailbox/pom.xml | 4 ++ .../webadmin/routes/EventDeadLettersRoutes.java | 30 +++++++++- .../routes/EventDeadLettersRoutesTest.java | 70 +++++++++++++++++++++- 3 files changed, 102 insertions(+), 2 deletions(-) diff --git a/server/protocols/webadmin/webadmin-mailbox/pom.xml b/server/protocols/webadmin/webadmin-mailbox/pom.xml index c8d7b72..9ee023a 100644 --- a/server/protocols/webadmin/webadmin-mailbox/pom.xml +++ b/server/protocols/webadmin/webadmin-mailbox/pom.xml @@ -50,6 +50,10 @@ </dependency> <dependency> <groupId>${james.groupId}</groupId> + <artifactId>apache-james-mailbox-event-json</artifactId> + </dependency> + <dependency> + <groupId>${james.groupId}</groupId> <artifactId>apache-james-mailbox-event-memory</artifactId> <scope>test</scope> </dependency> 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 601ff86..2de2613 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 @@ -23,6 +23,7 @@ import java.util.UUID; import javax.inject.Inject; +import org.apache.james.event.json.EventSerializer; import org.apache.james.mailbox.events.Event; import org.apache.james.mailbox.events.EventDeadLetters; import org.apache.james.mailbox.events.Group; @@ -40,14 +41,17 @@ import spark.Service; public class EventDeadLettersRoutes implements Routes { private static final String BASE_PATH = "/events/deadLetter"; private static final String GROUP_PARAM = ":group"; + private static final String EVENT_ID_PARAM = ":eventId"; private final EventDeadLetters deadLetters; private final JsonTransformer jsonTransformer; + private final EventSerializer eventSerializer; @Inject - EventDeadLettersRoutes(EventDeadLetters deadLetters, JsonTransformer jsonTransformer) { + EventDeadLettersRoutes(EventDeadLetters deadLetters, JsonTransformer jsonTransformer, EventSerializer eventSerializer) { this.deadLetters = deadLetters; this.jsonTransformer = jsonTransformer; + this.eventSerializer = eventSerializer; } @Override @@ -59,6 +63,7 @@ public class EventDeadLettersRoutes implements Routes { public void define(Service service) { service.get(BASE_PATH + "/groups", this::listGroups, jsonTransformer); service.get(BASE_PATH + "/groups/" + GROUP_PARAM + "/events", this::listFailedEvents, jsonTransformer); + service.get(BASE_PATH + "/groups/" + GROUP_PARAM + "/events/" + EVENT_ID_PARAM, this::getEventDetails); } private Iterable<String> listGroups(Request request, Response response) { @@ -77,6 +82,15 @@ public class EventDeadLettersRoutes implements Routes { .block(); } + private String getEventDetails(Request request, Response response) { + Group group = parseGroup(request); + Event.EventId eventId = parseEventId(request); + + return deadLetters.failedEvent(group, eventId) + .map(eventSerializer::toJson) + .block(); + } + private Group parseGroup(Request request) { String groupAsString = request.params(GROUP_PARAM); try { @@ -90,4 +104,18 @@ public class EventDeadLettersRoutes implements Routes { .haltError(); } } + + private Event.EventId parseEventId(Request request) { + String eventIdAsString = request.params(EVENT_ID_PARAM); + try { + return Event.EventId.of(eventIdAsString); + } catch (Exception e) { + throw ErrorResponder.builder() + .statusCode(HttpStatus.BAD_REQUEST_400) + .message("Can not deserialize the supplied eventId: " + eventIdAsString) + .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 fa2b911..e2a89e1 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 @@ -20,6 +20,7 @@ package org.apache.james.webadmin.routes; import static io.restassured.RestAssured.when; +import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; import static org.apache.james.webadmin.WebAdminServer.NO_CONFIGURATION; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.containsInAnyOrder; @@ -27,6 +28,7 @@ import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; import org.apache.james.core.User; +import org.apache.james.event.json.EventSerializer; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.events.Event; import org.apache.james.mailbox.events.EventBusTestFixture; @@ -34,6 +36,7 @@ import org.apache.james.mailbox.events.EventDeadLetters; import org.apache.james.mailbox.events.MailboxListener; import org.apache.james.mailbox.events.MemoryEventDeadLetters; import org.apache.james.mailbox.inmemory.InMemoryId; +import org.apache.james.mailbox.inmemory.InMemoryMessageId; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.store.event.EventFactory; import org.apache.james.metrics.logger.DefaultMetricFactory; @@ -68,6 +71,19 @@ class EventDeadLettersRoutesTest { .mailboxId(InMemoryId.of(456)) .mailboxPath(MailboxPath.forUser(BOB, "project-3")) .build(); + private static final String JSON_1 = "{" + + " \"MailboxAdded\":{" + + " \"eventId\":\"6e0dd59d-660e-4d9b-b22f-0354479f47b4\"," + + " \"mailboxPath\":{" + + " \"namespace\":\"#private\"," + + " \"user\":\"b...@apache.org\"," + + " \"name\":\"Important-mailbox\"" + + " }," + + " \"mailboxId\":\"453\"," + + " \"user\":\"b...@apache.org\"," + + " \"sessionId\":452" + + " }" + + "}"; private WebAdminServer webAdminServer; private EventDeadLetters deadLetters; @@ -76,12 +92,14 @@ class EventDeadLettersRoutesTest { void beforeEach() throws Exception { deadLetters = new MemoryEventDeadLetters(); JsonTransformer jsonTransformer = new JsonTransformer(); + EventSerializer eventSerializer = new EventSerializer(new InMemoryId.Factory(), new InMemoryMessageId.Factory()); webAdminServer = WebAdminUtils.createWebAdminServer( new DefaultMetricFactory(), new EventDeadLettersRoutes( deadLetters, - jsonTransformer)); + jsonTransformer, + eventSerializer)); webAdminServer.configure(NO_CONFIGURATION); webAdminServer.await(); @@ -207,4 +225,54 @@ class EventDeadLettersRoutesTest { .body(".", containsInAnyOrder(UUID_1, UUID_2)); } } + + @Nested + class GetEvent { + @Test + void getEventShouldReturnEvent() { + deadLetters.store(new EventBusTestFixture.GroupA(), EVENT_1).block(); + + String response = when() + .get("/events/deadLetter/groups/" + new EventBusTestFixture.GroupA().asString() + "/events/" + UUID_1) + .then() + .statusCode(HttpStatus.OK_200) + .contentType(ContentType.JSON) + .extract() + .asString(); + + assertThatJson(response).isEqualTo(JSON_1); + } + + @Test + void getEventShouldReturn404WhenNotFound() { + when() + .get("/events/deadLetter/groups/" + new EventBusTestFixture.GroupA().asString() + "/events/" + UUID_1) + .then() + .statusCode(HttpStatus.NOT_FOUND_404); + } + + @Test + void getEventShouldFailWhenInvalidEventId() { + when() + .get("/events/deadLetter/groups/" + new EventBusTestFixture.GroupA().asString() + "/events/invalid") + .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 eventId: invalid")); + } + + @Test + void getEventShouldFailWhenInvalidGroup() { + when() + .get("/events/deadLetter/groups/invalid/events/" + UUID_1) + .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")); + } + } } \ 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