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 2017/05/03 03:41:06 UTC

[1/4] james-project git commit: JAMES-2012 Add the Cassandra TCP connection timeout

Repository: james-project
Updated Branches:
  refs/heads/master bab5ff434 -> 302a763db


JAMES-2012 Add the Cassandra TCP connection timeout


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f4b51ba2
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f4b51ba2
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f4b51ba2

Branch: refs/heads/master
Commit: f4b51ba26692d3f6b3de0f1b27696d6f22e51699
Parents: bab5ff4
Author: Antoine Duprat <ad...@linagora.com>
Authored: Tue May 2 09:51:40 2017 +0200
Committer: benwa <bt...@linagora.com>
Committed: Wed May 3 10:40:03 2017 +0700

----------------------------------------------------------------------
 .../backends/cassandra/init/ClusterBuilder.java     | 14 +++++++++++---
 .../modules/mailbox/CassandraSessionModule.java     | 16 +++++++---------
 server/src/site/xdoc/config-cassandra.xml           |  7 ++++++-
 3 files changed, 24 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/f4b51ba2/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterBuilder.java
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterBuilder.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterBuilder.java
index 2a89280..e5760aa 100644
--- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterBuilder.java
+++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterBuilder.java
@@ -51,6 +51,7 @@ public class ClusterBuilder {
 
     private Optional<QueryLoggerConfiguration> queryLogger;
     private Optional<Integer> readTimeoutMillis;
+    private Optional<Integer> connectTimeoutMillis;
 
     private ClusterBuilder() {
         username = Optional.empty();
@@ -65,6 +66,7 @@ public class ClusterBuilder {
 
         queryLogger = Optional.empty();
         readTimeoutMillis = Optional.empty();
+        connectTimeoutMillis = Optional.empty();
     }
 
     public ClusterBuilder username(String username) {
@@ -126,6 +128,11 @@ public class ClusterBuilder {
         return this;
     }
 
+    public ClusterBuilder connectTimeoutMillis(int connectTimeoutMillis) {
+        this.connectTimeoutMillis = Optional.of(connectTimeoutMillis);
+        return this;
+    }
+
     public Cluster build() {
         Preconditions.checkState(!(servers.isPresent() && host.isPresent()), "You can't specify a list of servers and a host at the same time");
         Preconditions.checkState(!(servers.isPresent() && port.isPresent()), "You can't specify a list of servers and a port at the same time");
@@ -146,9 +153,10 @@ public class ClusterBuilder {
                 new QueryOptions()
                     .setRefreshSchemaIntervalMillis(refreshSchemaIntervalMillis)));
 
-        readTimeoutMillis.map(timeout ->
-            clusterBuilder.withSocketOptions(
-                    new SocketOptions().setReadTimeoutMillis(timeout)));
+        SocketOptions socketOptions = new SocketOptions();
+        readTimeoutMillis.ifPresent(socketOptions::setReadTimeoutMillis);
+        connectTimeoutMillis.ifPresent(socketOptions::setConnectTimeoutMillis);
+        clusterBuilder.withSocketOptions(socketOptions);
 
         Cluster cluster = clusterBuilder.build();
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/f4b51ba2/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
index 7aaa6d9..497f418 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
@@ -66,6 +66,7 @@ public class CassandraSessionModule extends AbstractModule {
     private static final String CASSANDRA_NODES = "cassandra.nodes";
     private static final String LOCALHOST = "127.0.0.1";
     private static final int DEFAULT_READ_TIMEOUT_MILLIS = 5000;
+    private static final int DEFAULT_CONNECT_TIMEOUT_MILLIS = 5000;
 
 
     @Override
@@ -115,20 +116,17 @@ public class CassandraSessionModule extends AbstractModule {
         LOGGER.info("Trying to connect to Cassandra service");
 
         return context -> ClusterWithKeyspaceCreatedFactory
-            .config(getCluster(servers, queryLoggerConfiguration, configuration.getInt("cassandra.readTimeoutMillis", DEFAULT_READ_TIMEOUT_MILLIS)), 
+            .config(ClusterBuilder.builder()
+                    .servers(servers)
+                    .queryLoggerConfiguration(queryLoggerConfiguration)
+                    .readTimeoutMillis(configuration.getInt("cassandra.readTimeoutMillis", DEFAULT_READ_TIMEOUT_MILLIS))
+                    .connectTimeoutMillis(configuration.getInt("cassandra.connectTimeoutMillis", DEFAULT_CONNECT_TIMEOUT_MILLIS))
+                    .build(),
                     configuration.getString("cassandra.keyspace", DEFAULT_KEYSPACE))
             .replicationFactor(configuration.getInt("cassandra.replication.factor", DEFAULT_REPLICATION_FACTOR))
             .clusterWithInitializedKeyspace();
     }
 
-    private Cluster getCluster(List<Host> servers, QueryLoggerConfiguration queryLoggerConfiguration, int readTimeoutMillis) {
-        return ClusterBuilder.builder()
-            .servers(servers)
-            .queryLoggerConfiguration(queryLoggerConfiguration)
-            .readTimeoutMillis(readTimeoutMillis)
-            .build();
-    }
-
     private List<Host> listCassandraServers(PropertiesConfiguration configuration) {
         String[] ipAndPorts = configuration.getStringArray(CASSANDRA_NODES);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/f4b51ba2/server/src/site/xdoc/config-cassandra.xml
----------------------------------------------------------------------
diff --git a/server/src/site/xdoc/config-cassandra.xml b/server/src/site/xdoc/config-cassandra.xml
index e6c3a7d..4b4145b 100644
--- a/server/src/site/xdoc/config-cassandra.xml
+++ b/server/src/site/xdoc/config-cassandra.xml
@@ -63,7 +63,12 @@
 
         <dt><strong>cassandra.readTimeoutMillis</strong></dt>
         <dd>Optional.
-          If specified defines the Cassandra <a href="http://docs.datastax.com/en/developer/java-driver/2.1/manual/socket_options/"">driver read timeout</a></dd>
+          If specified defines the Cassandra <a href="http://docs.datastax.com/en/developer/java-driver/2.1/manual/socket_options/">driver read timeout</a></dd>
+          
+        <dt><strong>cassandra.conectTimeoutMillis</strong></dt>
+        <dd>Optional.
+          If specified defines the Cassandra <a href="http://docs.datastax.com/en/developer/java-driver/2.1/manual/socket_options/">TCP connect timeout</a></dd>
+          
       </dl>
 
 


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


[4/4] james-project git commit: JAMES-1912 Docker test should not depend on DOCKER_HOST env variable

Posted by bt...@apache.org.
JAMES-1912 Docker test should not depend on DOCKER_HOST env variable


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/302a763d
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/302a763d
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/302a763d

Branch: refs/heads/master
Commit: 302a763db7f365f1e201b31576d26a186280b678
Parents: 92f9beb
Author: quynhn <qn...@linagora.com>
Authored: Tue Apr 25 11:53:28 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Wed May 3 10:40:45 2017 +0700

----------------------------------------------------------------------
 mpt/impl/smtp/cassandra/pom.xml                 | 104 ---------------
 .../data/data-ldap-integration-testing/pom.xml  |   7 +
 .../jmap-integration-testing-common/pom.xml     | 127 -------------------
 3 files changed, 7 insertions(+), 231 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/302a763d/mpt/impl/smtp/cassandra/pom.xml
----------------------------------------------------------------------
diff --git a/mpt/impl/smtp/cassandra/pom.xml b/mpt/impl/smtp/cassandra/pom.xml
index ad2afd7..42674a4 100644
--- a/mpt/impl/smtp/cassandra/pom.xml
+++ b/mpt/impl/smtp/cassandra/pom.xml
@@ -144,110 +144,6 @@
             </build>
         </profile>
         <profile>
-            <id>build-for-jdk-8-without-docker</id>
-            <activation>
-                <property>
-                    <name>!env.DOCKER_HOST</name>
-                </property>
-                <jdk>[1.8,)</jdk>
-            </activation>
-            <dependencies>
-                <dependency>
-                    <groupId>org.apache.james</groupId>
-                    <artifactId>apache-james-backends-cassandra</artifactId>
-                    <scope>test</scope>
-                    <type>test-jar</type>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.james</groupId>
-                    <artifactId>apache-james-backends-es</artifactId>
-                    <type>test-jar</type>
-                    <scope>test</scope>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.james</groupId>
-                    <artifactId>apache-james-mpt-core</artifactId>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.james</groupId>
-                    <artifactId>apache-james-mpt-smtp-core</artifactId>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.james</groupId>
-                    <artifactId>james-server-cassandra-guice</artifactId>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.james</groupId>
-                    <artifactId>james-server-cassandra-guice</artifactId>
-                    <scope>test</scope>
-                    <type>test-jar</type>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.james</groupId>
-                    <artifactId>james-server-guice-common</artifactId>
-                    <scope>test</scope>
-                    <type>test-jar</type>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.james</groupId>
-                    <artifactId>james-server-guice-jmap</artifactId>
-                    <scope>test</scope>
-                    <type>test-jar</type>
-                </dependency>
-                <dependency>
-                    <groupId>com.google.guava</groupId>
-                    <artifactId>guava</artifactId>
-                    <version>18.0</version>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.james</groupId>
-                    <artifactId>apache-james-mpt-onami-test</artifactId>
-                </dependency>
-                <dependency>
-                    <groupId>org.cassandraunit</groupId>
-                    <artifactId>cassandra-unit</artifactId>
-                    <scope>test</scope>
-                </dependency>
-                <dependency>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-simple</artifactId>
-                </dependency>
-            </dependencies>
-            <build>
-                <plugins>
-                    <plugin>
-                        <artifactId>maven-assembly-plugin</artifactId>
-                        <configuration>
-                            <archive>
-                                <manifest>
-                                    <mainClass>fully.qualified.MainClass</mainClass>
-                                </manifest>
-                            </archive>
-                            <descriptorRefs>
-                                <descriptorRef>jar-with-dependencies</descriptorRef>
-                            </descriptorRefs>
-                        </configuration>
-                    </plugin>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-compiler-plugin</artifactId>
-                        <configuration>
-                            <source>1.8</source>
-                            <target>1.8</target>
-                        </configuration>
-                    </plugin>
-                    <plugin>
-                        <artifactId>maven-surefire-plugin</artifactId>
-                        <configuration>
-                            <excludes>
-                                <exclude>**/SmtpTest.java</exclude>
-                            </excludes>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-        <profile>
             <id>build-for-jdk-8</id>
             <activation>
                 <jdk>[1.8,)</jdk>

http://git-wip-us.apache.org/repos/asf/james-project/blob/302a763d/server/data/data-ldap-integration-testing/pom.xml
----------------------------------------------------------------------
diff --git a/server/data/data-ldap-integration-testing/pom.xml b/server/data/data-ldap-integration-testing/pom.xml
index e03c19b..70c6f30 100644
--- a/server/data/data-ldap-integration-testing/pom.xml
+++ b/server/data/data-ldap-integration-testing/pom.xml
@@ -199,6 +199,13 @@
                             <target>1.8</target>
                         </configuration>
                     </plugin>
+                    <plugin>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <configuration>
+                            <forkCount>0</forkCount>
+                            <forkMode>never</forkMode>
+                        </configuration>
+                    </plugin>
                 </plugins>
             </build>
         </profile>

http://git-wip-us.apache.org/repos/asf/james-project/blob/302a763d/server/protocols/jmap-integration-testing/jmap-integration-testing-common/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/pom.xml b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/pom.xml
index 1ccc510..f9a0baa 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/pom.xml
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/pom.xml
@@ -142,133 +142,6 @@
             </build>
         </profile>
         <profile>
-            <id>build-for-jdk-8-without-docker</id>
-            <activation>
-                <property>
-                    <name>!env.DOCKER_HOST</name>
-                </property>
-                <jdk>[1.8,)</jdk>
-            </activation>
-            <dependencies>
-                <dependency>
-                    <groupId>org.apache.james</groupId>
-                    <artifactId>james-server-data-jmap</artifactId>
-                    <scope>test</scope>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.james</groupId>
-                    <artifactId>james-server-guice-common</artifactId>
-                    <scope>test</scope>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.james</groupId>
-                    <artifactId>james-server-guice-common</artifactId>
-                    <scope>test</scope>
-                    <type>test-jar</type>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.james</groupId>
-                    <artifactId>james-server-guice-jmap</artifactId>
-                    <scope>test</scope>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.james</groupId>
-                    <artifactId>james-server-guice-mailbox</artifactId>
-                    <scope>test</scope>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.james</groupId>
-                    <artifactId>james-server-testing</artifactId>
-                    <scope>test</scope>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.james</groupId>
-                    <artifactId>james-server-util-java8</artifactId>
-                    <scope>test</scope>
-                    <type>test-jar</type>
-                </dependency>
-                <dependency>
-                    <groupId>com.google.guava</groupId>
-                    <artifactId>guava</artifactId>
-                    <version>18.0</version> <!--$NO-MVN-MAN-VER$-->
-                </dependency>
-                <dependency>
-                    <groupId>com.jayway.restassured</groupId>
-                    <artifactId>rest-assured</artifactId>
-                    <scope>test</scope>
-                </dependency>
-                <dependency>
-                    <groupId>info.cukes</groupId>
-                    <artifactId>cucumber-guice</artifactId>
-                    <scope>test</scope>
-                </dependency>
-                <dependency>
-                    <groupId>info.cukes</groupId>
-                    <artifactId>cucumber-java</artifactId>
-                    <scope>test</scope>
-                </dependency>
-                <dependency>
-                    <groupId>info.cukes</groupId>
-                    <artifactId>cucumber-junit</artifactId>
-                    <scope>test</scope>
-                </dependency>
-                <dependency>
-                    <groupId>junit</groupId>
-                    <artifactId>junit</artifactId>
-                    <scope>test</scope>
-                </dependency>
-                <dependency>
-                    <groupId>org.assertj</groupId>
-                    <artifactId>assertj-core</artifactId>
-                    <version>${assertj-3.version}</version>
-                    <scope>test</scope>
-                </dependency>
-                <dependency>
-                    <groupId>org.hamcrest</groupId>
-                    <artifactId>java-hamcrest</artifactId>
-                    <scope>test</scope>
-                </dependency>
-                <dependency>
-                    <groupId>org.testcontainers</groupId>
-                    <artifactId>testcontainers</artifactId>
-                    <scope>test</scope>
-                </dependency>
-            </dependencies>
-            <build>
-                <plugins>
-                    <plugin>
-                        <artifactId>maven-assembly-plugin</artifactId>
-                        <configuration>
-                            <archive>
-                                <manifest>
-                                    <mainClass>fully.qualified.MainClass</mainClass>
-                                </manifest>
-                            </archive>
-                            <descriptorRefs>
-                                <descriptorRef>jar-with-dependencies</descriptorRef>
-                            </descriptorRefs>
-                        </configuration>
-                    </plugin>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-compiler-plugin</artifactId>
-                        <configuration>
-                            <source>1.8</source>
-                            <target>1.8</target>
-                        </configuration>
-                    </plugin>
-                    <plugin>
-                        <artifactId>maven-surefire-plugin</artifactId>
-                        <configuration>
-                            <excludes>
-                                <exclude>**/ContainerTest.java</exclude>
-                            </excludes>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-        <profile>
             <id>build-for-jdk-8</id>
             <activation>
                 <jdk>[1.8,)</jdk>


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


[3/4] james-project git commit: JAMES-1912 Reduce function call by calling to existed on

Posted by bt...@apache.org.
JAMES-1912 Reduce function call by calling to existed on


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/92f9bebc
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/92f9bebc
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/92f9bebc

Branch: refs/heads/master
Commit: 92f9bebc981fd169b4afeaef4c2171babe73ad53
Parents: 0f7ee8c
Author: quynhn <qn...@linagora.com>
Authored: Fri Apr 21 17:10:03 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Wed May 3 10:40:41 2017 +0700

----------------------------------------------------------------------
 .../java/org/apache/james/metric/es/ESReporterTest.java     | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/92f9bebc/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java
----------------------------------------------------------------------
diff --git a/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java b/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java
index fa5aa43..da91772 100644
--- a/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java
+++ b/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java
@@ -62,7 +62,7 @@ public class ESReporterTest {
 
     @Before
     public void setUp() {
-        clientProvider = ClientProviderImpl.forHost(getContainerIp(), ES_APPLICATIVE_PORT);
+        clientProvider = ClientProviderImpl.forHost(esContainer.getIp(), ES_APPLICATIVE_PORT);
         await().atMost(Duration.ONE_MINUTE)
             .until(() -> elasticSearchStarted(clientProvider));
 
@@ -71,7 +71,7 @@ public class ESReporterTest {
         esMetricReporter = new ESMetricReporter(
             ESReporterConfiguration.builder()
                 .enabled()
-                .onHost(getContainerIp(), ES_HTTP_PORT)
+                .onHost(esContainer.getIp(), ES_HTTP_PORT)
                 .onIndex(INDEX)
                 .periodInSecond(PERIOD_IN_SECOND)
                 .build(),
@@ -134,9 +134,4 @@ public class ESReporterTest {
         }
     }
 
-    @SuppressWarnings("deprecation")
-    private String getContainerIp() {
-        return esContainer.getContainerInfo().getNetworkSettings().getIpAddress();
-    }
-
 }


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


[2/4] james-project git commit: JAMES-1912 Somes docker tests fail when no docker

Posted by bt...@apache.org.
JAMES-1912 Somes docker tests fail when no docker


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/0f7ee8cf
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/0f7ee8cf
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/0f7ee8cf

Branch: refs/heads/master
Commit: 0f7ee8cf1fbc1e4ea93bc6e4acfb9ed3594722fa
Parents: f4b51ba
Author: quynhn <qn...@linagora.com>
Authored: Fri Apr 21 17:07:50 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Wed May 3 10:40:21 2017 +0700

----------------------------------------------------------------------
 .../util/streams/SwarmGenericContainer.java     | 76 ++++++++++++++++----
 1 file changed, 64 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/0f7ee8cf/server/container/util-java8/src/test/java/org/apache/james/util/streams/SwarmGenericContainer.java
----------------------------------------------------------------------
diff --git a/server/container/util-java8/src/test/java/org/apache/james/util/streams/SwarmGenericContainer.java b/server/container/util-java8/src/test/java/org/apache/james/util/streams/SwarmGenericContainer.java
index 2c70aa1..fb743a5 100644
--- a/server/container/util-java8/src/test/java/org/apache/james/util/streams/SwarmGenericContainer.java
+++ b/server/container/util-java8/src/test/java/org/apache/james/util/streams/SwarmGenericContainer.java
@@ -21,40 +21,92 @@ package org.apache.james.util.streams;
 
 import java.util.List;
 
+import com.google.common.base.Strings;
+import org.junit.Assume;
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.images.builder.ImageFromDockerfile;
+import org.testcontainers.shaded.com.github.dockerjava.api.command.InspectContainerResponse;
 
-import com.google.common.base.Strings;
-
-public class SwarmGenericContainer extends GenericContainer<SwarmGenericContainer> {
-
+public class SwarmGenericContainer implements TestRule {
     private static final Logger LOGGER = LoggerFactory.getLogger(SwarmGenericContainer.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 SwarmGenericContainer(String dockerImageName) {
-        super(dockerImageName);
+        try {
+            this.container = new GenericContainer(dockerImageName);
+        } catch (IllegalStateException e) {
+            logAndCheckSkipTest(e);
+        }
     }
 
     public SwarmGenericContainer(ImageFromDockerfile imageFromDockerfile) {
-        super(imageFromDockerfile);
+        try {
+            this.container = new GenericContainer(imageFromDockerfile);
+        } catch (IllegalStateException e) {
+            logAndCheckSkipTest(e);
+        }
+    }
+
+    private void logAndCheckSkipTest(IllegalStateException e) {
+        LOGGER.error("Cannot initial a docker container because: " + e);
+        if (e.getMessage().startsWith(NO_DOCKER_ENVIRONMENT)) {
+            Assume.assumeTrue(SKIPPING_TEST_CAUTION, false);
+        }
     }
 
     public SwarmGenericContainer withAffinityToContainer() {
-        String container = System.getenv(DOCKER_CONTAINER);
-        if (Strings.isNullOrEmpty(container)) {
+        String containerEnv = System.getenv(DOCKER_CONTAINER);
+        if (Strings.isNullOrEmpty(containerEnv)) {
             LOGGER.warn("'DOCKER_CONTAINER' environment variable not found, dockering without affinity");
-            return self();
+            return this;
         }
-        List<String> envVariables = getEnv();
+        List<String> envVariables = container.getEnv();
         envVariables.add("affinity:container==" + container);
-        setEnv(envVariables);
-        return self();
+        container.setEnv(envVariables);
+        return this;
+    }
+
+    public SwarmGenericContainer withEnv(String key, String value) {
+        container.addEnv(key, value);
+        return this;
+    }
+
+    public void start() {
+        container.start();
+    }
+
+    public void stop() {
+        container.stop();
+    }
+
+    public String getContainerIpAddress() {
+        return container.getContainerIpAddress();
+    }
+
+    public Integer getMappedPort(int originalPort) {
+        return container.getMappedPort(originalPort);
     }
 
     @SuppressWarnings("deprecation")
     public String getIp() {
         return getContainerInfo().getNetworkSettings().getIpAddress();
     }
+
+    public InspectContainerResponse getContainerInfo() {
+        return container.getContainerInfo();
+    }
+    @Override
+    public Statement apply(Statement statement, Description description) {
+        return container.apply(statement, description);
+    }
+
 }


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