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