JAMES-2267 Factorize FakeSmtp concerns
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/95a3266c Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/95a3266c Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/95a3266c Branch: refs/heads/master Commit: 95a3266c77828b1ce7fa947c29efa35e156aaacf Parents: d6fade9 Author: benwa <[email protected]> Authored: Thu Dec 21 10:33:46 2017 +0700 Committer: benwa <[email protected]> Committed: Fri Jan 5 09:33:52 2018 +0700 ---------------------------------------------------------------------- mpt/impl/smtp/core/pom.xml | 4 ++ .../apache/james/mpt/smtp/ForwardSmtpTest.java | 36 +++++-------- .../GatewayRemoteDeliveryIntegrationTest.java | 30 +++-------- .../james/smtp/SmtpAuthorizedAddressesTest.java | 44 +++++---------- .../jmap/VacationRelayIntegrationTest.java | 35 +++--------- server/testing/pom.xml | 4 ++ .../org/apache/james/utils/FakeSmtpHelper.java | 56 ++++++++++++++++++++ 7 files changed, 102 insertions(+), 107 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/95a3266c/mpt/impl/smtp/core/pom.xml ---------------------------------------------------------------------- diff --git a/mpt/impl/smtp/core/pom.xml b/mpt/impl/smtp/core/pom.xml index d88ca7e..9db5462 100644 --- a/mpt/impl/smtp/core/pom.xml +++ b/mpt/impl/smtp/core/pom.xml @@ -50,6 +50,10 @@ </dependency> <dependency> <groupId>${project.groupId}</groupId> + <artifactId>james-server-testing</artifactId> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> <artifactId>james-server-util-java8</artifactId> <type>test-jar</type> </dependency> http://git-wip-us.apache.org/repos/asf/james-project/blob/95a3266c/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 d3ce040..12e41fb 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 @@ -18,18 +18,17 @@ ****************************************************************/ package org.apache.james.mpt.smtp; -import static com.jayway.restassured.RestAssured.when; -import static com.jayway.restassured.config.EncoderConfig.encoderConfig; -import static com.jayway.restassured.config.RestAssuredConfig.newConfig; +import static com.jayway.awaitility.Duration.FIVE_HUNDRED_MILLISECONDS; +import static com.jayway.awaitility.Duration.ONE_MINUTE; import static org.hamcrest.Matchers.equalTo; import java.net.InetAddress; -import java.nio.charset.StandardCharsets; 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.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -41,8 +40,6 @@ import com.jayway.awaitility.Awaitility; import com.jayway.awaitility.Duration; import com.jayway.awaitility.core.ConditionFactory; import com.jayway.restassured.RestAssured; -import com.jayway.restassured.builder.RequestSpecBuilder; -import com.jayway.restassured.http.ContentType; public abstract class ForwardSmtpTest { @@ -59,6 +56,7 @@ public abstract class ForwardSmtpTest { @Rule public final RuleChain chain = RuleChain.outerRule(folder).around(fakeSmtp); + private ConditionFactory calmlyAwait; protected abstract SmtpHostSystem createSmtpHostSystem(); @@ -79,35 +77,27 @@ public abstract class ForwardSmtpTest { .registerRecord("yopmail.com", containerIp, "yopmail.com"); hostSystem.addAddressMapping(USER, DOMAIN, "[email protected]"); - RestAssured.requestSpecification = new RequestSpecBuilder() - .setContentType(ContentType.JSON) - .setAccept(ContentType.JSON) - .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8))) - .setPort(80) - .setBaseUri("http://" + containerIp.getHostAddress()) - .build(); + RestAssured.requestSpecification = FakeSmtpHelper.requestSpecification(fakeSmtp.getContainerIp()); - Duration slowPacedPollInterval = Duration.FIVE_HUNDRED_MILLISECONDS; - ConditionFactory calmlyAwait = Awaitility.with() + Duration slowPacedPollInterval = FIVE_HUNDRED_MILLISECONDS; + calmlyAwait = Awaitility.with() .pollInterval(slowPacedPollInterval) .and() .with() .pollDelay(slowPacedPollInterval) .await(); - calmlyAwait.atMost(Duration.ONE_MINUTE).until(() -> fakeSmtp.tryConnect(25)); + calmlyAwait.atMost(ONE_MINUTE).until(() -> fakeSmtp.tryConnect(25)); } @Test public void forwardingAnEmailShouldWork() throws Exception { scriptedTest.run("helo"); - when() - .get("/api/email") - .then() - .statusCode(200) - .body("[0].from", equalTo("[email protected]")) - .body("[0].subject", equalTo("test")) - .body("[0].text", equalTo("content")); + calmlyAwait.atMost(ONE_MINUTE).until(() -> + FakeSmtpHelper.isReceived(response -> response + .body("[0].from", equalTo("[email protected]")) + .body("[0].subject", equalTo("test")) + .body("[0].text", equalTo("content")))); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/95a3266c/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 714264b..bb95936 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 @@ -20,8 +20,6 @@ package org.apache.james.mailets; import static com.jayway.restassured.RestAssured.when; -import static com.jayway.restassured.config.EncoderConfig.encoderConfig; -import static com.jayway.restassured.config.RestAssuredConfig.newConfig; 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; @@ -34,7 +32,6 @@ import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.hasSize; import java.net.InetAddress; -import java.nio.charset.StandardCharsets; import java.util.concurrent.TimeUnit; import org.apache.james.dnsservice.api.DNSService; @@ -52,6 +49,7 @@ 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.FakeSmtpHelper; import org.apache.james.utils.IMAPMessageReader; import org.apache.james.utils.SMTPMessageSender; import org.junit.After; @@ -63,8 +61,6 @@ import org.junit.rules.TemporaryFolder; import org.testcontainers.containers.wait.HostPortWaitStrategy; import com.jayway.restassured.RestAssured; -import com.jayway.restassured.builder.RequestSpecBuilder; -import com.jayway.restassured.http.ContentType; public class GatewayRemoteDeliveryIntegrationTest { private static final String JAMES_ANOTHER_DOMAIN = "james.com"; @@ -95,13 +91,7 @@ public class GatewayRemoteDeliveryIntegrationTest { public void setup() throws Exception { awaitOneMinute.until(() -> fakeSmtp.tryConnect(25)); - RestAssured.requestSpecification = new RequestSpecBuilder() - .setContentType(ContentType.JSON) - .setAccept(ContentType.JSON) - .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8))) - .setPort(80) - .setBaseUri("http://" + fakeSmtp.getContainerIp()) - .build(); + RestAssured.requestSpecification = FakeSmtpHelper.requestSpecification(fakeSmtp.getContainerIp()); } @After @@ -318,18 +308,10 @@ public class GatewayRemoteDeliveryIntegrationTest { } private boolean messageIsReceivedByTheSmtpServer() { - try { - when() - .get("/api/email") - .then() - .statusCode(200) - .body("", hasSize(1)) - .body("[0].from", equalTo(FROM)) - .body("[0].subject", equalTo("test")); - return true; - } catch (Exception e) { - return false; - } + return FakeSmtpHelper.isReceived(response -> response + .body("", hasSize(1)) + .body("[0].from", equalTo(FROM)) + .body("[0].subject", equalTo("test"))); } private MailetContainer generateMailetContainerConfiguration(String gatewayProperty) { http://git-wip-us.apache.org/repos/asf/james-project/blob/95a3266c/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 1e8ba38..571e3c3 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 @@ -19,9 +19,6 @@ package org.apache.james.smtp; -import static com.jayway.restassured.RestAssured.when; -import static com.jayway.restassured.config.EncoderConfig.encoderConfig; -import static com.jayway.restassured.config.RestAssuredConfig.newConfig; 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; @@ -31,8 +28,6 @@ import static org.apache.james.mailets.configuration.Constants.awaitOneMinute; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.hasSize; -import java.nio.charset.StandardCharsets; - import org.apache.james.MemoryJamesServerMain; import org.apache.james.mailets.TemporaryJamesServer; import org.apache.james.mailets.configuration.CommonProcessors; @@ -47,8 +42,10 @@ import org.apache.james.transport.mailets.ToProcessor; import org.apache.james.transport.matchers.All; import org.apache.james.transport.matchers.RecipientIsLocal; 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.IMAPMessageReader; import org.apache.james.utils.SMTPMessageSender; import org.junit.After; @@ -60,15 +57,13 @@ import org.junit.rules.TemporaryFolder; import org.testcontainers.containers.wait.HostPortWaitStrategy; import com.jayway.restassured.RestAssured; -import com.jayway.restassured.builder.RequestSpecBuilder; -import com.jayway.restassured.http.ContentType; public class SmtpAuthorizedAddressesTest { private static final String FROM = "fromuser@" + DEFAULT_DOMAIN; private static final String TO = "[email protected]"; private final TemporaryFolder smtpFolder = new TemporaryFolder(); - private final SwarmGenericContainer fakeSmtp = new SwarmGenericContainer("weave/rest-smtp-sink:latest") + private final SwarmGenericContainer fakeSmtp = new SwarmGenericContainer(Images.FAKE_SMTP) .withExposedPorts(25) .withAffinityToContainer() .waitingFor(new HostPortWaitStrategy()); @@ -89,13 +84,7 @@ public class SmtpAuthorizedAddressesTest { public void setup() throws Exception { awaitOneMinute.until(() -> fakeSmtp.tryConnect(25)); - RestAssured.requestSpecification = new RequestSpecBuilder() - .setContentType(ContentType.JSON) - .setAccept(ContentType.JSON) - .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8))) - .setPort(80) - .setBaseUri("http://" + fakeSmtp.getContainerIp()) - .build(); + RestAssured.requestSpecification = FakeSmtpHelper.requestSpecification(fakeSmtp.getContainerIp()); } private void createJamesServer(SmtpConfiguration.Builder smtpConfiguration) throws Exception { @@ -158,7 +147,10 @@ public class SmtpAuthorizedAddressesTest { .sendMessage(FROM, TO) .awaitSent(awaitOneMinute); - awaitOneMinute.until(this::messageIsReceivedByTheSmtpServer); + awaitOneMinute.until(() -> FakeSmtpHelper.isReceived(response -> response + .body("", hasSize(1)) + .body("[0].from", equalTo(FROM)) + .body("[0].subject", equalTo("test")))); } @Test @@ -184,7 +176,10 @@ public class SmtpAuthorizedAddressesTest { .sendMessage(FROM, TO) .awaitSent(awaitOneMinute); - awaitOneMinute.until(this::messageIsReceivedByTheSmtpServer); + awaitOneMinute.until(() -> FakeSmtpHelper.isReceived(response -> response + .body("", hasSize(1)) + .body("[0].from", equalTo(FROM)) + .body("[0].subject", equalTo("test")))); } @Test @@ -203,19 +198,4 @@ public class SmtpAuthorizedAddressesTest { .awaitMessage(awaitOneMinute); } - private boolean messageIsReceivedByTheSmtpServer() { - try { - when() - .get("/api/email") - .then() - .statusCode(200) - .body("", hasSize(1)) - .body("[0].from", equalTo(FROM)) - .body("[0].subject", equalTo("test")); - return true; - } catch (Exception e) { - return false; - } - } - } http://git-wip-us.apache.org/repos/asf/james-project/blob/95a3266c/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 da9baa9..3ef66d6 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,13 +19,9 @@ package org.apache.james.jmap; -import static com.jayway.restassured.RestAssured.when; -import static com.jayway.restassured.config.EncoderConfig.encoderConfig; -import static com.jayway.restassured.config.RestAssuredConfig.newConfig; import static org.hamcrest.Matchers.equalTo; import java.net.InetAddress; -import java.nio.charset.StandardCharsets; import java.util.concurrent.TimeUnit; import org.apache.commons.net.smtp.SMTPClient; @@ -40,6 +36,7 @@ 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.JmapGuiceProbe; import org.junit.After; import org.junit.Before; @@ -51,8 +48,6 @@ import com.jayway.awaitility.Awaitility; import com.jayway.awaitility.Duration; import com.jayway.awaitility.core.ConditionFactory; import com.jayway.restassured.RestAssured; -import com.jayway.restassured.builder.RequestSpecBuilder; -import com.jayway.restassured.http.ContentType; public abstract class VacationRelayIntegrationTest { @@ -102,13 +97,7 @@ public abstract class VacationRelayIntegrationTest { jmapGuiceProbe = guiceJamesServer.getProbe(JmapGuiceProbe.class); - RestAssured.requestSpecification = new RequestSpecBuilder() - .setContentType(ContentType.JSON) - .setAccept(ContentType.JSON) - .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8))) - .setPort(80) - .setBaseUri("http://" + containerIp.getHostAddress()) - .build(); + RestAssured.requestSpecification = FakeSmtpHelper.requestSpecification(fakeSmtp.getContainerIp()); Duration slowPacedPollInterval = Duration.FIVE_HUNDRED_MILLISECONDS; calmlyAwait = Awaitility @@ -143,20 +132,10 @@ public abstract class VacationRelayIntegrationTest { smtpClient.sendShortMessageData("content"); calmlyAwait.atMost(1, TimeUnit.MINUTES) - .until(() -> { - try { - when() - .get("/api/email") - .then() - .statusCode(200) - .body("[0].from", equalTo(USER_WITH_DOMAIN)) - .body("[0].to[0]", equalTo(externalMail)) - .body("[0].text", equalTo(REASON)); - - return true; - } catch(AssertionError e) { - return false; - } - }); + .until(() -> + FakeSmtpHelper.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/95a3266c/server/testing/pom.xml ---------------------------------------------------------------------- diff --git a/server/testing/pom.xml b/server/testing/pom.xml index 1a1b9fc..f989249 100644 --- a/server/testing/pom.xml +++ b/server/testing/pom.xml @@ -45,6 +45,10 @@ <artifactId>awaitility</artifactId> </dependency> <dependency> + <groupId>com.jayway.restassured</groupId> + <artifactId>rest-assured</artifactId> + </dependency> + <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </dependency> http://git-wip-us.apache.org/repos/asf/james-project/blob/95a3266c/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 new file mode 100644 index 0000000..7129f60 --- /dev/null +++ b/server/testing/src/main/java/org/apache/james/utils/FakeSmtpHelper.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.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: [email protected] For additional commands, e-mail: [email protected]
