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 rc...@apache.org on 2019/12/20 07:30:44 UTC

[james-project] branch master updated (e603bb3 -> 2a949a7)

This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git.


    from e603bb3  JAMES-3012 Fixing ghost mailbox test is a webadmin integration test
     new 672d603  JAMES-2993 Use JsonSerializationVerifier for DLP event DTO tests
     new 5656822  JAMES-2993 Use JsonSerializationVerifier for Quota thresholds event DTO tests
     new cf37004  JAMES-2993 Use JsonSerializationVerifier for Task manager event DTO tests
     new 2a557c1  JAMES-2993 Use JsonSerializationVerifier for JMAP filtering event DTO tests
     new 984467a  JAMES-2993 Add a JsonSerializationVerifier::testCase method
     new 9efb898  JAMES-2813 BlobStoreVaultGarbageCollectionTask::AdditionalInformation should be immutable
     new 743c265  JAMES-2813 Cassandra tasks should use JsonSerializationVerifier
     new 9103c06  JAMES-2813 ReIndexing tasks should use JsonSerializationVerifier
     new ff173b3  JAMES-2813 MailRepositories tasks should use JsonSerializationVerifier
     new 294f2bd  JAMES-2813 MailQueue tasks should use JsonSerializationVerifier
     new 6e748dd  JAMES-2813 event-dead-letter tasks should use JsonSerializationVerifier
     new 194d175  JAMES-2813 cassandra rrt tasks should use JsonSerializationVerifier
     new 9ac467c  JAMES-2813 Use JsonSerializationVerifier in TaskSerializationTest
     new 88998ac  JAMES-2813 Adopt JsonSerializationVerifier for all vault tasks
     new 2a949a7  [FIX] Retry WebAdmin startup upon BindException

The 15 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 json/pom.xml                                       |   4 +
 .../apache/james/JsonSerializationVerifier.java    |  85 ++++++++++----
 .../james/JsonSerializationVerifierTest.java       |   5 +-
 mailbox/cassandra/pom.xml                          |   6 +
 ...ailboxPathV2MigrationTaskSerializationTest.java |  44 ++-----
 .../mail/task/MailboxMergingTaskTest.java          |  38 ++----
 .../blob/BlobStoreVaultGarbageCollectionTask.java  |  17 +--
 ...bageCollectionTaskAdditionalInformationDTO.java |   2 +-
 ...aultGarbageCollectionTaskSerializationTest.java |   5 +-
 mailbox/plugin/quota-mailing-cassandra/pom.xml     |   6 +
 .../james/mailbox/quota/cassandra/dto/DTOTest.java |  76 ++----------
 mailbox/tools/indexer/pom.xml                      |   6 +
 .../tools/indexer/MessageIdReIndexingTask.java     |   8 +-
 .../tools/indexer/SingleMessageReindexingTask.java |   4 +-
 ...rorRecoveryIndexationTaskSerializationTest.java |  71 +++---------
 .../FullReindexingTaskSerializationTest.java       |  57 +++------
 .../MessageIdReindexingTaskSerializationTest.java  |  56 +++------
 ...ngleMailboxReindexingTaskSerializationTest.java |  63 +++-------
 ...ngleMessageReindexingTaskSerializationTest.java |  53 +++------
 .../UserReindexingTaskSerializationTest.java       |  68 +++--------
 server/data/data-cassandra/pom.xml                 |  12 ++
 .../james/dlp/eventsourcing/cassandra/DTOTest.java |  60 ++++------
 ...pingsSourcesMigrationTaskSerializationTest.java |  38 ++----
 server/data/data-jmap-cassandra/pom.xml            |   6 +
 .../james/jmap/cassandra/filtering/DTOTest.java    |  84 +++-----------
 .../org/apache/james/webadmin/WebAdminServer.java  |   3 +
 .../org/apache/james/webadmin/WebAdminUtils.java   |  24 +++-
 .../apache/james/webadmin/WebAdminUtilsTest.java   |  24 ++--
 ...edMessagesVaultExportTaskSerializationTest.java |  80 +++++--------
 ...dMessagesVaultRestoreTaskSerializationTest.java |  65 ++++-------
 server/protocols/webadmin/webadmin-mailbox/pom.xml |   6 +
 .../service/EventDeadLettersRedeliverAllTask.java  |   6 +-
 .../EventDeadLettersRedeliverGroupTask.java        |   6 +-
 .../service/EventDeadLettersRedeliverOneTask.java  |   6 +-
 .../service/EventDeadLettersRedeliverTaskTest.java | 103 ++++++----------
 .../protocols/webadmin/webadmin-mailqueue/pom.xml  |   6 +
 .../webadmin/service/ClearMailQueueTaskTest.java   |  45 ++-----
 .../service/DeleteMailsFromMailQueueTaskTest.java  | 129 ++++++---------------
 .../webadmin/webadmin-mailrepository/pom.xml       |   6 +
 .../service/ClearMailRepositoryTaskTest.java       |  41 ++-----
 .../service/ReprocessingAllMailsTaskTest.java      | 112 ++++--------------
 .../service/ReprocessingOneMailTaskTest.java       |  76 +++---------
 server/task/task-distributed/pom.xml               |   6 +
 .../distributed/TaskEventsSerializationTest.java   |  88 ++++++--------
 server/task/task-json/pom.xml                      |   6 +
 .../server/task/json/TaskSerializationTest.java    |  37 ++----
 46 files changed, 604 insertions(+), 1145 deletions(-)
 copy backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/AliasNameTest.java => server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtilsTest.java (67%)


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 12/15: JAMES-2813 cassandra rrt tasks should use JsonSerializationVerifier

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 194d1753c2114ae8132ad509d92682b06b418d2c
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Dec 18 15:23:58 2019 +0700

    JAMES-2813 cassandra rrt tasks should use JsonSerializationVerifier
---
 server/data/data-cassandra/pom.xml                 |  6 ++++
 ...pingsSourcesMigrationTaskSerializationTest.java | 38 +++++++---------------
 2 files changed, 17 insertions(+), 27 deletions(-)

diff --git a/server/data/data-cassandra/pom.xml b/server/data/data-cassandra/pom.xml
index c7d560e..a6e6356 100644
--- a/server/data/data-cassandra/pom.xml
+++ b/server/data/data-cassandra/pom.xml
@@ -59,6 +59,12 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-json</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-data-api</artifactId>
         </dependency>
         <dependency>
diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/migration/MappingsSourcesMigrationTaskSerializationTest.java b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/migration/MappingsSourcesMigrationTaskSerializationTest.java
index edae144..b3c53a1 100644
--- a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/migration/MappingsSourcesMigrationTaskSerializationTest.java
+++ b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/migration/MappingsSourcesMigrationTaskSerializationTest.java
@@ -20,19 +20,13 @@
 
 package org.apache.james.rrt.cassandra.migration;
 
-import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
-import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 
-import java.io.IOException;
 import java.time.Instant;
 
-import org.apache.james.server.task.json.JsonTaskAdditionalInformationSerializer;
-import org.apache.james.server.task.json.JsonTaskSerializer;
+import org.apache.james.JsonSerializationVerifier;
 import org.junit.jupiter.api.Test;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-
 class MappingsSourcesMigrationTaskSerializationTest {
     private static final Instant TIMESTAMP = Instant.parse("2018-11-13T12:00:55Z");
     private static final MappingsSourcesMigration MIGRATION = mock(MappingsSourcesMigration.class);
@@ -41,29 +35,19 @@ class MappingsSourcesMigrationTaskSerializationTest {
     private static final MappingsSourcesMigration.AdditionalInformation DETAILS = new MappingsSourcesMigration.AdditionalInformation(42L, 10, TIMESTAMP);
     private static final String SERIALIZED_ADDITIONAL_INFORMATION = "{\"type\": \"mappings-sources-migration\", \"successfulMappingsCount\":42,\"errorMappingsCount\":10,\"timestamp\":\"2018-11-13T12:00:55Z\"}";
 
-    private static final JsonTaskSerializer TASK_SERIALIZER = JsonTaskSerializer.of(MappingsSourcesMigrationTaskDTO.MODULE.apply(MIGRATION));
-    private static final JsonTaskAdditionalInformationSerializer JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER = JsonTaskAdditionalInformationSerializer.of(MappingsSourcesMigrationTaskAdditionalInformationDTO.serializationModule(MappingsSourcesMigration.TYPE));
-
-    @Test
-    void taskShouldBeSerializable() throws JsonProcessingException {
-        assertThatJson(TASK_SERIALIZER.serialize(TASK))
-            .isEqualTo(SERIALIZED_TASK);
-    }
-
-    @Test
-    void taskShouldBeDeserializable() throws IOException {
-        assertThat(TASK_SERIALIZER.deserialize(SERIALIZED_TASK))
-            .isEqualToComparingFieldByField(TASK);
-    }
-
     @Test
-    void additionalInformationShouldBeSerializable() throws JsonProcessingException {
-        assertThatJson(JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER.serialize(DETAILS)).isEqualTo(SERIALIZED_ADDITIONAL_INFORMATION);
+    void taskShouldBeSerializable() throws Exception {
+        JsonSerializationVerifier.dtoModule(MappingsSourcesMigrationTaskDTO.MODULE.apply(MIGRATION))
+            .bean(TASK)
+            .json(SERIALIZED_TASK)
+            .verify();
     }
 
     @Test
-    void additonalInformationShouldBeDeserializable() throws IOException {
-        assertThat(JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER.deserialize(SERIALIZED_ADDITIONAL_INFORMATION))
-            .isEqualToComparingFieldByField(DETAILS);
+    void additionalInformationShouldBeSerializable() throws Exception {
+        JsonSerializationVerifier.dtoModule(MappingsSourcesMigrationTaskAdditionalInformationDTO.serializationModule(MappingsSourcesMigration.TYPE))
+            .bean(DETAILS)
+            .json(SERIALIZED_ADDITIONAL_INFORMATION)
+            .verify();
     }
 }
\ 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


[james-project] 14/15: JAMES-2813 Adopt JsonSerializationVerifier for all vault tasks

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 88998acae48a8199f1b1b64af707b0971433d57f
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu Dec 19 10:43:04 2019 +0700

    JAMES-2813 Adopt JsonSerializationVerifier for all vault tasks
    
    This requires customization of the equality check
---
 .../apache/james/JsonSerializationVerifier.java    | 38 +++++++---
 ...edMessagesVaultExportTaskSerializationTest.java | 80 ++++++++--------------
 ...dMessagesVaultRestoreTaskSerializationTest.java | 65 ++++++------------
 3 files changed, 82 insertions(+), 101 deletions(-)

diff --git a/json/src/test/java/org/apache/james/JsonSerializationVerifier.java b/json/src/test/java/org/apache/james/JsonSerializationVerifier.java
index 7de4bfd..09cf2a8 100644
--- a/json/src/test/java/org/apache/james/JsonSerializationVerifier.java
+++ b/json/src/test/java/org/apache/james/JsonSerializationVerifier.java
@@ -24,6 +24,8 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.IOException;
 import java.util.List;
+import java.util.Optional;
+import java.util.function.BiConsumer;
 
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.james.json.DTO;
@@ -34,29 +36,42 @@ import com.github.fge.lambdas.Throwing;
 import com.google.common.collect.ImmutableList;
 
 public class JsonSerializationVerifier<T, U extends DTO> {
-
     @FunctionalInterface
     public interface RequireJson<T, U extends DTO> {
         JsonSerializationVerifier<T, U> json(String json);
     }
 
+    @FunctionalInterface
+    public interface EqualityTester<T> extends BiConsumer<T, T> {
+
+    }
+
     public static <T, U extends DTO> JsonSerializationVerifier<T, U> dtoModule(DTOModule<T, U> dtoModule) {
         return new JsonSerializationVerifier<>(JsonGenericSerializer
             .forModules(dtoModule)
             .withoutNestedType(),
-            ImmutableList.of());
+            ImmutableList.of(),
+            Optional.empty());
     }
 
     public static <T, U extends DTO> JsonSerializationVerifier<T, U> serializer(JsonGenericSerializer<T, U> serializer) {
-        return new JsonSerializationVerifier<>(serializer, ImmutableList.of());
+        return new JsonSerializationVerifier<>(serializer, ImmutableList.of(), Optional.empty());
+    }
+
+    private static <T> EqualityTester<T> defaultEqualityTester() {
+        return (a, b) -> assertThat(a)
+            .describedAs("Deserialization test [" + b + "]")
+            .isEqualToComparingFieldByFieldRecursively(b);
     }
 
     private final List<Pair<String, T>> testValues;
     private final JsonGenericSerializer<T, U> serializer;
+    private final Optional<EqualityTester<T>> equalityTester;
 
-    private JsonSerializationVerifier( JsonGenericSerializer<T, U> serializer, List<Pair<String, T>> testValues) {
+    private JsonSerializationVerifier(JsonGenericSerializer<T, U> serializer, List<Pair<String, T>> testValues, Optional<EqualityTester<T>> equalityTester) {
         this.testValues = testValues;
         this.serializer = serializer;
+        this.equalityTester = equalityTester;
     }
 
     public RequireJson<T, U> bean(T bean) {
@@ -65,7 +80,15 @@ public class JsonSerializationVerifier<T, U extends DTO> {
             ImmutableList.<Pair<String, T>>builder()
                 .addAll(testValues)
                 .add(Pair.of(json, bean))
-                .build());
+                .build(),
+            equalityTester);
+    }
+
+    public JsonSerializationVerifier<T, U> equalityTester(EqualityTester<T> equalityTester) {
+        return new JsonSerializationVerifier<>(
+            serializer,
+            testValues,
+            Optional.of(equalityTester));
     }
 
     public JsonSerializationVerifier<T, U> testCase(T bean, String json) {
@@ -81,8 +104,7 @@ public class JsonSerializationVerifier<T, U extends DTO> {
             .describedAs("Serialization test [" + testValue.getRight() + "]")
             .isEqualTo(testValue.getLeft());
 
-        assertThat(serializer.deserialize(testValue.getLeft()))
-            .describedAs("Deserialization test [" + testValue.getRight() + "]")
-            .isEqualToComparingFieldByFieldRecursively(testValue.getRight());
+        equalityTester.orElse(defaultEqualityTester())
+            .accept(serializer.deserialize(testValue.getLeft()), testValue.getRight());
     }
 }
diff --git a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskSerializationTest.java b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskSerializationTest.java
index bee616e..0699822 100644
--- a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskSerializationTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskSerializationTest.java
@@ -18,22 +18,19 @@
  ****************************************************************/
 package org.apache.james.webadmin.vault.routes;
 
-import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatCode;
 import static org.mockito.Mockito.mock;
 
-import java.io.IOException;
 import java.time.Instant;
 
 import javax.mail.internet.AddressException;
 
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.core.MailAddress;
 import org.apache.james.core.Username;
 import org.apache.james.mailbox.model.TestId;
 import org.apache.james.server.task.json.JsonTaskAdditionalInformationSerializer;
-import org.apache.james.server.task.json.JsonTaskSerializer;
-import org.apache.james.task.Task;
 import org.apache.james.vault.dto.query.QueryTranslator;
 import org.apache.james.vault.search.CriterionFactory;
 import org.apache.james.vault.search.Query;
@@ -41,31 +38,24 @@ import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-
 class DeletedMessagesVaultExportTaskSerializationTest {
-
     private static final Instant TIMESTAMP = Instant.parse("2018-11-13T12:00:55Z");
-
-    private ExportService exportService;
-    private final TestId.Factory mailboxIdFactory = new TestId.Factory();
-    private final QueryTranslator queryTranslator = new QueryTranslator(mailboxIdFactory);
-
-    private JsonTaskSerializer taskSerializer;
-
-    private static final String username = "james";
-    private static final Username USERNAME_EXPORT_FROM = Username.of(username);
+    private static final String USERNAME = "james";
+    private static final Username USERNAME_EXPORT_FROM = Username.of(USERNAME);
     private static final Query QUERY = Query.of(CriterionFactory.hasAttachment(true));
-    private static MailAddress exportTo;
-    private static DeletedMessagesVaultExportTask.AdditionalInformation details;
-
-    private static final String serializedDeleteMessagesVaultExportTask = "{\"type\":\"deleted-messages-export\"," +
+    private static final String SERIALIZED_DELETE_MESSAGES_VAULT_EXPORT_TASK = "{\"type\":\"deleted-messages-export\"," +
         "\"userExportFrom\":\"james\"," +
         "\"exportQuery\":{\"combinator\":\"and\",\"criteria\":[{\"fieldName\":\"hasAttachment\",\"operator\":\"equals\",\"value\":\"true\"}]}," +
         "\"exportTo\":\"james@apache.org\"}\n";
     private static final String SERIALIZED_ADDITIONAL_INFORMATION_TASK = "{\"type\":\"deleted-messages-export\", \"exportTo\":\"james@apache.org\",\"userExportFrom\":\"james\",\"totalExportedMessages\":42, \"timestamp\":\"2018-11-13T12:00:55Z\"}";
+    private static MailAddress exportTo;
+    private static DeletedMessagesVaultExportTask.AdditionalInformation details;
 
-    private static final JsonTaskAdditionalInformationSerializer JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER = JsonTaskAdditionalInformationSerializer.of(DeletedMessagesVaultExportTaskAdditionalInformationDTO.MODULE);
+    private final TestId.Factory mailboxIdFactory = new TestId.Factory();
+    private final QueryTranslator queryTranslator = new QueryTranslator(mailboxIdFactory);
+    private ExportService exportService;
+    private DeletedMessagesVaultExportTaskDTO.Factory factory;
+    private JsonSerializationVerifier.EqualityTester<DeletedMessagesVaultExportTask> equalityTester;
 
     @BeforeAll
     static void init() throws AddressException {
@@ -76,45 +66,35 @@ class DeletedMessagesVaultExportTaskSerializationTest {
     @BeforeEach
     void setUp() {
         exportService = mock(ExportService.class);
-        DeletedMessagesVaultExportTaskDTO.Factory factory = new DeletedMessagesVaultExportTaskDTO.Factory(exportService, queryTranslator);
-        taskSerializer = JsonTaskSerializer.of(DeletedMessagesVaultExportTaskDTO.module(factory));
-    }
-
-    @Test
-    void deleteMessagesVaultExportTaskShouldBeSerializable() throws JsonProcessingException {
-        DeletedMessagesVaultExportTask task = new DeletedMessagesVaultExportTask(exportService, USERNAME_EXPORT_FROM, QUERY, exportTo);
-
-        assertThatJson(taskSerializer.serialize(task))
-            .isEqualTo(serializedDeleteMessagesVaultExportTask);
-    }
-
-    @Test
-    void deleteMessagesVaultExportTaskShouldBeDeserializable() throws IOException {
-        DeletedMessagesVaultExportTask task = new DeletedMessagesVaultExportTask(exportService, USERNAME_EXPORT_FROM, QUERY, exportTo);
-
-        Task deserializedTask = taskSerializer.deserialize(serializedDeleteMessagesVaultExportTask);
-        assertThat(deserializedTask)
-            .isEqualToComparingOnlyGivenFields(task, "userExportFrom", "exportTo");
-
-        DeletedMessagesVaultExportTask deserializedExportTask = (DeletedMessagesVaultExportTask) deserializedTask;
-        assertThat(queryTranslator.toDTO(deserializedExportTask.exportQuery)).isEqualTo(queryTranslator.toDTO(QUERY));
+        factory = new DeletedMessagesVaultExportTaskDTO.Factory(exportService, queryTranslator);
+        equalityTester = (a, b) -> {
+            assertThat(a).isEqualToComparingOnlyGivenFields(b, "userExportFrom", "exportTo");
+            assertThat(queryTranslator.toDTO(a.exportQuery)).isEqualTo(queryTranslator.toDTO(b.exportQuery));
+        };
     }
 
     @Test
-    void additionalInformationShouldBeSerializable() throws JsonProcessingException {
-        assertThatJson(JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER.serialize(details)).isEqualTo(SERIALIZED_ADDITIONAL_INFORMATION_TASK);
+    void deleteMessagesVaultExportTaskShouldBeSerializable() throws Exception {
+        JsonSerializationVerifier.dtoModule(DeletedMessagesVaultExportTaskDTO.module(factory))
+            .equalityTester(equalityTester)
+            .bean(new DeletedMessagesVaultExportTask(exportService, USERNAME_EXPORT_FROM, QUERY, exportTo))
+            .json(SERIALIZED_DELETE_MESSAGES_VAULT_EXPORT_TASK)
+            .verify();
     }
 
     @Test
-    void additionalInformationShouldBeDeserializable() throws IOException {
-        assertThat(JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER.deserialize(SERIALIZED_ADDITIONAL_INFORMATION_TASK))
-            .isEqualToComparingFieldByField(details);
+    void additionalInformationShouldBeSerializable() throws Exception {
+        JsonSerializationVerifier.dtoModule(DeletedMessagesVaultExportTaskAdditionalInformationDTO.MODULE)
+            .bean(details)
+            .json(SERIALIZED_ADDITIONAL_INFORMATION_TASK)
+            .verify();
     }
 
     @Test
-    void additionalInformationWithInvalidMailAddressShouldThrow() throws IOException {
+    void additionalInformationWithInvalidMailAddressShouldThrow() {
         String invalidSerializedAdditionalInformationTask = "{\"type\":\"deleted-messages-export\",\"exportTo\":\"invalid\",\"userExportFrom\":\"james\",\"totalExportedMessages\":42}";;
-        assertThatCode(() -> JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER.deserialize(invalidSerializedAdditionalInformationTask))
+        assertThatCode(() -> JsonTaskAdditionalInformationSerializer.of(DeletedMessagesVaultExportTaskAdditionalInformationDTO.MODULE)
+                .deserialize(invalidSerializedAdditionalInformationTask))
             .hasCauseInstanceOf(AddressException.class);
     }
 }
\ No newline at end of file
diff --git a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskSerializationTest.java b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskSerializationTest.java
index 42e6f20..e243190 100644
--- a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskSerializationTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskSerializationTest.java
@@ -18,84 +18,63 @@
  ****************************************************************/
 package org.apache.james.webadmin.vault.routes;
 
-import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 
-import java.io.IOException;
 import java.time.Instant;
 
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.core.Username;
 import org.apache.james.mailbox.model.TestId;
-import org.apache.james.server.task.json.JsonTaskAdditionalInformationSerializer;
-import org.apache.james.server.task.json.JsonTaskSerializer;
-import org.apache.james.task.Task;
 import org.apache.james.vault.dto.query.QueryTranslator;
 import org.apache.james.vault.search.CriterionFactory;
 import org.apache.james.vault.search.Query;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-
 class DeletedMessagesVaultRestoreTaskSerializationTest {
-
     private static final Instant TIMESTAMP = Instant.parse("2018-11-13T12:00:55Z");
-
-    private RestoreService exportService;
-    private final TestId.Factory mailboxIdFactory = new TestId.Factory();
-    private final QueryTranslator queryTranslator = new QueryTranslator(mailboxIdFactory);
-
-    private JsonTaskSerializer taskSerializer;
-
     private static final String USERNAME = "james";
     private static final Username USERNAME_TO_RESTORE = Username.of(USERNAME);
     private static final Query QUERY = Query.of(CriterionFactory.hasAttachment(true));
     private static final DeletedMessagesVaultRestoreTask.AdditionalInformation DETAILS = new DeletedMessagesVaultRestoreTask.AdditionalInformation(USERNAME_TO_RESTORE,42, 10, TIMESTAMP);
-
     private static final String SERIALIZED_DELETE_MESSAGES_VAULT_RESTORE_TASK = "{\"type\":\"deleted-messages-restore\"," +
         "\"userToRestore\":\"james\"," +
         "\"query\":{\"combinator\":\"and\",\"criteria\":[{\"fieldName\":\"hasAttachment\",\"operator\":\"equals\",\"value\":\"true\"}]}" +
         "}";
     private static final String SERIALIZED_ADDITIONAL_INFORMATION_TASK = "{\"type\":\"deleted-messages-restore\", \"user\":\"james\",\"successfulRestoreCount\":42,\"errorRestoreCount\":10, \"timestamp\":\"2018-11-13T12:00:55Z\"}";
 
-    private static final JsonTaskAdditionalInformationSerializer JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER = JsonTaskAdditionalInformationSerializer.of(DeletedMessagesVaultRestoreTaskAdditionalInformationDTO.MODULE);
+    private final TestId.Factory mailboxIdFactory = new TestId.Factory();
+    private final QueryTranslator queryTranslator = new QueryTranslator(mailboxIdFactory);
+    private RestoreService exportService;
+    private JsonSerializationVerifier.EqualityTester<DeletedMessagesVaultRestoreTask> equalityTester;
+    private DeletedMessagesVaultRestoreTaskDTO.Factory factory;
 
     @BeforeEach
     void setUp() {
         exportService = mock(RestoreService.class);
-        DeletedMessagesVaultRestoreTaskDTO.Factory factory = new DeletedMessagesVaultRestoreTaskDTO.Factory(exportService, queryTranslator);
-        taskSerializer = JsonTaskSerializer.of(DeletedMessagesVaultRestoreTaskDTO.module(factory));
-    }
-
-    @Test
-    void deleteMessagesVaultRestoreTaskShouldBeSerializable() throws JsonProcessingException {
-        DeletedMessagesVaultRestoreTask task = new DeletedMessagesVaultRestoreTask(exportService, USERNAME_TO_RESTORE, QUERY);
-
-        assertThatJson(taskSerializer.serialize(task))
-            .isEqualTo(SERIALIZED_DELETE_MESSAGES_VAULT_RESTORE_TASK);
+        factory = new DeletedMessagesVaultRestoreTaskDTO.Factory(exportService, queryTranslator);
+        equalityTester = (a, b) -> {
+            assertThat(a).isEqualToComparingOnlyGivenFields(b, "userToRestore");
+            assertThat(queryTranslator.toDTO(a.query)).isEqualTo(queryTranslator.toDTO(b.query));
+        };
     }
 
     @Test
-    void deleteMessagesVaultRestoreTaskShouldBeDeserializable() throws IOException {
+    void deleteMessagesVaultRestoreTaskShouldBeSerializable() throws Exception {
         DeletedMessagesVaultRestoreTask task = new DeletedMessagesVaultRestoreTask(exportService, USERNAME_TO_RESTORE, QUERY);
-
-        Task deserializedTask = taskSerializer.deserialize(SERIALIZED_DELETE_MESSAGES_VAULT_RESTORE_TASK);
-        assertThat(deserializedTask)
-            .isEqualToComparingOnlyGivenFields(task, "userToRestore");
-
-        DeletedMessagesVaultRestoreTask deserializedRestoreTask = (DeletedMessagesVaultRestoreTask) deserializedTask;
-        assertThat(queryTranslator.toDTO(deserializedRestoreTask.query)).isEqualTo(queryTranslator.toDTO(QUERY));
-    }
-
-    @Test
-    void additionalInformationShouldBeSerializable() throws JsonProcessingException {
-        assertThatJson(JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER.serialize(DETAILS)).isEqualTo(SERIALIZED_ADDITIONAL_INFORMATION_TASK);
+        JsonSerializationVerifier.dtoModule(DeletedMessagesVaultRestoreTaskDTO.module(factory))
+            .equalityTester(equalityTester)
+            .bean(task)
+            .json(SERIALIZED_DELETE_MESSAGES_VAULT_RESTORE_TASK)
+            .verify();
     }
 
     @Test
-    void additonalInformationShouldBeDeserializable() throws IOException {
-        assertThat(JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER.deserialize(SERIALIZED_ADDITIONAL_INFORMATION_TASK))
-            .isEqualToComparingFieldByField(DETAILS);
+    void additionalInformationShouldBeSerializable() throws Exception {
+        JsonSerializationVerifier.dtoModule(DeletedMessagesVaultRestoreTaskAdditionalInformationDTO.MODULE)
+            .bean(DETAILS)
+            .json(SERIALIZED_ADDITIONAL_INFORMATION_TASK)
+            .verify();
     }
 }
\ 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


[james-project] 10/15: JAMES-2813 MailQueue tasks should use JsonSerializationVerifier

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 294f2bdeb7264fc4be5b6a59d10f16d2d7191752
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Dec 18 15:28:29 2019 +0700

    JAMES-2813 MailQueue tasks should use JsonSerializationVerifier
---
 .../protocols/webadmin/webadmin-mailqueue/pom.xml  |   6 +
 .../webadmin/service/ClearMailQueueTaskTest.java   |  45 ++-----
 .../service/DeleteMailsFromMailQueueTaskTest.java  | 129 ++++++---------------
 3 files changed, 53 insertions(+), 127 deletions(-)

diff --git a/server/protocols/webadmin/webadmin-mailqueue/pom.xml b/server/protocols/webadmin/webadmin-mailqueue/pom.xml
index f3beb1a..5ec7c1c 100644
--- a/server/protocols/webadmin/webadmin-mailqueue/pom.xml
+++ b/server/protocols/webadmin/webadmin-mailqueue/pom.xml
@@ -40,6 +40,12 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-json</artifactId>
+            <scope>test</scope>
+            <type>test-jar</type>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-queue-api</artifactId>
         </dependency>
         <dependency>
diff --git a/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/service/ClearMailQueueTaskTest.java b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/service/ClearMailQueueTaskTest.java
index 54d2c95..6d04e01 100644
--- a/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/service/ClearMailQueueTaskTest.java
+++ b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/service/ClearMailQueueTaskTest.java
@@ -17,35 +17,26 @@
 
 package org.apache.james.webadmin.service;
 
-import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
-import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-import java.io.IOException;
 import java.time.Instant;
 import java.util.Optional;
 
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.queue.api.MailQueueFactory;
 import org.apache.james.queue.api.ManageableMailQueue;
-import org.apache.james.server.task.json.JsonTaskAdditionalInformationSerializer;
 import org.apache.james.server.task.json.JsonTaskSerializer;
 import org.junit.jupiter.api.Test;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-import net.javacrumbs.jsonunit.assertj.JsonAssertions;
-
 class ClearMailQueueTaskTest {
-
     private static final Instant TIMESTAMP = Instant.parse("2018-11-13T12:00:55Z");
     private static final String SERIALIZED = "{\"type\": \"clear-mail-queue\", \"queue\": \"anyQueue\"}";
     private static final String QUEUE_NAME = "anyQueue";
     private static final long INITIAL_COUNT = 0L;
     private static final long REMAINING_COUNT = 10L;
-    private JsonTaskAdditionalInformationSerializer jsonAdditionalInformationSerializer = JsonTaskAdditionalInformationSerializer.of(
-        ClearMailQueueTaskAdditionalInformationDTO.SERIALIZATION_MODULE);
     private static final String SERIALIZED_TASK_ADDITIONAL_INFORMATION = "{\"type\": \"clear-mail-queue\", \"mailQueueName\":\"anyQueue\",\"initialCount\":0,\"remainingCount\":10, \"timestamp\":\"2018-11-13T12:00:55Z\"}";
 
     @Test
@@ -54,28 +45,18 @@ class ClearMailQueueTaskTest {
         ManageableMailQueue mockedQueue = mock(ManageableMailQueue.class);
         when(mockedQueue.getName()).thenReturn(QUEUE_NAME);
         when(mailQueueFactory.getQueue(anyString())).thenAnswer(arg -> Optional.of(mockedQueue));
-        JsonTaskSerializer testee = JsonTaskSerializer.of(ClearMailQueueTaskDTO.module(mailQueueFactory));
 
         ManageableMailQueue queue = mailQueueFactory.getQueue(QUEUE_NAME).get();
         ClearMailQueueTask task = new ClearMailQueueTask(queue);
-        JsonAssertions.assertThatJson(testee.serialize(task)).isEqualTo(SERIALIZED);
-    }
 
-    @Test
-    void taskShouldBeDeserializable() throws Exception {
-        MailQueueFactory<ManageableMailQueue> mailQueueFactory = mock(MailQueueFactory.class);
-        ManageableMailQueue mockedQueue = mock(ManageableMailQueue.class);
-        when(mockedQueue.getName()).thenReturn(QUEUE_NAME);
-        when(mailQueueFactory.getQueue(anyString())).thenAnswer(arg -> Optional.of(mockedQueue));
-        JsonTaskSerializer testee = JsonTaskSerializer.of(ClearMailQueueTaskDTO.module(mailQueueFactory));
-
-        ManageableMailQueue queue = mailQueueFactory.getQueue(QUEUE_NAME).get();
-        ClearMailQueueTask task = new ClearMailQueueTask(queue);
-        assertThat(testee.deserialize(SERIALIZED)).isEqualToIgnoringGivenFields(task, "additionalInformation");
+        JsonSerializationVerifier.dtoModule(ClearMailQueueTaskDTO.module(mailQueueFactory))
+            .bean(task)
+            .json(SERIALIZED)
+            .verify();
     }
 
     @Test
-    void taskShouldThrowWhenDeserializeAnUnknownQueue() throws Exception {
+    void taskShouldThrowWhenDeserializeAnUnknownQueue() {
         MailQueueFactory<ManageableMailQueue> mailQueueFactory = mock(MailQueueFactory.class);
         when(mailQueueFactory.getQueue(anyString())).thenReturn(Optional.empty());
         JsonTaskSerializer testee = JsonTaskSerializer.of(ClearMailQueueTaskDTO.module(mailQueueFactory));
@@ -86,15 +67,11 @@ class ClearMailQueueTaskTest {
     }
 
     @Test
-    void additionalInformationShouldBeSerializable() throws JsonProcessingException {
-        ClearMailQueueTask.AdditionalInformation details = new ClearMailQueueTask.AdditionalInformation(QUEUE_NAME, INITIAL_COUNT, REMAINING_COUNT, TIMESTAMP);
-        assertThatJson(jsonAdditionalInformationSerializer.serialize(details)).isEqualTo(SERIALIZED_TASK_ADDITIONAL_INFORMATION);
-    }
-
-    @Test
-    void additionalInformationShouldBeDeserializable() throws IOException {
+    void additionalInformationShouldBeSerializable() throws Exception {
         ClearMailQueueTask.AdditionalInformation details = new ClearMailQueueTask.AdditionalInformation(QUEUE_NAME, INITIAL_COUNT, REMAINING_COUNT, TIMESTAMP);
-        assertThat(jsonAdditionalInformationSerializer.deserialize(SERIALIZED_TASK_ADDITIONAL_INFORMATION))
-            .isEqualToComparingFieldByField(details);
+        JsonSerializationVerifier.dtoModule(ClearMailQueueTaskAdditionalInformationDTO.SERIALIZATION_MODULE)
+            .bean(details)
+            .json(SERIALIZED_TASK_ADDITIONAL_INFORMATION)
+            .verify();
     }
 }
diff --git a/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/service/DeleteMailsFromMailQueueTaskTest.java b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/service/DeleteMailsFromMailQueueTaskTest.java
index edd4c54..c6797c2 100644
--- a/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/service/DeleteMailsFromMailQueueTaskTest.java
+++ b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/service/DeleteMailsFromMailQueueTaskTest.java
@@ -17,20 +17,17 @@
 
 package org.apache.james.webadmin.service;
 
-import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
-import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-import java.io.IOException;
 import java.time.Instant;
 import java.util.Optional;
-import java.util.stream.Stream;
 
 import javax.mail.internet.AddressException;
 
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.core.MailAddress;
 import org.apache.james.queue.api.MailQueueFactory;
 import org.apache.james.queue.api.ManageableMailQueue;
@@ -38,67 +35,38 @@ import org.apache.james.server.task.json.JsonTaskAdditionalInformationSerializer
 import org.apache.james.server.task.json.JsonTaskSerializer;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
 
 class DeleteMailsFromMailQueueTaskTest {
-
     private static final Instant TIMESTAMP = Instant.parse("2018-11-13T12:00:55Z");
+
     private MailQueueFactory<ManageableMailQueue> mailQueueFactory;
     private ManageableMailQueue mockedQueue;
     private final static String queueName = "anyQueue";
-    private JsonTaskAdditionalInformationSerializer jsonAdditionalInformationSerializer = JsonTaskAdditionalInformationSerializer.of(DeleteMailsFromMailQueueTaskAdditionalInformationDTO.MODULE);
 
     @BeforeEach
-    private void setUp() {
+    void setUp() {
         mailQueueFactory = mock(MailQueueFactory.class);
         mockedQueue = mock(ManageableMailQueue.class);
         when(mockedQueue.getName()).thenReturn(queueName);
         when(mailQueueFactory.getQueue(anyString())).thenAnswer(arg -> Optional.of(mockedQueue));
     }
 
-    @ParameterizedTest
-    @MethodSource
-    void taskShouldBeSerializable(Optional<MailAddress> sender, Optional<String> name, Optional<MailAddress> recipient, String serializedJson) throws Exception {
-
-        JsonTaskSerializer testee = JsonTaskSerializer.of(DeleteMailsFromMailQueueTaskDTO.module(mailQueueFactory));
-
-        ManageableMailQueue queue = mailQueueFactory.getQueue(queueName).get();
-        DeleteMailsFromMailQueueTask task = new DeleteMailsFromMailQueueTask(queue, sender, name, recipient);
-        assertThatJson(testee.serialize(task)).isEqualTo(serializedJson);
-    }
-
-    private static Stream<Arguments> taskShouldBeSerializable() throws Exception {
-        return validTasks();
-    }
-
-    @ParameterizedTest
-    @MethodSource
-    void taskShouldBeDeserializable(Optional<MailAddress> sender, Optional<String> name, Optional<MailAddress> recipient, String serializedJson) throws Exception {
-        JsonTaskSerializer testee = JsonTaskSerializer.of(DeleteMailsFromMailQueueTaskDTO.module(mailQueueFactory));
-
+    @Test
+    void taskShouldBeSerializable() throws Exception {
         ManageableMailQueue queue = mailQueueFactory.getQueue(queueName).get();
-        DeleteMailsFromMailQueueTask task = new DeleteMailsFromMailQueueTask(queue, sender, name, recipient);
-        assertThat(testee.deserialize(serializedJson)).isEqualToIgnoringGivenFields(task, "additionalInformation");
-    }
-
-    private static Stream<Arguments> taskShouldBeDeserializable() throws Exception {
-        return validTasks();
-    }
-
-    private static Stream<Arguments> validTasks() throws Exception {
-        return Stream.of(
-            Arguments.of(Optional.of(new MailAddress("a@b.c")), Optional.empty(), Optional.empty(), "{\"type\": \"delete-mails-from-mail-queue\", \"queue\": \"anyQueue\", \"sender\": \"a@b.c\"}"),
-            Arguments.of(Optional.empty(), Optional.of("name"), Optional.empty(), "{\"type\": \"delete-mails-from-mail-queue\", \"queue\": \"anyQueue\", \"name\": \"name\"}"),
-            Arguments.of(Optional.empty(), Optional.empty(), Optional.of(new MailAddress("d@e.f")), "{\"type\": \"delete-mails-from-mail-queue\", \"queue\": \"anyQueue\", \"recipient\": \"d@e.f\"}")
-        );
+        DeleteMailsFromMailQueueTask taskSender = new DeleteMailsFromMailQueueTask(queue, Optional.of(new MailAddress("a@b.c")), Optional.empty(), Optional.empty());
+        DeleteMailsFromMailQueueTask taskName = new DeleteMailsFromMailQueueTask(queue, Optional.empty(), Optional.of("name"), Optional.empty());
+        DeleteMailsFromMailQueueTask taskRecipient = new DeleteMailsFromMailQueueTask(queue, Optional.empty(), Optional.empty(),  Optional.of(new MailAddress("d@e.f")));
+
+        JsonSerializationVerifier.dtoModule(DeleteMailsFromMailQueueTaskDTO.module(mailQueueFactory))
+            .testCase(taskSender, "{\"type\": \"delete-mails-from-mail-queue\", \"queue\": \"anyQueue\", \"sender\": \"a@b.c\"}")
+            .testCase(taskName, "{\"type\": \"delete-mails-from-mail-queue\", \"queue\": \"anyQueue\", \"name\": \"name\"}")
+            .testCase(taskRecipient, "{\"type\": \"delete-mails-from-mail-queue\", \"queue\": \"anyQueue\", \"recipient\": \"d@e.f\"}")
+            .verify();
     }
 
     @Test
-    void taskShouldThrowWhenDeserializeAnUnknownQueue() throws Exception {
+    void taskShouldThrowWhenDeserializeAnUnknownQueue() {
         MailQueueFactory<ManageableMailQueue> mailQueueFactory = mock(MailQueueFactory.class);
         when(mailQueueFactory.getQueue(anyString())).thenReturn(Optional.empty());
         JsonTaskSerializer testee = JsonTaskSerializer.of(DeleteMailsFromMailQueueTaskDTO.module(mailQueueFactory));
@@ -109,7 +77,7 @@ class DeleteMailsFromMailQueueTaskTest {
     }
 
     @Test
-    void taskShouldThrowWhenDeserializeAMalformedMailAddress() throws Exception {
+    void taskShouldThrowWhenDeserializeAMalformedMailAddress() {
         JsonTaskSerializer testee = JsonTaskSerializer.of(DeleteMailsFromMailQueueTaskDTO.module(mailQueueFactory));
 
         String serializedJson = "{\"type\": \"delete-mails-from-mail-queue\", \"queue\": \"" + queueName + "\", \"sender\": \"a.b.c\"}";
@@ -117,56 +85,31 @@ class DeleteMailsFromMailQueueTaskTest {
             .isInstanceOf(AddressException.class);
     }
 
-    private static Stream<Arguments> validAdditionalInformation() throws Exception {
-        return Stream.of(
-            Arguments.of(10L, 5L, Optional.of(new MailAddress("a@b.c")), Optional.empty(), Optional.empty(), "{\"type\": \"delete-mails-from-mail-queue\", \"queue\": \"anyQueue\", \"sender\": \"a@b.c\", \"initialCount\" : 10, \"remainingCount\":5, \"timestamp\": \"2018-11-13T12:00:55Z\"}"),
-            Arguments.of(1L, 0L, Optional.empty(), Optional.of("name"), Optional.empty(), "{\"type\": \"delete-mails-from-mail-queue\", \"queue\": \"anyQueue\", \"name\": \"name\", \"initialCount\" : 1, \"remainingCount\":0, \"timestamp\": \"2018-11-13T12:00:55Z\"}"),
-            Arguments.of(6L, 6L, Optional.empty(), Optional.empty(), Optional.of(new MailAddress("d@e.f")), "{\"type\": \"delete-mails-from-mail-queue\", \"queue\": \"anyQueue\", \"recipient\": \"d@e.f\", \"initialCount\" : 6, \"remainingCount\":6, \"timestamp\": \"2018-11-13T12:00:55Z\"}")
-        );
-    }
-
-    @ParameterizedTest
-    @MethodSource
-    void additionalInformationShouldBeSerializable(long initialCount,
-                                                   long remainingCount,
-                                                   Optional<MailAddress> sender,
-                                                   Optional<String> name,
-                                                   Optional<MailAddress> recipient,
-                                                   String serializedAdditionalInformationJson) throws JsonProcessingException {
-
+    @Test
+    void additionalInformationShouldBeSerializable() throws Exception {
         ManageableMailQueue queue = mailQueueFactory.getQueue(queueName).get();
-        DeleteMailsFromMailQueueTask.AdditionalInformation details = new DeleteMailsFromMailQueueTask.AdditionalInformation(queue.getName(), initialCount, remainingCount, sender, name, recipient, TIMESTAMP);
-
-        assertThatJson(jsonAdditionalInformationSerializer.serialize(details)).isEqualTo(serializedAdditionalInformationJson);
-    }
-
-    private static Stream<Arguments> additionalInformationShouldBeSerializable() throws Exception {
-        return validAdditionalInformation();
-    }
-
-    @ParameterizedTest
-    @MethodSource
-    void additionalInformationShouldBeDeserializable(long initialCount,
-                                                     long remainingCount,
-                                                     Optional<MailAddress> sender,
-                                                     Optional<String> name,
-                                                     Optional<MailAddress> recipient,
-                                                     String serializedAdditionalInformationJson) throws IOException {
-        DeleteMailsFromMailQueueTask.AdditionalInformation details = new DeleteMailsFromMailQueueTask.AdditionalInformation(queueName, initialCount, remainingCount, sender, name, recipient, TIMESTAMP);
-
-        assertThat(jsonAdditionalInformationSerializer.deserialize(serializedAdditionalInformationJson))
-            .isEqualToComparingFieldByField(details);
-    }
-
-    private static Stream<Arguments> additionalInformationShouldBeDeserializable() throws Exception {
-        return validAdditionalInformation();
+        DeleteMailsFromMailQueueTask.AdditionalInformation detailsSender = new DeleteMailsFromMailQueueTask.AdditionalInformation(queue.getName(), 10L, 5L,
+            Optional.of(new MailAddress("a@b.c")), Optional.empty(), Optional.empty(), TIMESTAMP);
+        DeleteMailsFromMailQueueTask.AdditionalInformation detailsName = new DeleteMailsFromMailQueueTask.AdditionalInformation(queue.getName(), 1L, 0L,
+            Optional.empty(), Optional.of("name"), Optional.empty(), TIMESTAMP);
+        DeleteMailsFromMailQueueTask.AdditionalInformation detailsRecipient = new DeleteMailsFromMailQueueTask.AdditionalInformation(queue.getName(), 6L, 6L,
+            Optional.empty(), Optional.empty(), Optional.of(new MailAddress("d@e.f")), TIMESTAMP);
+
+        JsonSerializationVerifier.dtoModule(DeleteMailsFromMailQueueTaskAdditionalInformationDTO.MODULE)
+            .testCase(detailsSender,
+                "{\"type\": \"delete-mails-from-mail-queue\", \"queue\": \"anyQueue\", \"sender\": \"a@b.c\", \"initialCount\" : 10, \"remainingCount\":5, \"timestamp\": \"2018-11-13T12:00:55Z\"}")
+            .testCase(detailsName,
+                "{\"type\": \"delete-mails-from-mail-queue\", \"queue\": \"anyQueue\", \"name\": \"name\", \"initialCount\" : 1, \"remainingCount\":0, \"timestamp\": \"2018-11-13T12:00:55Z\"}")
+            .testCase(detailsRecipient,
+                "{\"type\": \"delete-mails-from-mail-queue\", \"queue\": \"anyQueue\", \"recipient\": \"d@e.f\", \"initialCount\" : 6, \"remainingCount\":6, \"timestamp\": \"2018-11-13T12:00:55Z\"}")
+            .verify();
     }
 
     @Test
-    void additionalInformationShouldThrowWhenDeserializeAMalformedMailAddress() throws Exception {
-
+    void additionalInformationShouldThrowWhenDeserializeAMalformedMailAddress() {
         String serializedJson = "{\"type\": \"delete-mails-from-mail-queue\", \"queue\": \"anyQueue\", \"sender\": \"a.b.c\", \"initialCount\" : 10, \"remainingCount\":5}";
-        assertThatThrownBy(() -> jsonAdditionalInformationSerializer.deserialize(serializedJson))
+        assertThatThrownBy(() -> JsonTaskAdditionalInformationSerializer.of(DeleteMailsFromMailQueueTaskAdditionalInformationDTO.MODULE)
+                .deserialize(serializedJson))
             .isInstanceOf(AddressException.class);
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 04/15: JAMES-2993 Use JsonSerializationVerifier for JMAP filtering event DTO tests

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 2a557c122e66b51f5145b17163c54b78ccad4897
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Dec 18 16:54:23 2019 +0700

    JAMES-2993 Use JsonSerializationVerifier for JMAP filtering event DTO tests
---
 server/data/data-jmap-cassandra/pom.xml            |  6 ++
 .../james/jmap/cassandra/filtering/DTOTest.java    | 84 ++++------------------
 2 files changed, 21 insertions(+), 69 deletions(-)

diff --git a/server/data/data-jmap-cassandra/pom.xml b/server/data/data-jmap-cassandra/pom.xml
index e0162ff..0c2a413 100644
--- a/server/data/data-jmap-cassandra/pom.xml
+++ b/server/data/data-jmap-cassandra/pom.xml
@@ -66,6 +66,12 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-json</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-data-jmap</artifactId>
         </dependency>
         <dependency>
diff --git a/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/filtering/DTOTest.java b/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/filtering/DTOTest.java
index a3e4d29..0d432d2 100644
--- a/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/filtering/DTOTest.java
+++ b/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/filtering/DTOTest.java
@@ -19,101 +19,47 @@
 
 package org.apache.james.jmap.cassandra.filtering;
 
-import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
 import static org.apache.james.jmap.api.filtering.RuleFixture.RULE_1;
 import static org.apache.james.jmap.api.filtering.RuleFixture.RULE_2;
 import static org.apache.james.jmap.api.filtering.RuleFixture.RULE_FROM;
 import static org.apache.james.jmap.api.filtering.RuleFixture.RULE_RECIPIENT;
 import static org.apache.james.jmap.api.filtering.RuleFixture.RULE_SUBJECT;
 import static org.apache.james.jmap.api.filtering.RuleFixture.RULE_TO;
-import static org.assertj.core.api.Assertions.assertThat;
+import static org.apache.james.jmap.cassandra.filtering.FilteringRuleSetDefineDTOModules.FILTERING_RULE_SET_DEFINED;
 
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.core.Username;
 import org.apache.james.eventsourcing.EventId;
 import org.apache.james.jmap.api.filtering.impl.FilteringAggregateId;
 import org.apache.james.jmap.api.filtering.impl.RuleSetDefined;
 import org.apache.james.util.ClassLoaderUtils;
-
-import com.fasterxml.jackson.databind.jsontype.NamedType;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.datatype.guava.GuavaModule;
-import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
 import com.google.common.collect.ImmutableList;
 
-public class DTOTest {
+class DTOTest {
     static final String EVENT_JSON = ClassLoaderUtils.getSystemResourceAsString("json/event.json");
     static final String EVENT_EMPTY_JSON = ClassLoaderUtils.getSystemResourceAsString("json/eventEmpty.json");
     static final String EVENT_COMPLEX_JSON = ClassLoaderUtils.getSystemResourceAsString("json/eventComplex.json");
-    static final FilteringRuleSetDefinedDTO SIMPLE_DTO = FilteringRuleSetDefinedDTO.from(
-            new RuleSetDefined(
+    static final RuleSetDefined SIMPLE_RULE = new RuleSetDefined(
                     new FilteringAggregateId(Username.of("Bart")),
                     EventId.first(),
-                    ImmutableList.of(RULE_1, RULE_2)));
-    static final FilteringRuleSetDefinedDTO EMPTY_DTO = FilteringRuleSetDefinedDTO.from(
-            new RuleSetDefined(
+                    ImmutableList.of(RULE_1, RULE_2));
+    static final RuleSetDefined EMPTY_RULE = new RuleSetDefined(
                     new FilteringAggregateId(Username.of("Bart")),
                     EventId.first(),
-                    ImmutableList.of()));
-    static final FilteringRuleSetDefinedDTO COMPLEX_DTO = FilteringRuleSetDefinedDTO.from(
-            new RuleSetDefined(
+                    ImmutableList.of());
+    static final RuleSetDefined COMPLEX_RULE =  new RuleSetDefined(
                     new FilteringAggregateId(Username.of("Bart")),
                     EventId.first(),
-                    ImmutableList.of(RULE_FROM, RULE_RECIPIENT, RULE_SUBJECT, RULE_TO)));
-
-    private ObjectMapper objectMapper;
-
-    @BeforeEach
-    void setUp() {
-        objectMapper = new ObjectMapper();
-        objectMapper.registerModule(new Jdk8Module());
-        objectMapper.registerModule(new GuavaModule());
-        objectMapper.registerSubtypes(
-            new NamedType(FilteringRuleSetDefinedDTO.class, "filtering-rule-set-defined"));
-
-    }
-
-    @Test
-    void shouldSerializeDTO() throws Exception {
-        String serializedEvent = objectMapper.writeValueAsString(SIMPLE_DTO);
-
-        assertThatJson(serializedEvent).isEqualTo(EVENT_JSON);
-    }
-
-    @Test
-    void shouldDeserializeDTO() throws Exception {
-        FilteringRuleSetDefinedDTO dto = objectMapper.readValue(EVENT_JSON, FilteringRuleSetDefinedDTO.class);
-
-        assertThat(dto).isEqualTo(SIMPLE_DTO);
-    }
+                    ImmutableList.of(RULE_FROM, RULE_RECIPIENT, RULE_SUBJECT, RULE_TO));
 
     @Test
-    void shouldSerializeEmptyDTO() throws Exception {
-        String serializedEvent = objectMapper.writeValueAsString(EMPTY_DTO);
-
-        assertThatJson(serializedEvent).isEqualTo(EVENT_EMPTY_JSON);
-    }
-
-    @Test
-    void shouldDeserializeEmptyDTO() throws Exception {
-        FilteringRuleSetDefinedDTO dto = objectMapper.readValue(EVENT_EMPTY_JSON, FilteringRuleSetDefinedDTO.class);
-
-        assertThat(dto).isEqualTo(EMPTY_DTO);
-    }
-
-    @Test
-    void shouldSerializeComplexDTO() throws Exception {
-        String serializedEvent = objectMapper.writeValueAsString(COMPLEX_DTO);
-
-        assertThatJson(serializedEvent).isEqualTo(EVENT_COMPLEX_JSON);
-    }
-
-    @Test
-    void shouldDeserializeComplexDTO() throws Exception {
-        FilteringRuleSetDefinedDTO dto = objectMapper.readValue(EVENT_COMPLEX_JSON, FilteringRuleSetDefinedDTO.class);
-
-        assertThat(dto).isEqualTo(COMPLEX_DTO);
+    void shouldSerializeRule() throws Exception {
+        JsonSerializationVerifier.dtoModule(FILTERING_RULE_SET_DEFINED)
+            .bean(EMPTY_RULE).json(EVENT_EMPTY_JSON)
+            .bean(SIMPLE_RULE).json(EVENT_JSON)
+            .bean(COMPLEX_RULE).json(EVENT_COMPLEX_JSON)
+            .verify();
     }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 05/15: JAMES-2993 Add a JsonSerializationVerifier::testCase method

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 984467a8e43e6623b81a0dcbc50ae8753239baf0
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu Dec 19 09:23:03 2019 +0700

    JAMES-2993 Add a JsonSerializationVerifier::testCase method
---
 .../apache/james/JsonSerializationVerifier.java    |  4 ++
 .../james/mailbox/quota/cassandra/dto/DTOTest.java |  8 ++--
 .../james/jmap/cassandra/filtering/DTOTest.java    |  6 +--
 .../distributed/TaskEventsSerializationTest.java   | 48 +++++++++++-----------
 4 files changed, 35 insertions(+), 31 deletions(-)

diff --git a/json/src/test/java/org/apache/james/JsonSerializationVerifier.java b/json/src/test/java/org/apache/james/JsonSerializationVerifier.java
index a842ca9..7de4bfd 100644
--- a/json/src/test/java/org/apache/james/JsonSerializationVerifier.java
+++ b/json/src/test/java/org/apache/james/JsonSerializationVerifier.java
@@ -68,6 +68,10 @@ public class JsonSerializationVerifier<T, U extends DTO> {
                 .build());
     }
 
+    public JsonSerializationVerifier<T, U> testCase(T bean, String json) {
+        return bean(bean).json(json);
+    }
+
     public void verify() throws IOException {
         testValues.forEach(Throwing.<Pair<String, T>>consumer(this::verify).sneakyThrow());
     }
diff --git a/mailbox/plugin/quota-mailing-cassandra/src/test/java/org/apache/james/mailbox/quota/cassandra/dto/DTOTest.java b/mailbox/plugin/quota-mailing-cassandra/src/test/java/org/apache/james/mailbox/quota/cassandra/dto/DTOTest.java
index 98b4292..2673f28 100644
--- a/mailbox/plugin/quota-mailing-cassandra/src/test/java/org/apache/james/mailbox/quota/cassandra/dto/DTOTest.java
+++ b/mailbox/plugin/quota-mailing-cassandra/src/test/java/org/apache/james/mailbox/quota/cassandra/dto/DTOTest.java
@@ -138,10 +138,10 @@ class DTOTest {
     @Test
     void shouldSerializeQuotaThresholdChangedEvent() throws Exception {
         JsonSerializationVerifier.dtoModule(QUOTA_THRESHOLD_CHANGE)
-            .bean(EVENT).json(EVENT_JSON)
-            .bean(EVENT_2).json(EVENT_JSON_2)
-            .bean(EVENT_3).json(EVENT_JSON_3)
-            .bean(EVENT_4).json(EVENT_JSON_4)
+            .testCase(EVENT, EVENT_JSON)
+            .testCase(EVENT_2, EVENT_JSON_2)
+            .testCase(EVENT_3, EVENT_JSON_3)
+            .testCase(EVENT_4, EVENT_JSON_4)
             .verify();
     }
 }
\ No newline at end of file
diff --git a/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/filtering/DTOTest.java b/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/filtering/DTOTest.java
index 0d432d2..452f59d 100644
--- a/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/filtering/DTOTest.java
+++ b/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/filtering/DTOTest.java
@@ -57,9 +57,9 @@ class DTOTest {
     @Test
     void shouldSerializeRule() throws Exception {
         JsonSerializationVerifier.dtoModule(FILTERING_RULE_SET_DEFINED)
-            .bean(EMPTY_RULE).json(EVENT_EMPTY_JSON)
-            .bean(SIMPLE_RULE).json(EVENT_JSON)
-            .bean(COMPLEX_RULE).json(EVENT_COMPLEX_JSON)
+            .testCase(EMPTY_RULE, EVENT_EMPTY_JSON)
+            .testCase(SIMPLE_RULE, EVENT_JSON)
+            .testCase(COMPLEX_RULE, EVENT_COMPLEX_JSON)
             .verify();
     }
 }
diff --git a/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/TaskEventsSerializationTest.java b/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/TaskEventsSerializationTest.java
index 8246466..e7cb068 100644
--- a/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/TaskEventsSerializationTest.java
+++ b/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/TaskEventsSerializationTest.java
@@ -74,30 +74,30 @@ class TaskEventsSerializationTest {
             .withNestedTypeModules(
                 MemoryReferenceWithCounterTaskAdditionalInformationDTO.SERIALIZATION_MODULE,
                 TestTaskDTOModules.COMPLETED_TASK_MODULE))
-            .bean(new Created(AGGREGATE_ID, EVENT_ID, TASK, HOSTNAME))
-                .json("{\"task\":{\"type\":\"completed-task\"},\"type\":\"task-manager-created\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"hostname\":\"foo\"}")
-            .bean(new Started(AGGREGATE_ID, EVENT_ID, HOSTNAME))
-                .json("{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-started\",\"hostname\":\"foo\"}")
-            .bean(new CancelRequested(AGGREGATE_ID, EVENT_ID, HOSTNAME))
-                .json("{\"type\":\"task-manager-cancel-requested\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"hostname\":\"foo\"}")
-            .bean(new Completed(AGGREGATE_ID, EVENT_ID, Task.Result.COMPLETED, Option.empty()))
-                .json("{\"result\":\"COMPLETED\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-completed\"}")
-            .bean(new Completed(AGGREGATE_ID, EVENT_ID, Task.Result.PARTIAL, Option.empty()))
-                .json("{\"result\":\"PARTIAL\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-completed\"}")
-            .bean(new Failed(AGGREGATE_ID, EVENT_ID, Option.empty(), Option.empty(), Option.empty()))
-                .json("{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-failed\"}")
-            .bean(new Failed(AGGREGATE_ID, EVENT_ID, Option.empty(), Option.apply("contextual message"), Option.apply("my exception")))
-                .json("{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-failed\", \"errorMessage\": \"contextual message\", \"exception\": \"my exception\"}")
-            .bean(new Cancelled(AGGREGATE_ID, EVENT_ID, Option.empty()))
-                .json("{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-cancelled\"}")
-            .bean(new Completed(AGGREGATE_ID, EVENT_ID, Task.Result.COMPLETED, Option.apply(COUNTER_ADDITIONAL_INFORMATION)))
-                .json("{\"result\":\"COMPLETED\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-completed\",\"additionalInformation\":{\"type\":\"memory-reference-task-with-counter\",\"count\":3,\"timestamp\":\"2018-11-13T12:00:55Z\"}}")
-            .bean(new Completed(AGGREGATE_ID, EVENT_ID, Task.Result.PARTIAL, Option.apply(COUNTER_ADDITIONAL_INFORMATION)))
-                .json("{\"result\":\"PARTIAL\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-completed\",\"additionalInformation\":{\"type\":\"memory-reference-task-with-counter\",\"count\":3,\"timestamp\":\"2018-11-13T12:00:55Z\"}}")
-            .bean(new Failed(AGGREGATE_ID, EVENT_ID, Option.apply(COUNTER_ADDITIONAL_INFORMATION), Option.empty(), Option.empty()))
-                .json("{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-failed\",\"additionalInformation\":{\"type\":\"memory-reference-task-with-counter\",\"count\":3,\"timestamp\":\"2018-11-13T12:00:55Z\"}}")
-            .bean(new Cancelled(AGGREGATE_ID, EVENT_ID, Option.apply(COUNTER_ADDITIONAL_INFORMATION)))
-                .json("{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-cancelled\",\"additionalInformation\":{\"type\":\"memory-reference-task-with-counter\",\"count\":3,\"timestamp\":\"2018-11-13T12:00:55Z\"}}")
+            .testCase(new Created(AGGREGATE_ID, EVENT_ID, TASK, HOSTNAME),
+                "{\"task\":{\"type\":\"completed-task\"},\"type\":\"task-manager-created\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"hostname\":\"foo\"}")
+            .testCase(new Started(AGGREGATE_ID, EVENT_ID, HOSTNAME),
+                "{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-started\",\"hostname\":\"foo\"}")
+            .testCase(new CancelRequested(AGGREGATE_ID, EVENT_ID, HOSTNAME),
+                "{\"type\":\"task-manager-cancel-requested\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"hostname\":\"foo\"}")
+            .testCase(new Completed(AGGREGATE_ID, EVENT_ID, Task.Result.COMPLETED, Option.empty()),
+                "{\"result\":\"COMPLETED\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-completed\"}")
+            .testCase(new Completed(AGGREGATE_ID, EVENT_ID, Task.Result.PARTIAL, Option.empty()),
+                "{\"result\":\"PARTIAL\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-completed\"}")
+            .testCase(new Failed(AGGREGATE_ID, EVENT_ID, Option.empty(), Option.empty(), Option.empty()),
+                "{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-failed\"}")
+            .testCase(new Failed(AGGREGATE_ID, EVENT_ID, Option.empty(), Option.apply("contextual message"), Option.apply("my exception")),
+                "{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-failed\", \"errorMessage\": \"contextual message\", \"exception\": \"my exception\"}")
+            .testCase(new Cancelled(AGGREGATE_ID, EVENT_ID, Option.empty()),
+                "{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-cancelled\"}")
+            .testCase(new Completed(AGGREGATE_ID, EVENT_ID, Task.Result.COMPLETED, Option.apply(COUNTER_ADDITIONAL_INFORMATION)),
+                "{\"result\":\"COMPLETED\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-completed\",\"additionalInformation\":{\"type\":\"memory-reference-task-with-counter\",\"count\":3,\"timestamp\":\"2018-11-13T12:00:55Z\"}}")
+            .testCase(new Completed(AGGREGATE_ID, EVENT_ID, Task.Result.PARTIAL, Option.apply(COUNTER_ADDITIONAL_INFORMATION)),
+                "{\"result\":\"PARTIAL\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-completed\",\"additionalInformation\":{\"type\":\"memory-reference-task-with-counter\",\"count\":3,\"timestamp\":\"2018-11-13T12:00:55Z\"}}")
+            .testCase(new Failed(AGGREGATE_ID, EVENT_ID, Option.apply(COUNTER_ADDITIONAL_INFORMATION), Option.empty(), Option.empty()),
+                "{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-failed\",\"additionalInformation\":{\"type\":\"memory-reference-task-with-counter\",\"count\":3,\"timestamp\":\"2018-11-13T12:00:55Z\"}}")
+            .testCase(new Cancelled(AGGREGATE_ID, EVENT_ID, Option.apply(COUNTER_ADDITIONAL_INFORMATION)),
+                "{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-cancelled\",\"additionalInformation\":{\"type\":\"memory-reference-task-with-counter\",\"count\":3,\"timestamp\":\"2018-11-13T12:00:55Z\"}}")
             .verify();
     }
 }
\ 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


[james-project] 08/15: JAMES-2813 ReIndexing tasks should use JsonSerializationVerifier

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 9103c06d1ecebcc14dab1c7624a784614ade0633
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Dec 18 15:40:40 2019 +0700

    JAMES-2813 ReIndexing tasks should use JsonSerializationVerifier
---
 mailbox/tools/indexer/pom.xml                      |  6 ++
 .../tools/indexer/MessageIdReIndexingTask.java     |  8 +--
 .../tools/indexer/SingleMessageReindexingTask.java |  4 +-
 ...rorRecoveryIndexationTaskSerializationTest.java | 71 ++++++----------------
 .../FullReindexingTaskSerializationTest.java       | 57 +++++------------
 .../MessageIdReindexingTaskSerializationTest.java  | 56 +++++------------
 ...ngleMailboxReindexingTaskSerializationTest.java | 63 +++++--------------
 ...ngleMessageReindexingTaskSerializationTest.java | 53 +++++-----------
 .../UserReindexingTaskSerializationTest.java       | 68 ++++++---------------
 9 files changed, 108 insertions(+), 278 deletions(-)

diff --git a/mailbox/tools/indexer/pom.xml b/mailbox/tools/indexer/pom.xml
index a0de783..c5ba6a2 100644
--- a/mailbox/tools/indexer/pom.xml
+++ b/mailbox/tools/indexer/pom.xml
@@ -86,6 +86,12 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-json</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-task-json</artifactId>
         </dependency>
         <dependency>
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/MessageIdReIndexingTask.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/MessageIdReIndexingTask.java
index 15a4b82..369b7c4 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/MessageIdReIndexingTask.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/MessageIdReIndexingTask.java
@@ -28,12 +28,8 @@ import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.task.Task;
 import org.apache.james.task.TaskExecutionDetails;
 import org.apache.james.task.TaskType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class MessageIdReIndexingTask implements Task {
-    private static final Logger LOGGER = LoggerFactory.getLogger(MessageIdReIndexingTask.class);
-
     public static final TaskType TYPE = TaskType.of("messageId-reindexing");
 
     public static class Factory {
@@ -74,12 +70,10 @@ public class MessageIdReIndexingTask implements Task {
 
     private ReIndexerPerformer reIndexerPerformer;
     private final MessageId messageId;
-    private final AdditionalInformation additionalInformation;
 
     MessageIdReIndexingTask(ReIndexerPerformer reIndexerPerformer, MessageId messageId) {
         this.reIndexerPerformer = reIndexerPerformer;
         this.messageId = messageId;
-        this.additionalInformation = new AdditionalInformation(messageId, Clock.systemUTC().instant());
     }
 
     @Override
@@ -98,6 +92,6 @@ public class MessageIdReIndexingTask implements Task {
 
     @Override
     public Optional<TaskExecutionDetails.AdditionalInformation> details() {
-        return Optional.of(additionalInformation);
+        return Optional.of(new AdditionalInformation(messageId, Clock.systemUTC().instant()));
     }
 }
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMessageReindexingTask.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMessageReindexingTask.java
index 8fe131a..77ea683 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMessageReindexingTask.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMessageReindexingTask.java
@@ -85,14 +85,12 @@ public class SingleMessageReindexingTask implements Task {
     private final ReIndexerPerformer reIndexerPerformer;
     private final MailboxId mailboxId;
     private final MessageUid uid;
-    private final AdditionalInformation additionalInformation;
 
     @Inject
     SingleMessageReindexingTask(ReIndexerPerformer reIndexerPerformer, MailboxId mailboxId, MessageUid uid) {
         this.reIndexerPerformer = reIndexerPerformer;
         this.mailboxId = mailboxId;
         this.uid = uid;
-        this.additionalInformation = new AdditionalInformation(mailboxId, uid, Clock.systemUTC().instant());
     }
 
     @Override
@@ -120,7 +118,7 @@ public class SingleMessageReindexingTask implements Task {
 
     @Override
     public Optional<TaskExecutionDetails.AdditionalInformation> details() {
-        return Optional.of(additionalInformation);
+        return Optional.of(new AdditionalInformation(mailboxId, uid, Clock.systemUTC().instant()));
     }
 
 }
diff --git a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskSerializationTest.java b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskSerializationTest.java
index d71ad03..f81af92 100644
--- a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskSerializationTest.java
+++ b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskSerializationTest.java
@@ -18,98 +18,63 @@
  ****************************************************************/
 package org.apache.mailbox.tools.indexer;
 
-import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
-import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 
-import java.io.IOException;
 import java.time.Instant;
 import java.util.List;
 
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.mailbox.model.TestId;
-import org.apache.james.server.task.json.JsonTaskAdditionalInformationSerializer;
-import org.apache.james.server.task.json.JsonTaskSerializer;
-import org.apache.james.task.Task;
 import org.apache.mailbox.tools.indexer.ReprocessingContextInformationDTO.ReprocessingContextInformationForErrorRecoveryIndexationTask;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.google.common.collect.ImmutableList;
 
 class ErrorRecoveryIndexationTaskSerializationTest {
-
     private static final Instant TIMESTAMP = Instant.parse("2018-11-13T12:00:55Z");
-    private final TestId.Factory mailboxIdFactory = new TestId.Factory();
-    private ReIndexerPerformer reIndexerPerformer;
-    private JsonTaskSerializer taskSerializer;
-    private JsonTaskAdditionalInformationSerializer jsonAdditionalInformationSerializer;
 
+    private final TestId.Factory mailboxIdFactory = new TestId.Factory();
     private final int successfullyReprocessedMailCount = 42;
     private final int failedReprocessedMailCount = 2;
-    private  ReIndexingExecutionFailures reIndexingExecutionFailures;
-
     private final String serializedErrorRecoveryReindexingTask = "{\"type\": \"error-recovery-indexation\"," +
         " \"previousFailures\" : [{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}]}";
-    private final String SERIALIZED_ADDITIONAL_INFORMATION = "{\"type\": \"error-recovery-indexation\", \"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}], \"timestamp\":\"2018-11-13T12:00:55Z\"}";
-
+    private final String serializedAdditionalInformation = "{\"type\": \"error-recovery-indexation\", \"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}], \"timestamp\":\"2018-11-13T12:00:55Z\"}";
     private final TestId mailboxId = TestId.of(1L);
     private final MessageUid messageUid = MessageUid.of(10L);
     private final ReIndexingExecutionFailures.ReIndexingFailure indexingFailure = new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, messageUid);
-
     private final TestId mailboxId2 = TestId.of(2L);
     private final MessageUid messageUid2 = MessageUid.of(20L);
-
     private final ReIndexingExecutionFailures.ReIndexingFailure indexingFailure2 = new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId2, messageUid2);
     private final List<ReIndexingExecutionFailures.ReIndexingFailure> failures = ImmutableList.of(indexingFailure, indexingFailure2);
     private final ReIndexingExecutionFailures executionFailures = new ReIndexingExecutionFailures(failures);
 
+    private ErrorRecoveryIndexationTask.Factory factory;
+    private ReIndexerPerformer reIndexerPerformer;
+
     @BeforeEach
     void setUp() {
         reIndexerPerformer = mock(ReIndexerPerformer.class);
-        ErrorRecoveryIndexationTask.Factory factory = new ErrorRecoveryIndexationTask.Factory(reIndexerPerformer, mailboxIdFactory);
-        taskSerializer = JsonTaskSerializer.of(ErrorRecoveryIndexationTaskDTO.module(factory));
-
-        jsonAdditionalInformationSerializer = JsonTaskAdditionalInformationSerializer.of(
-            ReprocessingContextInformationForErrorRecoveryIndexationTask.serializationModule(mailboxIdFactory));
-
-        reIndexingExecutionFailures = new ReIndexingExecutionFailures(ImmutableList.of(
-            new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, messageUid),
-            new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId2, messageUid2)));
-    }
-
-    @Test
-    void errorRecoveryReindexingShouldBeSerializable() throws JsonProcessingException {
-        ErrorRecoveryIndexationTask task = new ErrorRecoveryIndexationTask(reIndexerPerformer, executionFailures);
-
-        assertThatJson(taskSerializer.serialize(task))
-            .isEqualTo(serializedErrorRecoveryReindexingTask);
+        factory = new ErrorRecoveryIndexationTask.Factory(reIndexerPerformer, mailboxIdFactory);
     }
 
     @Test
-    void errorRecoveryReindexingShouldBeDeserializable() throws IOException {
-        ErrorRecoveryIndexationTask task = new ErrorRecoveryIndexationTask(reIndexerPerformer, executionFailures);
-
-        Task deserializedTask = taskSerializer.deserialize(serializedErrorRecoveryReindexingTask);
-        assertThat(task instanceof ErrorRecoveryIndexationTask);
-        assertThat(deserializedTask)
-            .isEqualToComparingOnlyGivenFields(task, "reIndexerPerformer", "previousFailures");
+    void errorRecoveryReindexingShouldBeSerializable() throws Exception {
+        JsonSerializationVerifier.dtoModule(ErrorRecoveryIndexationTaskDTO.module(factory))
+            .bean(new ErrorRecoveryIndexationTask(reIndexerPerformer, executionFailures))
+            .json(serializedErrorRecoveryReindexingTask)
+            .verify();
     }
 
     @Test
-    void additionalInformationShouldBeSerializable() throws JsonProcessingException {
-        ReprocessingContextInformation details = new ReprocessingContextInformationForErrorRecoveryIndexationTask(successfullyReprocessedMailCount, failedReprocessedMailCount, reIndexingExecutionFailures, TIMESTAMP);
-        assertThatJson(jsonAdditionalInformationSerializer.serialize(details)).isEqualTo(SERIALIZED_ADDITIONAL_INFORMATION);
+    void additionalInformationShouldBeSerializable() throws Exception {
+        ReprocessingContextInformationForErrorRecoveryIndexationTask details = new ReprocessingContextInformationForErrorRecoveryIndexationTask(successfullyReprocessedMailCount, failedReprocessedMailCount, executionFailures, TIMESTAMP);
+        JsonSerializationVerifier.dtoModule(ReprocessingContextInformationForErrorRecoveryIndexationTask.serializationModule(mailboxIdFactory))
+            .bean(details)
+            .json(serializedAdditionalInformation)
+            .verify();
     }
-
-    @Test
-    void additonalInformationShouldBeDeserializable() throws IOException {
-        ReprocessingContextInformation details = new ReprocessingContextInformationForErrorRecoveryIndexationTask(successfullyReprocessedMailCount, failedReprocessedMailCount, reIndexingExecutionFailures, TIMESTAMP);
-        assertThat(jsonAdditionalInformationSerializer.deserialize(SERIALIZED_ADDITIONAL_INFORMATION))
-            .isEqualToComparingFieldByField(details);
-    }
-
 }
 
diff --git a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/FullReindexingTaskSerializationTest.java b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/FullReindexingTaskSerializationTest.java
index 3d0f9c5..dce79b2 100644
--- a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/FullReindexingTaskSerializationTest.java
+++ b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/FullReindexingTaskSerializationTest.java
@@ -18,34 +18,23 @@
  ****************************************************************/
 package org.apache.mailbox.tools.indexer;
 
-import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
-import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 
-import java.io.IOException;
 import java.time.Instant;
 
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.mailbox.model.TestId;
-import org.apache.james.server.task.json.JsonTaskAdditionalInformationSerializer;
-import org.apache.james.server.task.json.JsonTaskSerializer;
 import org.apache.mailbox.tools.indexer.ReprocessingContextInformationDTO.ReprocessingContextInformationForFullReindexingTask;
-
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.google.common.collect.ImmutableList;
 
 class FullReindexingTaskSerializationTest {
-
     private static final Instant TIMESTAMP = Instant.parse("2018-11-13T12:00:55Z");
 
-    private ReIndexerPerformer reIndexerPerformer;
-    private JsonTaskSerializer taskSerializer;
-    private JsonTaskAdditionalInformationSerializer jsonAdditionalInformationSerializer;
-
     private final TestId mailboxId2 = TestId.of(2L);
     private final MessageUid messageUid2 = MessageUid.of(20L);
     private final TestId mailboxId = TestId.of(1L);
@@ -53,18 +42,16 @@ class FullReindexingTaskSerializationTest {
 
     private final int successfullyReprocessedMailCount = 42;
     private final int failedReprocessedMailCount = 2;
-    private ReIndexingExecutionFailures reIndexingExecutionFailures;
 
     private final String serializedFullReindexingTask = "{\"type\": \"full-reindexing\"}";
-    private final String SERIALIZED_ADDITIONAL_INFORMATION = "{\"type\": \"full-reindexing\", \"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}], \"timestamp\":\"2018-11-13T12:00:55Z\"}";
+    private final String serializedAdditionalInformation = "{\"type\": \"full-reindexing\", \"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}], \"timestamp\":\"2018-11-13T12:00:55Z\"}";
+
+    private ReIndexingExecutionFailures reIndexingExecutionFailures;
+    private ReIndexerPerformer reIndexerPerformer;
 
     @BeforeEach
     void setUp() {
         reIndexerPerformer = mock(ReIndexerPerformer.class);
-        taskSerializer = JsonTaskSerializer.of(FullReindexingTask.module(reIndexerPerformer));
-
-        jsonAdditionalInformationSerializer = JsonTaskAdditionalInformationSerializer.of(
-            ReprocessingContextInformationForFullReindexingTask.serializationModule(new TestId.Factory()));
 
         reIndexingExecutionFailures = new ReIndexingExecutionFailures(ImmutableList.of(
             new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, messageUid),
@@ -72,33 +59,21 @@ class FullReindexingTaskSerializationTest {
     }
 
     @Test
-    void fullReindexingShouldBeSerializable() throws JsonProcessingException {
-        FullReindexingTask task = new FullReindexingTask(reIndexerPerformer);
-
-        assertThatJson(taskSerializer.serialize(task))
-            .isEqualTo(serializedFullReindexingTask);
-    }
-
-    @Test
-    void fullReindexingShouldBeDeserializable() throws IOException {
-        FullReindexingTask task = new FullReindexingTask(reIndexerPerformer);
-
-        assertThat(taskSerializer.deserialize(serializedFullReindexingTask))
-            .isEqualToComparingOnlyGivenFields(task, "reIndexerPerformer");
+    void fullReindexingShouldBeSerializable() throws Exception {
+        JsonSerializationVerifier.dtoModule(FullReindexingTask.module(reIndexerPerformer))
+            .bean(new FullReindexingTask(reIndexerPerformer))
+            .json(serializedFullReindexingTask)
+            .verify();
     }
 
     @Test
-    void additionalInformationShouldBeSerializable() throws JsonProcessingException {
-        ReprocessingContextInformation details = new ReprocessingContextInformationForFullReindexingTask(successfullyReprocessedMailCount, failedReprocessedMailCount, reIndexingExecutionFailures, TIMESTAMP);
-        assertThatJson(jsonAdditionalInformationSerializer.serialize(details)).isEqualTo(SERIALIZED_ADDITIONAL_INFORMATION);
-    }
+    void additionalInformationShouldBeSerializable() throws Exception {
+        ReprocessingContextInformationForFullReindexingTask details = new ReprocessingContextInformationForFullReindexingTask(successfullyReprocessedMailCount, failedReprocessedMailCount, reIndexingExecutionFailures, TIMESTAMP);
 
-    @Test
-    void additonalInformationShouldBeDeserializable() throws IOException {
-        ReprocessingContextInformation details = new ReprocessingContextInformation(successfullyReprocessedMailCount, failedReprocessedMailCount, reIndexingExecutionFailures, TIMESTAMP);
-        assertThat(jsonAdditionalInformationSerializer.deserialize(SERIALIZED_ADDITIONAL_INFORMATION))
-            .isEqualToComparingFieldByField(details);
+        JsonSerializationVerifier.dtoModule(ReprocessingContextInformationForFullReindexingTask.serializationModule(new TestId.Factory()))
+            .bean(details)
+            .json(serializedAdditionalInformation)
+            .verify();
     }
-
 }
 
diff --git a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/MessageIdReindexingTaskSerializationTest.java b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/MessageIdReindexingTaskSerializationTest.java
index 4c27cef..f309686 100644
--- a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/MessageIdReindexingTaskSerializationTest.java
+++ b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/MessageIdReindexingTaskSerializationTest.java
@@ -18,75 +18,51 @@
  ****************************************************************/
 package org.apache.mailbox.tools.indexer;
 
-import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
-import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 
-import java.io.IOException;
 import java.time.Instant;
 
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.TestMessageId;
-import org.apache.james.server.task.json.JsonTaskAdditionalInformationSerializer;
-import org.apache.james.server.task.json.JsonTaskSerializer;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-
 class MessageIdReindexingTaskSerializationTest {
-
     private static final Instant TIMESTAMP = Instant.parse("2018-11-13T12:00:55Z");
 
-    private ReIndexerPerformer reIndexerPerformer;
-    private MessageId.Factory messageIdFactory;
-    private JsonTaskSerializer taskSerializer;
     private final String serializedMessageIdReIndexingTask = "{\"type\": \"messageId-reindexing\", \"messageId\": \"1\"}";
-    private final String SERIALIZED_ADDITIONAL_INFORMATION = "{\"type\": \"messageId-reindexing\", \"messageId\": \"1\", \"timestamp\":\"2018-11-13T12:00:55Z\"}";
+    private final String serializedAdditionalInformation = "{\"type\": \"messageId-reindexing\", \"messageId\": \"1\", \"timestamp\":\"2018-11-13T12:00:55Z\"}";
 
-    private JsonTaskAdditionalInformationSerializer jsonAdditionalInformationSerializer;
+    private ReIndexerPerformer reIndexerPerformer;
+    private MessageId.Factory messageIdFactory;
+    private MessageIdReIndexingTask.Factory factory;
 
     @BeforeEach
     void setUp() {
         messageIdFactory = new TestMessageId.Factory();
-        jsonAdditionalInformationSerializer = JsonTaskAdditionalInformationSerializer.of(
-            MessageIdReindexingTaskAdditionalInformationDTO.serializationModule(messageIdFactory));
         reIndexerPerformer = mock(ReIndexerPerformer.class);
-        MessageIdReIndexingTask.Factory factory = new MessageIdReIndexingTask.Factory(reIndexerPerformer, messageIdFactory);
-        taskSerializer = JsonTaskSerializer.of(MessageIdReindexingTaskDTO.module(factory));
-    }
-
-    @Test
-    void messageIdReindexingShouldBeSerializable() throws JsonProcessingException {
-        MessageId messageId = messageIdFactory.fromString("1");
-        MessageIdReIndexingTask task = new MessageIdReIndexingTask(reIndexerPerformer, messageId);
-
-        assertThatJson(taskSerializer.serialize(task))
-            .isEqualTo(serializedMessageIdReIndexingTask);
+        factory = new MessageIdReIndexingTask.Factory(reIndexerPerformer, messageIdFactory);
     }
 
     @Test
-    void messageIdReindexingShouldBeDeserializable() throws IOException {
+    void messageIdReindexingShouldBeSerializable() throws Exception {
         MessageId messageId = messageIdFactory.fromString("1");
-        MessageIdReIndexingTask task = new MessageIdReIndexingTask(reIndexerPerformer, messageId);
-
-        assertThat(taskSerializer.deserialize(serializedMessageIdReIndexingTask))
-            .isEqualToComparingOnlyGivenFields(task, "messageId");
+        JsonSerializationVerifier.dtoModule(MessageIdReindexingTaskDTO.module(factory))
+            .bean(new MessageIdReIndexingTask(reIndexerPerformer, messageId))
+            .json(serializedMessageIdReIndexingTask)
+            .verify();
     }
 
     @Test
-    void additionalInformationShouldBeSerializable() throws JsonProcessingException {
+    void additionalInformationShouldBeSerializable() throws Exception {
         MessageId messageId = messageIdFactory.fromString("1");
         MessageIdReIndexingTask.AdditionalInformation details = new MessageIdReIndexingTask.AdditionalInformation(messageId, TIMESTAMP);
-        assertThatJson(jsonAdditionalInformationSerializer.serialize(details)).isEqualTo(SERIALIZED_ADDITIONAL_INFORMATION);
-    }
 
-    @Test
-    void additonalInformationShouldBeDeserializable() throws IOException {
-        MessageId messageId = messageIdFactory.fromString("1");
-        MessageIdReIndexingTask.AdditionalInformation details = new MessageIdReIndexingTask.AdditionalInformation(messageId, TIMESTAMP);
-        assertThat(jsonAdditionalInformationSerializer.deserialize(SERIALIZED_ADDITIONAL_INFORMATION))
-            .isEqualToComparingFieldByField(details);
+        JsonSerializationVerifier.dtoModule(MessageIdReindexingTaskAdditionalInformationDTO.serializationModule(messageIdFactory))
+            .bean(details)
+            .json(serializedAdditionalInformation)
+            .verify();
     }
 }
 
diff --git a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskSerializationTest.java b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskSerializationTest.java
index b5c23c7..6e283f1 100644
--- a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskSerializationTest.java
+++ b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskSerializationTest.java
@@ -18,92 +18,61 @@
  ****************************************************************/
 package org.apache.mailbox.tools.indexer;
 
-import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
-import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 
-import java.io.IOException;
 import java.time.Instant;
-import java.util.List;
 
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.mailbox.model.TestId;
-import org.apache.james.server.task.json.JsonTaskAdditionalInformationSerializer;
-import org.apache.james.server.task.json.JsonTaskSerializer;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.google.common.collect.ImmutableList;
 
 class SingleMailboxReindexingTaskSerializationTest {
-
     private static final Instant TIMESTAMP = Instant.parse("2018-11-13T12:00:55Z");
 
-    private ReIndexerPerformer reIndexerPerformer;
-    private JsonTaskSerializer taskSerializer;
-    private JsonTaskAdditionalInformationSerializer jsonAdditionalInformationSerializer;
-
     private final int successfullyReprocessedMailCount = 42;
     private final int failedReprocessedMailCount = 2;
-    private  ReIndexingExecutionFailures reIndexingExecutionFailures;
 
     private final String serializedMailboxReindexingTask = "{\"type\": \"mailbox-reindexing\", \"mailboxId\": \"1\"}";
-
-    private final String SERIALIZED_ADDITIONAL_INFORMATION = "{\"type\": \"mailbox-reindexing\", \"mailboxId\": \"1\", \"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10, 20]}], \"timestamp\":\"2018-11-13T12:00:55Z\"}";
+    private final String serializedAdditionalInformation = "{\"type\": \"mailbox-reindexing\", \"mailboxId\": \"1\", \"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10, 20]}], \"timestamp\":\"2018-11-13T12:00:55Z\"}";
 
     private final TestId mailboxId = TestId.of(1L);
     private final MessageUid messageUid = MessageUid.of(10L);
     private final MessageUid messageUid2 = MessageUid.of(20L);
 
-    private final ReIndexingExecutionFailures.ReIndexingFailure indexingFailure = new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, messageUid);
-    private final ReIndexingExecutionFailures.ReIndexingFailure indexingFailure2 = new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, messageUid2);
-    private final List<ReIndexingExecutionFailures.ReIndexingFailure> failures = ImmutableList.of(indexingFailure, indexingFailure2);
+    private SingleMailboxReindexingTask.Factory factory;
+    private ReIndexingExecutionFailures reIndexingExecutionFailures;
+    private ReIndexerPerformer reIndexerPerformer;
 
     @BeforeEach
     void setUp() {
         reIndexerPerformer = mock(ReIndexerPerformer.class);
-        SingleMailboxReindexingTask.Factory factory = new SingleMailboxReindexingTask.Factory(reIndexerPerformer, new TestId.Factory());
-        taskSerializer = JsonTaskSerializer.of(SingleMailboxReindexingTaskDTO.module(factory));
-
-        jsonAdditionalInformationSerializer = JsonTaskAdditionalInformationSerializer.of(
-            SingleMailboxReindexingTaskAdditionalInformationDTO.serializationModule(new TestId.Factory()));
-
+        factory = new SingleMailboxReindexingTask.Factory(reIndexerPerformer, new TestId.Factory());
         reIndexingExecutionFailures = new ReIndexingExecutionFailures(ImmutableList.of(
             new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, messageUid),
             new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, messageUid2)));
     }
 
     @Test
-    void singleMailboxReindexingShouldBeSerializable() throws JsonProcessingException {
-        TestId mailboxId = TestId.of(1L);
-        SingleMailboxReindexingTask task = new SingleMailboxReindexingTask(reIndexerPerformer, mailboxId);
-
-        assertThatJson(taskSerializer.serialize(task))
-            .isEqualTo(serializedMailboxReindexingTask);
+    void singleMailboxReindexingShouldBeSerializable() throws Exception {
+        JsonSerializationVerifier.dtoModule(SingleMailboxReindexingTaskDTO.module(factory))
+            .bean(new SingleMailboxReindexingTask(reIndexerPerformer, mailboxId))
+            .json(serializedMailboxReindexingTask)
+            .verify();
     }
 
     @Test
-    void singleMailboxReindexingShouldBeDeserializable() throws IOException {
-        TestId mailboxId = TestId.of(1L);
-        SingleMailboxReindexingTask task = new SingleMailboxReindexingTask(reIndexerPerformer, mailboxId);
-
-        assertThat(taskSerializer.deserialize(serializedMailboxReindexingTask))
-            .isEqualToComparingOnlyGivenFields(task, "reIndexerPerformer", "mailboxId");
-    }
-
-    @Test
-    void additionalInformationShouldBeSerializable() throws JsonProcessingException {
+    void additionalInformationShouldBeSerializable() throws Exception {
         SingleMailboxReindexingTask.AdditionalInformation details = new SingleMailboxReindexingTask.AdditionalInformation(mailboxId, successfullyReprocessedMailCount, failedReprocessedMailCount, reIndexingExecutionFailures, TIMESTAMP);
-        assertThatJson(jsonAdditionalInformationSerializer.serialize(details)).isEqualTo(SERIALIZED_ADDITIONAL_INFORMATION);
-    }
 
-    @Test
-    void additonalInformationShouldBeDeserializable() throws IOException {
-        SingleMailboxReindexingTask.AdditionalInformation details = new SingleMailboxReindexingTask.AdditionalInformation(mailboxId, successfullyReprocessedMailCount, failedReprocessedMailCount, reIndexingExecutionFailures, TIMESTAMP);
-        assertThat(jsonAdditionalInformationSerializer.deserialize(SERIALIZED_ADDITIONAL_INFORMATION))
-            .isEqualToComparingFieldByField(details);
+        JsonSerializationVerifier.dtoModule(SingleMailboxReindexingTaskAdditionalInformationDTO.serializationModule(new TestId.Factory()))
+            .bean(details)
+            .json(serializedAdditionalInformation)
+            .verify();
     }
 }
 
diff --git a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMessageReindexingTaskSerializationTest.java b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMessageReindexingTaskSerializationTest.java
index b97441b..119098c 100644
--- a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMessageReindexingTaskSerializationTest.java
+++ b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMessageReindexingTaskSerializationTest.java
@@ -18,70 +18,49 @@
  ****************************************************************/
 package org.apache.mailbox.tools.indexer;
 
-import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
-import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 
-import java.io.IOException;
 import java.time.Instant;
 
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.model.TestId;
-import org.apache.james.server.task.json.JsonTaskAdditionalInformationSerializer;
-import org.apache.james.server.task.json.JsonTaskSerializer;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-
 class SingleMessageReindexingTaskSerializationTest {
-
     private static final Instant TIMESTAMP = Instant.parse("2018-11-13T12:00:55Z");
 
     private final TestId.Factory mailboxIdFactory = new TestId.Factory();
-    private ReIndexerPerformer reIndexerPerformer;
-    private JsonTaskSerializer taskSerializer;
     private final String serializedMessageReindexingTask = "{\"type\": \"message-reindexing\", \"mailboxId\": \"1\", \"uid\": 10}";
-    private final String SERIALIZED_ADDITIONAL_INFORMATION = "{\"type\": \"message-reindexing\", \"mailboxId\": \"1\", \"uid\": 10, \"timestamp\":\"2018-11-13T12:00:55Z\"}";
+    private final String serializedAdditionalInformation = "{\"type\": \"message-reindexing\", \"mailboxId\": \"1\", \"uid\": 10, \"timestamp\":\"2018-11-13T12:00:55Z\"}";
     private final TestId mailboxId = TestId.of(1L);
     private final MessageUid messageUid = MessageUid.of(10L);
-    private JsonTaskAdditionalInformationSerializer jsonAdditionalInformationSerializer = JsonTaskAdditionalInformationSerializer.of(
-        SingleMessageReindexingTaskAdditionalInformationDTO.serializationModule(mailboxIdFactory));
+
+    private SingleMessageReindexingTask.Factory factory;
+    private ReIndexerPerformer reIndexerPerformer;
 
     @BeforeEach
     void setUp() {
         reIndexerPerformer = mock(ReIndexerPerformer.class);
-        SingleMessageReindexingTask.Factory factory = new SingleMessageReindexingTask.Factory(reIndexerPerformer, mailboxIdFactory);
-        taskSerializer = JsonTaskSerializer.of(SingleMessageReindexingTaskDTO.module(factory));
-    }
-
-    @Test
-    void singleMessageReindexingShouldBeSerializable() throws JsonProcessingException {
-        SingleMessageReindexingTask task = new SingleMessageReindexingTask(reIndexerPerformer, mailboxId, messageUid);
-
-        assertThatJson(taskSerializer.serialize(task))
-            .isEqualTo(serializedMessageReindexingTask);
+        factory = new SingleMessageReindexingTask.Factory(reIndexerPerformer, mailboxIdFactory);
     }
 
     @Test
-    void singleMessageReindexingShouldBeDeserializable() throws IOException {
-        SingleMessageReindexingTask task = new SingleMessageReindexingTask(reIndexerPerformer, mailboxId, messageUid);
-
-        assertThat(taskSerializer.deserialize(serializedMessageReindexingTask))
-            .isEqualToComparingOnlyGivenFields(task, "reIndexerPerformer", "mailboxId", "uid");
-    }
-
-    @Test
-    void additionalInformationShouldBeSerializable() throws JsonProcessingException {
-        SingleMessageReindexingTask.AdditionalInformation details = new SingleMessageReindexingTask.AdditionalInformation(mailboxId, messageUid, TIMESTAMP);
-        assertThatJson(jsonAdditionalInformationSerializer.serialize(details)).isEqualTo(SERIALIZED_ADDITIONAL_INFORMATION);
+    void singleMessageReindexingShouldBeSerializable() throws Exception {
+        JsonSerializationVerifier.dtoModule(SingleMessageReindexingTaskDTO.module(factory))
+            .bean(new SingleMessageReindexingTask(reIndexerPerformer, mailboxId, messageUid))
+            .json(serializedMessageReindexingTask)
+            .verify();
     }
 
     @Test
-    void additonalInformationShouldBeDeserializable() throws IOException {
+    void additionalInformationShouldBeSerializable() throws Exception {
         SingleMessageReindexingTask.AdditionalInformation details = new SingleMessageReindexingTask.AdditionalInformation(mailboxId, messageUid, TIMESTAMP);
-        assertThat(jsonAdditionalInformationSerializer.deserialize(SERIALIZED_ADDITIONAL_INFORMATION))
-            .isEqualToComparingFieldByField(details);
+        JsonSerializationVerifier.dtoModule(SingleMessageReindexingTaskAdditionalInformationDTO.serializationModule(mailboxIdFactory))
+            .bean(details)
+            .json(serializedAdditionalInformation)
+            .verify();
     }
 }
 
diff --git a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/UserReindexingTaskSerializationTest.java b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/UserReindexingTaskSerializationTest.java
index ce2135a..39274b8 100644
--- a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/UserReindexingTaskSerializationTest.java
+++ b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/UserReindexingTaskSerializationTest.java
@@ -18,59 +18,42 @@
  ****************************************************************/
 package org.apache.mailbox.tools.indexer;
 
-import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
-import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 
-import java.io.IOException;
 import java.time.Instant;
-import java.util.List;
 
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.core.Username;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.mailbox.model.TestId;
-import org.apache.james.server.task.json.JsonTaskAdditionalInformationSerializer;
-import org.apache.james.server.task.json.JsonTaskSerializer;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.google.common.collect.ImmutableList;
 
 class UserReindexingTaskSerializationTest {
-
     private static final Instant TIMESTAMP = Instant.parse("2018-11-13T12:00:55Z");
+    private static final Username USERNAME = Username.of("foo@apache.org");
 
-    private ReIndexerPerformer reIndexerPerformer;
-    private JsonTaskSerializer taskSerializer;
-    private JsonTaskAdditionalInformationSerializer jsonAdditionalInformationSerializer;
-
-    private final Username username = Username.of("foo@apache.org");
     private final int successfullyReprocessedMailCount = 42;
     private final int failedReprocessedMailCount = 2;
-    private ReIndexingExecutionFailures reIndexingExecutionFailures;
     private final String serializedUserReindexingTask = "{\"type\": \"user-reindexing\", \"username\": \"foo@apache.org\"}";
-
-    private final String SERIALIZED_ADDITIONAL_INFORMATION = "{\"type\": \"user-reindexing\", \"user\": \"foo@apache.org\", \"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}], \"timestamp\":\"2018-11-13T12:00:55Z\"}";
+    private final String serializedAdditionalInformation = "{\"type\": \"user-reindexing\", \"user\": \"foo@apache.org\", \"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}], \"timestamp\":\"2018-11-13T12:00:55Z\"}";
 
     private final TestId mailboxId = TestId.of(1L);
     private final MessageUid messageUid = MessageUid.of(10L);
-    private final ReIndexingExecutionFailures.ReIndexingFailure indexingFailure = new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, messageUid);
-
     private final TestId mailboxId2 = TestId.of(2L);
     private final MessageUid messageUid2 = MessageUid.of(20L);
 
-    private final ReIndexingExecutionFailures.ReIndexingFailure indexingFailure2 = new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId2, messageUid2);
-    private final List<ReIndexingExecutionFailures.ReIndexingFailure> failures = ImmutableList.of(indexingFailure, indexingFailure2);
+    private ReIndexerPerformer reIndexerPerformer;
+    private UserReindexingTask.Factory factory;
+    private ReIndexingExecutionFailures reIndexingExecutionFailures;
 
     @BeforeEach
     void setUp() {
         reIndexerPerformer = mock(ReIndexerPerformer.class);
-        UserReindexingTask.Factory factory = new UserReindexingTask.Factory(reIndexerPerformer);
-        taskSerializer = JsonTaskSerializer.of(UserReindexingTaskDTO.module(factory));
-        jsonAdditionalInformationSerializer = JsonTaskAdditionalInformationSerializer.of(
-            UserReindexingTaskAdditionalInformationDTO.serializationModule(new TestId.Factory()));
+        factory = new UserReindexingTask.Factory(reIndexerPerformer);
 
         reIndexingExecutionFailures = new ReIndexingExecutionFailures(ImmutableList.of(
             new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, messageUid),
@@ -78,35 +61,20 @@ class UserReindexingTaskSerializationTest {
     }
 
     @Test
-    void userReindexingShouldBeSerializable() throws JsonProcessingException {
-        Username username = Username.of("foo@apache.org");
-        UserReindexingTask task = new UserReindexingTask(reIndexerPerformer, username);
-
-        assertThatJson(taskSerializer.serialize(task))
-            .isEqualTo(serializedUserReindexingTask);
-    }
-
-    @Test
-    void userReindexingShouldBeDeserializable() throws IOException {
-        Username username = Username.of("foo@apache.org");
-        UserReindexingTask task = new UserReindexingTask(reIndexerPerformer, username);
-
-        assertThat(taskSerializer.deserialize(serializedUserReindexingTask))
-            .isEqualToComparingOnlyGivenFields(task, "reIndexerPerformer");
-    }
-
-
-    @Test
-    void additionalInformationShouldBeSerializable() throws JsonProcessingException {
-        UserReindexingTask.AdditionalInformation details = new UserReindexingTask.AdditionalInformation(username, successfullyReprocessedMailCount, failedReprocessedMailCount, reIndexingExecutionFailures, TIMESTAMP);
-        assertThatJson(jsonAdditionalInformationSerializer.serialize(details)).isEqualTo(SERIALIZED_ADDITIONAL_INFORMATION);
+    void userReindexingShouldBeSerializable() throws Exception {
+        JsonSerializationVerifier.dtoModule(UserReindexingTaskDTO.module(factory))
+            .bean(new UserReindexingTask(reIndexerPerformer, USERNAME))
+            .json(serializedUserReindexingTask)
+            .verify();
     }
 
     @Test
-    void additionalInformationShouldBeDeserializable() throws IOException {
-        UserReindexingTask.AdditionalInformation details = new UserReindexingTask.AdditionalInformation(username, successfullyReprocessedMailCount, failedReprocessedMailCount, reIndexingExecutionFailures, TIMESTAMP);
-        assertThat(jsonAdditionalInformationSerializer.deserialize(SERIALIZED_ADDITIONAL_INFORMATION))
-            .isEqualToComparingFieldByField(details);
+    void additionalInformationShouldBeSerializable() throws Exception {
+        UserReindexingTask.AdditionalInformation details = new UserReindexingTask.AdditionalInformation(USERNAME, successfullyReprocessedMailCount, failedReprocessedMailCount, reIndexingExecutionFailures, TIMESTAMP);
+        JsonSerializationVerifier.dtoModule(UserReindexingTaskAdditionalInformationDTO.serializationModule(new TestId.Factory()))
+            .bean(details)
+            .json(serializedAdditionalInformation)
+            .verify();
     }
 }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 13/15: JAMES-2813 Use JsonSerializationVerifier in TaskSerializationTest

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 9ac467cc343f2028fad55b39e64245caae1824c7
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu Dec 19 09:38:09 2019 +0700

    JAMES-2813 Use JsonSerializationVerifier in TaskSerializationTest
---
 server/task/task-json/pom.xml                      |  6 ++++
 .../server/task/json/TaskSerializationTest.java    | 37 +++++++---------------
 2 files changed, 18 insertions(+), 25 deletions(-)

diff --git a/server/task/task-json/pom.xml b/server/task/task-json/pom.xml
index 2b18599..f53524e 100644
--- a/server/task/task-json/pom.xml
+++ b/server/task/task-json/pom.xml
@@ -39,6 +39,12 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-json</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-task-api</artifactId>
         </dependency>
         <dependency>
diff --git a/server/task/task-json/src/test/java/org/apache/james/server/task/json/TaskSerializationTest.java b/server/task/task-json/src/test/java/org/apache/james/server/task/json/TaskSerializationTest.java
index 09e11ce..b97a41f 100644
--- a/server/task/task-json/src/test/java/org/apache/james/server/task/json/TaskSerializationTest.java
+++ b/server/task/task-json/src/test/java/org/apache/james/server/task/json/TaskSerializationTest.java
@@ -27,6 +27,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 import java.io.IOException;
 import java.util.stream.Stream;
 
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.server.task.json.dto.MemoryReferenceTaskStore;
 import org.apache.james.server.task.json.dto.TaskDTOModule;
 import org.apache.james.task.CompletedTask;
@@ -34,13 +35,13 @@ import org.apache.james.task.FailedTask;
 import org.apache.james.task.MemoryReferenceTask;
 import org.apache.james.task.Task;
 import org.apache.james.task.ThrowingTask;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
 import org.junit.jupiter.params.provider.MethodSource;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
+
 class TaskSerializationTest {
 
     private static final String SERIALIZED_COMPLETED_TASK = "{\"type\": \"completed-task\"}";
@@ -50,32 +51,18 @@ class TaskSerializationTest {
 
     @ParameterizedTest
     @MethodSource
-    void taskShouldBeSerializable(Task task, TaskDTOModule<?, ?> module, String expectedJson) throws Exception {
-        String actual = JsonTaskSerializer.of(module).serialize(task);
-        assertThatJson(actual).isEqualTo(expectedJson);
-    }
-
-    private static Stream<Arguments> taskShouldBeSerializable() throws Exception {
-        return validTasks();
-    }
-
-    @ParameterizedTest
-    @MethodSource
-    void taskShouldBeDeserializable(Task task, TaskDTOModule<?, ?> module, String serializedJson) throws Exception {
-        assertThat(JsonTaskSerializer.of(module).deserialize(serializedJson))
-            .isInstanceOf(task.getClass());
-    }
-
-    private static Stream<Arguments> taskShouldBeDeserializable() throws Exception {
-        return validTasks();
+    void taskShouldBeSerializable(Task task, TaskDTOModule<Task, ? extends TaskDTOModule> module, String expectedJson) throws Exception {
+        JsonSerializationVerifier.dtoModule(module)
+            .bean(task)
+            .json(expectedJson)
+            .verify();
     }
 
-    private static Stream<Arguments> validTasks() throws Exception {
+    private static Stream<Arguments> taskShouldBeSerializable() {
         return Stream.of(
-                Arguments.of(new CompletedTask(), COMPLETED_TASK_MODULE, SERIALIZED_COMPLETED_TASK),
-                Arguments.of(new FailedTask(), FAILED_TASK_MODULE, SERIALIZED_FAILED_TASK),
-                Arguments.of(new ThrowingTask(), THROWING_TASK_MODULE, SERIALIZED_THROWING_TASK)
-        );
+            Arguments.of(new CompletedTask(), COMPLETED_TASK_MODULE, SERIALIZED_COMPLETED_TASK),
+            Arguments.of(new FailedTask(), FAILED_TASK_MODULE, SERIALIZED_FAILED_TASK),
+            Arguments.of(new ThrowingTask(), THROWING_TASK_MODULE, SERIALIZED_THROWING_TASK));
     }
 
     @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 03/15: JAMES-2993 Use JsonSerializationVerifier for Task manager event DTO tests

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit cf3700459cc0dc2993c8fdcf3e5550ecf79cfd6a
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Dec 18 13:14:38 2019 +0700

    JAMES-2993 Use JsonSerializationVerifier for Task manager event DTO tests
---
 .../apache/james/JsonSerializationVerifier.java    | 28 ++++---
 .../james/JsonSerializationVerifierTest.java       |  5 +-
 server/task/task-distributed/pom.xml               |  6 ++
 .../distributed/TaskEventsSerializationTest.java   | 88 +++++++++-------------
 4 files changed, 60 insertions(+), 67 deletions(-)

diff --git a/json/src/test/java/org/apache/james/JsonSerializationVerifier.java b/json/src/test/java/org/apache/james/JsonSerializationVerifier.java
index 2d717e2..a842ca9 100644
--- a/json/src/test/java/org/apache/james/JsonSerializationVerifier.java
+++ b/json/src/test/java/org/apache/james/JsonSerializationVerifier.java
@@ -34,26 +34,34 @@ import com.github.fge.lambdas.Throwing;
 import com.google.common.collect.ImmutableList;
 
 public class JsonSerializationVerifier<T, U extends DTO> {
+
     @FunctionalInterface
     public interface RequireJson<T, U extends DTO> {
         JsonSerializationVerifier<T, U> json(String json);
     }
 
     public static <T, U extends DTO> JsonSerializationVerifier<T, U> dtoModule(DTOModule<T, U> dtoModule) {
-        return new JsonSerializationVerifier<>(dtoModule, ImmutableList.of());
+        return new JsonSerializationVerifier<>(JsonGenericSerializer
+            .forModules(dtoModule)
+            .withoutNestedType(),
+            ImmutableList.of());
+    }
+
+    public static <T, U extends DTO> JsonSerializationVerifier<T, U> serializer(JsonGenericSerializer<T, U> serializer) {
+        return new JsonSerializationVerifier<>(serializer, ImmutableList.of());
     }
 
-    private final DTOModule<T, U> dtoModule;
     private final List<Pair<String, T>> testValues;
+    private final JsonGenericSerializer<T, U> serializer;
 
-    private JsonSerializationVerifier(DTOModule<T, U> dtoModule, List<Pair<String, T>> testValues) {
-        this.dtoModule = dtoModule;
+    private JsonSerializationVerifier( JsonGenericSerializer<T, U> serializer, List<Pair<String, T>> testValues) {
         this.testValues = testValues;
+        this.serializer = serializer;
     }
 
     public RequireJson<T, U> bean(T bean) {
         return json -> new JsonSerializationVerifier<>(
-            dtoModule,
+            serializer,
             ImmutableList.<Pair<String, T>>builder()
                 .addAll(testValues)
                 .add(Pair.of(json, bean))
@@ -65,15 +73,11 @@ public class JsonSerializationVerifier<T, U extends DTO> {
     }
 
     private void verify(Pair<String, T> testValue) throws IOException {
-        JsonGenericSerializer<T, U> seriliazer = JsonGenericSerializer
-            .forModules(dtoModule)
-            .withoutNestedType();
-
-        assertThatJson(seriliazer.serialize(testValue.getRight()))
-            .describedAs("Serialization test")
+        assertThatJson(serializer.serialize(testValue.getRight()))
+            .describedAs("Serialization test [" + testValue.getRight() + "]")
             .isEqualTo(testValue.getLeft());
 
-        assertThat(seriliazer.deserialize(testValue.getLeft()))
+        assertThat(serializer.deserialize(testValue.getLeft()))
             .describedAs("Deserialization test [" + testValue.getRight() + "]")
             .isEqualToComparingFieldByFieldRecursively(testValue.getRight());
     }
diff --git a/json/src/test/java/org/apache/james/JsonSerializationVerifierTest.java b/json/src/test/java/org/apache/james/JsonSerializationVerifierTest.java
index 4758ab8..88f5737 100644
--- a/json/src/test/java/org/apache/james/JsonSerializationVerifierTest.java
+++ b/json/src/test/java/org/apache/james/JsonSerializationVerifierTest.java
@@ -48,7 +48,8 @@ class JsonSerializationVerifierTest {
                 .json(FIRST_JSON_BAD)
                 .verify())
             .isInstanceOf(AssertionFailedError.class)
-            .hasMessageContaining("[Serialization test] JSON documents are different:\n" +
-                "Different value found in node \"id\"");
+            .hasMessageContaining("[Serialization test [org.apache.james.dto.FirstDomainObject@7650497c]]")
+            .hasMessageContaining("JSON documents are different:")
+            .hasMessageContaining("Different value found in node \"id\"");
     }
 }
diff --git a/server/task/task-distributed/pom.xml b/server/task/task-distributed/pom.xml
index 2e590a6..40fab57 100644
--- a/server/task/task-distributed/pom.xml
+++ b/server/task/task-distributed/pom.xml
@@ -69,6 +69,12 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-json</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-lifecycle-api</artifactId>
         </dependency>
         <dependency>
diff --git a/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/TaskEventsSerializationTest.java b/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/TaskEventsSerializationTest.java
index bad55dd..8246466 100644
--- a/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/TaskEventsSerializationTest.java
+++ b/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/TaskEventsSerializationTest.java
@@ -19,17 +19,14 @@
 
 package org.apache.james.task.eventsourcing.distributed;
 
-import static org.assertj.core.api.Assertions.assertThat;
-
 import java.time.Instant;
 import java.util.Set;
-import java.util.stream.Stream;
 
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.eventsourcing.EventId;
-import org.apache.james.eventsourcing.eventstore.cassandra.JsonEventSerializer;
 import org.apache.james.eventsourcing.eventstore.cassandra.dto.EventDTOModule;
 import org.apache.james.json.DTOConverter;
-import org.apache.james.server.task.json.JsonTaskAdditionalInformationSerializer;
+import org.apache.james.json.JsonGenericSerializer;
 import org.apache.james.server.task.json.JsonTaskSerializer;
 import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
 import org.apache.james.server.task.json.dto.MemoryReferenceWithCounterTaskAdditionalInformationDTO;
@@ -49,19 +46,14 @@ import org.apache.james.task.eventsourcing.Created;
 import org.apache.james.task.eventsourcing.Failed;
 import org.apache.james.task.eventsourcing.Started;
 import org.apache.james.task.eventsourcing.TaskAggregateId;
-import org.apache.james.task.eventsourcing.TaskEvent;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
+import org.junit.jupiter.api.Test;
 
-import net.javacrumbs.jsonunit.assertj.JsonAssertions;
 import scala.Option;
 
 class TaskEventsSerializationTest {
     static final Instant TIMESTAMP = Instant.parse("2018-11-13T12:00:55Z");
     static final DTOConverter<TaskExecutionDetails.AdditionalInformation, AdditionalInformationDTO> ADDITIONAL_INFORMATION_CONVERTER = DTOConverter.of(MemoryReferenceWithCounterTaskAdditionalInformationDTO.SERIALIZATION_MODULE);
     static final DTOConverter<Task, TaskDTO> TASK_CONVERTER = DTOConverter.of(TestTaskDTOModules.COMPLETED_TASK_MODULE);
-    static final JsonTaskAdditionalInformationSerializer TASK_ADDITIONNAL_INFORMATION_SERIALIZER = JsonTaskAdditionalInformationSerializer.of(MemoryReferenceWithCounterTaskAdditionalInformationDTO.SERIALIZATION_MODULE);
     static final TaskAggregateId AGGREGATE_ID = new TaskAggregateId(TaskId.fromString("2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd"));
     static final EventId EVENT_ID = EventId.fromSerialized(42);
     static final Task TASK = new CompletedTask();
@@ -75,47 +67,37 @@ class TaskEventsSerializationTest {
         ADDITIONAL_INFORMATION_CONVERTER,
         TASK_CONVERTER);
 
-    JsonEventSerializer serializer = JsonEventSerializer
-        .forModules(list)
-        .withNestedTypeModules(
-            MemoryReferenceWithCounterTaskAdditionalInformationDTO.SERIALIZATION_MODULE,
-            TestTaskDTOModules.COMPLETED_TASK_MODULE);
-
-    @ParameterizedTest
-    @MethodSource
-    void taskShouldBeSerializable(TaskEvent event, String serializedJson) throws Exception {
-        JsonAssertions.assertThatJson(serializer.serialize(event)).isEqualTo(serializedJson);
-    }
-
-    static Stream<Arguments> taskShouldBeSerializable() throws Exception {
-        return validTasks();
-    }
-
-    @ParameterizedTest
-    @MethodSource
-    void taskShouldBeDeserializable(TaskEvent event, String serializedJson) throws Exception {
-        assertThat(serializer.deserialize(serializedJson)).isEqualToComparingFieldByFieldRecursively(event);
+    @Test
+    void taskManagerEventsShouldBeSerializable() throws Exception {
+        JsonSerializationVerifier.serializer(JsonGenericSerializer
+            .forModules(list)
+            .withNestedTypeModules(
+                MemoryReferenceWithCounterTaskAdditionalInformationDTO.SERIALIZATION_MODULE,
+                TestTaskDTOModules.COMPLETED_TASK_MODULE))
+            .bean(new Created(AGGREGATE_ID, EVENT_ID, TASK, HOSTNAME))
+                .json("{\"task\":{\"type\":\"completed-task\"},\"type\":\"task-manager-created\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"hostname\":\"foo\"}")
+            .bean(new Started(AGGREGATE_ID, EVENT_ID, HOSTNAME))
+                .json("{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-started\",\"hostname\":\"foo\"}")
+            .bean(new CancelRequested(AGGREGATE_ID, EVENT_ID, HOSTNAME))
+                .json("{\"type\":\"task-manager-cancel-requested\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"hostname\":\"foo\"}")
+            .bean(new Completed(AGGREGATE_ID, EVENT_ID, Task.Result.COMPLETED, Option.empty()))
+                .json("{\"result\":\"COMPLETED\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-completed\"}")
+            .bean(new Completed(AGGREGATE_ID, EVENT_ID, Task.Result.PARTIAL, Option.empty()))
+                .json("{\"result\":\"PARTIAL\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-completed\"}")
+            .bean(new Failed(AGGREGATE_ID, EVENT_ID, Option.empty(), Option.empty(), Option.empty()))
+                .json("{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-failed\"}")
+            .bean(new Failed(AGGREGATE_ID, EVENT_ID, Option.empty(), Option.apply("contextual message"), Option.apply("my exception")))
+                .json("{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-failed\", \"errorMessage\": \"contextual message\", \"exception\": \"my exception\"}")
+            .bean(new Cancelled(AGGREGATE_ID, EVENT_ID, Option.empty()))
+                .json("{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-cancelled\"}")
+            .bean(new Completed(AGGREGATE_ID, EVENT_ID, Task.Result.COMPLETED, Option.apply(COUNTER_ADDITIONAL_INFORMATION)))
+                .json("{\"result\":\"COMPLETED\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-completed\",\"additionalInformation\":{\"type\":\"memory-reference-task-with-counter\",\"count\":3,\"timestamp\":\"2018-11-13T12:00:55Z\"}}")
+            .bean(new Completed(AGGREGATE_ID, EVENT_ID, Task.Result.PARTIAL, Option.apply(COUNTER_ADDITIONAL_INFORMATION)))
+                .json("{\"result\":\"PARTIAL\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-completed\",\"additionalInformation\":{\"type\":\"memory-reference-task-with-counter\",\"count\":3,\"timestamp\":\"2018-11-13T12:00:55Z\"}}")
+            .bean(new Failed(AGGREGATE_ID, EVENT_ID, Option.apply(COUNTER_ADDITIONAL_INFORMATION), Option.empty(), Option.empty()))
+                .json("{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-failed\",\"additionalInformation\":{\"type\":\"memory-reference-task-with-counter\",\"count\":3,\"timestamp\":\"2018-11-13T12:00:55Z\"}}")
+            .bean(new Cancelled(AGGREGATE_ID, EVENT_ID, Option.apply(COUNTER_ADDITIONAL_INFORMATION)))
+                .json("{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-cancelled\",\"additionalInformation\":{\"type\":\"memory-reference-task-with-counter\",\"count\":3,\"timestamp\":\"2018-11-13T12:00:55Z\"}}")
+            .verify();
     }
-
-    static Stream<Arguments> taskShouldBeDeserializable() throws Exception {
-        return validTasks();
-    }
-
-    static Stream<Arguments> validTasks() throws Exception {
-        return Stream.of(
-            Arguments.of(new Created(AGGREGATE_ID, EVENT_ID, TASK, HOSTNAME), "{\"task\":{\"type\":\"completed-task\"},\"type\":\"task-manager-created\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"hostname\":\"foo\"}\n"),
-            Arguments.of(new Started(AGGREGATE_ID, EVENT_ID, HOSTNAME), "{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-started\",\"hostname\":\"foo\"}"),
-            Arguments.of(new CancelRequested(AGGREGATE_ID, EVENT_ID, HOSTNAME), "{\"type\":\"task-manager-cancel-requested\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"hostname\":\"foo\"}\n"),
-            Arguments.of(new Completed(AGGREGATE_ID, EVENT_ID, Task.Result.COMPLETED, Option.empty()), "{\"result\":\"COMPLETED\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-completed\"}"),
-            Arguments.of(new Completed(AGGREGATE_ID, EVENT_ID, Task.Result.PARTIAL, Option.empty()), "{\"result\":\"PARTIAL\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-completed\"}"),
-            Arguments.of(new Failed(AGGREGATE_ID, EVENT_ID, Option.empty(), Option.empty(), Option.empty()), "{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-failed\"}"),
-            Arguments.of(new Failed(AGGREGATE_ID, EVENT_ID, Option.empty(), Option.apply("contextual message"), Option.apply("my exception")), "{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-failed\", \"errorMessage\": \"contextual message\", \"exception\": \"my exception\"}"),
-            Arguments.of(new Cancelled(AGGREGATE_ID, EVENT_ID, Option.empty()), "{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-cancelled\"}"),
-            Arguments.of(new Completed(AGGREGATE_ID, EVENT_ID, Task.Result.COMPLETED, Option.apply(COUNTER_ADDITIONAL_INFORMATION)), "{\"result\":\"COMPLETED\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-completed\",\"additionalInformation\":{\"type\":\"memory-reference-task-with-counter\",\"count\":3,\"timestamp\":\"2018-11-13T12:00:55Z\"}}"),
-            Arguments.of(new Completed(AGGREGATE_ID, EVENT_ID, Task.Result.PARTIAL, Option.apply(COUNTER_ADDITIONAL_INFORMATION)), "{\"result\":\"PARTIAL\",\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-completed\",\"additionalInformation\":{\"type\":\"memory-reference-task-with-counter\",\"count\":3,\"timestamp\":\"2018-11-13T12:00:55Z\"}}"),
-            Arguments.of(new Failed(AGGREGATE_ID, EVENT_ID, Option.apply(COUNTER_ADDITIONAL_INFORMATION), Option.empty(), Option.empty()), "{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-failed\",\"additionalInformation\":{\"type\":\"memory-reference-task-with-counter\",\"count\":3,\"timestamp\":\"2018-11-13T12:00:55Z\"}}"),
-            Arguments.of(new Cancelled(AGGREGATE_ID, EVENT_ID, Option.apply(COUNTER_ADDITIONAL_INFORMATION)), "{\"aggregate\":\"2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd\",\"event\":42,\"type\":\"task-manager-cancelled\",\"additionalInformation\":{\"type\":\"memory-reference-task-with-counter\",\"count\":3,\"timestamp\":\"2018-11-13T12:00:55Z\"}}")
-        );
-    }
-
 }
\ 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


[james-project] 01/15: JAMES-2993 Use JsonSerializationVerifier for DLP event DTO tests

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 672d603aa396aadc1058fcf68e43edcf3cddaf36
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Dec 18 12:51:31 2019 +0700

    JAMES-2993 Use JsonSerializationVerifier for DLP event DTO tests
---
 server/data/data-cassandra/pom.xml                 |  6 +++
 .../james/dlp/eventsourcing/cassandra/DTOTest.java | 60 +++++++++-------------
 2 files changed, 30 insertions(+), 36 deletions(-)

diff --git a/server/data/data-cassandra/pom.xml b/server/data/data-cassandra/pom.xml
index 6dbafcb..c7d560e 100644
--- a/server/data/data-cassandra/pom.xml
+++ b/server/data/data-cassandra/pom.xml
@@ -53,6 +53,12 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-json</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-data-api</artifactId>
         </dependency>
         <dependency>
diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/DTOTest.java b/server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/DTOTest.java
index 062b132..cf26a46 100644
--- a/server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/DTOTest.java
+++ b/server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/DTOTest.java
@@ -20,12 +20,15 @@
 package org.apache.james.dlp.eventsourcing.cassandra;
 
 import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
+import static org.apache.james.dlp.eventsourcing.cassandra.DLPConfigurationModules.DLP_CONFIGURATION_CLEAR;
+import static org.apache.james.dlp.eventsourcing.cassandra.DLPConfigurationModules.DLP_CONFIGURATION_STORE;
 import static org.apache.james.util.ClassLoaderUtils.getSystemResourceAsString;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import java.util.List;
 
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.core.Domain;
 import org.apache.james.dlp.api.DLPConfigurationItem;
 import org.apache.james.dlp.eventsourcing.aggregates.DLPAggregateId;
@@ -41,8 +44,7 @@ import com.fasterxml.jackson.databind.jsontype.NamedType;
 import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
 import com.google.common.collect.ImmutableList;
 
-public class DTOTest {
-
+class DTOTest {
     private static final DLPConfigurationItem CONFIGURATION_ITEM_1 = DLPConfigurationItem.builder()
         .id(DLPConfigurationItem.Id.of("1"))
         .explanation("Find whatever contains james.org")
@@ -72,14 +74,6 @@ public class DTOTest {
 
     private static final DLPAggregateId DLP_AGGREGATE_ID = new DLPAggregateId(Domain.of("james.org"));
 
-    private static final DLPConfigurationItemsRemovedDTO ITEMS_REMOVED_EVENT_DTO_2 = DLPConfigurationItemsRemovedDTO.from(
-        new ConfigurationItemsRemoved(DLP_AGGREGATE_ID, EventId.first(), DLP_CONFIGURATION_ITEMS),
-        "dlp-configuration-clear");
-
-    private static final DLPConfigurationItemAddedDTO ITEMS_ADDED_EVENT_DTO_2 = DLPConfigurationItemAddedDTO.from(
-        new ConfigurationItemsAdded(DLP_AGGREGATE_ID, EventId.first(), DLP_CONFIGURATION_ITEMS),
-        "dlp-configuration-store");
-
     private static final String ITEMS_REMOVED_EVENT_JSON_1 = getSystemResourceAsString("json/dlp/eventsourcing/items_removed_event_1.json");
     private static final String ITEMS_REMOVED_EVENT_JSON_2 = getSystemResourceAsString("json/dlp/eventsourcing/items_removed_event_2.json");
     private static final String CONFIGURATION_ITEMS_JSON_1 = getSystemResourceAsString("json/dlp/eventsourcing/configuration_item_1.json");
@@ -99,43 +93,37 @@ public class DTOTest {
     }
 
     @Test
-    void shouldThrowsExceptionWhenDeserializeRemovedEventWithEmptyItems() throws Exception {
-        assertThatThrownBy(
-            () -> objectMapper.readValue(ITEMS_REMOVED_EVENT_JSON_1, DLPConfigurationItemsRemovedDTO.class));
-    }
-
-    @Test
-    void shouldSerializeDLPConfigurationRemovedEventDTO() throws Exception {
-        assertThatJson(
-            objectMapper.writeValueAsString(ITEMS_REMOVED_EVENT_DTO_2))
-            .isEqualTo(ITEMS_REMOVED_EVENT_JSON_2);
+    void shouldSerializeDLPConfigurationRemovedEvent() throws Exception {
+        JsonSerializationVerifier.dtoModule(DLP_CONFIGURATION_CLEAR)
+            .bean(new ConfigurationItemsRemoved(
+                DLP_AGGREGATE_ID,
+                EventId.first(),
+                DLP_CONFIGURATION_ITEMS))
+            .json(ITEMS_REMOVED_EVENT_JSON_2)
+            .verify();
     }
 
     @Test
-    void shouldDeserializeDLPConfigurationRemovedEventDTO() throws Exception {
-        assertThat(
-            objectMapper.readValue(ITEMS_REMOVED_EVENT_JSON_2, DLPConfigurationItemsRemovedDTO.class))
-            .isEqualTo(ITEMS_REMOVED_EVENT_DTO_2);
+    void shouldThrowsExceptionWhenDeserializeRemovedEventWithEmptyItems() {
+        assertThatThrownBy(
+            () -> objectMapper.readValue(ITEMS_REMOVED_EVENT_JSON_1, DLPConfigurationItemsRemovedDTO.class));
     }
 
     @Test
-    void shouldThrowsExceptionWhenDeserializeAddedEventWithEmptyItems() throws Exception {
+    void shouldThrowsExceptionWhenDeserializeAddedEventWithEmptyItems() {
         assertThatThrownBy(
             () -> objectMapper.readValue(ITEMS_ADDED_EVENT_JSON_1, DLPConfigurationItemAddedDTO.class));
     }
 
     @Test
-    void shouldSerializeDLPConfigurationItemAddedEventDTO() throws Exception {
-        assertThatJson(
-            objectMapper.writeValueAsString(ITEMS_ADDED_EVENT_DTO_2))
-            .isEqualTo(ITEMS_ADDED_EVENT_JSON_2);
-    }
-
-    @Test
-    void shouldDeserializeDLPConfigurationItemAddedEventDTO() throws Exception {
-        assertThat(
-            objectMapper.readValue(ITEMS_ADDED_EVENT_JSON_2, DLPConfigurationItemAddedDTO.class))
-            .isEqualTo(ITEMS_ADDED_EVENT_DTO_2);
+    void shouldSerializeDLPConfigurationItemAddedEvent() throws Exception {
+        JsonSerializationVerifier.dtoModule(DLP_CONFIGURATION_STORE)
+            .bean(new ConfigurationItemsAdded(
+                DLP_AGGREGATE_ID,
+                EventId.first(),
+                DLP_CONFIGURATION_ITEMS))
+            .json(ITEMS_ADDED_EVENT_JSON_2)
+            .verify();
     }
 
     @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 07/15: JAMES-2813 Cassandra tasks should use JsonSerializationVerifier

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 743c265005db87b0dd9328e66e71e6b079d9971b
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Dec 18 15:42:23 2019 +0700

    JAMES-2813 Cassandra tasks should use JsonSerializationVerifier
---
 mailbox/cassandra/pom.xml                          |  6 +++
 ...ailboxPathV2MigrationTaskSerializationTest.java | 44 ++++++----------------
 .../mail/task/MailboxMergingTaskTest.java          | 38 ++++++-------------
 3 files changed, 28 insertions(+), 60 deletions(-)

diff --git a/mailbox/cassandra/pom.xml b/mailbox/cassandra/pom.xml
index f245713..cb69ec4 100644
--- a/mailbox/cassandra/pom.xml
+++ b/mailbox/cassandra/pom.xml
@@ -78,6 +78,12 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-json</artifactId>
+            <scope>test</scope>
+            <type>test-jar</type>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-task-api</artifactId>
         </dependency>
         <dependency>
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTaskSerializationTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTaskSerializationTest.java
index 4012d94..bc28aea 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTaskSerializationTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTaskSerializationTest.java
@@ -20,20 +20,13 @@
 
 package org.apache.james.mailbox.cassandra.mail.migration;
 
-import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
-import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 
-import java.io.IOException;
 import java.time.Instant;
 
-import org.apache.james.server.task.json.JsonTaskAdditionalInformationSerializer;
-import org.apache.james.server.task.json.JsonTaskSerializer;
-import org.apache.james.task.TaskExecutionDetails;
+import org.apache.james.JsonSerializationVerifier;
 import org.junit.jupiter.api.Test;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-
 class MailboxPathV2MigrationTaskSerializationTest {
     private static final Instant TIMESTAMP = Instant.parse("2018-11-13T12:00:55Z");
     private static final MailboxPathV2Migration MIGRATION = mock(MailboxPathV2Migration.class);
@@ -42,34 +35,19 @@ class MailboxPathV2MigrationTaskSerializationTest {
     private static final MailboxPathV2Migration.AdditionalInformation DETAILS = new MailboxPathV2Migration.AdditionalInformation(42L, 10, TIMESTAMP);
     private static final String SERIALIZED_ADDITIONAL_INFORMATION = "{\"type\": \"cassandra-mailbox-path-v2-migration\", \"remainingCount\":42,\"initialCount\":10, \"timestamp\":\"2018-11-13T12:00:55Z\"}";
 
-    private static final JsonTaskSerializer TASK_SERIALIZER = JsonTaskSerializer.of(MailboxPathV2MigrationTaskDTO.MODULE.apply(MIGRATION));
-    private static final JsonTaskAdditionalInformationSerializer JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER = JsonTaskAdditionalInformationSerializer.of(MailboxPathV2MigrationTaskAdditionalInformationDTO.MODULE);
-
-    @Test
-    void taskShouldBeSerializable() throws JsonProcessingException {
-        assertThatJson(TASK_SERIALIZER.serialize(TASK))
-            .isEqualTo(SERIALIZED_TASK);
-    }
-
-    @Test
-    void taskShouldBeDeserializable() throws IOException {
-        assertThat(TASK_SERIALIZER.deserialize(SERIALIZED_TASK))
-            .isEqualToComparingFieldByField(TASK);
-    }
-
     @Test
-    void additionalInformationShouldBeSerializable() throws JsonProcessingException {
-        assertThatJson(JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER.serialize(DETAILS)).isEqualTo(SERIALIZED_ADDITIONAL_INFORMATION);
+    void taskShouldBeSerializable() throws Exception {
+        JsonSerializationVerifier.dtoModule(MailboxPathV2MigrationTaskDTO.MODULE.apply(MIGRATION))
+            .bean(TASK)
+            .json(SERIALIZED_TASK)
+            .verify();
     }
 
     @Test
-    void additionalInformationShouldBeDeserializable() throws IOException {
-        TaskExecutionDetails.AdditionalInformation deserialized = JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER.deserialize(SERIALIZED_ADDITIONAL_INFORMATION);
-        assertThat(deserialized).isInstanceOfSatisfying(MailboxPathV2Migration.AdditionalInformation.class,
-            additionalInformation -> {
-                assertThat(additionalInformation.getRemainingCount()).isEqualTo(DETAILS.getRemainingCount());
-                assertThat(additionalInformation.getInitialCount()).isEqualTo(DETAILS.getInitialCount());
-            }
-        );
+    void additionalInformationShouldBeSerializable() throws Exception {
+        JsonSerializationVerifier.dtoModule(MailboxPathV2MigrationTaskAdditionalInformationDTO.MODULE)
+            .bean(DETAILS)
+            .json(SERIALIZED_ADDITIONAL_INFORMATION)
+            .verify();
     }
 }
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/MailboxMergingTaskTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/MailboxMergingTaskTest.java
index dabac7c..02e4b16 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/MailboxMergingTaskTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/MailboxMergingTaskTest.java
@@ -19,21 +19,14 @@
 
 package org.apache.james.mailbox.cassandra.mail.task;
 
-import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
-import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 
-import java.io.IOException;
 import java.time.Instant;
 
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.mailbox.cassandra.ids.CassandraId;
-import org.apache.james.server.task.json.JsonTaskAdditionalInformationSerializer;
-import org.apache.james.server.task.json.JsonTaskSerializer;
 import org.junit.jupiter.api.Test;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-import net.javacrumbs.jsonunit.assertj.JsonAssertions;
-
 class MailboxMergingTaskTest {
     private static final Instant TIMESTAMP = Instant.parse("2018-11-13T12:00:55Z");
     private static final CassandraId.Factory CASSANDRA_ID_FACTORY = new CassandraId.Factory();
@@ -42,29 +35,20 @@ class MailboxMergingTaskTest {
     private static final MailboxMergingTaskRunner TASK_RUNNER = mock(MailboxMergingTaskRunner.class);
     private static final MailboxMergingTask TASK = new MailboxMergingTask(TASK_RUNNER, 0L, CASSANDRA_ID_FACTORY.fromString("3b8e5f90-b94f-20f8-ce7b-3c4aad93b90c"), CASSANDRA_ID_FACTORY.fromString("2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd"));
     private static final MailboxMergingTask.Details DETAILS = new MailboxMergingTask.Details(CASSANDRA_ID_FACTORY.fromString("3b8e5f90-b94f-20f8-ce7b-3c4aad93b90c"), CASSANDRA_ID_FACTORY.fromString("2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd"), 10, 15, 20, TIMESTAMP);
-    private static final JsonTaskAdditionalInformationSerializer JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER = JsonTaskAdditionalInformationSerializer.of(MailboxMergingTaskAdditionalInformationDTO.SERIALIZATION_MODULE);
-    private static final JsonTaskSerializer TESTEE = JsonTaskSerializer.of(MailboxMergingTaskDTO.module(TASK_RUNNER));
-
-    @Test
-    void taskShouldBeSerializable() throws JsonProcessingException {
-        JsonAssertions.assertThatJson(TESTEE.serialize(TASK))
-            .isEqualTo(SERIALIZED);
-    }
-
-    @Test
-    void taskShouldBeDeserializable() throws IOException {
-        assertThat(TESTEE.deserialize(SERIALIZED))
-            .isEqualToComparingFieldByFieldRecursively(TASK);
-    }
 
     @Test
-    void additionalInformationShouldBeSerializable() throws JsonProcessingException {
-        assertThatJson(JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER.serialize(DETAILS)).isEqualTo(SERIALIZED_ADDITIONAL_INFORMATION);
+    void taskShouldBeSerializable() throws Exception {
+        JsonSerializationVerifier.dtoModule(MailboxMergingTaskDTO.module(TASK_RUNNER))
+            .bean(TASK)
+            .json(SERIALIZED)
+            .verify();
     }
 
     @Test
-    void additonalInformationShouldBeDeserializable() throws IOException {
-        assertThat(JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER.deserialize(SERIALIZED_ADDITIONAL_INFORMATION))
-            .isEqualToComparingFieldByField(DETAILS);
+    void additionalInformationShouldBeSerializable() throws Exception {
+        JsonSerializationVerifier.dtoModule(MailboxMergingTaskAdditionalInformationDTO.SERIALIZATION_MODULE)
+            .bean(DETAILS)
+            .json(SERIALIZED_ADDITIONAL_INFORMATION)
+            .verify();
     }
 }
\ 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


[james-project] 06/15: JAMES-2813 BlobStoreVaultGarbageCollectionTask::AdditionalInformation should be immutable

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 9efb89854cac12839764614a12f395ab5c9f6f26
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Dec 17 11:03:05 2019 +0700

    JAMES-2813 BlobStoreVaultGarbageCollectionTask::AdditionalInformation should be immutable
---
 .../vault/blob/BlobStoreVaultGarbageCollectionTask.java | 17 +++++------------
 ...ltGarbageCollectionTaskAdditionalInformationDTO.java |  2 +-
 ...toreVaultGarbageCollectionTaskSerializationTest.java |  5 +++--
 3 files changed, 9 insertions(+), 15 deletions(-)

diff --git a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTask.java b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTask.java
index 61b4e5d..01690dc 100644
--- a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTask.java
+++ b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTask.java
@@ -35,18 +35,19 @@ import org.apache.james.task.TaskExecutionDetails;
 import org.apache.james.task.TaskType;
 
 import com.github.steveash.guavate.Guavate;
+import com.google.common.collect.ImmutableSet;
+
 import reactor.core.publisher.Flux;
 import reactor.core.scheduler.Schedulers;
 
 public class BlobStoreVaultGarbageCollectionTask implements Task {
 
     public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation {
-
         private final ZonedDateTime beginningOfRetentionPeriod;
-        private final Collection<BucketName> deletedBuckets;
+        private final ImmutableSet<BucketName> deletedBuckets;
         private final Instant timestamp;
 
-        AdditionalInformation(ZonedDateTime beginningOfRetentionPeriod, Collection<BucketName> deletedBuckets, Instant timestamp) {
+        AdditionalInformation(ZonedDateTime beginningOfRetentionPeriod, ImmutableSet<BucketName> deletedBuckets, Instant timestamp) {
             this.beginningOfRetentionPeriod = beginningOfRetentionPeriod;
             this.deletedBuckets = deletedBuckets;
             this.timestamp = timestamp;
@@ -111,14 +112,6 @@ public class BlobStoreVaultGarbageCollectionTask implements Task {
 
     @Override
     public Optional<TaskExecutionDetails.AdditionalInformation> details() {
-        return Optional.of(new AdditionalInformation(beginningOfRetentionPeriod, deletedBuckets, Clock.systemUTC().instant()));
-    }
-
-    ZonedDateTime getBeginningOfRetentionPeriod() {
-        return beginningOfRetentionPeriod;
-    }
-
-    Flux<BucketName> getRetentionOperation() {
-        return retentionOperation;
+        return Optional.of(new AdditionalInformation(beginningOfRetentionPeriod, ImmutableSet.copyOf(deletedBuckets), Clock.systemUTC().instant()));
     }
 }
diff --git a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskAdditionalInformationDTO.java b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskAdditionalInformationDTO.java
index fff7526..c757f38 100644
--- a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskAdditionalInformationDTO.java
+++ b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskAdditionalInformationDTO.java
@@ -73,7 +73,7 @@ public class BlobStoreVaultGarbageCollectionTaskAdditionalInformationDTO impleme
             deletedBuckets
                 .stream()
                 .map(BucketName::of)
-                .collect(Guavate.toImmutableList()),
+                .collect(Guavate.toImmutableSet()),
             timestamp);
     }
 
diff --git a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskSerializationTest.java b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskSerializationTest.java
index ab2fff9..2d2cd34 100644
--- a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskSerializationTest.java
+++ b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskSerializationTest.java
@@ -37,7 +37,8 @@ import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
-import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+
 import reactor.core.publisher.Flux;
 
 class BlobStoreVaultGarbageCollectionTaskSerializationTest {
@@ -46,7 +47,7 @@ class BlobStoreVaultGarbageCollectionTaskSerializationTest {
 
     private static final JsonTaskSerializer TASK_SERIALIZER = JsonTaskSerializer.of(BlobStoreVaultGarbageCollectionTaskDTO.module(TASK_FACTORY));
     private static final ZonedDateTime BEGINNING_OF_RETENTION_PERIOD = ZonedDateTime.parse("2019-09-03T15:26:13.356+02:00[Europe/Paris]");
-    private static final ImmutableList<BucketName> BUCKET_IDS = ImmutableList.of(BucketName.of("1"), BucketName.of("2"), BucketName.of("3"));
+    private static final ImmutableSet<BucketName> BUCKET_IDS = ImmutableSet.of(BucketName.of("1"), BucketName.of("2"), BucketName.of("3"));
     private static final Flux<BucketName> RETENTION_OPERATION = Flux.fromIterable(BUCKET_IDS);
     private static final Instant TIMESTAMP = Instant.parse("2018-11-13T12:00:55Z");
     private static final BlobStoreVaultGarbageCollectionTask.AdditionalInformation DETAILS = new BlobStoreVaultGarbageCollectionTask.AdditionalInformation(BEGINNING_OF_RETENTION_PERIOD, BUCKET_IDS, TIMESTAMP);


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 15/15: [FIX] Retry WebAdmin startup upon BindException

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 2a949a778dbe3cd907b18717e26841f179210c05
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Dec 17 10:09:21 2019 +0100

    [FIX] Retry WebAdmin startup upon BindException
    
    This avoids port allocation conflicts
---
 .../org/apache/james/webadmin/WebAdminServer.java  |  3 ++
 .../org/apache/james/webadmin/WebAdminUtils.java   | 24 ++++++++++++-
 .../apache/james/webadmin/WebAdminUtilsTest.java   | 40 ++++++++++++++++++++++
 3 files changed, 66 insertions(+), 1 deletion(-)

diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminServer.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminServer.java
index 6706c56..92b28fc 100644
--- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminServer.java
+++ b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminServer.java
@@ -91,6 +91,9 @@ public class WebAdminServer implements Startable {
     }
 
     public WebAdminServer start() {
+        service.initExceptionHandler(e -> {
+            throw new RuntimeException(e);
+        });
         if (configuration.isEnabled()) {
             service.port(configuration.getPort().get().getValue());
             configureExceptionHanding();
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 97de868..5b3d07b 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
@@ -24,9 +24,13 @@ import static io.restassured.config.EncoderConfig.encoderConfig;
 import static io.restassured.config.RestAssuredConfig.newConfig;
 
 import java.nio.charset.StandardCharsets;
+import java.time.Duration;
+import java.util.List;
 
+import org.apache.james.metrics.api.MetricFactory;
 import org.apache.james.metrics.tests.RecordingMetricFactory;
 import org.apache.james.util.Port;
+import org.apache.james.webadmin.authentication.AuthenticationFilter;
 import org.apache.james.webadmin.authentication.NoAuthenticationFilter;
 
 import com.google.common.collect.ImmutableList;
@@ -35,11 +39,29 @@ import io.restassured.builder.RequestSpecBuilder;
 import io.restassured.config.RestAssuredConfig;
 import io.restassured.http.ContentType;
 import io.restassured.specification.RequestSpecification;
+import reactor.core.publisher.Mono;
 
 public class WebAdminUtils {
+    private static class ConcurrentSafeWebAdminServer extends WebAdminServer {
+        ConcurrentSafeWebAdminServer(WebAdminConfiguration configuration, List<Routes> routesList, AuthenticationFilter authenticationFilter, MetricFactory metricFactory) {
+            super(configuration, routesList, authenticationFilter, metricFactory);
+        }
+
+        /**
+         * JVM-wide synchronized start method to avoid the all too common random port allocation conflict
+         * that occurs when parallelly testing webadmin maven modules.
+         */
+        @Override
+        public WebAdminServer start() {
+            Mono.fromRunnable(super::start)
+                .retryBackoff(5, Duration.ofMillis(10))
+                .block();
+            return this;
+        }
+    }
 
     public static WebAdminServer createWebAdminServer(Routes... routes) {
-        return new WebAdminServer(WebAdminConfiguration.TEST_CONFIGURATION,
+        return new ConcurrentSafeWebAdminServer(WebAdminConfiguration.TEST_CONFIGURATION,
             ImmutableList.copyOf(routes),
             new NoAuthenticationFilter(),
             new RecordingMetricFactory());
diff --git a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtilsTest.java b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtilsTest.java
new file mode 100644
index 0000000..f5e61d6
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtilsTest.java
@@ -0,0 +1,40 @@
+/****************************************************************
+ * 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;
+
+import java.time.Duration;
+
+import org.apache.james.util.concurrency.ConcurrentTestRunner;
+import org.junit.jupiter.api.Test;
+
+class WebAdminUtilsTest {
+    @Test
+    void serverShouldBeAbletoStartConcurrently() throws Exception {
+        ConcurrentTestRunner.builder()
+            .operation((a, b) -> {
+                WebAdminServer webAdminServer = WebAdminUtils.createWebAdminServer();
+                webAdminServer.start();
+                webAdminServer.destroy();
+            })
+            .threadCount(10)
+            .operationCount(100)
+            .runSuccessfullyWithin(Duration.ofMinutes(1));
+    }
+}
\ 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


[james-project] 02/15: JAMES-2993 Use JsonSerializationVerifier for Quota thresholds event DTO tests

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 565682230c0e4b96db376c3a0e37e28ff198dd0e
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Dec 18 12:56:28 2019 +0700

    JAMES-2993 Use JsonSerializationVerifier for Quota thresholds event DTO tests
---
 json/pom.xml                                       |  4 ++
 .../apache/james/JsonSerializationVerifier.java    | 45 ++++++++-----
 mailbox/plugin/quota-mailing-cassandra/pom.xml     |  6 ++
 .../james/mailbox/quota/cassandra/dto/DTOTest.java | 76 +++-------------------
 4 files changed, 46 insertions(+), 85 deletions(-)

diff --git a/json/pom.xml b/json/pom.xml
index c9d29b7..dcdd913 100644
--- a/json/pom.xml
+++ b/json/pom.xml
@@ -53,6 +53,10 @@
             <artifactId>jackson-datatype-jsr310</artifactId>
         </dependency>
         <dependency>
+            <groupId>com.github.fge</groupId>
+            <artifactId>throwing-lambdas</artifactId>
+        </dependency>
+        <dependency>
             <groupId>com.github.steveash.guavate</groupId>
             <artifactId>guavate</artifactId>
         </dependency>
diff --git a/json/src/test/java/org/apache/james/JsonSerializationVerifier.java b/json/src/test/java/org/apache/james/JsonSerializationVerifier.java
index 53d423d..2d717e2 100644
--- a/json/src/test/java/org/apache/james/JsonSerializationVerifier.java
+++ b/json/src/test/java/org/apache/james/JsonSerializationVerifier.java
@@ -23,47 +23,58 @@ import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.IOException;
+import java.util.List;
 
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.james.json.DTO;
 import org.apache.james.json.DTOModule;
 import org.apache.james.json.JsonGenericSerializer;
 
-public class JsonSerializationVerifier<T, U extends DTO> {
-    @FunctionalInterface
-    public interface RequireBean<T, U extends DTO> {
-        RequireJson<T, U> bean(T bean);
-    }
+import com.github.fge.lambdas.Throwing;
+import com.google.common.collect.ImmutableList;
 
+public class JsonSerializationVerifier<T, U extends DTO> {
     @FunctionalInterface
     public interface RequireJson<T, U extends DTO> {
         JsonSerializationVerifier<T, U> json(String json);
     }
 
-    public static <T, U extends DTO> RequireBean<T, U> dtoModule(DTOModule<T, U> dtoModule) {
-        return bean -> json -> new JsonSerializationVerifier<>(dtoModule, json, bean);
+    public static <T, U extends DTO> JsonSerializationVerifier<T, U> dtoModule(DTOModule<T, U> dtoModule) {
+        return new JsonSerializationVerifier<>(dtoModule, ImmutableList.of());
     }
 
     private final DTOModule<T, U> dtoModule;
-    private final String json;
-    private final T bean;
+    private final List<Pair<String, T>> testValues;
 
-    private JsonSerializationVerifier(DTOModule<T, U> dtoModule, String json, T bean) {
+    private JsonSerializationVerifier(DTOModule<T, U> dtoModule, List<Pair<String, T>> testValues) {
         this.dtoModule = dtoModule;
-        this.json = json;
-        this.bean = bean;
+        this.testValues = testValues;
+    }
+
+    public RequireJson<T, U> bean(T bean) {
+        return json -> new JsonSerializationVerifier<>(
+            dtoModule,
+            ImmutableList.<Pair<String, T>>builder()
+                .addAll(testValues)
+                .add(Pair.of(json, bean))
+                .build());
     }
 
     public void verify() throws IOException {
+        testValues.forEach(Throwing.<Pair<String, T>>consumer(this::verify).sneakyThrow());
+    }
+
+    private void verify(Pair<String, T> testValue) throws IOException {
         JsonGenericSerializer<T, U> seriliazer = JsonGenericSerializer
             .forModules(dtoModule)
             .withoutNestedType();
 
-        assertThatJson(seriliazer.serialize(bean))
+        assertThatJson(seriliazer.serialize(testValue.getRight()))
             .describedAs("Serialization test")
-            .isEqualTo(json);
+            .isEqualTo(testValue.getLeft());
 
-        assertThat(seriliazer.deserialize(json))
-            .describedAs("Deserialization test")
-            .isEqualToComparingFieldByFieldRecursively(bean);
+        assertThat(seriliazer.deserialize(testValue.getLeft()))
+            .describedAs("Deserialization test [" + testValue.getRight() + "]")
+            .isEqualToComparingFieldByFieldRecursively(testValue.getRight());
     }
 }
diff --git a/mailbox/plugin/quota-mailing-cassandra/pom.xml b/mailbox/plugin/quota-mailing-cassandra/pom.xml
index 656f066..d29f17c 100644
--- a/mailbox/plugin/quota-mailing-cassandra/pom.xml
+++ b/mailbox/plugin/quota-mailing-cassandra/pom.xml
@@ -91,6 +91,12 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-json</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-core</artifactId>
             <scope>test</scope>
         </dependency>
diff --git a/mailbox/plugin/quota-mailing-cassandra/src/test/java/org/apache/james/mailbox/quota/cassandra/dto/DTOTest.java b/mailbox/plugin/quota-mailing-cassandra/src/test/java/org/apache/james/mailbox/quota/cassandra/dto/DTOTest.java
index 3e3d824..98b4292 100644
--- a/mailbox/plugin/quota-mailing-cassandra/src/test/java/org/apache/james/mailbox/quota/cassandra/dto/DTOTest.java
+++ b/mailbox/plugin/quota-mailing-cassandra/src/test/java/org/apache/james/mailbox/quota/cassandra/dto/DTOTest.java
@@ -20,19 +20,20 @@
 package org.apache.james.mailbox.quota.cassandra.dto;
 
 import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
+import static org.apache.james.mailbox.quota.cassandra.dto.QuotaEventDTOModules.QUOTA_THRESHOLD_CHANGE;
 import static org.apache.james.mailbox.quota.model.QuotaThresholdFixture._75;
 import static org.apache.james.mailbox.quota.model.QuotaThresholdFixture._80;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import java.time.Instant;
 
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.core.Username;
 import org.apache.james.core.quota.QuotaCountLimit;
 import org.apache.james.core.quota.QuotaCountUsage;
 import org.apache.james.core.quota.QuotaSizeLimit;
 import org.apache.james.core.quota.QuotaSizeUsage;
 import org.apache.james.eventsourcing.EventId;
-import org.apache.james.eventsourcing.eventstore.cassandra.JsonEventSerializer;
 import org.apache.james.mailbox.model.Quota;
 import org.apache.james.mailbox.quota.mailing.aggregates.UserQuotaThresholds;
 import org.apache.james.mailbox.quota.mailing.events.QuotaThresholdChangedEvent;
@@ -135,73 +136,12 @@ class DTOTest {
     }
 
     @Test
-    void shouldSerializeQuotaThresholdChangedEventDTO() throws Exception {
-        assertThatJson(objectMapper.writeValueAsString(
-            QuotaEventDTOModules.QUOTA_THRESHOLD_CHANGE.toDTO(EVENT)))
-            .isEqualTo(EVENT_JSON);
-    }
-
-    @Test
-    void shouldDeserializeQuotaThresholdChangedEventDTO() throws Exception {
-        assertThat(objectMapper.readValue(EVENT_JSON, QuotaThresholdChangedEventDTO.class)
-            .toEvent())
-            .isEqualTo(EVENT);
-    }
-
-    @Test
     void shouldSerializeQuotaThresholdChangedEvent() throws Exception {
-        assertThatJson(JsonEventSerializer.forModules(QuotaEventDTOModules.QUOTA_THRESHOLD_CHANGE).withoutNestedType()
-            .serialize(EVENT))
-            .isEqualTo(EVENT_JSON);
-    }
-
-    @Test
-    void shouldDeserializeQuotaThresholdChangedEvent() throws Exception {
-        assertThat(JsonEventSerializer.forModules(QuotaEventDTOModules.QUOTA_THRESHOLD_CHANGE).withoutNestedType()
-            .deserialize(EVENT_JSON))
-            .isEqualTo(EVENT);
-    }
-
-    @Test
-    void shouldSerializeEvent2() throws Exception {
-        assertThatJson(JsonEventSerializer.forModules(QuotaEventDTOModules.QUOTA_THRESHOLD_CHANGE).withoutNestedType()
-            .serialize(EVENT_2))
-            .isEqualTo(EVENT_JSON_2);
-    }
-
-    @Test
-    void shouldDeserializeEvent2() throws Exception {
-        assertThat(JsonEventSerializer.forModules(QuotaEventDTOModules.QUOTA_THRESHOLD_CHANGE).withoutNestedType()
-            .deserialize(EVENT_JSON_2))
-            .isEqualTo(EVENT_2);
-    }
-
-    @Test
-    void shouldSerializeEvent3() throws Exception {
-        assertThatJson(JsonEventSerializer.forModules(QuotaEventDTOModules.QUOTA_THRESHOLD_CHANGE).withoutNestedType()
-            .serialize(EVENT_3))
-            .isEqualTo(EVENT_JSON_3);
-    }
-
-    @Test
-    void shouldDeserializeEvent3() throws Exception {
-        assertThat(JsonEventSerializer.forModules(QuotaEventDTOModules.QUOTA_THRESHOLD_CHANGE).withoutNestedType()
-            .deserialize(EVENT_JSON_3))
-            .isEqualTo(EVENT_3);
+        JsonSerializationVerifier.dtoModule(QUOTA_THRESHOLD_CHANGE)
+            .bean(EVENT).json(EVENT_JSON)
+            .bean(EVENT_2).json(EVENT_JSON_2)
+            .bean(EVENT_3).json(EVENT_JSON_3)
+            .bean(EVENT_4).json(EVENT_JSON_4)
+            .verify();
     }
-
-    @Test
-    void shouldSerializeEvent4() throws Exception {
-        assertThatJson(JsonEventSerializer.forModules(QuotaEventDTOModules.QUOTA_THRESHOLD_CHANGE).withoutNestedType()
-            .serialize(EVENT_4))
-            .isEqualTo(EVENT_JSON_4);
-    }
-
-    @Test
-    void shouldDeserializeEvent4() throws Exception {
-        assertThat(JsonEventSerializer.forModules(QuotaEventDTOModules.QUOTA_THRESHOLD_CHANGE).withoutNestedType()
-            .deserialize(EVENT_JSON_4))
-            .isEqualTo(EVENT_4);
-    }
-
 }
\ 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


[james-project] 09/15: JAMES-2813 MailRepositories tasks should use JsonSerializationVerifier

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit ff173b3360298d246bad471a4594e28ac9a0e91b
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Dec 18 15:34:05 2019 +0700

    JAMES-2813 MailRepositories tasks should use JsonSerializationVerifier
---
 .../webadmin/webadmin-mailrepository/pom.xml       |   6 ++
 .../service/ClearMailRepositoryTaskTest.java       |  41 ++------
 .../service/ReprocessingAllMailsTaskTest.java      | 112 ++++-----------------
 .../service/ReprocessingOneMailTaskTest.java       |  76 +++-----------
 4 files changed, 54 insertions(+), 181 deletions(-)

diff --git a/server/protocols/webadmin/webadmin-mailrepository/pom.xml b/server/protocols/webadmin/webadmin-mailrepository/pom.xml
index 187e210..549c1ed 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/pom.xml
+++ b/server/protocols/webadmin/webadmin-mailrepository/pom.xml
@@ -40,6 +40,12 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-json</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-data-api</artifactId>
         </dependency>
         <dependency>
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ClearMailRepositoryTaskTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ClearMailRepositoryTaskTest.java
index fdaf67f..06aa208 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ClearMailRepositoryTaskTest.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ClearMailRepositoryTaskTest.java
@@ -19,24 +19,19 @@
 
 package org.apache.james.webadmin.service;
 
-import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
-import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Mockito.mock;
 
-import java.io.IOException;
 import java.time.Instant;
 
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.mailrepository.api.MailRepository;
 import org.apache.james.mailrepository.api.MailRepositoryPath;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
-import org.apache.james.server.task.json.JsonTaskAdditionalInformationSerializer;
 import org.apache.james.server.task.json.JsonTaskSerializer;
 import org.junit.jupiter.api.Test;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.google.common.collect.ImmutableList;
-import net.javacrumbs.jsonunit.assertj.JsonAssertions;
 
 class ClearMailRepositoryTaskTest {
 
@@ -50,22 +45,13 @@ class ClearMailRepositoryTaskTest {
     private static final ClearMailRepositoryTask TASK = new ClearMailRepositoryTask(MAIL_REPOSITORIES, MAIL_REPOSITORY_PATH);
     private static final long INITIAL_COUNT = 0L;
     private static final long REMAINING_COUNT = 10L;
-    private JsonTaskAdditionalInformationSerializer jsonAdditionalInformationSerializer = JsonTaskAdditionalInformationSerializer.of(
-        ClearMailRepositoryTaskAdditionalInformationDTO.SERIALIZATION_MODULE);
 
     @Test
-    void taskShouldBeSerializable() throws JsonProcessingException {
-        JsonTaskSerializer testee = JsonTaskSerializer.of(ClearMailRepositoryTaskDTO.module(FACTORY));
-        JsonAssertions.assertThatJson(testee.serialize(TASK))
-            .isEqualTo(SERIALIZED);
-    }
-
-    @Test
-    void taskShouldBeDeserializable() throws IOException {
-        JsonTaskSerializer testee = JsonTaskSerializer.of(ClearMailRepositoryTaskDTO.module(FACTORY));
-
-        assertThat(testee.deserialize(SERIALIZED))
-            .isEqualToComparingFieldByFieldRecursively(TASK);
+    void taskShouldBeSerializable() throws Exception {
+        JsonSerializationVerifier.dtoModule(ClearMailRepositoryTaskDTO.module(FACTORY))
+            .bean(TASK)
+            .json(SERIALIZED)
+            .verify();
     }
 
     @Test
@@ -77,15 +63,10 @@ class ClearMailRepositoryTaskTest {
     }
 
     @Test
-    void additionalInformationShouldBeSerializable() throws JsonProcessingException {
-        ClearMailRepositoryTask.AdditionalInformation details = new ClearMailRepositoryTask.AdditionalInformation(MAIL_REPOSITORY_PATH, INITIAL_COUNT, REMAINING_COUNT, TIMESTAMP);
-        assertThatJson(jsonAdditionalInformationSerializer.serialize(details)).isEqualTo(SERIALIZED_TASK_ADDITIONAL_INFORMATION);
-    }
-
-    @Test
-    void additionalInformationShouldBeDeserializable() throws IOException {
-        ClearMailRepositoryTask.AdditionalInformation details = new ClearMailRepositoryTask.AdditionalInformation(MAIL_REPOSITORY_PATH, INITIAL_COUNT, REMAINING_COUNT, TIMESTAMP);
-        assertThat(jsonAdditionalInformationSerializer.deserialize(SERIALIZED_TASK_ADDITIONAL_INFORMATION))
-            .isEqualToComparingFieldByField(details);
+    void additionalInformationShouldBeSerializable() throws Exception {
+        JsonSerializationVerifier.dtoModule(ClearMailRepositoryTaskAdditionalInformationDTO.SERIALIZATION_MODULE)
+            .bean(new ClearMailRepositoryTask.AdditionalInformation(MAIL_REPOSITORY_PATH, INITIAL_COUNT, REMAINING_COUNT, TIMESTAMP))
+            .json(SERIALIZED_TASK_ADDITIONAL_INFORMATION)
+            .verify();
     }
 }
\ No newline at end of file
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingAllMailsTaskTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingAllMailsTaskTest.java
index c419a1c..df0fe9e 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingAllMailsTaskTest.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingAllMailsTaskTest.java
@@ -19,36 +19,25 @@
 
 package org.apache.james.webadmin.service;
 
-import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
-import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Mockito.mock;
 
-import java.io.IOException;
 import java.time.Instant;
 import java.util.Optional;
-import java.util.stream.Stream;
 
-import org.apache.james.mailrepository.api.MailKey;
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.mailrepository.api.MailRepositoryPath;
-import org.apache.james.server.task.json.JsonTaskAdditionalInformationSerializer;
 import org.apache.james.server.task.json.JsonTaskSerializer;
+import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
 import org.junit.jupiter.params.provider.ValueSource;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-
 class ReprocessingAllMailsTaskTest {
-
     private static final Instant TIMESTAMP = Instant.parse("2018-11-13T12:00:55Z");
     private static final ReprocessingService REPROCESSING_SERVICE = mock(ReprocessingService.class);
-    private JsonTaskAdditionalInformationSerializer jsonAdditionalInformationSerializer = JsonTaskAdditionalInformationSerializer.of(ReprocessingAllMailsTaskAdditionalInformationDTO.SERIALIZATION_MODULE);
     private static final long REPOSITORY_SIZE = 5L;
     private static final MailRepositoryPath REPOSITORY_PATH = MailRepositoryPath.from("a");
     private static final String TARGET_QUEUE = "queue";
-    private static final MailKey MAIL_KEY = new MailKey("myMail");
     private static final Optional<String> SOME_TARGET_PROCESSOR = Optional.of("targetProcessor");
     private static final long REMAINING_COUNT = 3L;
     private static final String SERIALIZED_TASK_WITH_TARGET_PROCESSOR = "{\"type\":\"reprocessing-all\",\"repositorySize\":5,\"repositoryPath\":\"a\",\"targetQueue\":\"queue\",\"targetProcessor\":\"targetProcessor\"}";
@@ -56,46 +45,15 @@ class ReprocessingAllMailsTaskTest {
     private static final String SERIALIZED_TASK_ADDITIONAL_INFORMATION_WITH_TARGET_PROCESSOR = "{\"type\":\"reprocessing-all\", \"repositoryPath\":\"a\",\"targetQueue\":\"queue\",\"targetProcessor\":\"targetProcessor\",\"initialCount\":5,\"remainingCount\":3, \"timestamp\":\"2018-11-13T12:00:55Z\"}";
     private static final String SERIALIZED_TASK_ADDITIONAL_INFORMATION_WITHOUT_TARGET_PROCESSOR = "{\"type\":\"reprocessing-all\", \"repositoryPath\":\"a\",\"targetQueue\":\"queue\", \"initialCount\":5,\"remainingCount\":3, \"timestamp\":\"2018-11-13T12:00:55Z\"}";
 
-    @ParameterizedTest
-    @MethodSource
-    void taskShouldBeSerializable(long repositorySize,
-                                  MailRepositoryPath repositoryPath,
-                                  String targetQueue,
-                                  Optional<String> targetProcessor,
-                                  String serialized) throws JsonProcessingException {
-        JsonTaskSerializer testee = JsonTaskSerializer.of(ReprocessingAllMailsTaskDTO.module(REPROCESSING_SERVICE));
-        ReprocessingAllMailsTask task = new ReprocessingAllMailsTask(REPROCESSING_SERVICE, repositorySize, repositoryPath, targetQueue, targetProcessor);
-        assertThatJson(testee.serialize(task))
-            .isEqualTo(serialized);
-    }
+    @Test
+    void taskShouldBeSerializable() throws Exception {
+        ReprocessingAllMailsTask taskWithTargetProcessor = new ReprocessingAllMailsTask(REPROCESSING_SERVICE, REPOSITORY_SIZE, REPOSITORY_PATH, TARGET_QUEUE, SOME_TARGET_PROCESSOR);
+        ReprocessingAllMailsTask taskWithoutTargetProcessor = new ReprocessingAllMailsTask(REPROCESSING_SERVICE, REPOSITORY_SIZE, REPOSITORY_PATH, TARGET_QUEUE, Optional.empty());
 
-    private static Stream<Arguments> taskShouldBeSerializable() {
-        return allValidTasks();
-    }
-
-    @ParameterizedTest
-    @MethodSource
-    void taskShouldBeDeserializable(long repositorySize,
-                                    MailRepositoryPath repositoryPath,
-                                    String targetQueue,
-                                    Optional<String> targetProcessor,
-                                    String serialized) throws IOException {
-        JsonTaskSerializer testee = JsonTaskSerializer.of(ReprocessingAllMailsTaskDTO.module(REPROCESSING_SERVICE));
-        ReprocessingAllMailsTask task = new ReprocessingAllMailsTask(REPROCESSING_SERVICE, repositorySize, repositoryPath, targetQueue, targetProcessor);
-
-        assertThat(testee.deserialize(serialized))
-            .isEqualToComparingFieldByFieldRecursively(task);
-    }
-
-    private static Stream<Arguments> taskShouldBeDeserializable() {
-        return allValidTasks();
-    }
-
-    private static Stream<Arguments> allValidTasks() {
-        return Stream.of(
-            Arguments.of(REPOSITORY_SIZE, REPOSITORY_PATH, TARGET_QUEUE, SOME_TARGET_PROCESSOR, SERIALIZED_TASK_WITH_TARGET_PROCESSOR),
-            Arguments.of(REPOSITORY_SIZE, REPOSITORY_PATH, TARGET_QUEUE, Optional.empty(), SERIALIZED_TASK_WITHOUT_TARGET_PROCESSOR)
-        );
+        JsonSerializationVerifier.dtoModule(ReprocessingAllMailsTaskDTO.module(REPROCESSING_SERVICE))
+            .testCase(taskWithTargetProcessor, SERIALIZED_TASK_WITH_TARGET_PROCESSOR)
+            .testCase(taskWithoutTargetProcessor, SERIALIZED_TASK_WITHOUT_TARGET_PROCESSOR)
+            .verify();
     }
 
     @ParameterizedTest
@@ -107,44 +65,16 @@ class ReprocessingAllMailsTaskTest {
             .isInstanceOf(ReprocessingAllMailsTask.InvalidMailRepositoryPathDeserializationException.class);
     }
 
-    private static Stream<Arguments> allAdditionalInformation() {
-        return Stream.of(
-            Arguments.of(REPOSITORY_PATH, TARGET_QUEUE, SOME_TARGET_PROCESSOR, REPOSITORY_SIZE, REMAINING_COUNT, SERIALIZED_TASK_ADDITIONAL_INFORMATION_WITH_TARGET_PROCESSOR),
-            Arguments.of(REPOSITORY_PATH, TARGET_QUEUE, Optional.empty(), REPOSITORY_SIZE, REMAINING_COUNT, SERIALIZED_TASK_ADDITIONAL_INFORMATION_WITHOUT_TARGET_PROCESSOR)
-        );
-    }
-
-
-    @ParameterizedTest
-    @MethodSource
-    void additionalInformationShouldBeSerializable(MailRepositoryPath repositoryPath,
-                                                   String targetQueue,
-                                                   Optional<String> targetProcessor,
-                                                   long repositorySize,
-                                                   long remainingCount,
-                                                   String serialized) throws JsonProcessingException {
-        ReprocessingAllMailsTask.AdditionalInformation details = new ReprocessingAllMailsTask.AdditionalInformation(repositoryPath, targetQueue, targetProcessor, repositorySize, remainingCount, TIMESTAMP);
-        assertThatJson(jsonAdditionalInformationSerializer.serialize(details)).isEqualTo(serialized);
-    }
-
-    private static Stream<Arguments> additionalInformationShouldBeSerializable() {
-        return allAdditionalInformation();
-    }
-
-    @ParameterizedTest
-    @MethodSource
-    void additionalInformationShouldBeDeserializable(MailRepositoryPath repositoryPath,
-                                                     String targetQueue,
-                                                     Optional<String> targetProcessor,
-                                                     long repositorySize,
-                                                     long remainingCount,
-                                                     String serialized) throws IOException {
-        ReprocessingAllMailsTask.AdditionalInformation details = new ReprocessingAllMailsTask.AdditionalInformation(repositoryPath, targetQueue, targetProcessor, repositorySize, remainingCount, TIMESTAMP);
-        assertThat(jsonAdditionalInformationSerializer.deserialize(serialized))
-            .isEqualToComparingFieldByField(details);
-    }
-
-    private static Stream<Arguments> additionalInformationShouldBeDeserializable() {
-        return allAdditionalInformation();
+    @Test
+    void additionalInformationShouldBeSerializable() throws Exception {
+        ReprocessingAllMailsTask.AdditionalInformation details = new ReprocessingAllMailsTask.AdditionalInformation(REPOSITORY_PATH, TARGET_QUEUE, SOME_TARGET_PROCESSOR,
+            REPOSITORY_SIZE, REMAINING_COUNT, TIMESTAMP);
+        ReprocessingAllMailsTask.AdditionalInformation detailsWithoutProcessor = new ReprocessingAllMailsTask.AdditionalInformation(REPOSITORY_PATH, TARGET_QUEUE, Optional.empty(),
+            REPOSITORY_SIZE, REMAINING_COUNT, TIMESTAMP);
+
+        JsonSerializationVerifier.dtoModule(ReprocessingAllMailsTaskAdditionalInformationDTO.SERIALIZATION_MODULE)
+            .testCase(details, SERIALIZED_TASK_ADDITIONAL_INFORMATION_WITH_TARGET_PROCESSOR)
+            .testCase(detailsWithoutProcessor, SERIALIZED_TASK_ADDITIONAL_INFORMATION_WITHOUT_TARGET_PROCESSOR)
+            .verify();
     }
 }
\ No newline at end of file
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingOneMailTaskTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingOneMailTaskTest.java
index 434a16b..5927ee0 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingOneMailTaskTest.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingOneMailTaskTest.java
@@ -19,8 +19,6 @@
 
 package org.apache.james.webadmin.service;
 
-import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
-import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Mockito.mock;
 
@@ -29,23 +27,16 @@ import java.time.Clock;
 import java.time.Instant;
 import java.time.ZoneId;
 import java.util.Optional;
-import java.util.stream.Stream;
 
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.mailrepository.api.MailKey;
 import org.apache.james.mailrepository.api.MailRepositoryPath;
-import org.apache.james.server.task.json.JsonTaskAdditionalInformationSerializer;
 import org.apache.james.server.task.json.JsonTaskSerializer;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
 import org.junit.jupiter.params.provider.ValueSource;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-import net.javacrumbs.jsonunit.assertj.JsonAssertions;
-
 class ReprocessingOneMailTaskTest {
-
     private static final Instant TIMESTAMP = Instant.parse("2018-11-13T12:00:55Z");
     private static final Clock CLOCK = Clock.fixed(TIMESTAMP, ZoneId.of("UTC"));
     private static final ReprocessingService REPROCESSING_SERVICE = mock(ReprocessingService.class);
@@ -55,48 +46,17 @@ class ReprocessingOneMailTaskTest {
     private static final String TARGET_QUEUE = "queue";
     private static final MailKey MAIL_KEY = new MailKey("myMail");
     private static final Optional<String> TARGET_PROCESSOR = Optional.of("targetProcessor");
-    private JsonTaskAdditionalInformationSerializer jsonAdditionalInformationSerializer = JsonTaskAdditionalInformationSerializer.of(ReprocessingOneMailTaskAdditionalInformationDTO.SERIALIZATION_MODULE);
-
-    @ParameterizedTest
-    @MethodSource
-    void taskShouldBeSerializable(MailRepositoryPath repositoryPath,
-                                  String targetQueue,
-                                  MailKey mailKey,
-                                  Optional<String> targetProcessor,
-                                  String serialized) throws JsonProcessingException {
-        JsonTaskSerializer testee = JsonTaskSerializer.of(ReprocessingOneMailTaskDTO.module(CLOCK, REPROCESSING_SERVICE));
-        ReprocessingOneMailTask task = new ReprocessingOneMailTask(REPROCESSING_SERVICE, repositoryPath, targetQueue, mailKey, targetProcessor, CLOCK);
-        JsonAssertions.assertThatJson(testee.serialize(task))
-            .isEqualTo(serialized);
-    }
-
-    private static Stream<Arguments> taskShouldBeSerializable() {
-        return allValidTasks();
-    }
-
-    @ParameterizedTest
-    @MethodSource
-    void taskShouldBeDeserializable(MailRepositoryPath repositoryPath,
-                                    String targetQueue,
-                                    MailKey mailKey,
-                                    Optional<String> targetProcessor,
-                                    String serialized) throws IOException {
-        JsonTaskSerializer testee = JsonTaskSerializer.of(ReprocessingOneMailTaskDTO.module(CLOCK, REPROCESSING_SERVICE));
-        ReprocessingOneMailTask task = new ReprocessingOneMailTask(REPROCESSING_SERVICE, repositoryPath, targetQueue, mailKey, targetProcessor, CLOCK);
-
-        assertThat(testee.deserialize(serialized))
-            .isEqualToComparingFieldByFieldRecursively(task);
-    }
-
-    private static Stream<Arguments> taskShouldBeDeserializable() {
-        return allValidTasks();
-    }
 
-    private static Stream<Arguments> allValidTasks() {
-        return Stream.of(
-            Arguments.of(REPOSITORY_PATH, TARGET_QUEUE, MAIL_KEY, TARGET_PROCESSOR, SERIALIZED_TASK_1),
-            Arguments.of(REPOSITORY_PATH, TARGET_QUEUE, new MailKey("myMail"), Optional.empty(), "{\"type\":\"reprocessing-one\",\"repositoryPath\":\"a\",\"targetQueue\":\"queue\",\"mailKey\": \"myMail\"}")
-        );
+    @Test
+    void taskShouldBeSerializable() throws Exception {
+        ReprocessingOneMailTask taskWithTargetProcessor = new ReprocessingOneMailTask(REPROCESSING_SERVICE, REPOSITORY_PATH, TARGET_QUEUE, MAIL_KEY, TARGET_PROCESSOR, CLOCK);
+        ReprocessingOneMailTask taskWithoutTargetProcessor = new ReprocessingOneMailTask(REPROCESSING_SERVICE, REPOSITORY_PATH, TARGET_QUEUE, MAIL_KEY, Optional.empty(), CLOCK);
+
+        JsonSerializationVerifier.dtoModule(ReprocessingOneMailTaskDTO.module(CLOCK, REPROCESSING_SERVICE))
+            .testCase(taskWithTargetProcessor, SERIALIZED_TASK_1)
+            .testCase(taskWithoutTargetProcessor,
+                "{\"type\":\"reprocessing-one\",\"repositoryPath\":\"a\",\"targetQueue\":\"queue\",\"mailKey\": \"myMail\"}")
+            .verify();
     }
 
     @ParameterizedTest
@@ -109,15 +69,11 @@ class ReprocessingOneMailTaskTest {
     }
 
     @Test
-    void additionalInformationShouldBeSerializable() throws JsonProcessingException {
-        ReprocessingOneMailTask.AdditionalInformation details = new ReprocessingOneMailTask.AdditionalInformation(REPOSITORY_PATH, TARGET_QUEUE, MAIL_KEY, TARGET_PROCESSOR, TIMESTAMP);
-        assertThatJson(jsonAdditionalInformationSerializer.serialize(details)).isEqualTo(SERIALIZED_TASK_1_ADDITIONAL_INFORMATION);
-    }
-
-    @Test
-    void additonalInformationShouldBeDeserializable() throws IOException {
+    void additionalInformationShouldBeSerializable() throws IOException {
         ReprocessingOneMailTask.AdditionalInformation details = new ReprocessingOneMailTask.AdditionalInformation(REPOSITORY_PATH, TARGET_QUEUE, MAIL_KEY, TARGET_PROCESSOR, TIMESTAMP);
-        assertThat(jsonAdditionalInformationSerializer.deserialize(SERIALIZED_TASK_1_ADDITIONAL_INFORMATION))
-            .isEqualToComparingFieldByField(details);
+        JsonSerializationVerifier.dtoModule(ReprocessingOneMailTaskAdditionalInformationDTO.SERIALIZATION_MODULE)
+            .bean(details)
+            .json(SERIALIZED_TASK_1_ADDITIONAL_INFORMATION)
+            .verify();
     }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 11/15: JAMES-2813 event-dead-letter tasks should use JsonSerializationVerifier

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 6e748dd1ea754dbdae2a892d82164669651f0720
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Dec 18 15:26:12 2019 +0700

    JAMES-2813 event-dead-letter tasks should use JsonSerializationVerifier
---
 server/protocols/webadmin/webadmin-mailbox/pom.xml |   6 ++
 .../service/EventDeadLettersRedeliverAllTask.java  |   6 +-
 .../EventDeadLettersRedeliverGroupTask.java        |   6 +-
 .../service/EventDeadLettersRedeliverOneTask.java  |   6 +-
 .../service/EventDeadLettersRedeliverTaskTest.java | 103 ++++++++-------------
 5 files changed, 47 insertions(+), 80 deletions(-)

diff --git a/server/protocols/webadmin/webadmin-mailbox/pom.xml b/server/protocols/webadmin/webadmin-mailbox/pom.xml
index a44a25c..278b761 100644
--- a/server/protocols/webadmin/webadmin-mailbox/pom.xml
+++ b/server/protocols/webadmin/webadmin-mailbox/pom.xml
@@ -101,6 +101,12 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-json</artifactId>
+            <scope>test</scope>
+            <type>test-jar</type>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-data-api</artifactId>
         </dependency>
         <dependency>
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverAllTask.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverAllTask.java
index cd38108..3b89e38 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverAllTask.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverAllTask.java
@@ -75,11 +75,7 @@ public class EventDeadLettersRedeliverAllTask implements Task {
         return Optional.of(createAdditionalInformation());
     }
 
-    public EventRetriever getEventRetriever() {
-        return eventRetriever;
-    }
-
-    EventDeadLettersRedeliveryTaskAdditionalInformation createAdditionalInformation() {
+    private EventDeadLettersRedeliveryTaskAdditionalInformation createAdditionalInformation() {
         return new EventDeadLettersRedeliveryTaskAdditionalInformationForAll(
             successfulRedeliveriesCount.get(),
             failedRedeliveriesCount.get(),
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverGroupTask.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverGroupTask.java
index 134d9cf..de2e8b5 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverGroupTask.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverGroupTask.java
@@ -78,15 +78,11 @@ public class EventDeadLettersRedeliverGroupTask implements Task {
         return Optional.of(createAdditionalInformation());
     }
 
-    public EventRetriever getEventRetriever() {
-        return eventRetriever;
-    }
-
     public Group getGroup() {
         return group;
     }
 
-    EventDeadLettersRedeliveryTaskAdditionalInformation createAdditionalInformation() {
+    private EventDeadLettersRedeliveryTaskAdditionalInformation createAdditionalInformation() {
         return new EventDeadLettersRedeliveryTaskAdditionalInformationForGroup(
             successfulRedeliveriesCount.get(),
             failedRedeliveriesCount.get(),
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverOneTask.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverOneTask.java
index 5b3407e..06a4b6d 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverOneTask.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverOneTask.java
@@ -80,10 +80,6 @@ public class EventDeadLettersRedeliverOneTask implements Task {
         return Optional.of(createAdditionalInformation());
     }
 
-    public EventRetriever getEventRetriever() {
-        return eventRetriever;
-    }
-
     public Group getGroup() {
         return group;
     }
@@ -92,7 +88,7 @@ public class EventDeadLettersRedeliverOneTask implements Task {
         return insertionId;
     }
 
-    EventDeadLettersRedeliveryTaskAdditionalInformation createAdditionalInformation() {
+    private EventDeadLettersRedeliveryTaskAdditionalInformation createAdditionalInformation() {
         return new EventDeadLettersRedeliveryTaskAdditionalInformationDTO.EventDeadLettersRedeliveryTaskAdditionalInformationForOne(
             successfulRedeliveriesCount.get(),
             failedRedeliveriesCount.get(),
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverTaskTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverTaskTest.java
index 0c24d8a..7e9217e 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverTaskTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverTaskTest.java
@@ -19,32 +19,20 @@
 
 package org.apache.james.webadmin.service;
 
-import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
-import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 
-import java.io.IOException;
 import java.time.Instant;
 import java.util.Optional;
-import java.util.stream.Stream;
 
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.mailbox.events.EventDeadLetters;
 import org.apache.james.mailbox.events.GenericGroup;
 import org.apache.james.mailbox.events.Group;
-import org.apache.james.server.task.json.JsonTaskAdditionalInformationSerializer;
-import org.apache.james.server.task.json.JsonTaskSerializer;
-import org.apache.james.task.Task;
 import org.apache.james.webadmin.service.EventDeadLettersRedeliveryTaskAdditionalInformationDTO.EventDeadLettersRedeliveryTaskAdditionalInformationForAll;
 import org.apache.james.webadmin.service.EventDeadLettersRedeliveryTaskAdditionalInformationDTO.EventDeadLettersRedeliveryTaskAdditionalInformationForGroup;
 import org.apache.james.webadmin.service.EventDeadLettersRedeliveryTaskAdditionalInformationDTO.EventDeadLettersRedeliveryTaskAdditionalInformationForOne;
-
 import org.junit.jupiter.api.BeforeAll;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import net.javacrumbs.jsonunit.assertj.JsonAssertions;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
+import org.junit.jupiter.api.Test;
 
 class EventDeadLettersRedeliverTaskTest {
     private static final Instant TIMESTAMP = Instant.parse("2018-11-13T12:00:55Z");
@@ -58,78 +46,63 @@ class EventDeadLettersRedeliverTaskTest {
     private static final EventDeadLettersRedeliverAllTask TASK_ALL = new EventDeadLettersRedeliverAllTask(SERVICE);
     private static final EventDeadLettersRedeliverGroupTask TASK_GROUP = new EventDeadLettersRedeliverGroupTask(SERVICE, new GenericGroup("abc"));
     private static final EventDeadLettersRedeliverOneTask TASK_ONE = new EventDeadLettersRedeliverOneTask(SERVICE, new GenericGroup("abc"), EventDeadLetters.InsertionId.of("fcbc3c92-e9a0-4ece-94ed-6e6b45045258"));
-    private static final JsonTaskSerializer TESTEE = JsonTaskSerializer.of(
-        EventDeadLettersRedeliverAllTaskDTO.module(SERVICE),
-        EventDeadLettersRedeliverGroupTaskDTO.module(SERVICE),
-        EventDeadLettersRedeliverOneTaskDTO.module(SERVICE));
-
-    private JsonTaskAdditionalInformationSerializer jsonAdditionalInformationSerializer = JsonTaskAdditionalInformationSerializer.of(
-        EventDeadLettersRedeliveryTaskAdditionalInformationForAll.MODULE,
-        EventDeadLettersRedeliveryTaskAdditionalInformationForGroup.MODULE,
-        EventDeadLettersRedeliveryTaskAdditionalInformationForOne.MODULE);
 
     private static final long SUCCESSFUL_REDELIVERY_COUNT = 10L;
     private static final long FAILED_REDELIVERY_COUNT = 4L;
     private static Optional<Group> SOME_GROUP;
 
     private static final Optional<EventDeadLetters.InsertionId> SOME_INSERTION_ID = Optional.of(EventDeadLetters.InsertionId.of("53db3dd9-80eb-476f-b25a-722ad364905a"));
-    private static final Optional<Group> NO_GROUP = Optional.empty();
-    private static final Optional<EventDeadLetters.InsertionId> NO_INSERTION_ID = Optional.empty();
 
     @BeforeAll
     static void setUp() throws Exception {
         SOME_GROUP = Optional.of(Group.deserialize("org.apache.james.mailbox.events.GenericGroup-foo"));
     }
 
-    static Stream<Arguments> tasks() {
-        return Stream.of(
-            Arguments.of(SERIALIZED_ALL, TASK_ALL),
-            Arguments.of(SERIALIZED_GROUP, TASK_GROUP),
-            Arguments.of(SERIALIZED_ONE, TASK_ONE)
-        );
+    @Test
+    void redeliverAllTaskShouldMatchJsonSerializationContract() throws Exception {
+        JsonSerializationVerifier.dtoModule(EventDeadLettersRedeliverAllTaskDTO.module(SERVICE))
+            .bean(TASK_ALL)
+            .json(SERIALIZED_ALL)
+            .verify();
     }
 
-    @ParameterizedTest
-    @MethodSource("tasks")
-    void taskShouldBeSerializable(String serializedTask, Task task) throws JsonProcessingException {
-        JsonAssertions.assertThatJson(TESTEE.serialize(task))
-            .isEqualTo(serializedTask);
+    @Test
+    void redeliverGroupTaskShouldMatchJsonSerializationContract() throws Exception {
+        JsonSerializationVerifier.dtoModule(EventDeadLettersRedeliverGroupTaskDTO.module(SERVICE))
+            .bean(TASK_GROUP)
+            .json(SERIALIZED_GROUP)
+            .verify();
     }
 
-    @ParameterizedTest
-    @MethodSource("tasks")
-    void taskShouldBeDeserializable(String serializedTask, Task task) throws IOException {
-        assertThat(TESTEE.deserialize(serializedTask))
-            .isEqualToComparingFieldByFieldRecursively(task);
+    @Test
+    void redeliverOneTaskShouldMatchJsonSerializationContract() throws Exception {
+        JsonSerializationVerifier.dtoModule(EventDeadLettersRedeliverOneTaskDTO.module(SERVICE))
+            .bean(TASK_ONE)
+            .json(SERIALIZED_ONE)
+            .verify();
     }
 
-    static Stream<Arguments> additionalInformation() {
-        return Stream.of(
-            Arguments.of(
-                new EventDeadLettersRedeliveryTaskAdditionalInformationForAll(SUCCESSFUL_REDELIVERY_COUNT, FAILED_REDELIVERY_COUNT, TIMESTAMP),
-                SERIALIZED_TASK_ADDITIONAL_INFORMATION_ALL,
-                "eventDeadLettersRedeliverAllTask"),
-            Arguments.of(
-                new EventDeadLettersRedeliveryTaskAdditionalInformationForGroup(SUCCESSFUL_REDELIVERY_COUNT, FAILED_REDELIVERY_COUNT, SOME_GROUP, TIMESTAMP),
-                SERIALIZED_TASK_ADDITIONAL_INFORMATION_GROUP,
-                "eventDeadLettersRedeliverGroupTask"),
-            Arguments.of(
-                new EventDeadLettersRedeliveryTaskAdditionalInformationForOne(SUCCESSFUL_REDELIVERY_COUNT, FAILED_REDELIVERY_COUNT, SOME_GROUP, SOME_INSERTION_ID, TIMESTAMP),
-                SERIALIZED_TASK_ADDITIONAL_INFORMATION_ONE,
-                "eventDeadLettersRedeliverOneTask")
-        );
+    @Test
+    void redeliverAllAdditionalInformationShouldMatchJsonSerializationContract() throws Exception {
+        JsonSerializationVerifier.dtoModule(EventDeadLettersRedeliveryTaskAdditionalInformationForAll.MODULE)
+            .bean(new EventDeadLettersRedeliveryTaskAdditionalInformationForAll(SUCCESSFUL_REDELIVERY_COUNT, FAILED_REDELIVERY_COUNT, TIMESTAMP))
+            .json(SERIALIZED_TASK_ADDITIONAL_INFORMATION_ALL)
+            .verify();
     }
 
-    @ParameterizedTest
-    @MethodSource("additionalInformation")
-    void additionalInformationShouldBeSerializable(EventDeadLettersRedeliveryTaskAdditionalInformation details, String serializedTaskAdditionalInformation) throws JsonProcessingException {
-        assertThatJson(jsonAdditionalInformationSerializer.serialize(details)).isEqualTo(serializedTaskAdditionalInformation);
+    @Test
+    void redeliverGroupAdditionalInformationShouldMatchJsonSerializationContract() throws Exception {
+        JsonSerializationVerifier.dtoModule(EventDeadLettersRedeliveryTaskAdditionalInformationForGroup.MODULE)
+            .bean(new EventDeadLettersRedeliveryTaskAdditionalInformationForGroup(SUCCESSFUL_REDELIVERY_COUNT, FAILED_REDELIVERY_COUNT, SOME_GROUP, TIMESTAMP))
+            .json(SERIALIZED_TASK_ADDITIONAL_INFORMATION_GROUP)
+            .verify();
     }
 
-    @ParameterizedTest
-    @MethodSource("additionalInformation")
-    void additionalInformationShouldBeDeserializable(EventDeadLettersRedeliveryTaskAdditionalInformation details, String serializedTaskAdditionalInformation, String type) throws IOException {
-        assertThat(jsonAdditionalInformationSerializer.deserialize(serializedTaskAdditionalInformation))
-            .isEqualToComparingFieldByField(details);
+    @Test
+    void redeliverOneAdditionalInformationShouldMatchJsonSerializationContract() throws Exception {
+        JsonSerializationVerifier.dtoModule(EventDeadLettersRedeliveryTaskAdditionalInformationForOne.MODULE)
+            .bean(new EventDeadLettersRedeliveryTaskAdditionalInformationForOne(SUCCESSFUL_REDELIVERY_COUNT, FAILED_REDELIVERY_COUNT, SOME_GROUP, SOME_INSERTION_ID, TIMESTAMP))
+            .json(SERIALIZED_TASK_ADDITIONAL_INFORMATION_ONE)
+            .verify();
     }
 }
\ 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