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 2019/02/21 09:39:06 UTC
[james-project] 04/10: JAMES-2661 WebAdmin for EventDeadLetter: Get
event details
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 <bt...@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\":\"bob@apache.org\"," +
+ " \"name\":\"Important-mailbox\"" +
+ " }," +
+ " \"mailboxId\":\"453\"," +
+ " \"user\":\"bob@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org