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:48 UTC

[james-project] branch master updated (d6ad1d2 -> 3d30d5a)

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

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


    from d6ad1d2  JAMES-2864 Replace Optional<Condition> by Condition with MATCH_ALL capability
     new 7778b79  JAMES-2854 Upgrade to OpenJDK 8u222 JRE base image
     new 7478399  JAMES-2855 Upgrade ruby to 2.6.3 in Homepage Dockerfile
     new a37c7db  JAMES-2855 Correct log4j-over-slf4j bridge
     new 7263450  JAMES-2866 JSON serialization for SMTPCommand
     new 5a192d5  JAMES-2866 JSON serialization for Condition
     new d1ccaad  JAMES-2866 JSON serialization for Response
     new ff6e5e8  JAMES-2866 JSON serialization for MockSMTPBehavior
     new 0f02246  JAMES-2866 MockSMTPBehaviors POJO
     new 1f02792  JAMES-2866 Store SMTP behaviors
     new c882f4a  JAMES-2866 Manage MockSmtp configuration over Http (Jetty)
     new b2f0789  JAMES-2866 Avoid relying on Optional now that we have the matchAll condition
     new d476c69  JAMES-2855 Upgrade to Junit 5.5.1
     new c1e3542  JAMES-2855 Upgrade surefire plugin to 2.22.2
     new ede4985  JAMES-2855 Add missing junit-platform-launcher dependency to poms
     new a2b069c  JAMES-2855 @RegisterExtension fields cannot be private
     new 1da0096  JAMES-2593 Use distributed james image in docker-compose
     new 3d30d5a  JAMES-2593 expose webadmin port in docker-compose

The 17 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:
 backends-common/elasticsearch/pom.xml              |   4 +-
 backends-common/rabbitmq/pom.xml                   |   2 +-
 dockerfiles/run/docker-compose.yml                 |   3 +-
 dockerfiles/run/guice/cassandra-ldap/Dockerfile    |   2 +-
 .../run/guice/cassandra-rabbitmq-ldap/Dockerfile   |   2 +-
 .../run/guice/cassandra-rabbitmq/Dockerfile        |   2 +-
 dockerfiles/run/guice/cassandra/Dockerfile         |   2 +-
 dockerfiles/run/guice/jpa-smtp/Dockerfile          |   2 +-
 dockerfiles/run/guice/jpa/Dockerfile               |   2 +-
 dockerfiles/run/guice/memory/Dockerfile            |   2 +-
 dockerfiles/run/spring/Dockerfile                  |   2 +-
 dockerfiles/site/homepage/Dockerfile               |   2 +-
 examples/custom-listeners/pom.xml                  |   5 +
 mailbox/caching/pom.xml                            |   5 +
 mailbox/event/json/pom.xml                         |   5 +
 mailbox/plugin/quota-mailing/pom.xml               |   2 +-
 mailbox/tika/pom.xml                               |   2 +-
 mpt/impl/managesieve/core/pom.xml                  |   4 +
 pom.xml                                            |  27 ++--
 protocols/api/pom.xml                              |   4 +-
 server/app/pom.xml                                 |  74 +++++++++++
 server/blob/blob-export-api/pom.xml                |   5 +
 server/container/guice/blob-export-guice/pom.xml   |   5 +
 .../guice/cassandra-rabbitmq-ldap-guice/pom.xml    |   5 +
 server/container/guice/configuration/pom.xml       |   5 +
 server/container/guice/es-metric-reporter/pom.xml  |   2 +-
 server/container/guice/guice-common/pom.xml        |   5 +
 server/container/guice/jpa-common-guice/pom.xml    |   5 +
 .../guice/mailbox-plugin-spamassassin/pom.xml      |   2 +-
 server/container/guice/mailbox/pom.xml             |   5 +
 server/container/guice/memory-guice/pom.xml        |   5 +
 server/container/jetty/pom.xml                     |   2 +-
 server/container/lifecycle-api/pom.xml             |   9 +-
 server/container/spring/pom.xml                    |  18 +++
 server/data/data-cassandra/pom.xml                 |   4 +-
 server/data/data-file/pom.xml                      |   4 +-
 server/data/data-jdbc/pom.xml                      |   4 +-
 server/data/data-jmap-cassandra/pom.xml            |  13 +-
 server/data/data-jmap/pom.xml                      |   5 +
 server/data/data-jpa/pom.xml                       |   4 +-
 server/data/data-ldap/pom.xml                      |  14 +-
 server/data/data-library/pom.xml                   |   4 +-
 server/dns-service/dnsservice-dnsjava/pom.xml      |   4 +-
 server/mailet/mailetcontainer-camel/pom.xml        |   2 +-
 server/mailet/mock-smtp-server/pom.xml             |  39 ++++++
 .../apache/james/mock/smtp/server/Condition.java   | 111 ++++++++++++----
 .../mock/smtp/server/HTTPConfigurationServer.java  | 110 +++++++++++++++
 .../james/mock/smtp/server/MockSMTPBehavior.java   |  70 +++++++++-
 .../james/mock/smtp/server/MockSmtpBehaviors.java} |  29 ++--
 .../apache/james/mock/smtp/server/Operator.java    |  60 ++++++++-
 .../apache/james/mock/smtp/server/Response.java    |  29 +++-
 .../{Operator.java => SMTPBehaviorRepository.java} |  25 ++--
 .../apache/james/mock/smtp/server/SMTPCommand.java |  18 +++
 .../james/mock/smtp/server/ConditionTest.java      |  93 +++++++++++--
 .../org/apache/james/mock/smtp/server/Fixture.java |  65 +++++++++
 .../smtp/server/HTTPConfigurationServerTest.java   | 130 ++++++++++++++++++
 .../mock/smtp/server/MockSMTPBehaviorTest.java     |  57 ++++++--
 .../mock/smtp/server/MockSmtpBehaviorsTest.java    |  53 +++-----
 .../james/mock/smtp/server/ResponseTest.java       |  63 +++++++++
 .../smtp/server/SMTPBehaviorRepositoryTest.java    |  57 ++++----
 .../james/mock/smtp/server/SMTPCommandTest.java    | 148 +++++++++++++++++++++
 .../mailrepository/mailrepository-memory/pom.xml   |   5 +
 server/protocols/fetchmail/pom.xml                 |   4 +-
 ...LinshareBlobExportMechanismIntegrationTest.java |   2 +-
 server/protocols/jmap-integration-testing/pom.xml  |  12 --
 server/protocols/jmap/pom.xml                      |   5 +
 server/protocols/protocols-imap4/pom.xml           |   4 +-
 server/protocols/protocols-library/pom.xml         |   4 +-
 server/protocols/protocols-lmtp/pom.xml            |   4 +-
 server/protocols/protocols-managesieve/pom.xml     |   4 +-
 server/protocols/protocols-pop3/pom.xml            |   4 +-
 server/protocols/protocols-smtp/pom.xml            |   4 +-
 .../webadmin/webadmin-cassandra-data/pom.xml       |   5 +
 .../protocols/webadmin/webadmin-mailqueue/pom.xml  |   5 +
 server/queue/queue-api/pom.xml                     |   5 +
 server/queue/queue-file/pom.xml                    |   5 +
 server/testing/pom.xml                             |   4 +
 third-party/linshare/pom.xml                       |   4 +-
 78 files changed, 1289 insertions(+), 234 deletions(-)
 create mode 100644 server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/HTTPConfigurationServer.java
 copy server/{protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailKeyDTO.java => mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSmtpBehaviors.java} (67%)
 copy server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/{Operator.java => SMTPBehaviorRepository.java} (68%)
 create mode 100644 server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/Fixture.java
 create mode 100644 server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/HTTPConfigurationServerTest.java
 copy mailbox/plugin/quota-search/src/test/java/org/apache/james/quota/search/LimitTest.java => server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/MockSmtpBehaviorsTest.java (58%)
 copy mailet/standard/src/test/java/org/apache/james/transport/mailets/RecipientToLowerCaseTest.java => server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/SMTPBehaviorRepositoryTest.java (54%)
 create mode 100644 server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/SMTPCommandTest.java


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


[james-project] 13/17: JAMES-2855 Upgrade surefire plugin to 2.22.2

Posted by bt...@apache.org.
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 c1e354230a9bfd59de3aaccc47bded5cc0935e2f
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Fri Aug 23 17:06:56 2019 +0700

    JAMES-2855 Upgrade surefire plugin to 2.22.2
---
 pom.xml                                           | 16 ++--------------
 server/protocols/jmap-integration-testing/pom.xml | 12 ------------
 2 files changed, 2 insertions(+), 26 deletions(-)

diff --git a/pom.xml b/pom.xml
index 8f6053d..1459c2d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2904,30 +2904,18 @@
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-surefire-plugin</artifactId>
-                    <version>2.22.0</version>
+                    <version>2.22.2</version>
                     <configuration>
                         <argLine>-Xms512m -Xmx1024m</argLine>
                         <reuseForks>false</reuseForks>
                         <!-- Fail tests longer than 2 hours, prevent form random locking tests -->
                         <forkedProcessTimeoutInSeconds>7200</forkedProcessTimeoutInSeconds>
                     </configuration>
-                    <dependencies>
-                        <dependency>
-                            <groupId>org.junit.jupiter</groupId>
-                            <artifactId>junit-jupiter-engine</artifactId>
-                            <version>${junit.jupiter.version}</version>
-                        </dependency>
-                        <dependency>
-                            <groupId>org.junit.vintage</groupId>
-                            <artifactId>junit-vintage-engine</artifactId>
-                            <version>${junit.vintage.version}</version>
-                         </dependency>
-                    </dependencies>
                 </plugin>
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-surefire-report-plugin</artifactId>
-                    <version>2.22.0</version>
+                    <version>2.22.2</version>
                     <configuration>
                         <aggregate>true</aggregate>
                     </configuration>
diff --git a/server/protocols/jmap-integration-testing/pom.xml b/server/protocols/jmap-integration-testing/pom.xml
index 71ea405..7ae8946 100644
--- a/server/protocols/jmap-integration-testing/pom.xml
+++ b/server/protocols/jmap-integration-testing/pom.xml
@@ -45,18 +45,6 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.junit.jupiter</groupId>
-                        <artifactId>junit-jupiter-engine</artifactId>
-                        <version>${junit.jupiter.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.junit.vintage</groupId>
-                        <artifactId>junit-vintage-engine</artifactId>
-                        <version>${junit.vintage.version}</version>
-                    </dependency>
-                </dependencies>
             </plugin>
         </plugins>
     </build>


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


[james-project] 03/17: JAMES-2855 Correct log4j-over-slf4j bridge

Posted by bt...@apache.org.
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 a37c7db23fd26b4ef3d7e93bf83990668c766b82
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Wed Aug 21 17:58:48 2019 +0700

    JAMES-2855 Correct log4j-over-slf4j bridge
    
    Instead of using slf4j-log4j which does it in the reverse way
---
 backends-common/elasticsearch/pom.xml              |  4 +-
 backends-common/rabbitmq/pom.xml                   |  2 +-
 mailbox/plugin/quota-mailing/pom.xml               |  2 +-
 mailbox/tika/pom.xml                               |  2 +-
 pom.xml                                            |  5 ++
 protocols/api/pom.xml                              |  4 +-
 server/app/pom.xml                                 | 74 ++++++++++++++++++++++
 server/container/guice/es-metric-reporter/pom.xml  |  2 +-
 .../guice/mailbox-plugin-spamassassin/pom.xml      |  2 +-
 server/container/jetty/pom.xml                     |  2 +-
 server/container/lifecycle-api/pom.xml             |  4 +-
 server/container/spring/pom.xml                    | 18 ++++++
 server/data/data-cassandra/pom.xml                 |  4 +-
 server/data/data-file/pom.xml                      |  4 +-
 server/data/data-jdbc/pom.xml                      |  4 +-
 server/data/data-jpa/pom.xml                       |  4 +-
 server/data/data-ldap/pom.xml                      | 14 ++--
 server/data/data-library/pom.xml                   |  4 +-
 server/dns-service/dnsservice-dnsjava/pom.xml      |  4 +-
 server/mailet/mailetcontainer-camel/pom.xml        |  2 +-
 server/protocols/fetchmail/pom.xml                 |  4 +-
 server/protocols/protocols-imap4/pom.xml           |  4 +-
 server/protocols/protocols-library/pom.xml         |  4 +-
 server/protocols/protocols-lmtp/pom.xml            |  4 +-
 server/protocols/protocols-managesieve/pom.xml     |  4 +-
 server/protocols/protocols-pop3/pom.xml            |  4 +-
 server/protocols/protocols-smtp/pom.xml            |  4 +-
 third-party/linshare/pom.xml                       |  4 +-
 28 files changed, 143 insertions(+), 50 deletions(-)

diff --git a/backends-common/elasticsearch/pom.xml b/backends-common/elasticsearch/pom.xml
index b68bd15..3c4c216 100644
--- a/backends-common/elasticsearch/pom.xml
+++ b/backends-common/elasticsearch/pom.xml
@@ -101,11 +101,11 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>slf4j-api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.testcontainers</groupId>
diff --git a/backends-common/rabbitmq/pom.xml b/backends-common/rabbitmq/pom.xml
index 61f1e78..48dd167 100644
--- a/backends-common/rabbitmq/pom.xml
+++ b/backends-common/rabbitmq/pom.xml
@@ -107,7 +107,7 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
         <dependency>
             <groupId>org.testcontainers</groupId>
diff --git a/mailbox/plugin/quota-mailing/pom.xml b/mailbox/plugin/quota-mailing/pom.xml
index 682e405..0cdcaaf 100644
--- a/mailbox/plugin/quota-mailing/pom.xml
+++ b/mailbox/plugin/quota-mailing/pom.xml
@@ -138,7 +138,7 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/mailbox/tika/pom.xml b/mailbox/tika/pom.xml
index e967ba2..ca37f1c 100644
--- a/mailbox/tika/pom.xml
+++ b/mailbox/tika/pom.xml
@@ -126,7 +126,7 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
         <dependency>
             <groupId>org.testcontainers</groupId>
diff --git a/pom.xml b/pom.xml
index 9245bba..507e013 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2510,6 +2510,11 @@
             </dependency>
             <dependency>
                 <groupId>org.slf4j</groupId>
+                <artifactId>log4j-over-slf4j</artifactId>
+                <version>${slf4j.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.slf4j</groupId>
                 <artifactId>slf4j-api</artifactId>
                 <version>${slf4j.version}</version>
             </dependency>
diff --git a/protocols/api/pom.xml b/protocols/api/pom.xml
index 36c031f..fc187f1 100644
--- a/protocols/api/pom.xml
+++ b/protocols/api/pom.xml
@@ -61,11 +61,11 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>slf4j-api</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/server/app/pom.xml b/server/app/pom.xml
index b783991..8f79651 100644
--- a/server/app/pom.xml
+++ b/server/app/pom.xml
@@ -159,6 +159,10 @@
                     <groupId>javax.mail</groupId>
                     <artifactId>mail</artifactId>
                 </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
             </exclusions>
         </dependency>
         <dependency>
@@ -170,17 +174,33 @@
                     <groupId>javax.mail</groupId>
                     <artifactId>mail</artifactId>
                 </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
             </exclusions>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
             <artifactId>james-server-data-jpa</artifactId>
             <scope>runtime</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
             <artifactId>james-server-data-ldap</artifactId>
             <scope>runtime</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
@@ -191,6 +211,10 @@
                     <groupId>javax.mail</groupId>
                     <artifactId>mail</artifactId>
                 </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
             </exclusions>
         </dependency>
         <dependency>
@@ -202,6 +226,12 @@
             <groupId>${james.groupId}</groupId>
             <artifactId>james-server-dnsservice-dnsjava</artifactId>
             <scope>runtime</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
@@ -222,6 +252,10 @@
                     <groupId>javax.mail</groupId>
                     <artifactId>mail</artifactId>
                 </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
             </exclusions>
         </dependency>
         <dependency>
@@ -231,6 +265,12 @@
         <dependency>
             <groupId>${james.groupId}</groupId>
             <artifactId>james-server-lifecycle-api</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
@@ -262,6 +302,10 @@
                     <groupId>javax.mail</groupId>
                     <artifactId>mail</artifactId>
                 </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
             </exclusions>
         </dependency>
         <dependency>
@@ -279,11 +323,23 @@
             <groupId>${james.groupId}</groupId>
             <artifactId>james-server-protocols-imap4</artifactId>
             <scope>runtime</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
             <artifactId>james-server-protocols-library</artifactId>
             <scope>runtime</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
@@ -294,12 +350,22 @@
                     <groupId>javax.mail</groupId>
                     <artifactId>mail</artifactId>
                 </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
             </exclusions>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
             <artifactId>james-server-protocols-managesieve</artifactId>
             <scope>runtime</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
@@ -310,6 +376,10 @@
                     <groupId>javax.mail</groupId>
                     <artifactId>mail</artifactId>
                 </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
             </exclusions>
         </dependency>
 
@@ -322,6 +392,10 @@
                     <groupId>javax.mail</groupId>
                     <artifactId>mail</artifactId>
                 </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
             </exclusions>
         </dependency>
         <dependency>
diff --git a/server/container/guice/es-metric-reporter/pom.xml b/server/container/guice/es-metric-reporter/pom.xml
index 15ec605..83e422b 100644
--- a/server/container/guice/es-metric-reporter/pom.xml
+++ b/server/container/guice/es-metric-reporter/pom.xml
@@ -66,7 +66,7 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
     </dependencies>
 </project>
diff --git a/server/container/guice/mailbox-plugin-spamassassin/pom.xml b/server/container/guice/mailbox-plugin-spamassassin/pom.xml
index 1f3d02c..2223988 100644
--- a/server/container/guice/mailbox-plugin-spamassassin/pom.xml
+++ b/server/container/guice/mailbox-plugin-spamassassin/pom.xml
@@ -68,7 +68,7 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/server/container/jetty/pom.xml b/server/container/jetty/pom.xml
index 13d8668..2d7b2d0 100644
--- a/server/container/jetty/pom.xml
+++ b/server/container/jetty/pom.xml
@@ -95,7 +95,7 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
     </dependencies>
 </project>
diff --git a/server/container/lifecycle-api/pom.xml b/server/container/lifecycle-api/pom.xml
index 48fbbff..6b17dda 100644
--- a/server/container/lifecycle-api/pom.xml
+++ b/server/container/lifecycle-api/pom.xml
@@ -61,11 +61,11 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>slf4j-api</artifactId>
         </dependency>
     </dependencies>
 </project>
diff --git a/server/container/spring/pom.xml b/server/container/spring/pom.xml
index bbbaa70..fa2987a 100644
--- a/server/container/spring/pom.xml
+++ b/server/container/spring/pom.xml
@@ -66,6 +66,12 @@
         <dependency>
             <groupId>${james.groupId}</groupId>
             <artifactId>james-server-lifecycle-api</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
@@ -82,6 +88,12 @@
         <dependency>
             <groupId>${james.groupId}</groupId>
             <artifactId>james-server-protocols-library</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>com.sparkjava</groupId>
@@ -120,6 +132,12 @@
         <dependency>
             <groupId>${james.protocols.groupId}</groupId>
             <artifactId>protocols-api</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>org.apache.commons</groupId>
diff --git a/server/data/data-cassandra/pom.xml b/server/data/data-cassandra/pom.xml
index 1077ae6..7ebed1a 100644
--- a/server/data/data-cassandra/pom.xml
+++ b/server/data/data-cassandra/pom.xml
@@ -143,11 +143,11 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>slf4j-api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.testcontainers</groupId>
diff --git a/server/data/data-file/pom.xml b/server/data/data-file/pom.xml
index 9df1ea5..9d9f4f1 100644
--- a/server/data/data-file/pom.xml
+++ b/server/data/data-file/pom.xml
@@ -151,11 +151,11 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>slf4j-api</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/server/data/data-jdbc/pom.xml b/server/data/data-jdbc/pom.xml
index 1efa231..7e2b63f 100644
--- a/server/data/data-jdbc/pom.xml
+++ b/server/data/data-jdbc/pom.xml
@@ -160,11 +160,11 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>slf4j-api</artifactId>
         </dependency>
     </dependencies>
 </project>
diff --git a/server/data/data-jpa/pom.xml b/server/data/data-jpa/pom.xml
index fc1927e..f32eb76 100644
--- a/server/data/data-jpa/pom.xml
+++ b/server/data/data-jpa/pom.xml
@@ -140,11 +140,11 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>slf4j-api</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/server/data/data-ldap/pom.xml b/server/data/data-ldap/pom.xml
index 2dea0f4..4d67826 100644
--- a/server/data/data-ldap/pom.xml
+++ b/server/data/data-ldap/pom.xml
@@ -60,14 +60,6 @@
             <artifactId>guavate</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-configuration2</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-        </dependency>
-        <dependency>
             <groupId>javax.annotation</groupId>
             <artifactId>javax.annotation-api</artifactId>
         </dependency>
@@ -81,6 +73,10 @@
             <artifactId>api-ldap-model</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-configuration2</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.assertj</groupId>
             <artifactId>assertj-core</artifactId>
         </dependency>
@@ -99,7 +95,7 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
         <dependency>
             <groupId>org.testcontainers</groupId>
diff --git a/server/data/data-library/pom.xml b/server/data/data-library/pom.xml
index de0ba47..e796edd 100644
--- a/server/data/data-library/pom.xml
+++ b/server/data/data-library/pom.xml
@@ -143,11 +143,11 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>slf4j-api</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/server/dns-service/dnsservice-dnsjava/pom.xml b/server/dns-service/dnsservice-dnsjava/pom.xml
index 9d42319..2c93101 100644
--- a/server/dns-service/dnsservice-dnsjava/pom.xml
+++ b/server/dns-service/dnsservice-dnsjava/pom.xml
@@ -96,11 +96,11 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>slf4j-api</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/server/mailet/mailetcontainer-camel/pom.xml b/server/mailet/mailetcontainer-camel/pom.xml
index a057bf4..d7bdcdc 100644
--- a/server/mailet/mailetcontainer-camel/pom.xml
+++ b/server/mailet/mailetcontainer-camel/pom.xml
@@ -185,7 +185,7 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/server/protocols/fetchmail/pom.xml b/server/protocols/fetchmail/pom.xml
index 6391af7..29bad19 100644
--- a/server/protocols/fetchmail/pom.xml
+++ b/server/protocols/fetchmail/pom.xml
@@ -83,11 +83,11 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>slf4j-api</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/server/protocols/protocols-imap4/pom.xml b/server/protocols/protocols-imap4/pom.xml
index b3535fd..6ed69d0 100644
--- a/server/protocols/protocols-imap4/pom.xml
+++ b/server/protocols/protocols-imap4/pom.xml
@@ -99,11 +99,11 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>slf4j-api</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/server/protocols/protocols-library/pom.xml b/server/protocols/protocols-library/pom.xml
index 905252c..e96b279 100644
--- a/server/protocols/protocols-library/pom.xml
+++ b/server/protocols/protocols-library/pom.xml
@@ -86,11 +86,11 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>slf4j-api</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/server/protocols/protocols-lmtp/pom.xml b/server/protocols/protocols-lmtp/pom.xml
index 248f726..a8c0aa4 100644
--- a/server/protocols/protocols-lmtp/pom.xml
+++ b/server/protocols/protocols-lmtp/pom.xml
@@ -121,11 +121,11 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>slf4j-api</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/server/protocols/protocols-managesieve/pom.xml b/server/protocols/protocols-managesieve/pom.xml
index 93090b2..3f98e46 100644
--- a/server/protocols/protocols-managesieve/pom.xml
+++ b/server/protocols/protocols-managesieve/pom.xml
@@ -59,11 +59,11 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>slf4j-api</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/server/protocols/protocols-pop3/pom.xml b/server/protocols/protocols-pop3/pom.xml
index ed168ba..f123132 100644
--- a/server/protocols/protocols-pop3/pom.xml
+++ b/server/protocols/protocols-pop3/pom.xml
@@ -158,11 +158,11 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>slf4j-api</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/server/protocols/protocols-smtp/pom.xml b/server/protocols/protocols-smtp/pom.xml
index d244dc5..dbf514f 100644
--- a/server/protocols/protocols-smtp/pom.xml
+++ b/server/protocols/protocols-smtp/pom.xml
@@ -232,11 +232,11 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>slf4j-api</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/third-party/linshare/pom.xml b/third-party/linshare/pom.xml
index 20b33fa..922f061 100644
--- a/third-party/linshare/pom.xml
+++ b/third-party/linshare/pom.xml
@@ -115,11 +115,11 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>slf4j-api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.testcontainers</groupId>


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


[james-project] 06/17: JAMES-2866 JSON serialization for Response

Posted by bt...@apache.org.
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 d1ccaad97ebf1e850169be99b87812163e828a07
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Aug 21 15:09:41 2019 +0700

    JAMES-2866 JSON serialization for Response
---
 .../apache/james/mock/smtp/server/Response.java    | 29 +++++++++-
 .../james/mock/smtp/server/ResponseTest.java       | 65 ++++++++++++++++++++++
 2 files changed, 92 insertions(+), 2 deletions(-)

diff --git a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/Response.java b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/Response.java
index 9adb043..04f3ea0 100644
--- a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/Response.java
+++ b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/Response.java
@@ -19,8 +19,12 @@
 
 package org.apache.james.mock.smtp.server;
 
+import java.util.Arrays;
 import java.util.Objects;
 
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonValue;
 import com.google.common.base.Preconditions;
 
 class Response {
@@ -53,10 +57,19 @@ class Response {
 
         private final int code;
 
-        private SMTPStatusCode(int code) {
+        @JsonCreator
+        public static SMTPStatusCode of(int code) {
+            return Arrays.stream(values())
+                .filter(value -> value.code == code)
+                .findFirst()
+                .orElseThrow(() -> new IllegalArgumentException(code + " is not a supported SMTP code"));
+        }
+
+        SMTPStatusCode(int code) {
             this.code = code;
         }
 
+        @JsonValue
         public int getCode() {
             return code;
         }
@@ -74,7 +87,10 @@ class Response {
     private final String message;
     private final boolean serverRejected;
 
-    private Response(SMTPStatusCode code, String message, boolean serverRejected) {
+    @JsonCreator
+    private Response(@JsonProperty("code") SMTPStatusCode code,
+                     @JsonProperty("message") String message,
+                     @JsonProperty("rejected") boolean serverRejected) {
         Preconditions.checkNotNull(message);
         Preconditions.checkNotNull(code);
 
@@ -87,10 +103,19 @@ class Response {
         return code.getCode() + " " + message;
     }
 
+    @JsonProperty("rejected")
     boolean isServerRejected() {
         return serverRejected;
     }
 
+    public SMTPStatusCode getCode() {
+        return code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
     @Override
     public final boolean equals(Object o) {
         if (o instanceof Response) {
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 cd5f39f..cc2cfb6 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
@@ -19,15 +19,61 @@
 
 package org.apache.james.mock.smtp.server;
 
+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 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);
+
+    @Nested
+    class SMTPStatusCodeTest {
+        @Test
+        void shouldMatchBeanContract() {
+            EqualsVerifier.forClass(Response.SMTPStatusCode.class)
+                .verify();
+        }
+
+        @Test
+        void constructorShouldThrowWhenStatusCodeIsNegative() {
+            assertThatThrownBy(() -> Response.SMTPStatusCode.of(-1))
+                .isInstanceOf(IllegalArgumentException.class);
+        }
+
+        @Test
+        void constructorShouldThrowWhenStatusCodeIsZero() {
+            assertThatThrownBy(() -> Response.SMTPStatusCode.of(0))
+                .isInstanceOf(IllegalArgumentException.class);
+        }
+
+        @Test
+        void constructorShouldThrowWhenStatusCodeIsTooBig() {
+            assertThatThrownBy(() -> Response.SMTPStatusCode.of(600))
+                .isInstanceOf(IllegalArgumentException.class);
+        }
+
+        @Test
+        void constructorShouldThrowWhenStatusCodeIsTooLittle() {
+            assertThatThrownBy(() -> Response.SMTPStatusCode.of(99))
+                .isInstanceOf(IllegalArgumentException.class);
+        }
+
+        @Test
+        void getCodeShouldReturnInternalValue() {
+            assertThat(OK_250.getCode())
+                .isEqualTo(OK_250_CODE);
+        }
+    }
 
     @Test
     void shouldMatchBeanContract() {
@@ -70,4 +116,23 @@ class ResponseTest {
         assertThat(Response.serverAccept(SMTPStatusCode.ACTION_COMPLETE_250, "message").isServerRejected())
             .isFalse();
     }
+
+    @Nested
+    class JSONTest {
+        @Test
+        void jacksonShouldDeserializeResponse() throws Exception {
+            Response response = OBJECT_MAPPER.readValue(
+                "{\"code\":250, \"message\":\"OK\", \"rejected\":false}",
+                Response.class);
+
+            assertThat(response).isEqualTo(Response.serverAccept(Response.SMTPStatusCode.of(250), "OK"));
+        }
+
+        @Test
+        void jacksonShouldSerializeResponse() throws Exception {
+            String json = OBJECT_MAPPER.writeValueAsString(Response.serverAccept(Response.SMTPStatusCode.of(250), "OK"));
+
+            assertThatJson(json).isEqualTo("{\"code\":250, \"message\":\"OK\", \"rejected\":false}");
+        }
+    }
 }
\ 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/17: JAMES-2866 Manage MockSmtp configuration over Http (Jetty)

Posted by bt...@apache.org.
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


[james-project] 15/17: JAMES-2855 @RegisterExtension fields cannot be private

Posted by bt...@apache.org.
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 a2b069c802672297b05f9437aea56641453d1147
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Mon Aug 26 15:08:05 2019 +0700

    JAMES-2855 @RegisterExtension fields cannot be private
---
 .../methods/integration/LinshareBlobExportMechanismIntegrationTest.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/LinshareBlobExportMechanismIntegrationTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/LinshareBlobExportMechanismIntegrationTest.java
index 068827d..71f7b9f 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/LinshareBlobExportMechanismIntegrationTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/LinshareBlobExportMechanismIntegrationTest.java
@@ -92,7 +92,7 @@ public abstract class LinshareBlobExportMechanismIntegrationTest {
     private LinshareAPI user1LinshareAPI;
 
     @RegisterExtension
-    private IMAPMessageReader imapMessageReader = new IMAPMessageReader();
+    IMAPMessageReader imapMessageReader = new IMAPMessageReader();
 
     @BeforeEach
     void setup(GuiceJamesServer jmapServer) throws Throwable {


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


[james-project] 09/17: JAMES-2866 Store SMTP behaviors

Posted by bt...@apache.org.
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 1f027922ef53485858c7d3d4e63b3def8c812b2e
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Aug 21 16:13:55 2019 +0700

    JAMES-2866 Store SMTP behaviors
---
 .../mock/smtp/server/SMTPBehaviorRepository.java   | 43 ++++++++++++++
 .../mock/smtp/server/MockSmtpBehaviorsTest.java    |  2 +-
 .../smtp/server/SMTPBehaviorRepositoryTest.java    | 68 ++++++++++++++++++++++
 3 files changed, 112 insertions(+), 1 deletion(-)

diff --git a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/SMTPBehaviorRepository.java b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/SMTPBehaviorRepository.java
new file mode 100644
index 0000000..23084cd
--- /dev/null
+++ b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/SMTPBehaviorRepository.java
@@ -0,0 +1,43 @@
+/****************************************************************
+ * 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 java.util.concurrent.atomic.AtomicReference;
+
+public class SMTPBehaviorRepository {
+    private final AtomicReference<MockSmtpBehaviors> behaviors;
+
+    public SMTPBehaviorRepository() {
+        this.behaviors = new AtomicReference<>();
+    }
+
+    public Optional<MockSmtpBehaviors> getBehaviors() {
+        return Optional.ofNullable(this.behaviors.get());
+    }
+
+    public void clearBehaviors() {
+        this.behaviors.set(null);
+    }
+
+    public void setBehaviors(MockSmtpBehaviors behaviors) {
+        this.behaviors.set(behaviors);
+    }
+}
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 83ffaaf..8507a0f 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
@@ -41,7 +41,7 @@ class MockSmtpBehaviorsTest {
     private static final String JSON = "[" + MockSMTPBehaviorTest.JSON_ALL_FIELDS + ", "
         + MockSMTPBehaviorTest.JSON_COMPULSORY_FIELDS + "]";
 
-    private static final MockSmtpBehaviors POJO = new MockSmtpBehaviors(ImmutableList.of(
+    static final MockSmtpBehaviors POJO = new MockSmtpBehaviors(ImmutableList.of(
         MockSMTPBehaviorTest.POJO_ALL_FIELDS,
         MockSMTPBehaviorTest.POJO_COMPULSORY_FIELDS));
 
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
new file mode 100644
index 0000000..0ce87f0
--- /dev/null
+++ b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/SMTPBehaviorRepositoryTest.java
@@ -0,0 +1,68 @@
+/****************************************************************
+ * 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 org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import com.google.common.collect.ImmutableList;
+
+class SMTPBehaviorRepositoryTest {
+    private SMTPBehaviorRepository testee;
+
+    @BeforeEach
+    void setUp() {
+        testee = new SMTPBehaviorRepository();
+    }
+
+    @Test
+    void getBehaviorsShouldReturnEmptyWhenNoValueStored() {
+        assertThat(testee.getBehaviors())
+            .isEmpty();
+    }
+
+    @Test
+    void getBehaviorsShouldReturnPreviouslyStoredValue() {
+        testee.setBehaviors(MockSmtpBehaviorsTest.POJO);
+
+        assertThat(testee.getBehaviors()).contains(MockSmtpBehaviorsTest.POJO);
+    }
+
+    @Test
+    void getBehaviorsShouldReturnLatestStoredValue() {
+        MockSmtpBehaviors newPojo = new MockSmtpBehaviors(ImmutableList.of(MockSMTPBehaviorTest.POJO_COMPULSORY_FIELDS));
+
+        testee.setBehaviors(MockSmtpBehaviorsTest.POJO);
+        testee.setBehaviors(newPojo);
+
+        assertThat(testee.getBehaviors()).contains(newPojo);
+    }
+
+    @Test
+    void getBehaviorsShouldReturnEmptyWhenCleared() {
+        testee.setBehaviors(MockSmtpBehaviorsTest.POJO);
+
+        testee.clearBehaviors();
+
+        assertThat(testee.getBehaviors()).isEmpty();
+    }
+}
\ 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] 12/17: JAMES-2855 Upgrade to Junit 5.5.1

Posted by bt...@apache.org.
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 d476c69212d5dfdce29f962cef598e4af8868431
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Fri Aug 23 17:06:33 2019 +0700

    JAMES-2855 Upgrade to Junit 5.5.1
---
 pom.xml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/pom.xml b/pom.xml
index 507e013..8f6053d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -604,9 +604,9 @@
 
         <dnsjava.version>2.1.9</dnsjava.version>
         <junit.version>4.12</junit.version>
-        <junit.jupiter.version>5.2.0</junit.jupiter.version>
-        <junit.platform.version>1.4.1</junit.platform.version>
-        <junit.vintage.version>5.2.0</junit.vintage.version>
+        <junit.jupiter.version>5.5.1</junit.jupiter.version>
+        <junit.platform.version>1.5.1</junit.platform.version>
+        <junit.vintage.version>5.5.1</junit.vintage.version>
         <concurrent.version>1.3.4</concurrent.version>
         <xbean-spring.version>4.9</xbean-spring.version>
         <netty.version>3.10.6.Final</netty.version>


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


[james-project] 17/17: JAMES-2593 expose webadmin port in docker-compose

Posted by bt...@apache.org.
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 3d30d5a9cace8b1889d2607987b95067707fd679
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Mon Aug 26 09:59:40 2019 +0700

    JAMES-2593 expose webadmin port in docker-compose
---
 dockerfiles/run/docker-compose.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/dockerfiles/run/docker-compose.yml b/dockerfiles/run/docker-compose.yml
index 3affe16..d21e296 100644
--- a/dockerfiles/run/docker-compose.yml
+++ b/dockerfiles/run/docker-compose.yml
@@ -21,6 +21,7 @@ services:
       - "465:465"
       - "587:587"
       - "993:993"
+      - "8000:8000"
 
   elasticsearch:
     image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2


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


[james-project] 16/17: JAMES-2593 Use distributed james image in docker-compose

Posted by bt...@apache.org.
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 1da0096fceb492c7f772a0976ba03546d1c19160
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Mon Aug 26 09:59:06 2019 +0700

    JAMES-2593 Use distributed james image in docker-compose
---
 dockerfiles/run/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dockerfiles/run/docker-compose.yml b/dockerfiles/run/docker-compose.yml
index b9611e3..3affe16 100644
--- a/dockerfiles/run/docker-compose.yml
+++ b/dockerfiles/run/docker-compose.yml
@@ -10,7 +10,7 @@ services:
       - rabbitmq
       - swift
     entrypoint: bash -c "java -Dworking.directory=/root/ -jar james-server.jar"
-    image: linagora/james-project:latest
+    image: linagora/james-rabbitmq-project:latest
     container_name: james
     hostname: james.local
     ports:


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


[james-project] 04/17: JAMES-2866 JSON serialization for SMTPCommand

Posted by bt...@apache.org.
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 7263450e5084ded737805086053897bc9919a625
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Aug 21 14:52:06 2019 +0700

    JAMES-2866 JSON serialization for SMTPCommand
---
 server/mailet/mock-smtp-server/pom.xml             |   4 +
 .../apache/james/mock/smtp/server/SMTPCommand.java |  18 +++
 .../james/mock/smtp/server/SMTPCommandTest.java    | 151 +++++++++++++++++++++
 3 files changed, 173 insertions(+)

diff --git a/server/mailet/mock-smtp-server/pom.xml b/server/mailet/mock-smtp-server/pom.xml
index d79081f..8db2a69 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>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
+        <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
         </dependency>
diff --git a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/SMTPCommand.java b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/SMTPCommand.java
index 024b662..60a2a76 100644
--- a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/SMTPCommand.java
+++ b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/SMTPCommand.java
@@ -19,6 +19,11 @@
 
 package org.apache.james.mock.smtp.server;
 
+import java.util.Arrays;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+
 enum SMTPCommand {
     RCPT_TO("RCPT TO"),
     EHLO("EHLO"),
@@ -29,9 +34,22 @@ enum SMTPCommand {
     NOOP("NOOP"),
     QUIT("QUIT");
 
+    @JsonCreator
+    public static SMTPCommand parse(String value) {
+        return Arrays.stream(SMTPCommand.values())
+            .filter(command -> command.commandName.equals(value))
+            .findFirst()
+            .orElseThrow(() -> new IllegalArgumentException("No command name associated with supplied value: " + value));
+    }
+
     private final String commandName;
 
     SMTPCommand(String commandName) {
         this.commandName = commandName;
     }
+
+    @JsonValue
+    public String getCommandName() {
+        return commandName;
+    }
 }
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
new file mode 100644
index 0000000..be396c1
--- /dev/null
+++ b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/SMTPCommandTest.java
@@ -0,0 +1,151 @@
+/****************************************************************
+ * 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 org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+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);
+
+        assertThat(command).isEqualTo(SMTPCommand.RSET);
+    }
+
+    @Test
+    void jacksonShouldDeserializeRcptToCommand() throws Exception {
+        SMTPCommand command = OBJECT_MAPPER.readValue("\"RCPT TO\"", SMTPCommand.class);
+
+        assertThat(command).isEqualTo(SMTPCommand.RCPT_TO);
+    }
+
+    @Test
+    void jacksonShouldDeserializeMailFromCommand() throws Exception {
+        SMTPCommand command = OBJECT_MAPPER.readValue("\"MAIL FROM\"", SMTPCommand.class);
+
+        assertThat(command).isEqualTo(SMTPCommand.MAIL_FROM);
+    }
+
+    @Test
+    void jacksonShouldDeserializeNoopCommand() throws Exception {
+        SMTPCommand command = OBJECT_MAPPER.readValue("\"NOOP\"", SMTPCommand.class);
+
+        assertThat(command).isEqualTo(SMTPCommand.NOOP);
+    }
+
+    @Test
+    void jacksonShouldDeserializeEhloCommand() throws Exception {
+        SMTPCommand command = OBJECT_MAPPER.readValue("\"EHLO\"", SMTPCommand.class);
+
+        assertThat(command).isEqualTo(SMTPCommand.EHLO);
+    }
+
+    @Test
+    void jacksonShouldDeserializeVrfyCommand() throws Exception {
+        SMTPCommand command = OBJECT_MAPPER.readValue("\"VRFY\"", SMTPCommand.class);
+
+        assertThat(command).isEqualTo(SMTPCommand.VRFY);
+    }
+
+    @Test
+    void jacksonShouldDeserializeDataCommand() throws Exception {
+        SMTPCommand command = OBJECT_MAPPER.readValue("\"DATA\"", SMTPCommand.class);
+
+        assertThat(command).isEqualTo(SMTPCommand.DATA);
+    }
+
+    @Test
+    void jacksonShouldDeserializeQuitCommand() throws Exception {
+        SMTPCommand command = OBJECT_MAPPER.readValue("\"QUIT\"", SMTPCommand.class);
+
+        assertThat(command).isEqualTo(SMTPCommand.QUIT);
+    }
+
+    @Test
+    void jacksonShouldThrowWhenDeserializingInvalidValue() {
+        assertThatThrownBy(() -> OBJECT_MAPPER.readValue("\"invalid\"", SMTPCommand.class))
+            .isInstanceOf(IOException.class);
+    }
+
+    @Test
+    void jacksonShouldSerializeRsetCommand() throws Exception {
+        String json = OBJECT_MAPPER.writeValueAsString(SMTPCommand.RSET);
+
+        assertThat(json).isEqualTo("\"RSET\"");
+    }
+
+    @Test
+    void jacksonShouldSerializeRcptToCommand() throws Exception {
+        String json = OBJECT_MAPPER.writeValueAsString(SMTPCommand.RCPT_TO);
+
+        assertThat(json).isEqualTo("\"RCPT TO\"");
+    }
+
+    @Test
+    void jacksonShouldSerializeMailFromCommand() throws Exception {
+        String json = OBJECT_MAPPER.writeValueAsString(SMTPCommand.MAIL_FROM);
+
+        assertThat(json).isEqualTo("\"MAIL FROM\"");
+    }
+
+    @Test
+    void jacksonShouldSerializeNoopCommand() throws Exception {
+        String json = OBJECT_MAPPER.writeValueAsString(SMTPCommand.NOOP);
+
+        assertThat(json).isEqualTo("\"NOOP\"");
+    }
+
+    @Test
+    void jacksonShouldSerializeEhloCommand() throws Exception {
+        String json = OBJECT_MAPPER.writeValueAsString(SMTPCommand.EHLO);
+
+        assertThat(json).isEqualTo("\"EHLO\"");
+    }
+
+    @Test
+    void jacksonShouldSerializeVrfyCommand() throws Exception {
+        String json = OBJECT_MAPPER.writeValueAsString(SMTPCommand.VRFY);
+
+        assertThat(json).isEqualTo("\"VRFY\"");
+    }
+
+    @Test
+    void jacksonShouldSerializeDataCommand() throws Exception {
+        String json = OBJECT_MAPPER.writeValueAsString(SMTPCommand.DATA);
+
+        assertThat(json).isEqualTo("\"DATA\"");
+    }
+
+    @Test
+    void jacksonShouldSerializeQuitCommand() throws Exception {
+        String json = OBJECT_MAPPER.writeValueAsString(SMTPCommand.QUIT);
+
+        assertThat(json).isEqualTo("\"QUIT\"");
+    }
+}
\ 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/17: JAMES-2855 Add missing junit-platform-launcher dependency to poms

Posted by bt...@apache.org.
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 ede498570cb44ea6869f2e46561d32e4c664aaf2
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Fri Aug 23 17:39:52 2019 +0700

    JAMES-2855 Add missing junit-platform-launcher dependency to poms
---
 examples/custom-listeners/pom.xml                           |  5 +++++
 mailbox/caching/pom.xml                                     |  5 +++++
 mailbox/event/json/pom.xml                                  |  5 +++++
 mpt/impl/managesieve/core/pom.xml                           |  4 ++++
 server/blob/blob-export-api/pom.xml                         |  5 +++++
 server/container/guice/blob-export-guice/pom.xml            |  5 +++++
 .../container/guice/cassandra-rabbitmq-ldap-guice/pom.xml   |  5 +++++
 server/container/guice/configuration/pom.xml                |  5 +++++
 server/container/guice/guice-common/pom.xml                 |  5 +++++
 server/container/guice/jpa-common-guice/pom.xml             |  5 +++++
 server/container/guice/mailbox/pom.xml                      |  5 +++++
 server/container/guice/memory-guice/pom.xml                 |  5 +++++
 server/container/lifecycle-api/pom.xml                      |  5 +++++
 server/data/data-jmap-cassandra/pom.xml                     | 13 +++++++++----
 server/data/data-jmap/pom.xml                               |  5 +++++
 server/mailet/mock-smtp-server/pom.xml                      |  5 +++++
 server/mailrepository/mailrepository-memory/pom.xml         |  5 +++++
 server/protocols/jmap/pom.xml                               |  5 +++++
 server/protocols/webadmin/webadmin-cassandra-data/pom.xml   |  5 +++++
 server/protocols/webadmin/webadmin-mailqueue/pom.xml        |  5 +++++
 server/queue/queue-api/pom.xml                              |  5 +++++
 server/queue/queue-file/pom.xml                             |  5 +++++
 server/testing/pom.xml                                      |  4 ++++
 23 files changed, 117 insertions(+), 4 deletions(-)

diff --git a/examples/custom-listeners/pom.xml b/examples/custom-listeners/pom.xml
index 07be61d..fa74532 100644
--- a/examples/custom-listeners/pom.xml
+++ b/examples/custom-listeners/pom.xml
@@ -45,5 +45,10 @@
             <artifactId>junit-jupiter-engine</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/mailbox/caching/pom.xml b/mailbox/caching/pom.xml
index 589e2e6..3dd45e9 100644
--- a/mailbox/caching/pom.xml
+++ b/mailbox/caching/pom.xml
@@ -63,6 +63,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
         </dependency>
diff --git a/mailbox/event/json/pom.xml b/mailbox/event/json/pom.xml
index 752c165..7b88bc4 100644
--- a/mailbox/event/json/pom.xml
+++ b/mailbox/event/json/pom.xml
@@ -78,6 +78,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.julienrf</groupId>
             <artifactId>play-json-derived-codecs_${scala.base}</artifactId>
             <version>6.0.0</version>
diff --git a/mpt/impl/managesieve/core/pom.xml b/mpt/impl/managesieve/core/pom.xml
index e72d5d8..fb2aba6 100644
--- a/mpt/impl/managesieve/core/pom.xml
+++ b/mpt/impl/managesieve/core/pom.xml
@@ -51,6 +51,10 @@
             <artifactId>junit-jupiter-engine</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.junit.vintage</groupId>
             <artifactId>junit-vintage-engine</artifactId>
         </dependency>
diff --git a/server/blob/blob-export-api/pom.xml b/server/blob/blob-export-api/pom.xml
index 408d522..ed93e22 100644
--- a/server/blob/blob-export-api/pom.xml
+++ b/server/blob/blob-export-api/pom.xml
@@ -62,5 +62,10 @@
             <artifactId>junit-jupiter-engine</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/server/container/guice/blob-export-guice/pom.xml b/server/container/guice/blob-export-guice/pom.xml
index 79ac090..aa656dd 100644
--- a/server/container/guice/blob-export-guice/pom.xml
+++ b/server/container/guice/blob-export-guice/pom.xml
@@ -82,6 +82,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.mockito</groupId>
             <artifactId>mockito-core</artifactId>
             <scope>test</scope>
diff --git a/server/container/guice/cassandra-rabbitmq-ldap-guice/pom.xml b/server/container/guice/cassandra-rabbitmq-ldap-guice/pom.xml
index 22f01e2..79ad4a8 100644
--- a/server/container/guice/cassandra-rabbitmq-ldap-guice/pom.xml
+++ b/server/container/guice/cassandra-rabbitmq-ldap-guice/pom.xml
@@ -120,6 +120,11 @@
             <artifactId>junit-jupiter-engine</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/server/container/guice/configuration/pom.xml b/server/container/guice/configuration/pom.xml
index b369902..4ed76c4 100644
--- a/server/container/guice/configuration/pom.xml
+++ b/server/container/guice/configuration/pom.xml
@@ -64,5 +64,10 @@
             <artifactId>junit-jupiter-engine</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git a/server/container/guice/guice-common/pom.xml b/server/container/guice/guice-common/pom.xml
index 010480d..5c97cef 100644
--- a/server/container/guice/guice-common/pom.xml
+++ b/server/container/guice/guice-common/pom.xml
@@ -190,6 +190,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.mockito</groupId>
             <artifactId>mockito-core</artifactId>
             <scope>test</scope>
diff --git a/server/container/guice/jpa-common-guice/pom.xml b/server/container/guice/jpa-common-guice/pom.xml
index ff210e0..ff188c1 100644
--- a/server/container/guice/jpa-common-guice/pom.xml
+++ b/server/container/guice/jpa-common-guice/pom.xml
@@ -61,5 +61,10 @@
             <artifactId>junit-jupiter-engine</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git a/server/container/guice/mailbox/pom.xml b/server/container/guice/mailbox/pom.xml
index 22d7be9..7bcbfa8 100644
--- a/server/container/guice/mailbox/pom.xml
+++ b/server/container/guice/mailbox/pom.xml
@@ -71,6 +71,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.assertj</groupId>
             <artifactId>assertj-core</artifactId>
             <scope>test</scope>
diff --git a/server/container/guice/memory-guice/pom.xml b/server/container/guice/memory-guice/pom.xml
index d31bc45..ff231d6 100644
--- a/server/container/guice/memory-guice/pom.xml
+++ b/server/container/guice/memory-guice/pom.xml
@@ -200,6 +200,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.junit.vintage</groupId>
             <artifactId>junit-vintage-engine</artifactId>
             <scope>test</scope>
diff --git a/server/container/lifecycle-api/pom.xml b/server/container/lifecycle-api/pom.xml
index 6b17dda..ea661b0 100644
--- a/server/container/lifecycle-api/pom.xml
+++ b/server/container/lifecycle-api/pom.xml
@@ -56,6 +56,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>jcl-over-slf4j</artifactId>
         </dependency>
diff --git a/server/data/data-jmap-cassandra/pom.xml b/server/data/data-jmap-cassandra/pom.xml
index 4f6e371..ddb3819 100644
--- a/server/data/data-jmap-cassandra/pom.xml
+++ b/server/data/data-jmap-cassandra/pom.xml
@@ -93,13 +93,18 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.junit.vintage</groupId>
-            <artifactId>junit-vintage-engine</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.junit.jupiter</groupId>
-            <artifactId>junit-jupiter-engine</artifactId>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.vintage</groupId>
+            <artifactId>junit-vintage-engine</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/server/data/data-jmap/pom.xml b/server/data/data-jmap/pom.xml
index c9ee4ed..69af10e 100644
--- a/server/data/data-jmap/pom.xml
+++ b/server/data/data-jmap/pom.xml
@@ -94,6 +94,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.junit.vintage</groupId>
             <artifactId>junit-vintage-engine</artifactId>
             <scope>test</scope>
diff --git a/server/mailet/mock-smtp-server/pom.xml b/server/mailet/mock-smtp-server/pom.xml
index 2ea427f..afc5a9c 100644
--- a/server/mailet/mock-smtp-server/pom.xml
+++ b/server/mailet/mock-smtp-server/pom.xml
@@ -82,6 +82,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.assertj</groupId>
             <artifactId>assertj-core</artifactId>
             <scope>test</scope>
diff --git a/server/mailrepository/mailrepository-memory/pom.xml b/server/mailrepository/mailrepository-memory/pom.xml
index 71b5a8d..76613ab 100644
--- a/server/mailrepository/mailrepository-memory/pom.xml
+++ b/server/mailrepository/mailrepository-memory/pom.xml
@@ -62,6 +62,11 @@
             <artifactId>junit-jupiter-engine</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/server/protocols/jmap/pom.xml b/server/protocols/jmap/pom.xml
index 673dcdd..6d9e4b5 100644
--- a/server/protocols/jmap/pom.xml
+++ b/server/protocols/jmap/pom.xml
@@ -289,6 +289,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.junit.vintage</groupId>
             <artifactId>junit-vintage-engine</artifactId>
             <scope>test</scope>
diff --git a/server/protocols/webadmin/webadmin-cassandra-data/pom.xml b/server/protocols/webadmin/webadmin-cassandra-data/pom.xml
index 0d14df0..377fe4f 100644
--- a/server/protocols/webadmin/webadmin-cassandra-data/pom.xml
+++ b/server/protocols/webadmin/webadmin-cassandra-data/pom.xml
@@ -88,6 +88,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.mockito</groupId>
             <artifactId>mockito-core</artifactId>
             <scope>test</scope>
diff --git a/server/protocols/webadmin/webadmin-mailqueue/pom.xml b/server/protocols/webadmin/webadmin-mailqueue/pom.xml
index 96ab047..3dfb491 100644
--- a/server/protocols/webadmin/webadmin-mailqueue/pom.xml
+++ b/server/protocols/webadmin/webadmin-mailqueue/pom.xml
@@ -111,6 +111,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.mockito</groupId>
             <artifactId>mockito-core</artifactId>
             <scope>test</scope>
diff --git a/server/queue/queue-api/pom.xml b/server/queue/queue-api/pom.xml
index c579497..5157d46 100644
--- a/server/queue/queue-api/pom.xml
+++ b/server/queue/queue-api/pom.xml
@@ -92,6 +92,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.junit.vintage</groupId>
             <artifactId>junit-vintage-engine</artifactId>
             <scope>test</scope>
diff --git a/server/queue/queue-file/pom.xml b/server/queue/queue-file/pom.xml
index fb059eb..37fdf75 100644
--- a/server/queue/queue-file/pom.xml
+++ b/server/queue/queue-file/pom.xml
@@ -102,6 +102,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
         </dependency>
diff --git a/server/testing/pom.xml b/server/testing/pom.xml
index 4d00f7d..234b9b6 100644
--- a/server/testing/pom.xml
+++ b/server/testing/pom.xml
@@ -75,6 +75,10 @@
             <artifactId>junit-jupiter-engine</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.junit.vintage</groupId>
             <artifactId>junit-vintage-engine</artifactId>
         </dependency>


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


[james-project] 05/17: JAMES-2866 JSON serialization for Condition

Posted by bt...@apache.org.
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 5a192d585c9a3ee26bdff2dc4a7501dbc87a77b5
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Aug 21 15:04:20 2019 +0700

    JAMES-2866 JSON serialization for Condition
---
 server/mailet/mock-smtp-server/pom.xml             |   5 +
 .../apache/james/mock/smtp/server/Condition.java   | 111 ++++++++++++++++-----
 .../apache/james/mock/smtp/server/Operator.java    |  60 ++++++++++-
 .../james/mock/smtp/server/ConditionTest.java      |  95 +++++++++++++++---
 4 files changed, 232 insertions(+), 39 deletions(-)

diff --git a/server/mailet/mock-smtp-server/pom.xml b/server/mailet/mock-smtp-server/pom.xml
index 8db2a69..bdcbea7 100644
--- a/server/mailet/mock-smtp-server/pom.xml
+++ b/server/mailet/mock-smtp-server/pom.xml
@@ -50,6 +50,11 @@
             <artifactId>guava</artifactId>
         </dependency>
         <dependency>
+            <groupId>net.javacrumbs.json-unit</groupId>
+            <artifactId>json-unit-assertj</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>nl.jqno.equalsverifier</groupId>
             <artifactId>equalsverifier</artifactId>
             <scope>test</scope>
diff --git a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/Condition.java b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/Condition.java
index 422eea7..523794b 100644
--- a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/Condition.java
+++ b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/Condition.java
@@ -20,43 +20,106 @@
 package org.apache.james.mock.smtp.server;
 
 import java.util.Objects;
+import java.util.Optional;
 
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
 import com.google.common.base.Preconditions;
 
-class Condition {
+@JsonDeserialize(builder = Condition.Builder.class)
+interface Condition {
+    @JsonPOJOBuilder(withPrefix = "")
+    class Builder {
+        private Operator.OperatorName operator;
+        private Optional<String> matchingValue;
 
-    static final Condition MATCH_ALL = new Condition(Operator.MATCH_ALL, "any");
+        public Builder() {
+            this.matchingValue = Optional.empty();
+        }
 
-    private final Operator operator;
-    private final String matchingValue;
+        public Builder operator(Operator.OperatorName operator) {
+            this.operator = operator;
+            return this;
+        }
 
-    Condition(Operator operator, String matchingValue) {
-        Preconditions.checkNotNull(operator);
-        Preconditions.checkNotNull(matchingValue);
+        public Builder matchingValue(String matchingValue) {
+            this.matchingValue = Optional.of(matchingValue);
+            return this;
+        }
 
-        this.operator = operator;
-        this.matchingValue = matchingValue;
-    }
+        public Condition build() {
+            Preconditions.checkState(operator != null, "You need to specify an operator");
 
-    boolean matches(String line) {
-        return operator.actual(line)
-            .expected(matchingValue)
-            .matches();
+            return operator.getConditionFactory().apply(matchingValue);
+        }
     }
 
-    @Override
-    public final boolean equals(Object o) {
-        if (o instanceof Condition) {
-            Condition condition = (Condition) o;
+    class MatchAllCondition implements Condition {
+        public Operator.OperatorName getOperator() {
+            return Operator.OperatorName.MATCH_ALL;
+        }
 
-            return Objects.equals(this.operator, condition.operator)
-                && Objects.equals(this.matchingValue, condition.matchingValue);
+        @Override
+        public boolean matches(String line) {
+            return true;
+        }
+
+        @Override
+        public final boolean equals(Object o) {
+            return o instanceof MatchAllCondition;
+        }
+
+        @Override
+        public final int hashCode() {
+            return Objects.hash(MatchAllCondition.class);
         }
-        return false;
     }
 
-    @Override
-    public final int hashCode() {
-        return Objects.hash(operator, matchingValue);
+    class OperatorCondition implements Condition {
+        private final Operator operator;
+        private final String matchingValue;
+
+        OperatorCondition(Operator operator, String matchingValue) {
+            Preconditions.checkNotNull(operator);
+            Preconditions.checkNotNull(matchingValue);
+
+            this.operator = operator;
+            this.matchingValue = matchingValue;
+        }
+
+        public Operator.OperatorName getOperator() {
+            return operator.getOperatorName();
+        }
+
+        public String getMatchingValue() {
+            return matchingValue;
+        }
+
+        @Override
+        public boolean matches(String line) {
+            return operator.actual(line)
+                .expected(matchingValue)
+                .matches();
+        }
+
+        @Override
+        public final boolean equals(Object o) {
+            if (o instanceof OperatorCondition) {
+                OperatorCondition condition = (OperatorCondition) o;
+
+                return Objects.equals(this.operator, condition.operator)
+                    && Objects.equals(this.matchingValue, condition.matchingValue);
+            }
+            return false;
+        }
+
+        @Override
+        public final int hashCode() {
+            return Objects.hash(operator, matchingValue);
+        }
     }
+
+    Condition MATCH_ALL = new MatchAllCondition();
+
+    boolean matches(String line);
 }
diff --git a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/Operator.java b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/Operator.java
index 26947c0..d56e04c 100644
--- a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/Operator.java
+++ b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/Operator.java
@@ -19,7 +19,52 @@
 
 package org.apache.james.mock.smtp.server;
 
+import java.util.Arrays;
+import java.util.Optional;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.google.common.base.Function;
+import com.google.common.base.Preconditions;
+
 public interface Operator {
+    enum OperatorName {
+        CONTAINS("contains", maybeMatchingValue -> {
+            Preconditions.checkState(maybeMatchingValue.isPresent(), "You need to specify a matchingValue with the contains operator");
+
+            return new Condition.OperatorCondition(Operator.CONTAINS, maybeMatchingValue.get());
+        }),
+        MATCH_ALL("matchAll", maybeMatchingValue -> {
+            Preconditions.checkState(!maybeMatchingValue.isPresent(), "You should not specify a matchingValue with the matchAll operator");
+
+            return new Condition.MatchAllCondition();
+        });
+
+        private final String name;
+        private final Function<Optional<String>, Condition> conditionFactory;
+
+        @JsonCreator
+        public static OperatorName from(String name) {
+            return Arrays.stream(values())
+                .filter(value -> value.name.equals(name))
+                .findFirst()
+                .orElseThrow(() -> new IllegalArgumentException("Unsuported " + name + " operator"));
+        }
+
+        OperatorName(String name, Function<Optional<String>, Condition> conditionFactory) {
+            this.name = name;
+            this.conditionFactory = conditionFactory;
+        }
+
+        @JsonValue
+        public String getName() {
+            return name;
+        }
+
+        public Function<Optional<String>, Condition> getConditionFactory() {
+            return conditionFactory;
+        }
+    }
 
     @FunctionalInterface
     interface Expected {
@@ -31,8 +76,19 @@ public interface Operator {
         boolean matches();
     }
 
-    Operator CONTAINS = actual -> expected -> () -> actual.contains(expected);
-    Operator MATCH_ALL = actual -> expected -> () -> true;
+    Operator CONTAINS = new Operator() {
+        @Override
+        public Expected actual(String actual) {
+            return expected -> () -> actual.contains(expected);
+        }
+
+        @Override
+        public OperatorName getOperatorName() {
+            return OperatorName.CONTAINS;
+        }
+    };
 
     Expected actual(String actual);
+
+    OperatorName getOperatorName();
 }
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 e5fe70a..eefbe1c 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
@@ -19,35 +19,54 @@
 
 package org.apache.james.mock.smtp.server;
 
+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 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)
+            .verify();
+    }
+
     @Test
-    void shouldMatchBeanContract() {
-        EqualsVerifier.forClass(Condition.class)
+    void matchAllShouldMatchBeanContract() {
+        EqualsVerifier.forClass(Condition.MatchAllCondition.class)
             .verify();
     }
 
     @Test
+    void differentConditionTypesShouldNotBeEqual() {
+        assertThat(Condition.MATCH_ALL)
+            .isNotEqualTo(new Condition.OperatorCondition(Operator.CONTAINS, "any"));
+    }
+
+    @Test
     void constructorShouldThrowWhenNullOperator() {
-        assertThatThrownBy(() -> new Condition(null, "matchingValue"))
+        assertThatThrownBy(() -> new Condition.OperatorCondition(null, "matchingValue"))
             .isInstanceOf(NullPointerException.class);
     }
 
     @Test
     void constructorShouldThrowWhenNullMatchingValue() {
-        assertThatThrownBy(() -> new Condition(Operator.CONTAINS, null))
+        assertThatThrownBy(() -> new Condition.OperatorCondition(Operator.CONTAINS, null))
             .isInstanceOf(NullPointerException.class);
     }
 
     @Test
     void matchesShouldReturnTrueWhenOperatorMatches() {
-        Condition condition = new Condition(Operator.CONTAINS, "match me");
+        Condition condition = new Condition.OperatorCondition(Operator.CONTAINS, "match me");
 
         assertThat(condition.matches("this contains match me string"))
             .isTrue();
@@ -55,7 +74,7 @@ class ConditionTest {
 
     @Test
     void matchesShouldReturnFalseWhenOperatorDoesNotMatch() {
-        Condition condition = new Condition(Operator.CONTAINS, "match me");
+        Condition condition = new Condition.OperatorCondition(Operator.CONTAINS, "match me");
 
         assertThat(condition.matches("this contains another string"))
             .isFalse();
@@ -63,7 +82,7 @@ class ConditionTest {
 
     @Test
     void matchesShouldThrowWhenNullLine() {
-        Condition condition = new Condition(Operator.CONTAINS, "match me");
+        Condition condition = new Condition.OperatorCondition(Operator.CONTAINS, "match me");
 
         assertThatThrownBy(() -> condition.matches(null))
             .isInstanceOf(NullPointerException.class);
@@ -71,22 +90,72 @@ class ConditionTest {
 
     @Test
     void matchAllShouldReturnTrue() {
-        assertThat(Condition.MATCH_ALL
-                .matches("this contains another string"))
+        assertThat(Condition.MATCH_ALL.matches("this contains another string"))
             .isTrue();
     }
 
     @Test
     void matchAllShouldReturnTrueEvenWhenLineIsNull() {
-        assertThat(Condition.MATCH_ALL
-                .matches(null))
+        assertThat(Condition.MATCH_ALL.matches(null))
             .isTrue();
     }
 
     @Test
     void matchAllShouldReturnTrueEvenWhenLineIsEmpty() {
-        assertThat(Condition.MATCH_ALL
-                .matches(""))
+        assertThat(Condition.MATCH_ALL.matches(""))
             .isTrue();
     }
+
+    @Nested
+    class JSONTest {
+        @Test
+        void jacksonShouldDeserializeCondition() throws Exception {
+            Condition condition = OBJECT_MAPPER.readValue(
+                "{\"operator\":\"contains\", \"matchingValue\":\"matchme\"}",
+                Condition.class);
+
+            assertThat(condition).isEqualTo(new Condition.OperatorCondition(Operator.CONTAINS, "matchme"));
+        }
+
+        @Test
+        void jacksonShouldDeserializeMatchAllCondition() throws Exception {
+            Condition condition = OBJECT_MAPPER.readValue(
+                "{\"operator\":\"matchAll\"}",
+                Condition.class);
+
+            assertThat(condition).isEqualTo(Condition.MATCH_ALL);
+        }
+
+        @Test
+        void jacksonShouldSerializeCondition() throws Exception {
+            String json = OBJECT_MAPPER.writeValueAsString(new Condition.OperatorCondition(Operator.CONTAINS, "matchme"));
+
+            assertThatJson(json).isEqualTo("{\"operator\":\"contains\", \"matchingValue\":\"matchme\"}");
+        }
+
+        @Test
+        void jacksonShouldSerializeMatchAllCondition() throws Exception {
+            String json = OBJECT_MAPPER.writeValueAsString(Condition.MATCH_ALL);
+
+            assertThatJson(json).isEqualTo("{\"operator\":\"matchAll\"}");
+        }
+
+        @Test
+        void jacksonShouldThrowWhenDeserializeMatchAllConditionWithMatchingValue(){
+            String json = "{\"operator\":\"matchAll\", \"matchingValue\":\"matchme\"}";
+
+            assertThatThrownBy(() -> OBJECT_MAPPER.readValue(json, Condition.class))
+                .isInstanceOf(InvalidDefinitionException.class)
+                .hasMessageContaining("You should not specify a matchingValue with the matchAll operator");
+        }
+
+        @Test
+        void jacksonShouldThrowWhenDeserializeContainsConditionWithoutMatchingValue(){
+            String json = "{\"operator\":\"contains\"}";
+
+            assertThatThrownBy(() -> OBJECT_MAPPER.readValue(json, Condition.class))
+                .isInstanceOf(InvalidDefinitionException.class)
+                .hasMessageContaining("You need to specify a matchingValue with the contains operator");
+        }
+    }
 }


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


[james-project] 01/17: JAMES-2854 Upgrade to OpenJDK 8u222 JRE base image

Posted by bt...@apache.org.
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 7778b799bef49c24203a103ec9bc21f4683180df
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Aug 20 14:11:45 2019 +0700

    JAMES-2854 Upgrade to OpenJDK 8u222 JRE base image
---
 dockerfiles/run/guice/cassandra-ldap/Dockerfile          | 2 +-
 dockerfiles/run/guice/cassandra-rabbitmq-ldap/Dockerfile | 2 +-
 dockerfiles/run/guice/cassandra-rabbitmq/Dockerfile      | 2 +-
 dockerfiles/run/guice/cassandra/Dockerfile               | 2 +-
 dockerfiles/run/guice/jpa-smtp/Dockerfile                | 2 +-
 dockerfiles/run/guice/jpa/Dockerfile                     | 2 +-
 dockerfiles/run/guice/memory/Dockerfile                  | 2 +-
 dockerfiles/run/spring/Dockerfile                        | 2 +-
 8 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/dockerfiles/run/guice/cassandra-ldap/Dockerfile b/dockerfiles/run/guice/cassandra-ldap/Dockerfile
index dd5db36..499f4fd 100644
--- a/dockerfiles/run/guice/cassandra-ldap/Dockerfile
+++ b/dockerfiles/run/guice/cassandra-ldap/Dockerfile
@@ -2,7 +2,7 @@
 #
 # VERSION	1.0
 
-FROM openjdk:8u181-jre
+FROM openjdk:8u222-jre
 
 # Ports that are used
 #
diff --git a/dockerfiles/run/guice/cassandra-rabbitmq-ldap/Dockerfile b/dockerfiles/run/guice/cassandra-rabbitmq-ldap/Dockerfile
index 24f06c4..64e477a 100644
--- a/dockerfiles/run/guice/cassandra-rabbitmq-ldap/Dockerfile
+++ b/dockerfiles/run/guice/cassandra-rabbitmq-ldap/Dockerfile
@@ -2,7 +2,7 @@
 #
 # VERSION	1.0
 
-FROM openjdk:8u181-jre
+FROM openjdk:8u222-jre
 
 # Ports that are used
 #
diff --git a/dockerfiles/run/guice/cassandra-rabbitmq/Dockerfile b/dockerfiles/run/guice/cassandra-rabbitmq/Dockerfile
index 922e0e3..79f1a10 100644
--- a/dockerfiles/run/guice/cassandra-rabbitmq/Dockerfile
+++ b/dockerfiles/run/guice/cassandra-rabbitmq/Dockerfile
@@ -2,7 +2,7 @@
 #
 # VERSION	1.0
 
-FROM openjdk:8u181-jre
+FROM openjdk:8u222-jre
 
 # Ports that are used
 #
diff --git a/dockerfiles/run/guice/cassandra/Dockerfile b/dockerfiles/run/guice/cassandra/Dockerfile
index 43f3c69..c4fddf8 100644
--- a/dockerfiles/run/guice/cassandra/Dockerfile
+++ b/dockerfiles/run/guice/cassandra/Dockerfile
@@ -2,7 +2,7 @@
 #
 # VERSION	1.0
 
-FROM openjdk:8u181-jre
+FROM openjdk:8u222-jre
 
 # Ports that are used
 #
diff --git a/dockerfiles/run/guice/jpa-smtp/Dockerfile b/dockerfiles/run/guice/jpa-smtp/Dockerfile
index 2eb86ff..f0ba5d3 100644
--- a/dockerfiles/run/guice/jpa-smtp/Dockerfile
+++ b/dockerfiles/run/guice/jpa-smtp/Dockerfile
@@ -2,7 +2,7 @@
 #
 # VERSION	1.0
 
-FROM openjdk:8u181-jre
+FROM openjdk:8u222-jre
 
 # Ports that are used
 #
diff --git a/dockerfiles/run/guice/jpa/Dockerfile b/dockerfiles/run/guice/jpa/Dockerfile
index 07e386f..e83fbf7 100644
--- a/dockerfiles/run/guice/jpa/Dockerfile
+++ b/dockerfiles/run/guice/jpa/Dockerfile
@@ -2,7 +2,7 @@
 #
 # VERSION	1.0
 
-FROM openjdk:8u181-jre
+FROM openjdk:8u222-jre
 
 # Ports that are used
 #
diff --git a/dockerfiles/run/guice/memory/Dockerfile b/dockerfiles/run/guice/memory/Dockerfile
index 93e3bd1..f0ba1e2 100644
--- a/dockerfiles/run/guice/memory/Dockerfile
+++ b/dockerfiles/run/guice/memory/Dockerfile
@@ -2,7 +2,7 @@
 #
 # VERSION	1.0
 
-FROM openjdk:8u181-jre
+FROM openjdk:8u222-jre
 
 # Ports that are used
 #
diff --git a/dockerfiles/run/spring/Dockerfile b/dockerfiles/run/spring/Dockerfile
index ff94ea4..a8fd727 100644
--- a/dockerfiles/run/spring/Dockerfile
+++ b/dockerfiles/run/spring/Dockerfile
@@ -2,7 +2,7 @@
 #
 # VERSION	1.0
 
-FROM openjdk:8u181-jre
+FROM openjdk:8u222-jre
 
 # Ports that are used
 #


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


[james-project] 11/17: JAMES-2866 Avoid relying on Optional now that we have the matchAll condition

Posted by bt...@apache.org.
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 b2f0789afac251cc65f8e01fcda4fbf912edd9b6
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Aug 27 10:16:52 2019 +0700

    JAMES-2866 Avoid relying on Optional now that we have the matchAll condition
---
 .../james/mock/smtp/server/MockSMTPBehavior.java    | 21 +++++++++++++++------
 .../org/apache/james/mock/smtp/server/Fixture.java  |  7 +++----
 .../mock/smtp/server/MockSMTPBehaviorTest.java      |  8 +++-----
 3 files changed, 21 insertions(+), 15 deletions(-)

diff --git a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSMTPBehavior.java b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSMTPBehavior.java
index 2d8596a..f49f92d 100644
--- a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSMTPBehavior.java
+++ b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSMTPBehavior.java
@@ -72,12 +72,11 @@ public class MockSMTPBehavior {
     @JsonPOJOBuilder(withPrefix = "")
     public static class Builder {
         private SMTPCommand smtpCommand;
-        private Optional<Condition> condition;
+        private Condition condition;
         private Response response;
         private Optional<NumberOfAnswersPolicy> numberOfAnswers;
 
         public Builder() {
-            condition = Optional.empty();
             numberOfAnswers = Optional.empty();
         }
 
@@ -92,7 +91,7 @@ public class MockSMTPBehavior {
         }
 
         public Builder condition(Condition condition) {
-            this.condition = Optional.of(condition);
+            this.condition = condition;
             return this;
         }
 
@@ -114,11 +113,11 @@ public class MockSMTPBehavior {
     }
 
     private final SMTPCommand smtpCommand;
-    private final Optional<Condition> condition;
+    private final Condition condition;
     private final Response response;
     private final NumberOfAnswersPolicy numberOfAnswers;
 
-    public MockSMTPBehavior(SMTPCommand smtpCommand, Optional<Condition> condition, Response response, NumberOfAnswersPolicy numberOfAnswers) {
+    public MockSMTPBehavior(SMTPCommand smtpCommand, Condition condition, Response response, NumberOfAnswersPolicy numberOfAnswers) {
         Preconditions.checkNotNull(smtpCommand);
         Preconditions.checkNotNull(condition);
         Preconditions.checkNotNull(response);
@@ -134,7 +133,7 @@ public class MockSMTPBehavior {
         return smtpCommand;
     }
 
-    public Optional<Condition> getCondition() {
+    public Condition getCondition() {
         return condition;
     }
 
@@ -163,4 +162,14 @@ public class MockSMTPBehavior {
     public final int hashCode() {
         return Objects.hash(smtpCommand, condition, response, numberOfAnswers);
     }
+
+    @Override
+    public String toString() {
+        return "MockSMTPBehavior{" +
+            "smtpCommand=" + smtpCommand +
+            ", condition=" + condition +
+            ", response=" + response +
+            ", numberOfAnswers=" + numberOfAnswers +
+            '}';
+    }
 }
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
index 3178766..fe1ff47 100644
--- 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
@@ -19,8 +19,6 @@
 
 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;
@@ -34,13 +32,14 @@ public interface Fixture {
     Response RESPONSE = Response.serverAccept(Response.SMTPStatusCode.of(250), "message");
 
     String JSON_BEHAVIOR_COMPULSORY_FIELDS = "{" +
+        "  \"condition\": {\"operator\":\"matchAll\"}," +
         "  \"response\": {\"code\":250, \"message\":\"OK\", \"rejected\":false}," +
         "  \"command\": \"EHLO\"" +
         "}";
 
     MockSMTPBehavior BEHAVIOR_COMPULSORY_FIELDS = new MockSMTPBehavior(
         SMTPCommand.EHLO,
-        Optional.empty(),
+        Condition.MATCH_ALL,
         Response.serverAccept(Response.SMTPStatusCode.ACTION_COMPLETE_250, "OK"),
         MockSMTPBehavior.NumberOfAnswersPolicy.anytime());
 
@@ -53,7 +52,7 @@ public interface Fixture {
 
     MockSMTPBehavior BEHAVIOR_ALL_FIELDS = new MockSMTPBehavior(
         SMTPCommand.EHLO,
-        Optional.of(new Condition.OperatorCondition(Operator.CONTAINS, "matchme")),
+        new Condition.OperatorCondition(Operator.CONTAINS, "matchme"),
         Response.serverAccept(Response.SMTPStatusCode.of(250), "OK"),
         MockSMTPBehavior.NumberOfAnswersPolicy.times(7));
 
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 7a3f7cb..7bcc95e 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
@@ -29,8 +29,6 @@ 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.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 
@@ -80,7 +78,7 @@ class MockSMTPBehaviorTest {
 
     @Test
     void constructorShouldThrowWhenCommandIsNull() {
-        assertThatThrownBy(() -> new MockSMTPBehavior(null, Optional.empty(), RESPONSE, MockSMTPBehavior.NumberOfAnswersPolicy.anytime()))
+        assertThatThrownBy(() -> new MockSMTPBehavior(null, Condition.MATCH_ALL, RESPONSE, MockSMTPBehavior.NumberOfAnswersPolicy.anytime()))
             .isInstanceOf(NullPointerException.class);
     }
 
@@ -92,13 +90,13 @@ class MockSMTPBehaviorTest {
 
     @Test
     void constructorShouldThrowWhenResponseIsNull() {
-        assertThatThrownBy(() -> new MockSMTPBehavior(SMTPCommand.NOOP, Optional.empty(), null, MockSMTPBehavior.NumberOfAnswersPolicy.anytime()))
+        assertThatThrownBy(() -> new MockSMTPBehavior(SMTPCommand.NOOP, Condition.MATCH_ALL, null, MockSMTPBehavior.NumberOfAnswersPolicy.anytime()))
             .isInstanceOf(NullPointerException.class);
     }
 
     @Test
     void constructorShouldThrowWhenNumberOfAnswersIsNull() {
-        assertThatThrownBy(() -> new MockSMTPBehavior(SMTPCommand.NOOP, Optional.empty(), RESPONSE, null))
+        assertThatThrownBy(() -> new MockSMTPBehavior(SMTPCommand.NOOP, Condition.MATCH_ALL, RESPONSE, null))
             .isInstanceOf(NullPointerException.class);
     }
 


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


[james-project] 02/17: JAMES-2855 Upgrade ruby to 2.6.3 in Homepage Dockerfile

Posted by bt...@apache.org.
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 7478399430785960a9588a40dde9a73cd98ab81a
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Aug 20 14:49:20 2019 +0700

    JAMES-2855 Upgrade ruby to 2.6.3 in Homepage Dockerfile
---
 dockerfiles/site/homepage/Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dockerfiles/site/homepage/Dockerfile b/dockerfiles/site/homepage/Dockerfile
index b5741d6..c5997ab 100644
--- a/dockerfiles/site/homepage/Dockerfile
+++ b/dockerfiles/site/homepage/Dockerfile
@@ -1,4 +1,4 @@
-FROM ruby:2.3
+FROM ruby:2.6.3
 
 RUN apt-get update \
   && apt-get install -y \


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


[james-project] 07/17: JAMES-2866 JSON serialization for MockSMTPBehavior

Posted by bt...@apache.org.
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 ff6e5e8e3b72ad9a17f690fbbc738784705e33a4
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Aug 21 15:30:12 2019 +0700

    JAMES-2866 JSON serialization for MockSMTPBehavior
---
 server/mailet/mock-smtp-server/pom.xml             |  4 ++
 .../james/mock/smtp/server/MockSMTPBehavior.java   | 55 ++++++++++++++++-
 .../mock/smtp/server/MockSMTPBehaviorTest.java     | 68 ++++++++++++++++++++++
 3 files changed, 125 insertions(+), 2 deletions(-)

diff --git a/server/mailet/mock-smtp-server/pom.xml b/server/mailet/mock-smtp-server/pom.xml
index bdcbea7..ce806b9 100644
--- a/server/mailet/mock-smtp-server/pom.xml
+++ b/server/mailet/mock-smtp-server/pom.xml
@@ -46,6 +46,10 @@
             <artifactId>jackson-databind</artifactId>
         </dependency>
         <dependency>
+            <groupId>com.fasterxml.jackson.datatype</groupId>
+            <artifactId>jackson-datatype-jdk8</artifactId>
+        </dependency>
+        <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
         </dependency>
diff --git a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSMTPBehavior.java b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSMTPBehavior.java
index 371b2ea..2d8596a 100644
--- a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSMTPBehavior.java
+++ b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSMTPBehavior.java
@@ -22,8 +22,13 @@ package org.apache.james.mock.smtp.server;
 import java.util.Objects;
 import java.util.Optional;
 
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
 import com.google.common.base.Preconditions;
 
+@JsonDeserialize(builder = MockSMTPBehavior.Builder.class)
 public class MockSMTPBehavior {
     public static final class NumberOfAnswersPolicy {
 
@@ -31,6 +36,7 @@ public class MockSMTPBehavior {
             return new NumberOfAnswersPolicy(Optional.empty());
         }
 
+        @JsonCreator
         public static NumberOfAnswersPolicy times(int times) {
             Preconditions.checkArgument(times > 0, "times should be positive");
             return new NumberOfAnswersPolicy(Optional.of(times));
@@ -42,6 +48,7 @@ public class MockSMTPBehavior {
             this.numberOfAnswers = numberOfAnswers;
         }
 
+        @JsonValue
         public Optional<Integer> getNumberOfAnswers() {
             return numberOfAnswers;
         }
@@ -62,6 +69,50 @@ public class MockSMTPBehavior {
         }
     }
 
+    @JsonPOJOBuilder(withPrefix = "")
+    public static class Builder {
+        private SMTPCommand smtpCommand;
+        private Optional<Condition> condition;
+        private Response response;
+        private Optional<NumberOfAnswersPolicy> numberOfAnswers;
+
+        public Builder() {
+            condition = Optional.empty();
+            numberOfAnswers = Optional.empty();
+        }
+
+        public Builder command(SMTPCommand command) {
+            this.smtpCommand = command;
+            return this;
+        }
+
+        public Builder response(Response response) {
+            this.response = response;
+            return this;
+        }
+
+        public Builder condition(Condition condition) {
+            this.condition = Optional.of(condition);
+            return this;
+        }
+
+        public Builder numberOfAnswer(Optional<NumberOfAnswersPolicy> numberOfAnswers) {
+            this.numberOfAnswers = numberOfAnswers;
+            return this;
+        }
+
+        public MockSMTPBehavior build() {
+            Preconditions.checkState(smtpCommand != null, "You need to specify an smtpCommand");
+            Preconditions.checkState(response != null, "You need to specify a response");
+
+            return new MockSMTPBehavior(
+                smtpCommand,
+                condition,
+                response,
+                numberOfAnswers.orElse(NumberOfAnswersPolicy.anytime()));
+        }
+    }
+
     private final SMTPCommand smtpCommand;
     private final Optional<Condition> condition;
     private final Response response;
@@ -79,7 +130,7 @@ public class MockSMTPBehavior {
         this.numberOfAnswers = numberOfAnswers;
     }
 
-    public SMTPCommand getSmtpCommand() {
+    public SMTPCommand getCommand() {
         return smtpCommand;
     }
 
@@ -91,7 +142,7 @@ public class MockSMTPBehavior {
         return response;
     }
 
-    public NumberOfAnswersPolicy getNumberOfAnswers() {
+    public NumberOfAnswersPolicy getNumberOfAnswer() {
         return numberOfAnswers;
     }
 
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 57f16cd..606c4bc 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
@@ -19,6 +19,7 @@
 
 package org.apache.james.mock.smtp.server;
 
+import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
@@ -28,10 +29,40 @@ 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());
+
+    private static final String JSON_COMPULSORY_FIELDS = "{" +
+        "  \"response\": {\"code\":250, \"message\":\"OK\", \"rejected\":false}," +
+        "  \"command\": \"EHLO\"" +
+        "}";
+
+    private static final MockSMTPBehavior POJO_COMPULSORY_FIELDS = new MockSMTPBehavior(
+        SMTPCommand.EHLO,
+        Optional.empty(),
+        Response.serverAccept(Response.SMTPStatusCode.of(250), "OK"),
+        MockSMTPBehavior.NumberOfAnswersPolicy.anytime());
+
+    private static final String JSON_ALL_FIELDS = "{" +
+        "  \"response\": {\"code\":250, \"message\":\"OK\", \"rejected\":false}," +
+        "  \"condition\": {\"operator\":\"contains\", \"matchingValue\":\"matchme\"}," +
+        "  \"command\": \"EHLO\"," +
+        "  \"numberOfAnswer\": 7" +
+        "}";
+
+    private 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 {
@@ -95,4 +126,41 @@ class MockSMTPBehaviorTest {
         assertThatThrownBy(() -> new MockSMTPBehavior(SMTPCommand.NOOP, Optional.empty(), RESPONSE, null))
             .isInstanceOf(NullPointerException.class);
     }
+
+    @Nested
+    class JSONTest {
+        @Test
+        void jacksonShouldDeserializeMockSMTPBehaviorWithAllField() throws Exception {
+            MockSMTPBehavior behavior = OBJECT_MAPPER.readValue(JSON_ALL_FIELDS, MockSMTPBehavior.class);
+
+            assertThat(behavior)
+                .isEqualTo(POJO_ALL_FIELDS);
+        }
+
+        @Test
+        void jacksonShouldSerializeMockSMTPBehaviorWithAllField() throws Exception {
+            String json = OBJECT_MAPPER.writeValueAsString(POJO_ALL_FIELDS);
+
+            assertThatJson(json)
+                .withOptions(new Options(Option.TREATING_NULL_AS_ABSENT))
+                .isEqualTo(JSON_ALL_FIELDS);
+        }
+
+        @Test
+        void jacksonShouldDeserializeMockSMTPBehaviorWithCompulsoryField() throws Exception {
+            MockSMTPBehavior behavior = OBJECT_MAPPER.readValue(JSON_COMPULSORY_FIELDS, MockSMTPBehavior.class);
+
+            assertThat(behavior)
+                .isEqualTo(POJO_COMPULSORY_FIELDS);
+        }
+
+        @Test
+        void jacksonShouldSerializeMockSMTPBehaviorWithCompulsoryField() throws Exception {
+            String json = OBJECT_MAPPER.writeValueAsString(POJO_COMPULSORY_FIELDS);
+
+            assertThatJson(json)
+                .withOptions(new Options(Option.TREATING_NULL_AS_ABSENT))
+                .isEqualTo(JSON_COMPULSORY_FIELDS);
+        }
+    }
 }


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


[james-project] 08/17: JAMES-2866 MockSMTPBehaviors POJO

Posted by bt...@apache.org.
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 0f02246908797e6fa70563fdbca361f163196c1a
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Aug 21 15:55:04 2019 +0700

    JAMES-2866 MockSMTPBehaviors POJO
    
    Directly correnspond to HTTP configuration output
---
 server/mailet/mock-smtp-server/pom.xml             |  4 ++
 .../james/mock/smtp/server/MockSmtpBehaviors.java  | 56 +++++++++++++++++
 .../mock/smtp/server/MockSMTPBehaviorTest.java     |  8 +--
 .../mock/smtp/server/MockSmtpBehaviorsTest.java    | 73 ++++++++++++++++++++++
 4 files changed, 137 insertions(+), 4 deletions(-)

diff --git a/server/mailet/mock-smtp-server/pom.xml b/server/mailet/mock-smtp-server/pom.xml
index ce806b9..f7ea8c8 100644
--- a/server/mailet/mock-smtp-server/pom.xml
+++ b/server/mailet/mock-smtp-server/pom.xml
@@ -47,6 +47,10 @@
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.datatype</groupId>
+            <artifactId>jackson-datatype-guava</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.datatype</groupId>
             <artifactId>jackson-datatype-jdk8</artifactId>
         </dependency>
         <dependency>
diff --git a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSmtpBehaviors.java b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSmtpBehaviors.java
new file mode 100644
index 0000000..7ebe28a
--- /dev/null
+++ b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSmtpBehaviors.java
@@ -0,0 +1,56 @@
+/****************************************************************
+ * 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.List;
+import java.util.Objects;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.google.common.collect.ImmutableList;
+
+public class MockSmtpBehaviors {
+    private final List<MockSMTPBehavior> behaviorList;
+
+    @JsonCreator
+    public MockSmtpBehaviors(List<MockSMTPBehavior> behaviorList) {
+        this.behaviorList = ImmutableList.copyOf(behaviorList);
+    }
+
+    @JsonValue
+    public List<MockSMTPBehavior> getBehaviorList() {
+        return behaviorList;
+    }
+
+    @Override
+    public final boolean equals(Object o) {
+        if (o instanceof MockSmtpBehaviors) {
+            MockSmtpBehaviors that = (MockSmtpBehaviors) o;
+
+            return Objects.equals(this.behaviorList, that.behaviorList);
+        }
+        return false;
+    }
+
+    @Override
+    public final int hashCode() {
+        return Objects.hash(behaviorList);
+    }
+}
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 606c4bc..91f760f 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
@@ -40,25 +40,25 @@ 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());
 
-    private static final String JSON_COMPULSORY_FIELDS = "{" +
+    static final String JSON_COMPULSORY_FIELDS = "{" +
         "  \"response\": {\"code\":250, \"message\":\"OK\", \"rejected\":false}," +
         "  \"command\": \"EHLO\"" +
         "}";
 
-    private static final MockSMTPBehavior POJO_COMPULSORY_FIELDS = new MockSMTPBehavior(
+    static final MockSMTPBehavior POJO_COMPULSORY_FIELDS = new MockSMTPBehavior(
         SMTPCommand.EHLO,
         Optional.empty(),
         Response.serverAccept(Response.SMTPStatusCode.of(250), "OK"),
         MockSMTPBehavior.NumberOfAnswersPolicy.anytime());
 
-    private static final String JSON_ALL_FIELDS = "{" +
+    static final String JSON_ALL_FIELDS = "{" +
         "  \"response\": {\"code\":250, \"message\":\"OK\", \"rejected\":false}," +
         "  \"condition\": {\"operator\":\"contains\", \"matchingValue\":\"matchme\"}," +
         "  \"command\": \"EHLO\"," +
         "  \"numberOfAnswer\": 7" +
         "}";
 
-    private static final MockSMTPBehavior POJO_ALL_FIELDS = new MockSMTPBehavior(
+    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"),
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
new file mode 100644
index 0000000..83ffaaf
--- /dev/null
+++ b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/MockSmtpBehaviorsTest.java
@@ -0,0 +1,73 @@
+/****************************************************************
+ * 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 net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
+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 + "]";
+
+    private static final MockSmtpBehaviors POJO = new MockSmtpBehaviors(ImmutableList.of(
+        MockSMTPBehaviorTest.POJO_ALL_FIELDS,
+        MockSMTPBehaviorTest.POJO_COMPULSORY_FIELDS));
+
+    @Test
+    void shouldMatchBeanContract() {
+        EqualsVerifier.forClass(MockSmtpBehaviors.class)
+            .verify();
+    }
+
+    @Test
+    void jacksonShouldDeserializeBehaviors() throws Exception {
+        MockSmtpBehaviors behaviors = OBJECT_MAPPER.readValue("[" + MockSMTPBehaviorTest.JSON_ALL_FIELDS + ", "
+            + MockSMTPBehaviorTest.JSON_COMPULSORY_FIELDS + "]", MockSmtpBehaviors.class);
+
+        assertThat(behaviors)
+            .isEqualTo(new MockSmtpBehaviors(ImmutableList.of(
+                MockSMTPBehaviorTest.POJO_ALL_FIELDS,
+                MockSMTPBehaviorTest.POJO_COMPULSORY_FIELDS)));
+    }
+
+    @Test
+    void jacksonShouldSerializeBehaviors() throws Exception {
+        String json = OBJECT_MAPPER.writeValueAsString(POJO);
+
+        assertThatJson(json)
+            .withOptions(new Options(Option.TREATING_NULL_AS_ABSENT, Option.IGNORING_ARRAY_ORDER))
+            .isEqualTo(JSON);
+    }
+}
\ 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