diff --git a/CHANGELOG.md b/CHANGELOG.md index 329d58cd062..fbf1e14c2b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,6 @@ All notable changes to this project will be documented in this file. - Fixed erroneous version reference used during CI testing of shaded dependencies - Fixed leakage of Vibur and Tomcat JDBC test dependencies in `jdbc-test` and `mysql` modules (#382) - Added timeout and retries for creation of `RemoteWebDriver` (#381, #373, #257) -- Fixed double encoding of listNetwork's filter until it's fixed in docker-java (#385) - Fixed various shading issues ### Changed @@ -15,6 +14,7 @@ All notable changes to this project will be documented in this file. - Added `getFirstMappedPort` method (#377) - Extracted Oracle XE container into a separate repository ([testcontainers/testcontainers-java-module-oracle-xe](https://github.com/testcontainers/testcontainers-java-module-oracle-xe)) - Added shading tests +- Updated docker-java to 3.0.12 (#393) ## [1.3.1] - 2017-06-22 ### Fixed diff --git a/core/pom.xml b/core/pom.xml index 755e3fc0156..0238b2b2f64 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -21,11 +21,6 @@ ${docker-java.version} compile - - - de.gesellix - unix-socket-factory - org.glassfish.jersey.core * @@ -61,12 +56,6 @@ 2.0.1 - - org.rnorth - tcp-unix-socket-proxy - 1.0.1 - - org.zeroturnaround zt-exec @@ -269,6 +258,8 @@ dest="${project.build.directory}/exploded/"/> + diff --git a/core/src/main/java/org/testcontainers/DockerClientFactory.java b/core/src/main/java/org/testcontainers/DockerClientFactory.java index bb40de7fa3b..84995ef072d 100644 --- a/core/src/main/java/org/testcontainers/DockerClientFactory.java +++ b/core/src/main/java/org/testcontainers/DockerClientFactory.java @@ -50,7 +50,6 @@ public class DockerClientFactory { private static final List CONFIGURATION_STRATEGIES = asList(new EnvironmentAndSystemPropertyClientProviderStrategy(), new UnixSocketClientProviderStrategy(), - new ProxiedUnixSocketClientProviderStrategy(), new DockerMachineClientProviderStrategy(), new WindowsClientProviderStrategy()); private String activeApiVersion; diff --git a/core/src/main/java/org/testcontainers/containers/wait/HostPortWaitStrategy.java b/core/src/main/java/org/testcontainers/containers/wait/HostPortWaitStrategy.java index 3b3098a5372..5df83da47c6 100644 --- a/core/src/main/java/org/testcontainers/containers/wait/HostPortWaitStrategy.java +++ b/core/src/main/java/org/testcontainers/containers/wait/HostPortWaitStrategy.java @@ -6,7 +6,7 @@ import org.testcontainers.DockerClientFactory; import org.testcontainers.containers.ContainerLaunchException; import org.testcontainers.containers.GenericContainer; -import org.testcontainers.dockerclient.ProxiedUnixSocketClientProviderStrategy; +import org.testcontainers.dockerclient.DockerMachineClientProviderStrategy; import org.testcontainers.dockerclient.WindowsClientProviderStrategy; import java.net.Socket; @@ -93,7 +93,7 @@ protected void waitUntilReady() { private boolean shouldCheckWithCommand() { // Special case for Docker for Mac, see #160 - if(DockerClientFactory.instance().isUsing(ProxiedUnixSocketClientProviderStrategy.class) + if(!DockerClientFactory.instance().isUsing(DockerMachineClientProviderStrategy.class) && System.getProperty("os.name").toLowerCase().contains("mac")) { return true; } diff --git a/core/src/main/java/org/testcontainers/dockerclient/DockerClientProviderStrategy.java b/core/src/main/java/org/testcontainers/dockerclient/DockerClientProviderStrategy.java index e932e509750..bc1cf2ea174 100644 --- a/core/src/main/java/org/testcontainers/dockerclient/DockerClientProviderStrategy.java +++ b/core/src/main/java/org/testcontainers/dockerclient/DockerClientProviderStrategy.java @@ -3,6 +3,7 @@ import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.core.DockerClientBuilder; import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.netty.NettyDockerCmdExecFactory; import com.google.common.base.Throwables; import org.apache.commons.io.IOUtils; import org.jetbrains.annotations.Nullable; @@ -141,7 +142,7 @@ public DockerClient getClient() { protected DockerClient getClientForConfig(DockerClientConfig config) { return DockerClientBuilder .getInstance(config) - .withDockerCmdExecFactory(new TestcontainersDockerCmdExecFactory()) + .withDockerCmdExecFactory(new NettyDockerCmdExecFactory()) .build(); } diff --git a/core/src/main/java/org/testcontainers/dockerclient/DockerMachineClientProviderStrategy.java b/core/src/main/java/org/testcontainers/dockerclient/DockerMachineClientProviderStrategy.java index b06dc0fa697..175d215e376 100644 --- a/core/src/main/java/org/testcontainers/dockerclient/DockerMachineClientProviderStrategy.java +++ b/core/src/main/java/org/testcontainers/dockerclient/DockerMachineClientProviderStrategy.java @@ -16,6 +16,9 @@ */ @Slf4j public class DockerMachineClientProviderStrategy extends DockerClientProviderStrategy { + + public static final int PRIORITY = EnvironmentAndSystemPropertyClientProviderStrategy.PRIORITY - 10; + private static final String PING_TIMEOUT_DEFAULT = "30"; private static final String PING_TIMEOUT_PROPERTY_NAME = "testcontainers.dockermachineprovider.timeout"; @@ -26,7 +29,7 @@ protected boolean isApplicable() { @Override protected int getPriority() { - return ProxiedUnixSocketClientProviderStrategy.PRIORITY - 10; + return PRIORITY; } @Override diff --git a/core/src/main/java/org/testcontainers/dockerclient/EnvironmentAndSystemPropertyClientProviderStrategy.java b/core/src/main/java/org/testcontainers/dockerclient/EnvironmentAndSystemPropertyClientProviderStrategy.java index 195a07a4024..451da5b7152 100644 --- a/core/src/main/java/org/testcontainers/dockerclient/EnvironmentAndSystemPropertyClientProviderStrategy.java +++ b/core/src/main/java/org/testcontainers/dockerclient/EnvironmentAndSystemPropertyClientProviderStrategy.java @@ -12,7 +12,7 @@ @Slf4j public class EnvironmentAndSystemPropertyClientProviderStrategy extends DockerClientProviderStrategy { - public static final int PRIORITY = 100; + public static final int PRIORITY = UnixSocketClientProviderStrategy.PRIORITY - 10; private static final String PING_TIMEOUT_DEFAULT = "10"; private static final String PING_TIMEOUT_PROPERTY_NAME = "testcontainers.environmentprovider.timeout"; diff --git a/core/src/main/java/org/testcontainers/dockerclient/ProxiedUnixSocketClientProviderStrategy.java b/core/src/main/java/org/testcontainers/dockerclient/ProxiedUnixSocketClientProviderStrategy.java deleted file mode 100644 index ffd689fcb9e..00000000000 --- a/core/src/main/java/org/testcontainers/dockerclient/ProxiedUnixSocketClientProviderStrategy.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.testcontainers.dockerclient; - -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.SystemUtils; -import org.rnorth.tcpunixsocketproxy.TcpToUnixSocketProxy; - -import java.io.File; - -@Slf4j -public class ProxiedUnixSocketClientProviderStrategy extends UnixSocketClientProviderStrategy { - - public static final int PRIORITY = EnvironmentAndSystemPropertyClientProviderStrategy.PRIORITY - 10; - - private final File socketFile = new File(DOCKER_SOCK_PATH); - - @Override - protected boolean isApplicable() { - return !SystemUtils.IS_OS_LINUX && socketFile.exists(); - } - - @Override - protected int getPriority() { - return PRIORITY; - } - - @Override - public void test() throws InvalidConfigurationException { - TcpToUnixSocketProxy proxy = new TcpToUnixSocketProxy(socketFile); - - try { - int proxyPort = proxy.start().getPort(); - - config = tryConfiguration("tcp://localhost:" + proxyPort); - - log.debug("Accessing unix domain socket via TCP proxy (" + DOCKER_SOCK_PATH + " via localhost:" + proxyPort + ")"); - } catch (Exception e) { - - proxy.stop(); - - throw new InvalidConfigurationException("ping failed", e); - } - - } - - @Override - public String getDescription() { - return "local Unix socket (via TCP proxy)"; - } - -} diff --git a/core/src/main/java/org/testcontainers/dockerclient/TestcontainersDockerCmdExecFactory.java b/core/src/main/java/org/testcontainers/dockerclient/TestcontainersDockerCmdExecFactory.java deleted file mode 100644 index 3ddc2e9dc08..00000000000 --- a/core/src/main/java/org/testcontainers/dockerclient/TestcontainersDockerCmdExecFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.testcontainers.dockerclient; - -import com.fasterxml.jackson.core.type.TypeReference; -import com.github.dockerjava.api.command.ListNetworksCmd; -import com.github.dockerjava.api.model.Network; -import com.github.dockerjava.core.DockerClientConfig; -import com.github.dockerjava.core.util.FiltersEncoder; -import com.github.dockerjava.netty.MediaType; -import com.github.dockerjava.netty.NettyDockerCmdExecFactory; -import com.github.dockerjava.netty.WebTarget; -import com.github.dockerjava.netty.exec.AbstrSyncDockerCmdExec; -import lombok.SneakyThrows; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.lang.reflect.Field; -import java.util.List; - -class TestcontainersDockerCmdExecFactory extends NettyDockerCmdExecFactory { - - @Override - @SneakyThrows - public ListNetworksCmd.Exec createListNetworksCmdExec() { - Field baseResourceField = NettyDockerCmdExecFactory.class.getDeclaredField("baseResource"); - baseResourceField.setAccessible(true); - - // FIXME Workaround for https://github.com/docker-java/docker-java/issues/857 - return new ListNetworksCmdExec((WebTarget) baseResourceField.get(this), getDockerClientConfig()); - } - - private static class ListNetworksCmdExec extends AbstrSyncDockerCmdExec> implements ListNetworksCmd.Exec { - - private static final Logger LOGGER = LoggerFactory.getLogger(com.github.dockerjava.netty.exec.ListNetworksCmdExec.class); - - public ListNetworksCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { - super(baseResource, dockerClientConfig); - } - - @Override - protected List execute(ListNetworksCmd command) { - WebTarget webTarget = getBaseResource().path("/networks"); - - if (command.getFilters() != null && !command.getFilters().isEmpty()) { - // Next line was changed (urlPathSegmentEscaper was removed) - webTarget = webTarget.queryParam("filters", FiltersEncoder.jsonEncode(command.getFilters())); - } - - LOGGER.trace("GET: {}", webTarget); - - return webTarget.request().accept(MediaType.APPLICATION_JSON).get(new TypeReference>() { - }); - } - } - -} \ No newline at end of file diff --git a/core/src/main/java/org/testcontainers/dockerclient/UnixSocketClientProviderStrategy.java b/core/src/main/java/org/testcontainers/dockerclient/UnixSocketClientProviderStrategy.java index 774f3184ef3..09d93c2610e 100644 --- a/core/src/main/java/org/testcontainers/dockerclient/UnixSocketClientProviderStrategy.java +++ b/core/src/main/java/org/testcontainers/dockerclient/UnixSocketClientProviderStrategy.java @@ -6,6 +6,7 @@ import org.apache.commons.lang.SystemUtils; import org.jetbrains.annotations.NotNull; +import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -13,6 +14,9 @@ @Slf4j public class UnixSocketClientProviderStrategy extends DockerClientProviderStrategy { + + public static final int PRIORITY = 100; + protected static final String DOCKER_SOCK_PATH = "/var/run/docker.sock"; private static final String SOCKET_LOCATION = "unix://" + DOCKER_SOCK_PATH; private static final int SOCKET_FILE_MODE_MASK = 0xc000; @@ -21,7 +25,12 @@ public class UnixSocketClientProviderStrategy extends DockerClientProviderStrate @Override protected boolean isApplicable() { - return SystemUtils.IS_OS_LINUX; + return SystemUtils.IS_OS_UNIX && new File(DOCKER_SOCK_PATH).exists(); + } + + @Override + protected int getPriority() { + return PRIORITY; } @Override diff --git a/pom.xml b/pom.xml index cac5baef31f..390827b249b 100644 --- a/pom.xml +++ b/pom.xml @@ -167,7 +167,7 @@ UTF-8 - 3.0.10 + 3.0.12 diff --git a/shade-test/jar-file/src/test/java/org/testcontainers/JarFileShadingTest.java b/shade-test/jar-file/src/test/java/org/testcontainers/JarFileShadingTest.java index 42dc9a0e631..37296d7ad6d 100644 --- a/shade-test/jar-file/src/test/java/org/testcontainers/JarFileShadingTest.java +++ b/shade-test/jar-file/src/test/java/org/testcontainers/JarFileShadingTest.java @@ -61,7 +61,8 @@ public void testMetaInf() throws Exception { ); assertThatFileList(root.resolve("META-INF").resolve("native")).containsOnly( - "liborg-testcontainers-shaded-netty-transport-native-epoll.so" + "liborg-testcontainers-shaded-netty-transport-native-epoll.so", + "liborg-testcontainers-shaded-netty-transport-native-kqueue.jnilib" ); }