Use docker-java 3.0.x for launch script integration tests
This commit is contained in:
parent
c373c0e830
commit
d439b73758
|
@ -4,16 +4,20 @@ This module contains integration tests for the default launch script that is use
|
||||||
to make a jar file fully executable on Linux. The tests use Docker to verify the
|
to make a jar file fully executable on Linux. The tests use Docker to verify the
|
||||||
functionality in a variety of Linux distributions.
|
functionality in a variety of Linux distributions.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
== Setting up Docker
|
== Setting up Docker
|
||||||
|
|
||||||
The setup that's required varies depending on your operating system.
|
The setup that's required varies depending on your operating system.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
=== Docker on OS X
|
=== Docker on OS X
|
||||||
|
|
||||||
The latest version of Docker runs as a native Mac application but isn't supported by
|
Install Docker for Mac. See the https://docs.docker.com/docker-for-mac/install/[macOS
|
||||||
docker-java. This means that you should use Docker Toolbox. See the
|
installation instructions] for details.
|
||||||
https://docs.docker.com/engine/installation/mac/[OS X installation instructions] for
|
|
||||||
details.
|
|
||||||
|
|
||||||
=== Docker on Linux
|
=== Docker on Linux
|
||||||
|
|
||||||
|
@ -30,29 +34,7 @@ $ sudo usermod -a -G docker awilkinson
|
||||||
You may need to log out and back in again for this change to take affect and for your
|
You may need to log out and back in again for this change to take affect and for your
|
||||||
user to be able to connect to the daemon.
|
user to be able to connect to the daemon.
|
||||||
|
|
||||||
== Preparing to run the tests
|
|
||||||
|
|
||||||
Before running the tests, you must prepare your environment according to your operating
|
|
||||||
system.
|
|
||||||
|
|
||||||
=== Preparation on OS X
|
|
||||||
|
|
||||||
The tests must be run in an environment where various environment variables including
|
|
||||||
`DOCKER_HOST` and `DOCKER_CERT_PATH` have been set:
|
|
||||||
|
|
||||||
----
|
|
||||||
$ eval $(docker-machine env default)
|
|
||||||
----
|
|
||||||
|
|
||||||
=== Preparation on Linux
|
|
||||||
|
|
||||||
Docker Daemon's default configuration on Linux uses a Unix socket for communication.
|
|
||||||
However, Docker's Java client uses HTTP by default. Docker Java's client can be configured
|
|
||||||
to use the Unix socket via the `DOCKER_URL` environment variable:
|
|
||||||
|
|
||||||
----
|
|
||||||
$ export DOCKER_URL=unix:///var/run/docker.sock
|
|
||||||
----
|
|
||||||
|
|
||||||
== Running the tests
|
== Running the tests
|
||||||
|
|
||||||
|
@ -69,6 +51,8 @@ connection. Subsequent runs will be faster as the images are cached locally. You
|
||||||
`docker images` to see a list of the cached images. Images created by these tests will be
|
`docker images` to see a list of the cached images. Images created by these tests will be
|
||||||
tagged with `spring-boot-it` prefix to easily distinguish them.
|
tagged with `spring-boot-it` prefix to easily distinguish them.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
== Cleaning up
|
== Cleaning up
|
||||||
|
|
||||||
If you want to reclaim the disk space used by the cached images (at the expense of having
|
If you want to reclaim the disk space used by the cached images (at the expense of having
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
<description>Spring Boot Launch Script Integration Tests</description>
|
<description>Spring Boot Launch Script Integration Tests</description>
|
||||||
<properties>
|
<properties>
|
||||||
<main.basedir>${basedir}/../../..</main.basedir>
|
<main.basedir>${basedir}/../../..</main.basedir>
|
||||||
<jersey.version>2.11</jersey.version>
|
<jersey.version>2.23.1</jersey.version>
|
||||||
</properties>
|
</properties>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.docker-java</groupId>
|
<groupId>com.github.docker-java</groupId>
|
||||||
<artifactId>docker-java</artifactId>
|
<artifactId>docker-java</artifactId>
|
||||||
<version>2.2.3</version>
|
<version>3.0.14</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
@ -22,6 +22,7 @@ import java.io.InputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
@ -30,17 +31,19 @@ import javax.ws.rs.client.Entity;
|
||||||
import javax.ws.rs.client.WebTarget;
|
import javax.ws.rs.client.WebTarget;
|
||||||
|
|
||||||
import com.github.dockerjava.api.DockerClient;
|
import com.github.dockerjava.api.DockerClient;
|
||||||
import com.github.dockerjava.api.DockerClientException;
|
|
||||||
import com.github.dockerjava.api.command.DockerCmd;
|
import com.github.dockerjava.api.command.DockerCmd;
|
||||||
|
import com.github.dockerjava.api.exception.DockerClientException;
|
||||||
import com.github.dockerjava.api.model.BuildResponseItem;
|
import com.github.dockerjava.api.model.BuildResponseItem;
|
||||||
import com.github.dockerjava.api.model.Frame;
|
import com.github.dockerjava.api.model.Frame;
|
||||||
import com.github.dockerjava.core.CompressArchiveUtil;
|
import com.github.dockerjava.core.DefaultDockerClientConfig;
|
||||||
import com.github.dockerjava.core.DockerClientBuilder;
|
import com.github.dockerjava.core.DockerClientBuilder;
|
||||||
import com.github.dockerjava.core.DockerClientConfig;
|
import com.github.dockerjava.core.DockerClientConfig;
|
||||||
import com.github.dockerjava.core.command.AttachContainerResultCallback;
|
import com.github.dockerjava.core.command.AttachContainerResultCallback;
|
||||||
import com.github.dockerjava.core.command.BuildImageResultCallback;
|
import com.github.dockerjava.core.command.BuildImageResultCallback;
|
||||||
|
import com.github.dockerjava.core.command.WaitContainerResultCallback;
|
||||||
|
import com.github.dockerjava.core.util.CompressArchiveUtil;
|
||||||
import com.github.dockerjava.jaxrs.AbstrSyncDockerCmdExec;
|
import com.github.dockerjava.jaxrs.AbstrSyncDockerCmdExec;
|
||||||
import com.github.dockerjava.jaxrs.DockerCmdExecFactoryImpl;
|
import com.github.dockerjava.jaxrs.JerseyDockerCmdExecFactory;
|
||||||
import org.assertj.core.api.Condition;
|
import org.assertj.core.api.Condition;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
@ -253,8 +256,10 @@ public class SysVinitLaunchScriptIT {
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
resultCallback.awaitCompletion(60, TimeUnit.SECONDS).close();
|
resultCallback.awaitCompletion(60, TimeUnit.SECONDS);
|
||||||
docker.waitContainerCmd(container).exec();
|
WaitContainerResultCallback waitContainerCallback = new WaitContainerResultCallback();
|
||||||
|
docker.waitContainerCmd(container).exec(waitContainerCallback);
|
||||||
|
waitContainerCallback.awaitCompletion(60, TimeUnit.SECONDS);
|
||||||
return output.toString();
|
return output.toString();
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
|
@ -268,11 +273,10 @@ public class SysVinitLaunchScriptIT {
|
||||||
}
|
}
|
||||||
|
|
||||||
private DockerClient createClient() {
|
private DockerClient createClient() {
|
||||||
DockerClientConfig config = DockerClientConfig.createDefaultConfigBuilder()
|
DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder()
|
||||||
.withVersion("1.19").build();
|
.withApiVersion("1.19").build();
|
||||||
DockerClient docker = DockerClientBuilder.getInstance(config)
|
return DockerClientBuilder.getInstance(config)
|
||||||
.withDockerCmdExecFactory(this.commandExecFactory).build();
|
.withDockerCmdExecFactory(this.commandExecFactory).build();
|
||||||
return docker;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String buildImage(DockerClient docker) {
|
private String buildImage(DockerClient docker) {
|
||||||
|
@ -328,7 +332,8 @@ public class SysVinitLaunchScriptIT {
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
docker.buildImageCmd(new File(dockerfile)).withTag(tag).exec(resultCallback);
|
docker.buildImageCmd(new File(dockerfile))
|
||||||
|
.withTags(new HashSet<>(Arrays.asList(tag))).exec(resultCallback);
|
||||||
String imageId = resultCallback.awaitImageId();
|
String imageId = resultCallback.awaitImageId();
|
||||||
return imageId;
|
return imageId;
|
||||||
}
|
}
|
||||||
|
@ -403,8 +408,8 @@ public class SysVinitLaunchScriptIT {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Void execute(CopyToContainerCmd command) {
|
protected Void execute(CopyToContainerCmd command) {
|
||||||
try (InputStream streamToUpload = new FileInputStream(CompressArchiveUtil
|
try (InputStream streamToUpload = new FileInputStream(
|
||||||
.archiveTARFiles(command.getFile().getParentFile(),
|
CompressArchiveUtil.archiveTARFiles(command.getFile().getParentFile(),
|
||||||
Arrays.asList(command.getFile()),
|
Arrays.asList(command.getFile()),
|
||||||
command.getFile().getName()))) {
|
command.getFile().getName()))) {
|
||||||
WebTarget webResource = getBaseResource().path("/containers/{id}/archive")
|
WebTarget webResource = getBaseResource().path("/containers/{id}/archive")
|
||||||
|
@ -448,13 +453,7 @@ public class SysVinitLaunchScriptIT {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class SpringBootDockerCmdExecFactory
|
private static final class SpringBootDockerCmdExecFactory
|
||||||
extends DockerCmdExecFactoryImpl {
|
extends JerseyDockerCmdExecFactory {
|
||||||
|
|
||||||
private SpringBootDockerCmdExecFactory() {
|
|
||||||
withClientRequestFilters((requestContext) ->
|
|
||||||
// Workaround for https://go-review.googlesource.com/#/c/3821/
|
|
||||||
requestContext.getHeaders().add("Connection", "close"));
|
|
||||||
}
|
|
||||||
|
|
||||||
private CopyToContainerCmdExec createCopyToContainerCmdExec() {
|
private CopyToContainerCmdExec createCopyToContainerCmdExec() {
|
||||||
return new CopyToContainerCmdExec(getBaseResource(), getDockerClientConfig());
|
return new CopyToContainerCmdExec(getBaseResource(), getDockerClientConfig());
|
||||||
|
|
|
@ -6,8 +6,6 @@
|
||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
<logger name="com.github.dockerjava.core.command" level="DEBUG"/>
|
|
||||||
|
|
||||||
<root level="INFO">
|
<root level="INFO">
|
||||||
<appender-ref ref="STDOUT" />
|
<appender-ref ref="STDOUT" />
|
||||||
</root>
|
</root>
|
||||||
|
|
Loading…
Reference in New Issue