Skip to content

Commit

Permalink
Backport use docker-java 3.0.x for launch tests
Browse files Browse the repository at this point in the history
Backport commit d439b73 to upgrade launch integration tests to
use docker-java 3.0.x.
  • Loading branch information
philwebb committed Jan 10, 2018
1 parent 7b3bedc commit 84fa67d
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 64 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +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
functionality in a variety of Linux distributions.

== Setting up Docker


== Setting up Docker
The setup that's required varies depending on your operating system.



=== Docker on OS X
Install Docker for Mac. See the https://docs.docker.com/docker-for-mac/install/[macOS
installation instructions] for details.

The latest version of Docker runs as a native Mac application but isn't supported by
docker-java. This means that you should use Docker Toolbox. See the
https://docs.docker.com/engine/installation/mac/[OS X installation instructions] for
details.

=== Docker on Linux

=== Docker on Linux
Install Docker as appropriate for your Linux distribution. See the
https://docs.docker.com/engine/installation/[Linux installation instructions] for more
information.
Expand All @@ -30,32 +31,9 @@ $ 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
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

You're now ready to run the tests. Assuming that you're in the same directory as this
README, the tests can be launched as follows:

Expand All @@ -69,8 +47,9 @@ 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
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
to wait for them to be downloaded and rebuilt the next time you run the tests), you can
use `docker images` to list the images and `docker rmi <image>` to delete them (look for
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
</organization>
<properties>
<main.basedir>${basedir}/../..</main.basedir>
<jersey.version>2.11</jersey.version>
<jersey.version>2.23.1</jersey.version>
</properties>
<dependencies>
<dependency>
Expand All @@ -37,7 +37,7 @@
<dependency>
<groupId>com.github.docker-java</groupId>
<artifactId>docker-java</artifactId>
<version>2.2.3</version>
<version>3.0.14</version>
<scope>test</scope>
</dependency>
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,32 +18,32 @@

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;

import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.client.ClientRequestFilter;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;

import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.DockerClientException;
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.Frame;
import com.github.dockerjava.core.CompressArchiveUtil;
import com.github.dockerjava.core.DefaultDockerClientConfig;
import com.github.dockerjava.core.DockerClientBuilder;
import com.github.dockerjava.core.DockerClientConfig;
import com.github.dockerjava.core.command.AttachContainerResultCallback;
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.DockerCmdExecFactoryImpl;
import com.github.dockerjava.jaxrs.JerseyDockerCmdExecFactory;
import org.assertj.core.api.Condition;
import org.junit.Test;
import org.junit.runner.RunWith;
Expand Down Expand Up @@ -250,8 +250,10 @@ public void onNext(Frame item) {
}

});
resultCallback.awaitCompletion(60, TimeUnit.SECONDS).close();
docker.waitContainerCmd(container).exec();
resultCallback.awaitCompletion(60, TimeUnit.SECONDS);
WaitContainerResultCallback waitContainerCallback = new WaitContainerResultCallback();
docker.waitContainerCmd(container).exec(waitContainerCallback);
waitContainerCallback.awaitCompletion(60, TimeUnit.SECONDS);
return output.toString();
}
finally {
Expand All @@ -265,11 +267,10 @@ public void onNext(Frame item) {
}

private DockerClient createClient() {
DockerClientConfig config = DockerClientConfig.createDefaultConfigBuilder()
.withVersion("1.19").build();
DockerClient docker = DockerClientBuilder.getInstance(config)
DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder()
.withApiVersion("1.19").build();
return DockerClientBuilder.getInstance(config)
.withDockerCmdExecFactory(this.commandExecFactory).build();
return docker;
}

private String buildImage(DockerClient docker) {
Expand Down Expand Up @@ -325,7 +326,8 @@ private String extractImageId() {
}

};
docker.buildImageCmd(new File(dockerfile)).withTag(tag).exec(resultCallback);
docker.buildImageCmd(new File(dockerfile))
.withTags(new HashSet<String>(Arrays.asList(tag))).exec(resultCallback);
String imageId = resultCallback.awaitImageId();
return imageId;
}
Expand Down Expand Up @@ -446,20 +448,7 @@ public void close() {
}

private static final class SpringBootDockerCmdExecFactory
extends DockerCmdExecFactoryImpl {

private SpringBootDockerCmdExecFactory() {
withClientRequestFilters(new ClientRequestFilter() {

@Override
public void filter(ClientRequestContext requestContext)
throws IOException {
// Workaround for https://go-review.googlesource.com/#/c/3821/
requestContext.getHeaders().add("Connection", "close");
}

});
}
extends JerseyDockerCmdExecFactory {

private CopyToContainerCmdExec createCopyToContainerCmdExec() {
return new CopyToContainerCmdExec(getBaseResource(), getDockerClientConfig());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
<configuration>

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

<logger name="com.github.dockerjava.core.command" level="DEBUG"/>

<root level="INFO">
<appender-ref ref="STDOUT" />
</root>

</configuration>

0 comments on commit 84fa67d

Please sign in to comment.