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 ma...@apache.org on 2019/06/28 07:56:45 UTC
[james-project] 03/07: JAMES-2796 Split the check for Docker from
remaining code and provide factory methods for containers
This is an automated email from the ASF dual-hosted git repository.
matthieu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit db29d2e112acf3713ca9bfc24b98ee789d52054f
Author: Matthieu Baechler <ma...@apache.org>
AuthorDate: Tue Jun 18 18:50:20 2019 +0200
JAMES-2796 Split the check for Docker from remaining code and provide factory methods for containers
---
.../es/ClientProviderImplConnectionTest.java | 4 +-
.../james/backends/es/DockerElasticSearch.java | 2 +-
.../apache/james/mailbox/tika/TikaContainer.java | 2 +-
.../external/james/DockerJamesRule.java | 2 +-
mpt/pom.xml | 1 -
.../james/user/ldap/LdapGenericContainer.java | 2 +-
.../mailets/AmqpForwardAttachmentTest.java | 2 +-
.../transport/mailets/ContactExtractorTest.java | 2 +-
.../mailets/ICSAttachmentWorkflowTest.java | 2 +-
.../james/transport/mailets/SpamAssassinTest.java | 2 +-
.../java/org/apache/james/jmap/ContainerTest.java | 2 +-
.../james/util/docker/DockerGenericContainer.java | 43 ++++++++--------------
.../main/java/org/apache/james/utils/FakeSmtp.java | 2 +-
13 files changed, 27 insertions(+), 41 deletions(-)
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionTest.java
index 516221a..183d1cd 100644
--- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionTest.java
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionTest.java
@@ -40,13 +40,13 @@ public class ClientProviderImplConnectionTest {
private static final int ES_APPLICATIVE_PORT = 9200;
@ClassRule
- public static DockerGenericContainer es1 = new DockerGenericContainer(Images.ELASTICSEARCH_6)
+ public static DockerGenericContainer es1 = DockerGenericContainer.fromName(Images.ELASTICSEARCH_6)
.withEnv("discovery.type", "single-node")
.withAffinityToContainer()
.withExposedPorts(ES_APPLICATIVE_PORT);
@Rule
- public DockerGenericContainer es2 = new DockerGenericContainer(Images.ELASTICSEARCH_6)
+ public DockerGenericContainer es2 = DockerGenericContainer.fromName(Images.ELASTICSEARCH_6)
.withEnv("discovery.type", "single-node")
.withAffinityToContainer()
.withExposedPorts(ES_APPLICATIVE_PORT);
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/DockerElasticSearch.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/DockerElasticSearch.java
index 8441a99..14ac6d8 100644
--- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/DockerElasticSearch.java
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/DockerElasticSearch.java
@@ -62,7 +62,7 @@ public class DockerElasticSearch {
}
public DockerElasticSearch(String imageName) {
- this.eSContainer = new DockerGenericContainer(imageName)
+ this.eSContainer = DockerGenericContainer.fromName(imageName)
.withTmpFs(ImmutableMap.of("/usr/share/elasticsearch/data", "rw,size=200m"))
.withExposedPorts(ES_HTTP_PORT)
.withEnv("discovery.type", "single-node")
diff --git a/mailbox/tika/src/test/java/org/apache/james/mailbox/tika/TikaContainer.java b/mailbox/tika/src/test/java/org/apache/james/mailbox/tika/TikaContainer.java
index 89e23fc..e2ab012 100644
--- a/mailbox/tika/src/test/java/org/apache/james/mailbox/tika/TikaContainer.java
+++ b/mailbox/tika/src/test/java/org/apache/james/mailbox/tika/TikaContainer.java
@@ -37,7 +37,7 @@ public class TikaContainer extends ExternalResource {
private final DockerGenericContainer tika;
public TikaContainer() {
- tika = new DockerGenericContainer(Images.TIKA)
+ tika = DockerGenericContainer.fromName(Images.TIKA)
.withExposedPorts(DEFAULT_TIKA_PORT)
.waitingFor(Wait.forHttp("/tika").withRateLimiter(RateLimiters.TWENTIES_PER_SECOND))
.withStartupTimeout(Duration.ofSeconds(30));
diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerJamesRule.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerJamesRule.java
index 1ff4709..9c5034e 100644
--- a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerJamesRule.java
+++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerJamesRule.java
@@ -40,7 +40,7 @@ public class DockerJamesRule implements TestRule {
private final DockerGenericContainer container;
public DockerJamesRule(String image) {
- container = new DockerGenericContainer(image)
+ container = DockerGenericContainer.fromName(image)
.withExposedPorts(SMTP_PORT, IMAP_PORT)
.waitingFor(new HostPortWaitStrategy());
}
diff --git a/mpt/pom.xml b/mpt/pom.xml
index 9a04566..073fa7a 100644
--- a/mpt/pom.xml
+++ b/mpt/pom.xml
@@ -56,7 +56,6 @@
<derby.version>10.14.2.0</derby.version>
<guice.version>4.0</guice.version>
<hadoop.version>1.0.1</hadoop.version>
- <junit.version>4.11</junit.version>
<lucene-core.version>3.6.0</lucene-core.version>
<slf4j.version>1.7.25</slf4j.version>
</properties>
diff --git a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/LdapGenericContainer.java b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/LdapGenericContainer.java
index f2a53d7..91bba5b 100644
--- a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/LdapGenericContainer.java
+++ b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/LdapGenericContainer.java
@@ -60,7 +60,7 @@ public class LdapGenericContainer extends ExternalResource {
}
private DockerGenericContainer createContainer() {
- return new DockerGenericContainer(
+ return DockerGenericContainer.fromDockerfile(
new ImageFromDockerfile()
.withFileFromClasspath("populate.ldif", "ldif-files/populate.ldif")
.withFileFromClasspath("Dockerfile", "ldif-files/Dockerfile"))
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
index aec7593..9eee480 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
@@ -64,7 +64,7 @@ public class AmqpForwardAttachmentTest {
private static final byte[] TEST_ATTACHMENT_CONTENT = "Test attachment content".getBytes(StandardCharsets.UTF_8);
- public DockerGenericContainer rabbitMqContainer = new DockerGenericContainer(Images.RABBITMQ)
+ public DockerGenericContainer rabbitMqContainer = DockerGenericContainer.fromName(Images.RABBITMQ)
.withAffinityToContainer()
.waitingFor(new HostPortWaitStrategy()
.withRateLimiter(RateLimiters.TWENTIES_PER_SECOND));
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
index 9f49150..11b62ee 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
@@ -65,7 +65,7 @@ public class ContactExtractorTest {
public static final String EXCHANGE = "collector:email";
public static final String ROUTING_KEY = "";
- public DockerGenericContainer rabbit = new DockerGenericContainer(Images.RABBITMQ)
+ public DockerGenericContainer rabbit = DockerGenericContainer.fromName(Images.RABBITMQ)
.waitingFor(new HostPortWaitStrategy().withRateLimiter(RateLimiters.TWENTIES_PER_SECOND));
public AmqpRule amqpRule = new AmqpRule(rabbit, EXCHANGE, ROUTING_KEY);
public TemporaryFolder folder = new TemporaryFolder();
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
index 681dc0a..87833b6 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
@@ -429,7 +429,7 @@ public class ICSAttachmentWorkflowTest {
"";
@ClassRule
- public static DockerGenericContainer rabbitMqContainer = new DockerGenericContainer(Images.RABBITMQ)
+ public static DockerGenericContainer rabbitMqContainer = DockerGenericContainer.fromName(Images.RABBITMQ)
.withAffinityToContainer()
.waitingFor(new HostPortWaitStrategy().withRateLimiter(RateLimiters.TWENTIES_PER_SECOND));
@Rule
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
index 52fc782..c9b8d4b 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
@@ -59,7 +59,7 @@ public class SpamAssassinTest {
private static final String SPAM_CONTENT = "XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X";
@ClassRule
- public static DockerGenericContainer spamAssassinContainer = new DockerGenericContainer(Images.SPAMASSASSIN)
+ public static DockerGenericContainer spamAssassinContainer = DockerGenericContainer.fromName(Images.SPAMASSASSIN)
.withExposedPorts(783)
.withAffinityToContainer()
.waitingFor(new HostPortWaitStrategy().withRateLimiter(RateLimiters.TWENTIES_PER_SECOND));
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/ContainerTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/ContainerTest.java
index b7674ca..7f9119e 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/ContainerTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/ContainerTest.java
@@ -36,7 +36,7 @@ import org.testcontainers.containers.wait.strategy.HttpWaitStrategy;
public class ContainerTest {
@Rule
- public DockerGenericContainer container = new DockerGenericContainer(Images.NGINX)
+ public DockerGenericContainer container = DockerGenericContainer.fromName(Images.NGINX)
.withAffinityToContainer()
.withExposedPorts(80)
.waitingFor(new HttpWaitStrategy()
diff --git a/server/testing/src/main/java/org/apache/james/util/docker/DockerGenericContainer.java b/server/testing/src/main/java/org/apache/james/util/docker/DockerGenericContainer.java
index 46b1de8..2650f2b 100644
--- a/server/testing/src/main/java/org/apache/james/util/docker/DockerGenericContainer.java
+++ b/server/testing/src/main/java/org/apache/james/util/docker/DockerGenericContainer.java
@@ -27,7 +27,7 @@ import java.util.Map;
import javax.net.SocketFactory;
-import org.junit.Assume;
+import org.junit.AssumptionViolatedException;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
@@ -39,39 +39,35 @@ import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.wait.strategy.WaitStrategy;
import org.testcontainers.images.builder.ImageFromDockerfile;
-import com.github.dockerjava.api.command.InspectContainerResponse;
import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableList;
public class DockerGenericContainer implements TestRule {
private static final Logger LOGGER = LoggerFactory.getLogger(DockerGenericContainer.class);
private static final String DOCKER_CONTAINER = "DOCKER_CONTAINER";
- private static final String NO_DOCKER_ENVIRONMENT = "Could not find a valid Docker environment.";
- private static final String SKIPPING_TEST_CAUTION = "Skipping all docker tests as no Docker environment was found";
private GenericContainer<?> container;
- public DockerGenericContainer(String dockerImageName) {
- try {
- this.container = new GenericContainer<>(dockerImageName);
- } catch (IllegalStateException e) {
- logAndCheckSkipTest(e);
- }
+ public static DockerGenericContainer fromName(String imageName) {
+ disableDockerTestsIfDockerUnavailable();
+ return new DockerGenericContainer(new GenericContainer<>(imageName));
}
- public DockerGenericContainer(ImageFromDockerfile imageFromDockerfile) {
+ public static DockerGenericContainer fromDockerfile(ImageFromDockerfile imageFromDockerfile) {
+ disableDockerTestsIfDockerUnavailable();
+ return new DockerGenericContainer(new GenericContainer<>(imageFromDockerfile));
+ }
+
+ private static void disableDockerTestsIfDockerUnavailable() {
try {
- this.container = new GenericContainer<>(imageFromDockerfile);
+ DockerClientFactory.instance().client();
} catch (IllegalStateException e) {
- logAndCheckSkipTest(e);
+ LOGGER.error("Cannot connect to docker service", e);
+ throw new AssumptionViolatedException("Skipping all docker tests as no Docker environment was found");
}
}
- private void logAndCheckSkipTest(IllegalStateException e) {
- LOGGER.error("Cannot initial a docker container", e);
- if (e.getMessage().startsWith(NO_DOCKER_ENVIRONMENT)) {
- Assume.assumeTrue(SKIPPING_TEST_CAUTION, false);
- }
+ public DockerGenericContainer(GenericContainer<?> container) {
+ this.container = container;
}
public DockerGenericContainer withAffinityToContainer() {
@@ -101,11 +97,6 @@ public class DockerGenericContainer implements TestRule {
return this;
}
- public DockerGenericContainer portBinding(int hostPort, int dockerPort) {
- container.setPortBindings(ImmutableList.of("0.0.0.0:" + hostPort + ":" + dockerPort));
- return this;
- }
-
public DockerGenericContainer waitingFor(WaitStrategy waitStrategy) {
container.waitingFor(waitStrategy);
return this;
@@ -158,10 +149,6 @@ public class DockerGenericContainer implements TestRule {
return container.getContainerIpAddress();
}
- public InspectContainerResponse getContainerInfo() {
- return container.getContainerInfo();
- }
-
public boolean tryConnect(int port) {
try {
Socket socket = SocketFactory.getDefault().createSocket(getContainerIp(), port);
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
index 3215f23..725eb5f 100644
--- a/server/testing/src/main/java/org/apache/james/utils/FakeSmtp.java
+++ b/server/testing/src/main/java/org/apache/james/utils/FakeSmtp.java
@@ -63,7 +63,7 @@ public class FakeSmtp implements TestRule {
}
private static DockerGenericContainer fakeSmtpContainer() {
- return new DockerGenericContainer(Images.FAKE_SMTP)
+ return DockerGenericContainer.fromName(Images.FAKE_SMTP)
.withAffinityToContainer()
.waitingFor(new HostPortWaitStrategy()
.withRateLimiter(RateLimiters.TWENTIES_PER_SECOND));
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org