You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2021/02/14 06:53:52 UTC

[james-project] 02/18: JAMES-3500 Use a wait strategy on MockSMTP server

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 355153e7bf1c2b8288e769bc6010ba948ecfde21
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Feb 12 10:41:11 2021 +0700

    JAMES-3500 Use a wait strategy on MockSMTP server
    
    CI is unstable as we try to call mockSMTP REST API before
    it starts, causing failure.
    
    A safer approach is to specify a wait strategy. I chose a
    log wait strategy as the host ports wait strategy waits for
    any port to be reachable, and thus do not guaranty both
    SMTP and HTTP are usable.
    
    The road to add logs in the container was painful:
     - conflicts with other lockback configurations in
       the classpath required specifying explicitly the file
       on the command line.
     - JIB did not like mounting resource files inside
       the container, once moved worked straight away.
    
    I bumped the version of MockSMTP.
    
    Also, as a side refactoring, I generalized the usage
    of MockSmtpServerExtension.
---
 pom.xml                                            |  2 +-
 .../james/mailets/RemoteDeliveryErrorTest.java     | 34 +++++--------
 .../org/apache/james/smtp/dsn/DSNRelayTest.java    | 55 ++++++++--------------
 .../james/smtp/dsn/DSNRemoteIntegrationTest.java   | 25 ++++------
 server/mailet/mock-smtp-server/pom.xml             | 18 ++++++-
 .../mock/smtp/server/HTTPConfigurationServer.java  |  2 +-
 .../james/mock/smtp/server/MockSMTPServerMain.java |  6 ++-
 .../server/testing/MockSmtpServerExtension.java    |  8 +++-
 .../src/{resources => main/jib}/logback.xml        |  0
 .../mock/smtp/server/ConfigurationClientTest.java  |  2 +-
 .../smtp/server/HTTPConfigurationServerTest.java   |  3 +-
 .../java/org/apache/james/util/docker/Images.java  |  2 +-
 12 files changed, 73 insertions(+), 84 deletions(-)

diff --git a/pom.xml b/pom.xml
index d471c25..0b5a8f7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2814,7 +2814,7 @@
                 <plugin>
                     <groupId>com.google.cloud.tools</groupId>
                     <artifactId>jib-maven-plugin</artifactId>
-                    <version>1.5.1</version>
+                    <version>2.7.1</version>
                 </plugin>
                 <plugin>
                     <groupId>org.scalatest</groupId>
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryErrorTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryErrorTest.java
index aee9e52..3ad4da4 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryErrorTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryErrorTest.java
@@ -28,7 +28,6 @@ import static org.apache.james.mock.smtp.server.ConfigurationClient.BehaviorsPar
 import static org.apache.james.mock.smtp.server.ConfigurationClient.BehaviorsParamsBuilder.ConditionStep.inputContaining;
 import static org.apache.james.mock.smtp.server.ConfigurationClient.BehaviorsParamsBuilder.ResponseStep.doesNotAcceptAnyMail;
 import static org.apache.james.mock.smtp.server.ConfigurationClient.BehaviorsParamsBuilder.ResponseStep.serviceNotAvailable;
-import static org.apache.james.util.docker.Images.MOCK_SMTP_SERVER;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.File;
@@ -46,6 +45,7 @@ import org.apache.james.mailets.configuration.ProcessorConfiguration;
 import org.apache.james.mock.smtp.server.ConfigurationClient;
 import org.apache.james.mock.smtp.server.model.Mail;
 import org.apache.james.mock.smtp.server.model.SMTPCommand;
+import org.apache.james.mock.smtp.server.testing.MockSmtpServerExtension;
 import org.apache.james.modules.protocols.ImapGuiceProbe;
 import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.server.core.MailImpl;
@@ -63,15 +63,10 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 import org.junit.jupiter.api.io.TempDir;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.ImmutableList;
 
 class RemoteDeliveryErrorTest {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(RemoteDeliveryErrorTest.class);
-
     private static final String ANOTHER_DOMAIN = "other.com";
     private static final String FROM = "from@" + DEFAULT_DOMAIN;
     private static final String RECIPIENT = "touser@" + ANOTHER_DOMAIN;
@@ -107,11 +102,9 @@ class RemoteDeliveryErrorTest {
     @RegisterExtension
     public SMTPMessageSender messageSender = new SMTPMessageSender(DEFAULT_DOMAIN);
     @RegisterExtension
-    public static DockerContainer mockSmtp = DockerContainer.fromName(MOCK_SMTP_SERVER)
-        .withLogConsumer(outputFrame -> LOGGER.debug("MockSMTP 1: " + outputFrame.getUtf8String()));
+    public static MockSmtpServerExtension mockSmtp1 = new MockSmtpServerExtension();
     @RegisterExtension
-    public static DockerContainer mockSmtp2 = DockerContainer.fromName(MOCK_SMTP_SERVER)
-        .withLogConsumer(outputFrame -> LOGGER.debug("MockSMTP 2: " + outputFrame.getUtf8String()));
+    public static MockSmtpServerExtension mockSmtp2 = new MockSmtpServerExtension();
 
     private TemporaryJamesServer jamesServer;
 
@@ -131,7 +124,7 @@ class RemoteDeliveryErrorTest {
     void setUp(@TempDir File temporaryFolder) throws Exception {
         inMemoryDNSService = new InMemoryDNSService()
             .registerMxRecord(DEFAULT_DOMAIN, LOCALHOST_IP)
-            .registerMxRecord(ANOTHER_DOMAIN, mockSmtp.getContainerIp());
+            .registerMxRecord(ANOTHER_DOMAIN, mockSmtp1.getMockSmtp().getIPAddress());
 
         jamesServer = TemporaryJamesServer.builder()
             .withBase(SMTP_AND_IMAP_MODULE)
@@ -149,19 +142,16 @@ class RemoteDeliveryErrorTest {
             .addDomain(DEFAULT_DOMAIN)
             .addUser(FROM, PASSWORD);
 
-        mockSMTP1Configuration = configurationClient(mockSmtp);
-        mockSMTP2Configuration = configurationClient(mockSmtp2);
+        mockSMTP1Configuration = mockSmtp1.getMockSmtp().getConfigurationClient();
+        mockSMTP2Configuration = mockSmtp2.getMockSmtp().getConfigurationClient();
 
-        assertThat(mockSMTP1Configuration.version()).isEqualTo("0.2");
-        assertThat(mockSMTP2Configuration.version()).isEqualTo("0.2");
+        assertThat(mockSMTP1Configuration.version()).isEqualTo("0.4");
+        assertThat(mockSMTP2Configuration.version()).isEqualTo("0.4");
     }
 
     @AfterEach
     void tearDown() {
         jamesServer.shutdown();
-
-        mockSMTP1Configuration.cleanServer();
-        mockSMTP2Configuration.cleanServer();
     }
 
     @Test
@@ -384,13 +374,13 @@ class RemoteDeliveryErrorTest {
 
     @Test
     void remoteDeliveryShouldNotDuplicateContentWhenSendPartialWhenFailover() throws Exception {
-        ImmutableList<InetAddress> addresses = ImmutableList.of(InetAddress.getByName(mockSmtp.getContainerIp()));
-        ImmutableList<String> mxs = ImmutableList.of(mockSmtp.getContainerIp(), mockSmtp2.getContainerIp());
+        ImmutableList<InetAddress> addresses = ImmutableList.of(InetAddress.getByName(mockSmtp1.getMockSmtp().getIPAddress()));
+        ImmutableList<String> mxs = ImmutableList.of(mockSmtp1.getMockSmtp().getIPAddress(), mockSmtp2.getMockSmtp().getIPAddress());
         ImmutableList<String> txtRecords = ImmutableList.of();
 
         inMemoryDNSService.registerRecord(ANOTHER_DOMAIN, addresses, mxs, txtRecords)
-            .registerMxRecord(mockSmtp.getContainerIp(), mockSmtp.getContainerIp())
-            .registerMxRecord(mockSmtp2.getContainerIp(), mockSmtp2.getContainerIp());
+            .registerMxRecord(mockSmtp1.getMockSmtp().getIPAddress(), mockSmtp1.getMockSmtp().getIPAddress())
+            .registerMxRecord(mockSmtp2.getMockSmtp().getIPAddress(), mockSmtp2.getMockSmtp().getIPAddress());
 
         mockSMTP1Configuration
             .addNewBehavior()
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/dsn/DSNRelayTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/dsn/DSNRelayTest.java
index da7d5ba..a104f66 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/dsn/DSNRelayTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/dsn/DSNRelayTest.java
@@ -24,7 +24,6 @@ import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
 import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.PASSWORD;
 import static org.apache.james.mailets.configuration.Constants.calmlyAwait;
-import static org.apache.james.util.docker.Images.MOCK_SMTP_SERVER;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.awaitility.Durations.TEN_SECONDS;
 
@@ -40,10 +39,11 @@ import org.apache.james.mailets.configuration.MailetConfiguration;
 import org.apache.james.mailets.configuration.MailetContainer;
 import org.apache.james.mailets.configuration.ProcessorConfiguration;
 import org.apache.james.mailets.configuration.SmtpConfiguration;
-import org.apache.james.mock.smtp.server.ConfigurationClient;
 import org.apache.james.mock.smtp.server.model.Mail;
 import org.apache.james.mock.smtp.server.model.SMTPExtension;
 import org.apache.james.mock.smtp.server.model.SMTPExtensions;
+import org.apache.james.mock.smtp.server.testing.MockSmtpServerExtension;
+import org.apache.james.mock.smtp.server.testing.MockSmtpServerExtension.DockerMockSmtp;
 import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.smtpserver.dsn.DSNEhloHook;
 import org.apache.james.smtpserver.dsn.DSNMailParameterHook;
@@ -52,8 +52,6 @@ import org.apache.james.smtpserver.dsn.DSNRcptParameterHook;
 import org.apache.james.transport.mailets.RecipientRewriteTable;
 import org.apache.james.transport.mailets.RemoteDelivery;
 import org.apache.james.transport.matchers.All;
-import org.apache.james.util.Host;
-import org.apache.james.util.docker.DockerContainer;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.SMTPMessageSender;
 import org.apache.james.utils.TestIMAPClient;
@@ -63,12 +61,8 @@ import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 import org.junit.jupiter.api.io.TempDir;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 class DSNRelayTest {
-    private static final Logger LOGGER = LoggerFactory.getLogger(DSNRelayTest.class);
-
     private static final String ANOTHER_DOMAIN = "other.com";
     private static final String FROM = "from@" + DEFAULT_DOMAIN;
     private static final String RECIPIENT = "touser@" + ANOTHER_DOMAIN;
@@ -76,23 +70,21 @@ class DSNRelayTest {
     private static final String RECIPIENT2 = "touser2@" + ANOTHER_DOMAIN;
 
     private InMemoryDNSService inMemoryDNSService;
-    private ConfigurationClient mockSMTPConfiguration;
 
     @RegisterExtension
     public TestIMAPClient testIMAPClient = new TestIMAPClient();
     @RegisterExtension
     public SMTPMessageSender messageSender = new SMTPMessageSender(DEFAULT_DOMAIN);
     @RegisterExtension
-    public static DockerContainer mockSmtp = DockerContainer.fromName(MOCK_SMTP_SERVER)
-        .withLogConsumer(outputFrame -> LOGGER.debug("MockSMTP 1: " + outputFrame.getUtf8String()));
+    public static MockSmtpServerExtension mockSmtpExtension = new MockSmtpServerExtension();
 
     private TemporaryJamesServer jamesServer;
 
     @BeforeEach
-    void setUp(@TempDir File temporaryFolder) throws Exception {
+    void setUp(@TempDir File temporaryFolder, DockerMockSmtp mockSmtp) throws Exception {
         inMemoryDNSService = new InMemoryDNSService()
             .registerMxRecord(DEFAULT_DOMAIN, LOCALHOST_IP)
-            .registerMxRecord(ANOTHER_DOMAIN, mockSmtp.getContainerIp());
+            .registerMxRecord(ANOTHER_DOMAIN, mockSmtp.getIPAddress());
 
         jamesServer = TemporaryJamesServer.builder()
             .withBase(SMTP_AND_IMAP_MODULE)
@@ -115,22 +107,19 @@ class DSNRelayTest {
             .addDomain(DEFAULT_DOMAIN)
             .addUser(FROM, PASSWORD);
 
-        mockSMTPConfiguration = configurationClient(mockSmtp);
-        mockSMTPConfiguration.setSMTPExtensions(SMTPExtensions.of(SMTPExtension.of("dsn")));
+        mockSmtp.getConfigurationClient().setSMTPExtensions(SMTPExtensions.of(SMTPExtension.of("dsn")));
 
-        assertThat(mockSMTPConfiguration.version()).isEqualTo("0.2");
+        assertThat(mockSmtp.getConfigurationClient().version()).isEqualTo("0.4");
     }
 
     @AfterEach
     void tearDown() {
         jamesServer.shutdown();
-
-        mockSMTPConfiguration.cleanServer();
     }
 
     @Disabled("JAMES-3431 No javax.mail support for ORCPT DSN parameter...")
     @Test
-    void orcptIsUnsupported() throws Exception {
+    void orcptIsUnsupported(DockerMockSmtp mockSmtp) throws Exception {
         AuthenticatingSMTPClient smtpClient = new AuthenticatingSMTPClient("TLS", "UTF-8");
 
         try {
@@ -143,7 +132,7 @@ class DSNRelayTest {
             smtpClient.disconnect();
         }
 
-        calmlyAwait.atMost(TEN_SECONDS).untilAsserted(() -> assertThat(mockSMTPConfiguration.listMails())
+        calmlyAwait.atMost(TEN_SECONDS).untilAsserted(() -> assertThat(mockSmtp.getConfigurationClient().listMails())
             .hasSize(3)
             .extracting(Mail::getEnvelope)
             .containsExactly(Mail.Envelope.builder()
@@ -171,7 +160,7 @@ class DSNRelayTest {
     }
 
     @Test
-    void remoteDeliveryShouldCarryOverDSNParameters() throws Exception {
+    void remoteDeliveryShouldCarryOverDSNParameters(DockerMockSmtp mockSmtp) throws Exception {
         AuthenticatingSMTPClient smtpClient = new AuthenticatingSMTPClient("TLS", "UTF-8");
 
         try {
@@ -186,7 +175,7 @@ class DSNRelayTest {
             smtpClient.disconnect();
         }
 
-        calmlyAwait.atMost(TEN_SECONDS).untilAsserted(() -> assertThat(mockSMTPConfiguration.listMails())
+        calmlyAwait.atMost(TEN_SECONDS).untilAsserted(() -> assertThat(mockSmtp.getConfigurationClient().listMails())
             .hasSize(3)
             .extracting(Mail::getEnvelope)
             .containsOnly(Mail.Envelope.builder()
@@ -242,7 +231,7 @@ class DSNRelayTest {
     }
 
     @Test
-    void remoteDeliveryShouldDeliverSimilarDsnNotifyParametersTogether() throws Exception {
+    void remoteDeliveryShouldDeliverSimilarDsnNotifyParametersTogether(DockerMockSmtp mockSmtp) throws Exception {
         AuthenticatingSMTPClient smtpClient = new AuthenticatingSMTPClient("TLS", "UTF-8");
 
         try {
@@ -257,7 +246,7 @@ class DSNRelayTest {
             smtpClient.disconnect();
         }
 
-        calmlyAwait.atMost(TEN_SECONDS).untilAsserted(() -> assertThat(mockSMTPConfiguration.listMails())
+        calmlyAwait.atMost(TEN_SECONDS).untilAsserted(() -> assertThat(mockSmtp.getConfigurationClient().listMails())
             .hasSize(2)
             .extracting(Mail::getEnvelope)
             .containsOnly(Mail.Envelope.builder()
@@ -290,7 +279,7 @@ class DSNRelayTest {
     }
 
     @Test
-    void remoteDeliveryShouldCarryOverDSNParametersWhenSingleRecipient() throws Exception {
+    void remoteDeliveryShouldCarryOverDSNParametersWhenSingleRecipient(DockerMockSmtp mockSmtp) throws Exception {
         AuthenticatingSMTPClient smtpClient = new AuthenticatingSMTPClient("TLS", "UTF-8");
 
         try {
@@ -303,7 +292,7 @@ class DSNRelayTest {
             smtpClient.disconnect();
         }
 
-        calmlyAwait.atMost(TEN_SECONDS).untilAsserted(() -> assertThat(mockSMTPConfiguration.listMails())
+        calmlyAwait.atMost(TEN_SECONDS).untilAsserted(() -> assertThat(mockSmtp.getConfigurationClient().listMails())
             .hasSize(1)
             .extracting(Mail::getEnvelope)
             .containsExactly(Mail.Envelope.builder()
@@ -327,7 +316,7 @@ class DSNRelayTest {
     }
 
     @Test
-    void dsnShouldBeCarriedAfterRRT() throws Exception {
+    void dsnShouldBeCarriedAfterRRT(DockerMockSmtp mockSmtp) throws Exception {
         DataProbeImpl dataProbe = jamesServer.getProbe(DataProbeImpl.class);
         dataProbe.addDomain(ANOTHER_DOMAIN);
         dataProbe.addAddressMapping("touser", ANOTHER_DOMAIN, "touser-alias@other.com");
@@ -344,7 +333,7 @@ class DSNRelayTest {
             smtpClient.disconnect();
         }
 
-        calmlyAwait.atMost(TEN_SECONDS).untilAsserted(() -> assertThat(mockSMTPConfiguration.listMails())
+        calmlyAwait.atMost(TEN_SECONDS).untilAsserted(() -> assertThat(mockSmtp.getConfigurationClient().listMails())
             .hasSize(1)
             .extracting(Mail::getEnvelope)
             .containsExactly(Mail.Envelope.builder()
@@ -368,7 +357,7 @@ class DSNRelayTest {
     }
 
     @Test
-    void remoteDeliveryShouldCarryOverDSNMailParameters() throws Exception {
+    void remoteDeliveryShouldCarryOverDSNMailParameters(DockerMockSmtp mockSmtp) throws Exception {
         AuthenticatingSMTPClient smtpClient = new AuthenticatingSMTPClient("TLS", "UTF-8");
 
         try {
@@ -381,7 +370,7 @@ class DSNRelayTest {
             smtpClient.disconnect();
         }
 
-        calmlyAwait.atMost(TEN_SECONDS).untilAsserted(() -> assertThat(mockSMTPConfiguration.listMails())
+        calmlyAwait.atMost(TEN_SECONDS).untilAsserted(() -> assertThat(mockSmtp.getConfigurationClient().listMails())
             .hasSize(1)
             .extracting(Mail::getEnvelope)
             .containsExactly(Mail.Envelope.builder()
@@ -416,10 +405,4 @@ class DSNRelayTest {
                 .addProperty("deliveryThreads", "2")
                 .addProperty("sendpartial", "true"));
     }
-
-    private ConfigurationClient configurationClient(DockerContainer mockSmtp) {
-        return ConfigurationClient.from(
-            Host.from(mockSmtp.getHostIp(),
-                mockSmtp.getMappedPort(8000)));
-    }
 }
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/dsn/DSNRemoteIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/dsn/DSNRemoteIntegrationTest.java
index 3b79bc0..a97ffb2 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/dsn/DSNRemoteIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/dsn/DSNRemoteIntegrationTest.java
@@ -28,7 +28,6 @@ import static org.apache.james.mock.smtp.server.ConfigurationClient.BehaviorsPar
 import static org.apache.james.mock.smtp.server.ConfigurationClient.BehaviorsParamsBuilder.ResponseStep.serviceNotAvailable;
 import static org.apache.james.mock.smtp.server.model.Condition.MATCH_ALL;
 import static org.apache.james.mock.smtp.server.model.SMTPCommand.RCPT_TO;
-import static org.apache.james.util.docker.Images.MOCK_SMTP_SERVER;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.awaitility.Durations.FIVE_SECONDS;
 
@@ -47,6 +46,8 @@ import org.apache.james.mailets.configuration.SmtpConfiguration;
 import org.apache.james.mock.smtp.server.ConfigurationClient;
 import org.apache.james.mock.smtp.server.model.SMTPExtension;
 import org.apache.james.mock.smtp.server.model.SMTPExtensions;
+import org.apache.james.mock.smtp.server.testing.MockSmtpServerExtension;
+import org.apache.james.mock.smtp.server.testing.MockSmtpServerExtension.DockerMockSmtp;
 import org.apache.james.modules.protocols.ImapGuiceProbe;
 import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.smtpserver.dsn.DSNEhloHook;
@@ -64,8 +65,6 @@ import org.apache.james.transport.matchers.DSNFailureRequested;
 import org.apache.james.transport.matchers.IsRemoteDeliveryPermanentError;
 import org.apache.james.transport.matchers.IsRemoteDeliveryTemporaryError;
 import org.apache.james.transport.matchers.RecipientIsLocal;
-import org.apache.james.util.Host;
-import org.apache.james.util.docker.DockerContainer;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.SMTPMessageSender;
 import org.apache.james.utils.TestIMAPClient;
@@ -92,11 +91,10 @@ class DSNRemoteIntegrationTest {
     private InMemoryDNSService inMemoryDNSService;
     private ConfigurationClient mockSMTPConfiguration;
 
-    @RegisterExtension
-    public static DockerContainer mockSmtp = DockerContainer.fromName(MOCK_SMTP_SERVER)
-        .withLogConsumer(outputFrame -> LOGGER.debug("MockSMTP 1: " + outputFrame.getUtf8String()));
 
     @RegisterExtension
+    public static MockSmtpServerExtension mockSmtpExtension = new MockSmtpServerExtension();
+    @RegisterExtension
     public TestIMAPClient testIMAPClient = new TestIMAPClient();
     @RegisterExtension
     public SMTPMessageSender messageSender = new SMTPMessageSender(DEFAULT_DOMAIN);
@@ -104,10 +102,10 @@ class DSNRemoteIntegrationTest {
     private TemporaryJamesServer jamesServer;
 
     @BeforeEach
-    void setUp(@TempDir File temporaryFolder) throws Exception {
+    void setUp(@TempDir File temporaryFolder, DockerMockSmtp mockSmtp) throws Exception {
         inMemoryDNSService = new InMemoryDNSService()
             .registerMxRecord(DEFAULT_DOMAIN, LOCALHOST_IP)
-            .registerMxRecord(ANOTHER_DOMAIN, mockSmtp.getContainerIp());
+            .registerMxRecord(ANOTHER_DOMAIN, mockSmtp.getIPAddress());
 
         jamesServer = TemporaryJamesServer.builder()
             .withBase(SMTP_AND_IMAP_MODULE)
@@ -157,10 +155,10 @@ class DSNRemoteIntegrationTest {
             .fluent()
             .addDomain(DEFAULT_DOMAIN)
             .addUser(FROM, PASSWORD);
-        mockSMTPConfiguration = configurationClient(mockSmtp);
+        mockSMTPConfiguration = mockSmtp.getConfigurationClient();
         mockSMTPConfiguration.setSMTPExtensions(SMTPExtensions.of(SMTPExtension.of("dsn")));
 
-        assertThat(mockSMTPConfiguration.version()).isEqualTo("0.2");
+        assertThat(mockSMTPConfiguration.version()).isEqualTo("0.4");
     }
 
     private ProcessorConfiguration.Builder directResolutionTransport() {
@@ -391,12 +389,5 @@ class DSNRemoteIntegrationTest {
     @AfterEach
     void tearDown() {
         jamesServer.shutdown();
-        mockSMTPConfiguration.cleanServer();
-    }
-
-    private ConfigurationClient configurationClient(DockerContainer mockSmtp) {
-        return ConfigurationClient.from(
-            Host.from(mockSmtp.getHostIp(),
-                mockSmtp.getMappedPort(8000)));
     }
 }
diff --git a/server/mailet/mock-smtp-server/pom.xml b/server/mailet/mock-smtp-server/pom.xml
index 53a05c6..9acfed5 100644
--- a/server/mailet/mock-smtp-server/pom.xml
+++ b/server/mailet/mock-smtp-server/pom.xml
@@ -54,6 +54,10 @@
             <artifactId>testing-base</artifactId>
         </dependency>
         <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+        </dependency>
+        <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
         </dependency>
@@ -119,6 +123,7 @@
             <plugin>
                 <groupId>com.google.cloud.tools</groupId>
                 <artifactId>jib-maven-plugin</artifactId>
+                <version>2.7.0</version>
                 <configuration>
                     <from>
                         <image>adoptopenjdk:11-jre-hotspot</image>
@@ -126,7 +131,7 @@
                     <to>
                         <image>linagora/mock-smtp-server</image>
                         <tags>
-                            <tag>0.3</tag>
+                            <tag>0.4</tag>
                         </tags>
                     </to>
                     <container>
@@ -135,7 +140,18 @@
                             <port>25</port>
                             <port>8000</port>
                         </ports>
+                        <jvmFlags>
+                            <jvmFlag>-Dlogback.configurationFile=/root/logback.xml</jvmFlag>
+                        </jvmFlags>
                     </container>
+                    <extraDirectories>
+                        <paths>
+                            <path>
+                                <from>src/main/jib</from>
+                                <into>/root</into>
+                            </path>
+                        </paths>
+                    </extraDirectories>
                 </configuration>
             </plugin>
         </plugins>
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
index 46925e0..ca5add3 100644
--- 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
@@ -174,7 +174,7 @@ public class HTTPConfigurationServer {
 
     private Publisher<Void> getVersion(HttpServerRequest req, HttpServerResponse res) {
         return res.status(OK)
-            .sendString(Mono.just("0.2"));
+            .sendString(Mono.just("0.4"));
     }
 
     private Publisher<Void> putBehaviors(HttpServerRequest req, HttpServerResponse res) {
diff --git a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSMTPServerMain.java b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSMTPServerMain.java
index 0dd6621..1916444 100644
--- a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSMTPServerMain.java
+++ b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSMTPServerMain.java
@@ -20,12 +20,15 @@
 package org.apache.james.mock.smtp.server;
 
 import org.apache.james.util.Port;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class MockSMTPServerMain {
+    private static final Logger LOGGER = LoggerFactory.getLogger(MockSMTPServerMain.class);
     private static final Port HTTP_PORT = new Port(8000);
     private static final Port SMTP_PORT = new Port(25);
 
-    public static void main(String[] args) throws Exception {
+    public static void main(String[] args) {
         SMTPBehaviorRepository behaviorRepository = new SMTPBehaviorRepository();
         ReceivedMailRepository receivedMailRepository = new ReceivedMailRepository();
 
@@ -33,5 +36,6 @@ public class MockSMTPServerMain {
         MockSMTPServer mockSMTPServer = MockSMTPServer.onPort(behaviorRepository, receivedMailRepository, SMTP_PORT);
         httpConfigurationServer.start();
         mockSMTPServer.start();
+        LOGGER.info("Mock SMTP server started");
     }
 }
diff --git a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/testing/MockSmtpServerExtension.java b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/testing/MockSmtpServerExtension.java
index 8095c06..cf2c5a1 100644
--- a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/testing/MockSmtpServerExtension.java
+++ b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/testing/MockSmtpServerExtension.java
@@ -32,6 +32,7 @@ import org.junit.jupiter.api.extension.ParameterResolutionException;
 import org.junit.jupiter.api.extension.ParameterResolver;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.testcontainers.containers.wait.strategy.Wait;
 
 public class MockSmtpServerExtension implements AfterEachCallback, BeforeAllCallback,
     AfterAllCallback, ParameterResolver {
@@ -43,7 +44,8 @@ public class MockSmtpServerExtension implements AfterEachCallback, BeforeAllCall
 
         DockerMockSmtp() {
             mockSmtpServer = DockerContainer.fromName(Images.MOCK_SMTP_SERVER)
-                .withLogConsumer(outputFrame -> LOGGER.debug("MockSMTP: " + outputFrame.getUtf8String()));
+                .withLogConsumer(outputFrame -> LOGGER.debug("MockSMTP: " + outputFrame.getUtf8String()))
+                .waitingFor(Wait.forListeningPort());
         }
 
         void start() {
@@ -96,4 +98,8 @@ public class MockSmtpServerExtension implements AfterEachCallback, BeforeAllCall
     public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
         return dockerMockSmtp;
     }
+
+    public DockerMockSmtp getMockSmtp() {
+        return dockerMockSmtp;
+    }
 }
diff --git a/server/mailet/mock-smtp-server/src/resources/logback.xml b/server/mailet/mock-smtp-server/src/main/jib/logback.xml
similarity index 100%
rename from server/mailet/mock-smtp-server/src/resources/logback.xml
rename to server/mailet/mock-smtp-server/src/main/jib/logback.xml
diff --git a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ConfigurationClientTest.java b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ConfigurationClientTest.java
index 0f18c82..c85a80d 100644
--- a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ConfigurationClientTest.java
+++ b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ConfigurationClientTest.java
@@ -139,7 +139,7 @@ class ConfigurationClientTest {
         mailRepository.store(MailsFixutre.MAIL_2);
 
         assertThat(testee.version())
-            .isEqualTo("0.2");
+            .isEqualTo("0.4");
     }
 
     @Test
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
index 29b99bc..6d4ddef 100644
--- 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
@@ -28,7 +28,6 @@ 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.apache.james.mock.smtp.server.Fixture.JSON_MAIL;
-import static org.apache.james.mock.smtp.server.Fixture.JSON_MAILS_LIST;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.hasSize;
 
@@ -85,7 +84,7 @@ class HTTPConfigurationServerTest {
                 .basePath("/version")
                 .get()
             .then()
-                .body(equalTo("0.2"));
+                .body(equalTo("0.4"));
         }
 
         @Test
diff --git a/server/testing/src/main/java/org/apache/james/util/docker/Images.java b/server/testing/src/main/java/org/apache/james/util/docker/Images.java
index ccd946a..b0f603b 100644
--- a/server/testing/src/main/java/org/apache/james/util/docker/Images.java
+++ b/server/testing/src/main/java/org/apache/james/util/docker/Images.java
@@ -27,5 +27,5 @@ public interface Images {
     String NGINX = "nginx:1.15.1";
     String TIKA = "apache/tika:1.24";
     String SPAMASSASSIN = "dinkel/spamassassin:3.4.0";
-    String MOCK_SMTP_SERVER = "linagora/mock-smtp-server:0.3";
+    String MOCK_SMTP_SERVER = "linagora/mock-smtp-server:0.4";
 }


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