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/05/15 07:42:08 UTC

[james-project] 02/05: JAMES-2754 add validate deployment test with mail sent with smtp

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 42616098ed0ca459c0d4ed3af70523237eb6c169
Author: RĂ©mi Kowalski <rk...@linagora.com>
AuthorDate: Fri May 3 14:19:27 2019 +0200

    JAMES-2754 add validate deployment test with mail sent with smtp
---
 .../external/james/DeploymentValidation.java       | 40 ++++++++++++++++++++++
 .../DockerDeploymentValidationGuiceJPATest.java    | 14 +++++++-
 .../DockerDeploymentValidationSpringJPATest.java   | 14 +++++++-
 .../james/JamesDeploymentValidationTest.java       | 10 ++++--
 4 files changed, 73 insertions(+), 5 deletions(-)

diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DeploymentValidation.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DeploymentValidation.java
index 20a4515..2c01407 100644
--- a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DeploymentValidation.java
+++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DeploymentValidation.java
@@ -19,11 +19,21 @@
 
 package org.apache.james.mpt.imapmailbox.external.james;
 
+import static org.awaitility.Duration.ONE_HUNDRED_MILLISECONDS;
+import static org.awaitility.Duration.TEN_SECONDS;
+
+import java.io.IOException;
 import java.util.Locale;
 
+import org.apache.commons.net.imap.IMAPClient;
 import org.apache.james.mpt.api.ImapHostSystem;
 import org.apache.james.mpt.imapmailbox.external.james.host.SmtpHostSystem;
+import org.apache.james.mpt.imapmailbox.external.james.host.external.ExternalJamesConfiguration;
 import org.apache.james.mpt.script.SimpleScriptedTestProtocol;
+import org.apache.james.utils.SMTPMessageSender;
+import org.awaitility.Awaitility;
+import org.awaitility.Duration;
+import org.awaitility.core.ConditionFactory;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -33,17 +43,33 @@ public abstract class DeploymentValidation {
     public static final String USER = "imapuser";
     public static final String USER_ADDRESS = USER + "@" + DOMAIN;
     public static final String PASSWORD = "password";
+    private static final String INBOX = "INBOX";
+    private static final String ONE_MAIL = "* 1 EXISTS";
 
     protected abstract ImapHostSystem createImapHostSystem();
 
     protected abstract SmtpHostSystem createSmtpHostSystem();
 
+    protected abstract ExternalJamesConfiguration getConfiguration();
+
     private ImapHostSystem system;
+    private SmtpHostSystem smtpSystem;
     private SimpleScriptedTestProtocol simpleScriptedTestProtocol;
+    private IMAPClient imapClient = new IMAPClient();
+
+    protected static final Duration slowPacedPollInterval = ONE_HUNDRED_MILLISECONDS;
+    protected static final ConditionFactory calmlyAwait = Awaitility.with()
+        .pollInterval(slowPacedPollInterval)
+        .and()
+        .with()
+        .pollDelay(slowPacedPollInterval)
+        .await();
+    protected static final ConditionFactory awaitAtMostTenSeconds = calmlyAwait.atMost(TEN_SECONDS);
 
     @Before
     public void setUp() throws Exception {
         system = createImapHostSystem();
+        smtpSystem = createSmtpHostSystem();
 
         simpleScriptedTestProtocol = new SimpleScriptedTestProtocol("/org/apache/james/imap/scripts/", system)
             .withUser(USER_ADDRESS, PASSWORD)
@@ -55,4 +81,18 @@ public abstract class DeploymentValidation {
         simpleScriptedTestProtocol.run("ValidateDeployment");
     }
 
+    @Test
+    public void validateDeploymentWithMailsFromSmtp() throws Exception {
+        SMTPMessageSender smtpMessageSender = new SMTPMessageSender("another-domain");
+        smtpSystem.connect(smtpMessageSender).sendMessage("test@" + DOMAIN, USER_ADDRESS);
+        imapClient.connect(getConfiguration().getAddress(), getConfiguration().getImapPort().getValue());
+        imapClient.login(USER_ADDRESS, PASSWORD);
+        awaitAtMostTenSeconds.until(this::checkMailDelivery);
+    }
+
+    private Boolean checkMailDelivery() throws IOException {
+        imapClient.select(INBOX);
+        String replyString = imapClient.getReplyString();
+        return replyString.contains(ONE_MAIL);
+    }
 }
diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerDeploymentValidationGuiceJPATest.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerDeploymentValidationGuiceJPATest.java
index 13df38e..c9e74c7 100644
--- a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerDeploymentValidationGuiceJPATest.java
+++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerDeploymentValidationGuiceJPATest.java
@@ -22,6 +22,7 @@ package org.apache.james.mpt.imapmailbox.external.james;
 import org.apache.james.mpt.api.ImapHostSystem;
 import org.apache.james.mpt.imapmailbox.external.james.host.ProvisioningAPI;
 import org.apache.james.mpt.imapmailbox.external.james.host.SmtpHostSystem;
+import org.apache.james.mpt.imapmailbox.external.james.host.external.ExternalJamesConfiguration;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Ignore;
@@ -47,7 +48,7 @@ public class DockerDeploymentValidationGuiceJPATest extends DeploymentValidation
         dockerJamesRule.start();
 
         ProvisioningAPI provisioningAPI = dockerJamesRule.cliJarDomainsAndUsersAdder();
-        Injector injector = Guice.createInjector(new ExternalJamesModule(dockerJamesRule.getConfiguration(), provisioningAPI));
+        Injector injector = Guice.createInjector(new ExternalJamesModule(getConfiguration(), provisioningAPI));
         provisioningAPI.addDomain(DOMAIN);
         provisioningAPI.addUser(USER_ADDRESS, PASSWORD);
         system = injector.getInstance(ImapHostSystem.class);
@@ -63,6 +64,12 @@ public class DockerDeploymentValidationGuiceJPATest extends DeploymentValidation
     public void validateDeployment() throws Exception {
     }
 
+    @Test
+    @Ignore("Not to be run on CI, as it will not use the current build. Uncomment to test on local dev environment")
+    @Override
+    public void validateDeploymentWithMailsFromSmtp() throws Exception {
+    }
+
     @Override
     protected ImapHostSystem createImapHostSystem() {
         return system;
@@ -73,6 +80,11 @@ public class DockerDeploymentValidationGuiceJPATest extends DeploymentValidation
         return smtpHostSystem;
     }
 
+    @Override
+    protected ExternalJamesConfiguration getConfiguration() {
+        return dockerJamesRule.getConfiguration();
+    }
+
     @After
     public void tearDown() throws Exception {
         system.afterTest();
diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerDeploymentValidationSpringJPATest.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerDeploymentValidationSpringJPATest.java
index 0f4e86a..d99e546 100644
--- a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerDeploymentValidationSpringJPATest.java
+++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerDeploymentValidationSpringJPATest.java
@@ -22,6 +22,7 @@ package org.apache.james.mpt.imapmailbox.external.james;
 import org.apache.james.mpt.api.ImapHostSystem;
 import org.apache.james.mpt.imapmailbox.external.james.host.ProvisioningAPI;
 import org.apache.james.mpt.imapmailbox.external.james.host.SmtpHostSystem;
+import org.apache.james.mpt.imapmailbox.external.james.host.external.ExternalJamesConfiguration;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Ignore;
@@ -47,7 +48,7 @@ public class DockerDeploymentValidationSpringJPATest extends DeploymentValidatio
         dockerJamesRule.start();
 
         ProvisioningAPI provisioningAPI = dockerJamesRule.cliShellDomainsAndUsersAdder();
-        Injector injector = Guice.createInjector(new ExternalJamesModule(dockerJamesRule.getConfiguration(), provisioningAPI));
+        Injector injector = Guice.createInjector(new ExternalJamesModule(getConfiguration(), provisioningAPI));
         system = injector.getInstance(ImapHostSystem.class);
         provisioningAPI.addDomain(DOMAIN);
         provisioningAPI.addUser(USER_ADDRESS, PASSWORD);
@@ -63,6 +64,12 @@ public class DockerDeploymentValidationSpringJPATest extends DeploymentValidatio
     public void validateDeployment() throws Exception {
     }
 
+    @Test
+    @Ignore("Not to be run on CI, as it will not use the current build. Uncomment to test on local dev environment")
+    @Override
+    public void validateDeploymentWithMailsFromSmtp() throws Exception {
+    }
+
     @Override
     protected ImapHostSystem createImapHostSystem() {
         return system;
@@ -73,6 +80,11 @@ public class DockerDeploymentValidationSpringJPATest extends DeploymentValidatio
         return smtpHostSystem;
     }
 
+    @Override
+    protected ExternalJamesConfiguration getConfiguration() {
+        return dockerJamesRule.getConfiguration();
+    }
+
     @After
     public void tearDown() throws Exception {
         system.afterTest();
diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/JamesDeploymentValidationTest.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/JamesDeploymentValidationTest.java
index adf9940..5afc1ee 100644
--- a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/JamesDeploymentValidationTest.java
+++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/JamesDeploymentValidationTest.java
@@ -20,11 +20,10 @@
 package org.apache.james.mpt.imapmailbox.external.james;
 
 import org.apache.james.mpt.api.ImapHostSystem;
+import org.apache.james.mpt.imapmailbox.external.james.host.SmtpHostSystem;
 import org.apache.james.mpt.imapmailbox.external.james.host.external.ExternalJamesConfiguration;
-import org.apache.james.mpt.imapmailbox.external.james.host.external.NoopDomainsAndUserAdder;
 import org.apache.james.mpt.imapmailbox.external.james.host.external.ExternalJamesConfigurationEnvironnementVariables;
-import org.apache.james.mpt.imapmailbox.external.james.host.SmtpHostSystem;
-import org.apache.james.utils.SMTPMessageSender;
+import org.apache.james.mpt.imapmailbox.external.james.host.external.NoopDomainsAndUserAdder;
 import org.junit.After;
 import org.junit.Before;
 
@@ -58,6 +57,11 @@ public class JamesDeploymentValidationTest extends DeploymentValidation {
         return smtpHostSystem;
     }
 
+    @Override
+    protected ExternalJamesConfiguration getConfiguration() {
+        return configuration;
+    }
+
     @After
     public void tearDown() throws Exception {
         system.afterTest();


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