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 2018/01/05 02:57:00 UTC
[41/44] james-project git commit: JAMES-2262 Provide a FakeSmtp
wrapper class
JAMES-2262 Provide a FakeSmtp wrapper class
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/1d9f9dfb
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1d9f9dfb
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1d9f9dfb
Branch: refs/heads/improve-mailet-testing-experience-v1
Commit: 1d9f9dfb2e33a2c0c95743b40ef9233a15340515
Parents: b5efd2f
Author: benwa <bt...@linagora.com>
Authored: Mon Dec 25 11:11:08 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Fri Jan 5 09:34:39 2018 +0700
----------------------------------------------------------------------
.../apache/james/mpt/smtp/ForwardSmtpTest.java | 25 ++----
.../GatewayRemoteDeliveryIntegrationTest.java | 52 ++++-------
.../james/smtp/SmtpAuthorizedAddressesTest.java | 27 ++----
.../transport/mailets/GroupMappingTest.java | 40 ++-------
.../jmap/VacationRelayIntegrationTest.java | 20 ++---
server/testing/pom.xml | 9 ++
.../java/org/apache/james/utils/FakeSmtp.java | 91 ++++++++++++++++++++
.../org/apache/james/utils/FakeSmtpHelper.java | 56 ------------
8 files changed, 144 insertions(+), 176 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/1d9f9dfb/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java
----------------------------------------------------------------------
diff --git a/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java b/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java
index bcfdd5d..37b691a 100644
--- a/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java
+++ b/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java
@@ -25,20 +25,14 @@ import static org.hamcrest.Matchers.equalTo;
import java.util.Locale;
import org.apache.james.mpt.script.SimpleScriptedTestProtocol;
-import org.apache.james.util.docker.Images;
-import org.apache.james.util.docker.SwarmGenericContainer;
-import org.apache.james.utils.FakeSmtpHelper;
+import org.apache.james.utils.FakeSmtp;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
-import org.junit.rules.RuleChain;
-import org.junit.rules.TemporaryFolder;
-import org.testcontainers.containers.wait.HostPortWaitStrategy;
import com.jayway.awaitility.Awaitility;
import com.jayway.awaitility.Duration;
import com.jayway.awaitility.core.ConditionFactory;
-import com.jayway.restassured.RestAssured;
public abstract class ForwardSmtpTest {
@@ -47,14 +41,9 @@ public abstract class ForwardSmtpTest {
public static final String USER_AT_DOMAIN = USER + "@" + DOMAIN;
public static final String PASSWORD = "secret";
- private final TemporaryFolder folder = new TemporaryFolder();
- private final SwarmGenericContainer fakeSmtp = new SwarmGenericContainer(Images.FAKE_SMTP)
- .withExposedPorts(25)
- .withAffinityToContainer()
- .waitingFor(new HostPortWaitStrategy());
-
@Rule
- public final RuleChain chain = RuleChain.outerRule(folder).around(fakeSmtp);
+ public FakeSmtp fakeSmtp = new FakeSmtp();
+
private ConditionFactory calmlyAwait;
protected abstract SmtpHostSystem createSmtpHostSystem();
@@ -71,11 +60,9 @@ public abstract class ForwardSmtpTest {
.withUser(USER_AT_DOMAIN, PASSWORD);
hostSystem.getInMemoryDnsService()
- .registerMxRecord("yopmail.com", fakeSmtp.getContainerIp());
+ .registerMxRecord("yopmail.com", fakeSmtp.getContainer().getContainerIp());
hostSystem.addAddressMapping(USER, DOMAIN, "ray@yopmail.com");
- RestAssured.requestSpecification = FakeSmtpHelper.requestSpecification(fakeSmtp.getContainerIp());
-
Duration slowPacedPollInterval = FIVE_HUNDRED_MILLISECONDS;
calmlyAwait = Awaitility.with()
.pollInterval(slowPacedPollInterval)
@@ -84,7 +71,7 @@ public abstract class ForwardSmtpTest {
.pollDelay(slowPacedPollInterval)
.await();
- calmlyAwait.atMost(ONE_MINUTE).until(() -> fakeSmtp.tryConnect(25));
+ fakeSmtp.awaitStarted(calmlyAwait.atMost(ONE_MINUTE));
}
@Test
@@ -92,7 +79,7 @@ public abstract class ForwardSmtpTest {
scriptedTest.run("helo");
calmlyAwait.atMost(ONE_MINUTE).until(() ->
- FakeSmtpHelper.isReceived(response -> response
+ fakeSmtp.isReceived(response -> response
.body("[0].from", equalTo("matthieu@yopmail.com"))
.body("[0].subject", equalTo("test"))
.body("[0].text", equalTo("content"))));
http://git-wip-us.apache.org/repos/asf/james-project/blob/1d9f9dfb/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
index ff55d89..2eb4c77 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
@@ -19,7 +19,6 @@
package org.apache.james.mailets;
-import static com.jayway.restassured.RestAssured.when;
import static org.apache.james.MemoryJamesServerMain.SMTP_AND_IMAP_MODULE;
import static org.apache.james.MemoryJamesServerMain.SMTP_ONLY_MODULE;
import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
@@ -28,11 +27,10 @@ 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.SMTP_PORT;
import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasSize;
-import java.util.concurrent.TimeUnit;
-
import org.apache.james.dnsservice.api.DNSService;
import org.apache.james.dnsservice.api.InMemoryDNSService;
import org.apache.james.mailets.configuration.CommonProcessors;
@@ -41,21 +39,15 @@ import org.apache.james.mailets.configuration.MailetContainer;
import org.apache.james.mailets.configuration.ProcessorConfiguration;
import org.apache.james.probe.DataProbe;
import org.apache.james.transport.matchers.All;
-import org.apache.james.util.docker.Images;
-import org.apache.james.util.docker.SwarmGenericContainer;
import org.apache.james.utils.DataProbeImpl;
-import org.apache.james.utils.FakeSmtpHelper;
+import org.apache.james.utils.FakeSmtp;
import org.apache.james.utils.IMAPMessageReader;
import org.apache.james.utils.SMTPMessageSender;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
-import org.junit.rules.RuleChain;
import org.junit.rules.TemporaryFolder;
-import org.testcontainers.containers.wait.HostPortWaitStrategy;
-
-import com.jayway.restassured.RestAssured;
public class GatewayRemoteDeliveryIntegrationTest {
private static final String JAMES_ANOTHER_DOMAIN = "james.com";
@@ -69,15 +61,8 @@ public class GatewayRemoteDeliveryIntegrationTest {
public IMAPMessageReader imapMessageReader = new IMAPMessageReader();
@Rule
public SMTPMessageSender messageSender = new SMTPMessageSender(DEFAULT_DOMAIN);
-
- private final TemporaryFolder smtpFolder = new TemporaryFolder();
- private final SwarmGenericContainer fakeSmtp = new SwarmGenericContainer(Images.FAKE_SMTP)
- .withExposedPorts(25)
- .withAffinityToContainer()
- .waitingFor(new HostPortWaitStrategy());
-
@Rule
- public final RuleChain chain = RuleChain.outerRule(smtpFolder).around(fakeSmtp);
+ public FakeSmtp fakeSmtp = new FakeSmtp();
private TemporaryJamesServer jamesServer;
private DataProbe dataProbe;
@@ -85,12 +70,10 @@ public class GatewayRemoteDeliveryIntegrationTest {
@Before
public void setup() throws Exception {
- awaitOneMinute.until(() -> fakeSmtp.tryConnect(25));
-
- RestAssured.requestSpecification = FakeSmtpHelper.requestSpecification(fakeSmtp.getContainerIp());
+ fakeSmtp.awaitStarted(awaitOneMinute);
inMemoryDNSService = new InMemoryDNSService()
- .registerMxRecord(JAMES_ANOTHER_DOMAIN, fakeSmtp.getContainerIp());
+ .registerMxRecord(JAMES_ANOTHER_DOMAIN, fakeSmtp.getContainer().getContainerIp());
}
@After
@@ -102,7 +85,7 @@ public class GatewayRemoteDeliveryIntegrationTest {
@Test
public void outgoingMailShouldTransitThroughGatewayWhenNoPort() throws Exception {
- String gatewayProperty = fakeSmtp.getContainerIp();
+ String gatewayProperty = fakeSmtp.getContainer().getContainerIp();
jamesServer = TemporaryJamesServer.builder()
.withBase(SMTP_ONLY_MODULE)
@@ -121,7 +104,7 @@ public class GatewayRemoteDeliveryIntegrationTest {
@Test
public void outgoingMailShouldTransitThroughGatewayWhenPort() throws Exception {
- String gatewayProperty = fakeSmtp.getContainerIp() + ":25";
+ String gatewayProperty = fakeSmtp.getContainer().getContainerIp() + ":25";
jamesServer = TemporaryJamesServer.builder()
.withBase(SMTP_ONLY_MODULE)
@@ -140,7 +123,7 @@ public class GatewayRemoteDeliveryIntegrationTest {
@Test
public void outgoingMailShouldTransitThroughGatewayWhenSeveralIps() throws Exception {
- String gatewayProperty = fakeSmtp.getContainerIp() + ",invalid.domain";
+ String gatewayProperty = fakeSmtp.getContainer().getContainerIp() + ",invalid.domain";
jamesServer = TemporaryJamesServer.builder()
.withBase(SMTP_ONLY_MODULE)
@@ -159,7 +142,7 @@ public class GatewayRemoteDeliveryIntegrationTest {
@Test
public void outgoingMailShouldFallbackToSecondGatewayWhenFirstInvalid() throws Exception {
- String gatewayProperty = "invalid.domain," + fakeSmtp.getContainerIp();
+ String gatewayProperty = "invalid.domain," + fakeSmtp.getContainer().getContainerIp();
jamesServer = TemporaryJamesServer.builder()
.withBase(SMTP_ONLY_MODULE)
@@ -181,7 +164,7 @@ public class GatewayRemoteDeliveryIntegrationTest {
String gatewayProperty = "invalid.domain";
jamesServer = TemporaryJamesServer.builder()
- .withBase(SMTP_ONLY_MODULE)
+ .withBase(SMTP_AND_IMAP_MODULE)
.withOverrides(binder -> binder.bind(DNSService.class).toInstance(inMemoryDNSService))
.withMailetContainer(generateMailetContainerConfiguration(gatewayProperty))
.build(temporaryFolder);
@@ -193,12 +176,13 @@ public class GatewayRemoteDeliveryIntegrationTest {
messageSender.connect(LOCALHOST_IP, SMTP_PORT)
.sendMessage(FROM, RECIPIENT);
- Thread.sleep(TimeUnit.SECONDS.toMillis(5));
- when()
- .get("/api/email")
- .then()
- .statusCode(200)
- .body("", hasSize(0));
+ // Wait for bounce being sent before checking no email is sent
+ imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+ .login(FROM, PASSWORD)
+ .select(IMAPMessageReader.INBOX)
+ .awaitMessage(awaitOneMinute);
+ assertThat(fakeSmtp.isReceived(response -> response.body("", hasSize(0))))
+ .isTrue();
}
@Test
@@ -276,7 +260,7 @@ public class GatewayRemoteDeliveryIntegrationTest {
}
private boolean messageIsReceivedByTheSmtpServer() {
- return FakeSmtpHelper.isReceived(response -> response
+ return fakeSmtp.isReceived(response -> response
.body("", hasSize(1))
.body("[0].from", equalTo(FROM))
.body("[0].subject", equalTo("test")));
http://git-wip-us.apache.org/repos/asf/james-project/blob/1d9f9dfb/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
index 81b3b1c..5fef6bb 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
@@ -37,39 +37,26 @@ import org.apache.james.mailets.configuration.ProcessorConfiguration;
import org.apache.james.mailets.configuration.SmtpConfiguration;
import org.apache.james.probe.DataProbe;
import org.apache.james.transport.matchers.SMTPIsAuthNetwork;
-import org.apache.james.util.docker.Images;
-import org.apache.james.util.docker.SwarmGenericContainer;
import org.apache.james.utils.DataProbeImpl;
-import org.apache.james.utils.FakeSmtpHelper;
+import org.apache.james.utils.FakeSmtp;
import org.apache.james.utils.IMAPMessageReader;
import org.apache.james.utils.SMTPMessageSender;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
-import org.junit.rules.RuleChain;
import org.junit.rules.TemporaryFolder;
-import org.testcontainers.containers.wait.HostPortWaitStrategy;
-
-import com.jayway.restassured.RestAssured;
public class SmtpAuthorizedAddressesTest {
private static final String FROM = "fromuser@" + DEFAULT_DOMAIN;
private static final String TO = "to@any.com";
- private final TemporaryFolder smtpFolder = new TemporaryFolder();
- private final SwarmGenericContainer fakeSmtp = new SwarmGenericContainer(Images.FAKE_SMTP)
- .withExposedPorts(25)
- .withAffinityToContainer()
- .waitingFor(new HostPortWaitStrategy());
-
@Rule
- public RuleChain chain = RuleChain.outerRule(smtpFolder).around(fakeSmtp);
+ public FakeSmtp fakeSmtp = new FakeSmtp();
@Rule
public IMAPMessageReader imapMessageReader = new IMAPMessageReader();
@Rule
public SMTPMessageSender messageSender = new SMTPMessageSender(DEFAULT_DOMAIN);
-
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -77,9 +64,7 @@ public class SmtpAuthorizedAddressesTest {
@Before
public void setup() throws Exception {
- awaitOneMinute.until(() -> fakeSmtp.tryConnect(25));
-
- RestAssured.requestSpecification = FakeSmtpHelper.requestSpecification(fakeSmtp.getContainerIp());
+ fakeSmtp.awaitStarted(awaitOneMinute);
}
private void createJamesServer(SmtpConfiguration.Builder smtpConfiguration) throws Exception {
@@ -88,7 +73,7 @@ public class SmtpAuthorizedAddressesTest {
.addMailetsFrom(CommonProcessors.deliverOnlyTransport())
.addMailet(MailetConfiguration.remoteDeliveryBuilder()
.matcher(SMTPIsAuthNetwork.class)
- .addProperty("gateway", fakeSmtp.getContainerIp()))
+ .addProperty("gateway", fakeSmtp.getContainer().getContainerIp()))
.addMailet(MailetConfiguration.TO_BOUNCE));
jamesServer = TemporaryJamesServer.builder()
@@ -119,7 +104,7 @@ public class SmtpAuthorizedAddressesTest {
.sendMessage(FROM, TO)
.awaitSent(awaitOneMinute);
- awaitOneMinute.until(() -> FakeSmtpHelper.isReceived(response -> response
+ awaitOneMinute.until(() -> fakeSmtp.isReceived(response -> response
.body("", hasSize(1))
.body("[0].from", equalTo(FROM))
.body("[0].subject", equalTo("test"))));
@@ -147,7 +132,7 @@ public class SmtpAuthorizedAddressesTest {
.sendMessage(FROM, TO)
.awaitSent(awaitOneMinute);
- awaitOneMinute.until(() -> FakeSmtpHelper.isReceived(response -> response
+ awaitOneMinute.until(() -> fakeSmtp.isReceived(response -> response
.body("", hasSize(1))
.body("[0].from", equalTo(FROM))
.body("[0].subject", equalTo("test"))));
http://git-wip-us.apache.org/repos/asf/james-project/blob/1d9f9dfb/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
index 123560f..36dc533 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
@@ -19,19 +19,15 @@
package org.apache.james.transport.mailets;
-import static com.jayway.restassured.RestAssured.with;
import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
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.SMTP_PORT;
import static org.apache.james.mailets.configuration.Constants.awaitOneMinute;
-import static org.apache.james.mailets.configuration.Constants.calmlyAwait;
import static org.assertj.core.api.Assertions.assertThat;
import static org.hamcrest.Matchers.equalTo;
-import java.util.concurrent.TimeUnit;
-
import javax.mail.internet.MimeMessage;
import org.apache.james.jmap.mailet.VacationMailet;
@@ -45,9 +41,8 @@ import org.apache.james.modules.MailboxProbeImpl;
import org.apache.james.probe.DataProbe;
import org.apache.james.transport.matchers.All;
import org.apache.james.transport.matchers.RecipientIsLocal;
-import org.apache.james.util.docker.Images;
-import org.apache.james.util.docker.SwarmGenericContainer;
import org.apache.james.utils.DataProbeImpl;
+import org.apache.james.utils.FakeSmtp;
import org.apache.james.utils.IMAPMessageReader;
import org.apache.james.utils.SMTPMessageSender;
import org.apache.james.utils.WebAdminGuiceProbe;
@@ -59,7 +54,6 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
-import org.testcontainers.containers.wait.HostPortWaitStrategy;
import com.jayway.restassured.RestAssured;
import com.jayway.restassured.specification.RequestSpecification;
@@ -82,11 +76,7 @@ public class GroupMappingTest {
private RequestSpecification restApiRequest;
@Rule
- public final SwarmGenericContainer fakeSmtp = new SwarmGenericContainer(Images.FAKE_SMTP)
- .withExposedPorts(25)
- .withAffinityToContainer()
- .waitingFor(new HostPortWaitStrategy());
-
+ public final FakeSmtp fakeSmtp = new FakeSmtp();
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@Rule
@@ -107,13 +97,13 @@ public class GroupMappingTest {
.addMailetsFrom(CommonProcessors.deliverOnlyTransport())
.addMailet(MailetConfiguration.remoteDeliveryBuilder()
.matcher(All.class)
- .addProperty("gateway", fakeSmtp.getContainerIp())));
+ .addProperty("gateway", fakeSmtp.getContainer().getContainerIp())));
jamesServer = TemporaryJamesServer.builder()
.withMailetContainer(mailetContainer)
.build(temporaryFolder);
- awaitOneMinute.until(() -> fakeSmtp.tryConnect(25));
+ fakeSmtp.awaitStarted(awaitOneMinute);
dataProbe = jamesServer.getProbe(DataProbeImpl.class);
dataProbe.addDomain(DOMAIN1);
@@ -441,23 +431,9 @@ public class GroupMappingTest {
.recipient(GROUP_ON_DOMAIN1))
.awaitSent(awaitOneMinute);
- calmlyAwait.atMost(1, TimeUnit.MINUTES)
- .until(() -> {
- try {
- with()
- .baseUri("http://" + fakeSmtp.getContainerIp())
- .port(80)
- .get("/api/email")
- .then()
- .statusCode(200)
- .body("[0].from", equalTo(SENDER))
- .body("[0].to[0]", equalTo(externalMail))
- .body("[0].text", equalTo(MESSAGE_CONTENT));
-
- return true;
- } catch(AssertionError e) {
- return false;
- }
- });
+ fakeSmtp.isReceived(response -> response
+ .body("[0].from", equalTo(SENDER))
+ .body("[0].to[0]", equalTo(externalMail))
+ .body("[0].text", equalTo(MESSAGE_CONTENT)));
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/1d9f9dfb/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java
index dda4ddd..eb1c812 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java
@@ -19,6 +19,7 @@
package org.apache.james.jmap;
+import static com.jayway.awaitility.Duration.ONE_MINUTE;
import static org.hamcrest.Matchers.equalTo;
import java.util.concurrent.TimeUnit;
@@ -32,21 +33,17 @@ import org.apache.james.mailbox.model.MailboxConstants;
import org.apache.james.mailbox.store.probe.MailboxProbe;
import org.apache.james.modules.MailboxProbeImpl;
import org.apache.james.probe.DataProbe;
-import org.apache.james.util.docker.Images;
-import org.apache.james.util.docker.SwarmGenericContainer;
import org.apache.james.utils.DataProbeImpl;
-import org.apache.james.utils.FakeSmtpHelper;
+import org.apache.james.utils.FakeSmtp;
import org.apache.james.utils.JmapGuiceProbe;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
-import org.testcontainers.containers.wait.HostPortWaitStrategy;
import com.jayway.awaitility.Awaitility;
import com.jayway.awaitility.Duration;
import com.jayway.awaitility.core.ConditionFactory;
-import com.jayway.restassured.RestAssured;
public abstract class VacationRelayIntegrationTest {
@@ -58,12 +55,9 @@ public abstract class VacationRelayIntegrationTest {
private static final String LOCALHOST_IP = "127.0.0.1";
private static final int SMTP_PORT = 1025;
- private static final int REST_SMTP_SINK_PORT = 25;
@Rule
- public final SwarmGenericContainer fakeSmtp = new SwarmGenericContainer(Images.FAKE_SMTP)
- .withExposedPorts(REST_SMTP_SINK_PORT)
- .waitingFor(new HostPortWaitStrategy());
+ public FakeSmtp fakeSmtp = new FakeSmtp();
private ConditionFactory calmlyAwait;
@@ -79,7 +73,7 @@ public abstract class VacationRelayIntegrationTest {
@Before
public void setUp() throws Exception {
getInMemoryDns()
- .registerMxRecord("yopmail.com", fakeSmtp.getContainerIp());
+ .registerMxRecord("yopmail.com", fakeSmtp.getContainer().getContainerIp());
guiceJamesServer = getJmapServer();
guiceJamesServer.start();
@@ -94,8 +88,6 @@ public abstract class VacationRelayIntegrationTest {
jmapGuiceProbe = guiceJamesServer.getProbe(JmapGuiceProbe.class);
- RestAssured.requestSpecification = FakeSmtpHelper.requestSpecification(fakeSmtp.getContainerIp());
-
Duration slowPacedPollInterval = Duration.FIVE_HUNDRED_MILLISECONDS;
calmlyAwait = Awaitility
.with()
@@ -103,7 +95,7 @@ public abstract class VacationRelayIntegrationTest {
.and()
.pollDelay(slowPacedPollInterval).await();
- calmlyAwait.atMost(Duration.ONE_MINUTE).until(() -> fakeSmtp.tryConnect(25));
+ fakeSmtp.awaitStarted(calmlyAwait.atMost(ONE_MINUTE));
}
@After
@@ -130,7 +122,7 @@ public abstract class VacationRelayIntegrationTest {
calmlyAwait.atMost(1, TimeUnit.MINUTES)
.until(() ->
- FakeSmtpHelper.isReceived(response -> response
+ fakeSmtp.isReceived(response -> response
.body("[0].from", equalTo(USER_WITH_DOMAIN))
.body("[0].to[0]", equalTo(externalMail))
.body("[0].text", equalTo(REASON))));
http://git-wip-us.apache.org/repos/asf/james-project/blob/1d9f9dfb/server/testing/pom.xml
----------------------------------------------------------------------
diff --git a/server/testing/pom.xml b/server/testing/pom.xml
index f989249..c8db6e3 100644
--- a/server/testing/pom.xml
+++ b/server/testing/pom.xml
@@ -41,6 +41,11 @@
<type>test-jar</type>
</dependency>
<dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>james-server-util-java8</artifactId>
+ <type>test-jar</type>
+ </dependency>
+ <dependency>
<groupId>com.jayway.awaitility</groupId>
<artifactId>awaitility</artifactId>
</dependency>
@@ -70,6 +75,10 @@
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.testcontainers</groupId>
+ <artifactId>testcontainers</artifactId>
+ </dependency>
</dependencies>
</project>
http://git-wip-us.apache.org/repos/asf/james-project/blob/1d9f9dfb/server/testing/src/main/java/org/apache/james/utils/FakeSmtp.java
----------------------------------------------------------------------
diff --git a/server/testing/src/main/java/org/apache/james/utils/FakeSmtp.java b/server/testing/src/main/java/org/apache/james/utils/FakeSmtp.java
new file mode 100644
index 0000000..b84ac9f
--- /dev/null
+++ b/server/testing/src/main/java/org/apache/james/utils/FakeSmtp.java
@@ -0,0 +1,91 @@
+/****************************************************************
+ * 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.utils;
+
+import static com.jayway.restassured.RestAssured.given;
+import static com.jayway.restassured.config.EncoderConfig.encoderConfig;
+import static com.jayway.restassured.config.RestAssuredConfig.newConfig;
+
+import java.util.function.Function;
+
+import org.apache.james.util.docker.Images;
+import org.apache.james.util.docker.SwarmGenericContainer;
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+import org.testcontainers.containers.wait.HostPortWaitStrategy;
+
+import com.google.common.base.Charsets;
+import com.jayway.awaitility.core.ConditionFactory;
+import com.jayway.restassured.builder.RequestSpecBuilder;
+import com.jayway.restassured.builder.ResponseSpecBuilder;
+import com.jayway.restassured.http.ContentType;
+import com.jayway.restassured.response.ValidatableResponse;
+import com.jayway.restassured.specification.RequestSpecification;
+import com.jayway.restassured.specification.ResponseSpecification;
+
+public class FakeSmtp implements TestRule {
+ private static final int SMTP_PORT = 25;
+ private static final ResponseSpecification RESPONSE_SPECIFICATION = new ResponseSpecBuilder().build();
+ private final SwarmGenericContainer container;
+
+ public FakeSmtp() {
+ container = new SwarmGenericContainer(Images.FAKE_SMTP)
+ .withExposedPorts(SMTP_PORT)
+ .withAffinityToContainer()
+ .waitingFor(new HostPortWaitStrategy());
+ }
+
+ @Override
+ public Statement apply(Statement statement, Description description) {
+ return container.apply(statement, description);
+ }
+
+ public void awaitStarted(ConditionFactory calmyAwait) {
+ calmyAwait.until(() -> container.tryConnect(SMTP_PORT));
+ }
+
+ public boolean isReceived(Function<ValidatableResponse, ValidatableResponse> expectations) {
+ try {
+ expectations.apply(
+ given(requestSpecification(), RESPONSE_SPECIFICATION)
+ .get("/api/email")
+ .then()
+ .statusCode(200));
+ return true;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ private RequestSpecification requestSpecification() {
+ return new RequestSpecBuilder()
+ .setContentType(ContentType.JSON)
+ .setAccept(ContentType.JSON)
+ .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(Charsets.UTF_8)))
+ .setPort(80)
+ .setBaseUri("http://" + container.getContainerIp())
+ .build();
+ }
+
+ public SwarmGenericContainer getContainer() {
+ return container;
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/1d9f9dfb/server/testing/src/main/java/org/apache/james/utils/FakeSmtpHelper.java
----------------------------------------------------------------------
diff --git a/server/testing/src/main/java/org/apache/james/utils/FakeSmtpHelper.java b/server/testing/src/main/java/org/apache/james/utils/FakeSmtpHelper.java
deleted file mode 100644
index 7129f60..0000000
--- a/server/testing/src/main/java/org/apache/james/utils/FakeSmtpHelper.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/****************************************************************
- * 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.utils;
-
-import static com.jayway.restassured.RestAssured.when;
-import static com.jayway.restassured.config.EncoderConfig.encoderConfig;
-import static com.jayway.restassured.config.RestAssuredConfig.newConfig;
-
-import java.util.function.Function;
-
-import com.google.common.base.Charsets;
-import com.jayway.restassured.builder.RequestSpecBuilder;
-import com.jayway.restassured.http.ContentType;
-import com.jayway.restassured.response.ValidatableResponse;
-import com.jayway.restassured.specification.RequestSpecification;
-
-public class FakeSmtpHelper {
- public static RequestSpecification requestSpecification(String ip) {
- return new RequestSpecBuilder()
- .setContentType(ContentType.JSON)
- .setAccept(ContentType.JSON)
- .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(Charsets.UTF_8)))
- .setPort(80)
- .setBaseUri("http://" + ip)
- .build();
- }
-
- public static boolean isReceived(Function<ValidatableResponse, ValidatableResponse> expectations) {
- try {
- expectations.apply(when()
- .get("/api/email")
- .then()
- .statusCode(200));
- return true;
- } catch (Exception e) {
- return false;
- }
- }
-}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org