You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/08/27 07:41:58 UTC

[james-project] 10/17: JAMES-2866 Manage MockSmtp configuration over Http (Jetty)

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

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

commit c882f4a7da4ae3a97a2f027d7078ad6a7e9177cf
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Aug 23 14:36:48 2019 +0700

    JAMES-2866 Manage MockSmtp configuration over Http (Jetty)
    
    Includes a Fixture for MockSMTPServer tests
---
 server/mailet/mock-smtp-server/pom.xml             |  17 +++
 .../mock/smtp/server/HTTPConfigurationServer.java  | 110 +++++++++++++++++
 .../james/mock/smtp/server/ConditionTest.java      |   4 +-
 .../org/apache/james/mock/smtp/server/Fixture.java |  66 +++++++++++
 .../smtp/server/HTTPConfigurationServerTest.java   | 130 +++++++++++++++++++++
 .../mock/smtp/server/MockSMTPBehaviorTest.java     |  53 +++------
 .../mock/smtp/server/MockSmtpBehaviorsTest.java    |  30 ++---
 .../james/mock/smtp/server/ResponseTest.java       |   4 +-
 .../smtp/server/SMTPBehaviorRepositoryTest.java    |  12 +-
 .../james/mock/smtp/server/SMTPCommandTest.java    |   5 +-
 10 files changed, 354 insertions(+), 77 deletions(-)

diff --git a/server/mailet/mock-smtp-server/pom.xml b/server/mailet/mock-smtp-server/pom.xml
index f7ea8c8..2ea427f 100644
--- a/server/mailet/mock-smtp-server/pom.xml
+++ b/server/mailet/mock-smtp-server/pom.xml
@@ -42,6 +42,10 @@
             <artifactId>james-core</artifactId>
         </dependency>
         <dependency>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-jetty</artifactId>
+        </dependency>
+        <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
         </dependency>
@@ -58,6 +62,11 @@
             <artifactId>guava</artifactId>
         </dependency>
         <dependency>
+            <groupId>io.rest-assured</groupId>
+            <artifactId>rest-assured</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>net.javacrumbs.json-unit</groupId>
             <artifactId>json-unit-assertj</artifactId>
             <scope>test</scope>
@@ -77,5 +86,13 @@
             <artifactId>assertj-core</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>jcl-over-slf4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
     </dependencies>
 </project>
diff --git a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/HTTPConfigurationServer.java b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/HTTPConfigurationServer.java
new file mode 100644
index 0000000..2f04ec9
--- /dev/null
+++ b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/HTTPConfigurationServer.java
@@ -0,0 +1,110 @@
+/****************************************************************
+ * 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.mock.smtp.server;
+
+import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
+import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
+import static javax.servlet.http.HttpServletResponse.SC_OK;
+
+import java.io.IOException;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.james.http.jetty.Configuration;
+import org.apache.james.http.jetty.JettyHttpServer;
+import org.apache.james.util.Port;
+
+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 HTTPConfigurationServer {
+    static class HTTPConfigurationServlet extends HttpServlet {
+        private final ObjectMapper objectMapper;
+        private final SMTPBehaviorRepository smtpBehaviorRepository;
+
+        HTTPConfigurationServlet(SMTPBehaviorRepository smtpBehaviorRepository) {
+            this.objectMapper = new ObjectMapper()
+                .registerModule(new Jdk8Module())
+                .registerModule(new GuavaModule());
+            this.smtpBehaviorRepository = smtpBehaviorRepository;
+        }
+
+        @Override
+        protected void doPut(HttpServletRequest req, HttpServletResponse resp) {
+            try {
+                MockSmtpBehaviors behaviors = objectMapper.readValue(req.getInputStream(), MockSmtpBehaviors.class);
+                smtpBehaviorRepository.setBehaviors(behaviors);
+                resp.setStatus(SC_NO_CONTENT);
+            } catch (IOException e) {
+                resp.setStatus(SC_BAD_REQUEST);
+            }
+        }
+
+        @Override
+        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+            MockSmtpBehaviors mockSmtpBehaviors = smtpBehaviorRepository.getBehaviors().orElse(new MockSmtpBehaviors(ImmutableList.of()));
+            resp.setStatus(SC_OK);
+            resp.setContentType("application/json");
+            objectMapper.writeValue(resp.getOutputStream(), mockSmtpBehaviors);
+        }
+
+        @Override
+        protected void doDelete(HttpServletRequest req, HttpServletResponse resp) {
+            smtpBehaviorRepository.clearBehaviors();
+            resp.setStatus(SC_NO_CONTENT);
+        }
+    }
+
+    private static final String SMTP_BEHAVIORS = "/smtpBehaviors";
+
+    public static HTTPConfigurationServer onRandomPort(SMTPBehaviorRepository smtpBehaviorRepository) {
+        return new HTTPConfigurationServer(smtpBehaviorRepository,
+            Configuration.builder().randomPort());
+    }
+
+    public static HTTPConfigurationServer onPort(SMTPBehaviorRepository smtpBehaviorRepository, Port port) {
+        return new HTTPConfigurationServer(smtpBehaviorRepository,
+            Configuration.builder().port(port.getValue()));
+    }
+
+    private final JettyHttpServer jettyHttpServer;
+
+    private HTTPConfigurationServer(SMTPBehaviorRepository smtpBehaviorRepository, Configuration.Builder configurationBuilder) {
+        jettyHttpServer = JettyHttpServer.create(configurationBuilder.serve(SMTP_BEHAVIORS)
+            .with(new HTTPConfigurationServlet(smtpBehaviorRepository))
+            .build());
+    }
+
+    public void start() throws Exception {
+        jettyHttpServer.start();
+    }
+
+    public Port getPort() {
+        return new Port(jettyHttpServer.getPort());
+    }
+
+    public void stop() throws Exception {
+        jettyHttpServer.stop();
+    }
+}
diff --git a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ConditionTest.java b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ConditionTest.java
index eefbe1c..c16c299 100644
--- a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ConditionTest.java
+++ b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ConditionTest.java
@@ -20,20 +20,18 @@
 package org.apache.james.mock.smtp.server;
 
 import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
+import static org.apache.james.mock.smtp.server.Fixture.OBJECT_MAPPER;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.exc.InvalidDefinitionException;
 
 import nl.jqno.equalsverifier.EqualsVerifier;
 
 class ConditionTest {
-    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
-
     @Test
     void operatorConditionShouldMatchBeanContract() {
         EqualsVerifier.forClass(Condition.OperatorCondition.class)
diff --git a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/Fixture.java b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/Fixture.java
new file mode 100644
index 0000000..3178766
--- /dev/null
+++ b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/Fixture.java
@@ -0,0 +1,66 @@
+/****************************************************************
+ * 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.mock.smtp.server;
+
+import java.util.Optional;
+
+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 interface Fixture {
+    ObjectMapper OBJECT_MAPPER = new ObjectMapper()
+        .registerModule(new Jdk8Module())
+        .registerModule(new GuavaModule());
+
+    Response RESPONSE = Response.serverAccept(Response.SMTPStatusCode.of(250), "message");
+
+    String JSON_BEHAVIOR_COMPULSORY_FIELDS = "{" +
+        "  \"response\": {\"code\":250, \"message\":\"OK\", \"rejected\":false}," +
+        "  \"command\": \"EHLO\"" +
+        "}";
+
+    MockSMTPBehavior BEHAVIOR_COMPULSORY_FIELDS = new MockSMTPBehavior(
+        SMTPCommand.EHLO,
+        Optional.empty(),
+        Response.serverAccept(Response.SMTPStatusCode.ACTION_COMPLETE_250, "OK"),
+        MockSMTPBehavior.NumberOfAnswersPolicy.anytime());
+
+    String JSON_BEHAVIOR_ALL_FIELDS = "{" +
+        "  \"response\": {\"code\":250, \"message\":\"OK\", \"rejected\":false}," +
+        "  \"condition\": {\"operator\":\"contains\", \"matchingValue\":\"matchme\"}," +
+        "  \"command\": \"EHLO\"," +
+        "  \"numberOfAnswer\": 7" +
+        "}";
+
+    MockSMTPBehavior BEHAVIOR_ALL_FIELDS = new MockSMTPBehavior(
+        SMTPCommand.EHLO,
+        Optional.of(new Condition.OperatorCondition(Operator.CONTAINS, "matchme")),
+        Response.serverAccept(Response.SMTPStatusCode.of(250), "OK"),
+        MockSMTPBehavior.NumberOfAnswersPolicy.times(7));
+
+    String JSON_BEHAVIORS = "[" + JSON_BEHAVIOR_ALL_FIELDS + ", "
+        + JSON_BEHAVIOR_COMPULSORY_FIELDS + "]";
+
+    MockSmtpBehaviors BEHAVIORS = new MockSmtpBehaviors(ImmutableList.of(
+        BEHAVIOR_ALL_FIELDS,
+        BEHAVIOR_COMPULSORY_FIELDS));
+}
diff --git a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/HTTPConfigurationServerTest.java b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/HTTPConfigurationServerTest.java
new file mode 100644
index 0000000..64f422a
--- /dev/null
+++ b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/HTTPConfigurationServerTest.java
@@ -0,0 +1,130 @@
+/****************************************************************
+ * 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.mock.smtp.server;
+
+import static io.restassured.RestAssured.given;
+import static io.restassured.RestAssured.when;
+import static io.restassured.RestAssured.with;
+import static io.restassured.config.EncoderConfig.encoderConfig;
+import static io.restassured.config.RestAssuredConfig.newConfig;
+import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
+import static org.apache.james.mock.smtp.server.Fixture.JSON_BEHAVIORS;
+import static org.hamcrest.Matchers.hasSize;
+
+import java.nio.charset.StandardCharsets;
+
+import org.eclipse.jetty.http.HttpStatus;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import io.restassured.RestAssured;
+import io.restassured.builder.RequestSpecBuilder;
+import io.restassured.http.ContentType;
+import net.javacrumbs.jsonunit.core.Option;
+import net.javacrumbs.jsonunit.core.internal.Options;
+
+class HTTPConfigurationServerTest {
+    private HTTPConfigurationServer server;
+
+    @BeforeEach
+    void setUp() throws Exception {
+        server = HTTPConfigurationServer.onRandomPort(new SMTPBehaviorRepository());
+        server.start();
+
+        RestAssured.requestSpecification = new RequestSpecBuilder()
+            .setContentType(ContentType.JSON)
+            .setAccept(ContentType.JSON)
+            .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)))
+            .setPort(server.getPort().getValue())
+            .setBasePath("/")
+            .setBasePath("/smtpBehaviors")
+            .build();
+    }
+
+    @AfterEach
+    void tearDown() throws Exception {
+        server.stop();
+    }
+
+    @Test
+    void getShouldReturnEmptyByDefault() {
+        when()
+            .get()
+        .then()
+            .body(".", hasSize(0));
+    }
+
+    @Test
+    void getShouldReturnPreviouslyStoredData() {
+        with().body(JSON_BEHAVIORS).put();
+
+        String response = when()
+            .get()
+            .then()
+            .extract().asString();
+
+        assertThatJson(response)
+            .withOptions(new Options(Option.TREATING_NULL_AS_ABSENT, Option.IGNORING_ARRAY_ORDER))
+            .isEqualTo(JSON_BEHAVIORS);
+    }
+
+    @Test
+    void getShouldReturnEmptyAfterDelete() {
+        with().body(JSON_BEHAVIORS).put();
+
+        with().delete();
+
+        when()
+            .get()
+        .then()
+            .body(".", hasSize(0));
+    }
+
+    @Test
+    void putShouldReturnNoContent() {
+        given()
+            .body(JSON_BEHAVIORS)
+        .when()
+            .put()
+        .then()
+            .statusCode(HttpStatus.NO_CONTENT_204);
+    }
+
+    @Test
+    void putShouldBeIdempotent() {
+        with().body(JSON_BEHAVIORS).put();
+
+        given()
+            .body(JSON_BEHAVIORS)
+        .when()
+            .put()
+        .then()
+            .statusCode(HttpStatus.NO_CONTENT_204);
+    }
+
+    @Test
+    void deleteShouldReturnNoContent() {
+        when()
+            .delete()
+        .then()
+            .statusCode(HttpStatus.NO_CONTENT_204);
+    }
+}
\ No newline at end of file
diff --git a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/MockSMTPBehaviorTest.java b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/MockSMTPBehaviorTest.java
index 91f760f..7a3f7cb 100644
--- a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/MockSMTPBehaviorTest.java
+++ b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/MockSMTPBehaviorTest.java
@@ -20,50 +20,25 @@
 package org.apache.james.mock.smtp.server;
 
 import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
+import static org.apache.james.mock.smtp.server.Fixture.BEHAVIOR_ALL_FIELDS;
+import static org.apache.james.mock.smtp.server.Fixture.BEHAVIOR_COMPULSORY_FIELDS;
+import static org.apache.james.mock.smtp.server.Fixture.JSON_BEHAVIOR_ALL_FIELDS;
+import static org.apache.james.mock.smtp.server.Fixture.JSON_BEHAVIOR_COMPULSORY_FIELDS;
+import static org.apache.james.mock.smtp.server.Fixture.OBJECT_MAPPER;
+import static org.apache.james.mock.smtp.server.Fixture.RESPONSE;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import java.util.Optional;
 
-import org.apache.james.mock.smtp.server.Response.SMTPStatusCode;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
-
 import net.javacrumbs.jsonunit.core.Option;
 import net.javacrumbs.jsonunit.core.internal.Options;
 import nl.jqno.equalsverifier.EqualsVerifier;
 
 class MockSMTPBehaviorTest {
-    private static final Response RESPONSE = Response.serverAccept(SMTPStatusCode.ACTION_COMPLETE_250, "message");
-    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper().registerModule(new Jdk8Module());
-
-    static final String JSON_COMPULSORY_FIELDS = "{" +
-        "  \"response\": {\"code\":250, \"message\":\"OK\", \"rejected\":false}," +
-        "  \"command\": \"EHLO\"" +
-        "}";
-
-    static final MockSMTPBehavior POJO_COMPULSORY_FIELDS = new MockSMTPBehavior(
-        SMTPCommand.EHLO,
-        Optional.empty(),
-        Response.serverAccept(Response.SMTPStatusCode.of(250), "OK"),
-        MockSMTPBehavior.NumberOfAnswersPolicy.anytime());
-
-    static final String JSON_ALL_FIELDS = "{" +
-        "  \"response\": {\"code\":250, \"message\":\"OK\", \"rejected\":false}," +
-        "  \"condition\": {\"operator\":\"contains\", \"matchingValue\":\"matchme\"}," +
-        "  \"command\": \"EHLO\"," +
-        "  \"numberOfAnswer\": 7" +
-        "}";
-
-    static final MockSMTPBehavior POJO_ALL_FIELDS = new MockSMTPBehavior(
-        SMTPCommand.EHLO,
-        Optional.of(new Condition.OperatorCondition(Operator.CONTAINS, "matchme")),
-        Response.serverAccept(Response.SMTPStatusCode.of(250), "OK"),
-        MockSMTPBehavior.NumberOfAnswersPolicy.times(7));
-
     @Nested
     class NumberOfAnswersPolicyTest {
         @Test
@@ -131,36 +106,36 @@ class MockSMTPBehaviorTest {
     class JSONTest {
         @Test
         void jacksonShouldDeserializeMockSMTPBehaviorWithAllField() throws Exception {
-            MockSMTPBehavior behavior = OBJECT_MAPPER.readValue(JSON_ALL_FIELDS, MockSMTPBehavior.class);
+            MockSMTPBehavior behavior = OBJECT_MAPPER.readValue(JSON_BEHAVIOR_ALL_FIELDS, MockSMTPBehavior.class);
 
             assertThat(behavior)
-                .isEqualTo(POJO_ALL_FIELDS);
+                .isEqualTo(BEHAVIOR_ALL_FIELDS);
         }
 
         @Test
         void jacksonShouldSerializeMockSMTPBehaviorWithAllField() throws Exception {
-            String json = OBJECT_MAPPER.writeValueAsString(POJO_ALL_FIELDS);
+            String json = OBJECT_MAPPER.writeValueAsString(BEHAVIOR_ALL_FIELDS);
 
             assertThatJson(json)
                 .withOptions(new Options(Option.TREATING_NULL_AS_ABSENT))
-                .isEqualTo(JSON_ALL_FIELDS);
+                .isEqualTo(JSON_BEHAVIOR_ALL_FIELDS);
         }
 
         @Test
         void jacksonShouldDeserializeMockSMTPBehaviorWithCompulsoryField() throws Exception {
-            MockSMTPBehavior behavior = OBJECT_MAPPER.readValue(JSON_COMPULSORY_FIELDS, MockSMTPBehavior.class);
+            MockSMTPBehavior behavior = OBJECT_MAPPER.readValue(JSON_BEHAVIOR_COMPULSORY_FIELDS, MockSMTPBehavior.class);
 
             assertThat(behavior)
-                .isEqualTo(POJO_COMPULSORY_FIELDS);
+                .isEqualTo(BEHAVIOR_COMPULSORY_FIELDS);
         }
 
         @Test
         void jacksonShouldSerializeMockSMTPBehaviorWithCompulsoryField() throws Exception {
-            String json = OBJECT_MAPPER.writeValueAsString(POJO_COMPULSORY_FIELDS);
+            String json = OBJECT_MAPPER.writeValueAsString(BEHAVIOR_COMPULSORY_FIELDS);
 
             assertThatJson(json)
                 .withOptions(new Options(Option.TREATING_NULL_AS_ABSENT))
-                .isEqualTo(JSON_COMPULSORY_FIELDS);
+                .isEqualTo(JSON_BEHAVIOR_COMPULSORY_FIELDS);
         }
     }
 }
diff --git a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/MockSmtpBehaviorsTest.java b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/MockSmtpBehaviorsTest.java
index 8507a0f..d9647f3 100644
--- a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/MockSmtpBehaviorsTest.java
+++ b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/MockSmtpBehaviorsTest.java
@@ -20,31 +20,18 @@
 package org.apache.james.mock.smtp.server;
 
 import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
+import static org.apache.james.mock.smtp.server.Fixture.BEHAVIORS;
+import static org.apache.james.mock.smtp.server.Fixture.JSON_BEHAVIORS;
+import static org.apache.james.mock.smtp.server.Fixture.OBJECT_MAPPER;
 import static org.assertj.core.api.Assertions.assertThat;
 
 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;
-
 import net.javacrumbs.jsonunit.core.Option;
 import net.javacrumbs.jsonunit.core.internal.Options;
 import nl.jqno.equalsverifier.EqualsVerifier;
 
 class MockSmtpBehaviorsTest {
-    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper()
-        .registerModule(new Jdk8Module())
-        .registerModule(new GuavaModule());
-
-    private static final String JSON = "[" + MockSMTPBehaviorTest.JSON_ALL_FIELDS + ", "
-        + MockSMTPBehaviorTest.JSON_COMPULSORY_FIELDS + "]";
-
-    static final MockSmtpBehaviors POJO = new MockSmtpBehaviors(ImmutableList.of(
-        MockSMTPBehaviorTest.POJO_ALL_FIELDS,
-        MockSMTPBehaviorTest.POJO_COMPULSORY_FIELDS));
-
     @Test
     void shouldMatchBeanContract() {
         EqualsVerifier.forClass(MockSmtpBehaviors.class)
@@ -53,21 +40,18 @@ class MockSmtpBehaviorsTest {
 
     @Test
     void jacksonShouldDeserializeBehaviors() throws Exception {
-        MockSmtpBehaviors behaviors = OBJECT_MAPPER.readValue("[" + MockSMTPBehaviorTest.JSON_ALL_FIELDS + ", "
-            + MockSMTPBehaviorTest.JSON_COMPULSORY_FIELDS + "]", MockSmtpBehaviors.class);
+        MockSmtpBehaviors behaviors = OBJECT_MAPPER.readValue(JSON_BEHAVIORS, MockSmtpBehaviors.class);
 
         assertThat(behaviors)
-            .isEqualTo(new MockSmtpBehaviors(ImmutableList.of(
-                MockSMTPBehaviorTest.POJO_ALL_FIELDS,
-                MockSMTPBehaviorTest.POJO_COMPULSORY_FIELDS)));
+            .isEqualTo(BEHAVIORS);
     }
 
     @Test
     void jacksonShouldSerializeBehaviors() throws Exception {
-        String json = OBJECT_MAPPER.writeValueAsString(POJO);
+        String json = OBJECT_MAPPER.writeValueAsString(BEHAVIORS);
 
         assertThatJson(json)
             .withOptions(new Options(Option.TREATING_NULL_AS_ABSENT, Option.IGNORING_ARRAY_ORDER))
-            .isEqualTo(JSON);
+            .isEqualTo(JSON_BEHAVIORS);
     }
 }
\ No newline at end of file
diff --git a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ResponseTest.java b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ResponseTest.java
index cc2cfb6..e07e819 100644
--- a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ResponseTest.java
+++ b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ResponseTest.java
@@ -20,6 +20,7 @@
 package org.apache.james.mock.smtp.server;
 
 import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
+import static org.apache.james.mock.smtp.server.Fixture.OBJECT_MAPPER;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
@@ -27,12 +28,9 @@ import org.apache.james.mock.smtp.server.Response.SMTPStatusCode;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-
 import nl.jqno.equalsverifier.EqualsVerifier;
 
 class ResponseTest {
-    static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
     static final int OK_250_CODE = 250;
     static final Response.SMTPStatusCode OK_250 = Response.SMTPStatusCode.of(OK_250_CODE);
 
diff --git a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/SMTPBehaviorRepositoryTest.java b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/SMTPBehaviorRepositoryTest.java
index 0ce87f0..d610fc5 100644
--- a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/SMTPBehaviorRepositoryTest.java
+++ b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/SMTPBehaviorRepositoryTest.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.mock.smtp.server;
 
+import static org.apache.james.mock.smtp.server.Fixture.BEHAVIORS;
+import static org.apache.james.mock.smtp.server.Fixture.BEHAVIOR_COMPULSORY_FIELDS;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import org.junit.jupiter.api.BeforeEach;
@@ -42,16 +44,16 @@ class SMTPBehaviorRepositoryTest {
 
     @Test
     void getBehaviorsShouldReturnPreviouslyStoredValue() {
-        testee.setBehaviors(MockSmtpBehaviorsTest.POJO);
+        testee.setBehaviors(BEHAVIORS);
 
-        assertThat(testee.getBehaviors()).contains(MockSmtpBehaviorsTest.POJO);
+        assertThat(testee.getBehaviors()).contains(BEHAVIORS);
     }
 
     @Test
     void getBehaviorsShouldReturnLatestStoredValue() {
-        MockSmtpBehaviors newPojo = new MockSmtpBehaviors(ImmutableList.of(MockSMTPBehaviorTest.POJO_COMPULSORY_FIELDS));
+        MockSmtpBehaviors newPojo = new MockSmtpBehaviors(ImmutableList.of(BEHAVIOR_COMPULSORY_FIELDS));
 
-        testee.setBehaviors(MockSmtpBehaviorsTest.POJO);
+        testee.setBehaviors(BEHAVIORS);
         testee.setBehaviors(newPojo);
 
         assertThat(testee.getBehaviors()).contains(newPojo);
@@ -59,7 +61,7 @@ class SMTPBehaviorRepositoryTest {
 
     @Test
     void getBehaviorsShouldReturnEmptyWhenCleared() {
-        testee.setBehaviors(MockSmtpBehaviorsTest.POJO);
+        testee.setBehaviors(BEHAVIORS);
 
         testee.clearBehaviors();
 
diff --git a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/SMTPCommandTest.java b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/SMTPCommandTest.java
index be396c1..95abb58 100644
--- a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/SMTPCommandTest.java
+++ b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/SMTPCommandTest.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.mock.smtp.server;
 
+import static org.apache.james.mock.smtp.server.Fixture.OBJECT_MAPPER;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
@@ -26,11 +27,7 @@ import java.io.IOException;
 
 import org.junit.jupiter.api.Test;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-
 class SMTPCommandTest {
-    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
-
     @Test
     void jacksonShouldDeserializeRsetCommand() throws Exception {
         SMTPCommand command = OBJECT_MAPPER.readValue("\"RSET\"", SMTPCommand.class);


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