From db0669840975fbe8ae9eb4137e92fd67a5558533 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gillouard=20Fr=C3=A9d=C3=A9ric?= Date: Wed, 23 Mar 2016 16:59:16 +0100 Subject: [PATCH 1/3] Patch save image with tag --- .../github/dockerjava/jaxrs/SaveImageCmdExec.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/dockerjava/jaxrs/SaveImageCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/SaveImageCmdExec.java index f3f9a0d35..95addf2a8 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/SaveImageCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/SaveImageCmdExec.java @@ -12,6 +12,7 @@ import com.github.dockerjava.api.command.SaveImageCmd; import com.github.dockerjava.core.DockerClientConfig; import com.github.dockerjava.jaxrs.util.WrappedResponseInputStream; +import com.google.common.base.Strings; public class SaveImageCmdExec extends AbstrSyncDockerCmdExec implements SaveImageCmd.Exec { private static final Logger LOGGER = LoggerFactory.getLogger(SaveImageCmdExec.class); @@ -22,8 +23,15 @@ public SaveImageCmdExec(WebTarget baseResource, DockerClientConfig dockerClientC @Override protected InputStream execute(SaveImageCmd command) { - WebTarget webResource = getBaseResource().path("/images/" + command.getName() + "/get").queryParam("tag", - command.getTag()); + + // If tag is present, only tar the specific image + // else tar all the images with the same name + String name = command.getName(); + if(!Strings.isNullOrEmpty(command.getTag())) { + name += ":" + command.getTag(); + } + + WebTarget webResource = getBaseResource().path("/images/" + name + "/get"); LOGGER.trace("GET: {}", webResource); Response response = webResource.request().accept(MediaType.APPLICATION_JSON).get(); From f095547fb6440a375e06071adcfb2cceda8560b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gillouard=20Fr=C3=A9d=C3=A9ric?= Date: Thu, 24 Mar 2016 11:49:44 +0100 Subject: [PATCH 2/3] Validate checkstyle and add test --- .../dockerjava/jaxrs/SaveImageCmdExec.java | 14 +- .../command/AttachContainerCmdImplTest.java | 153 ----- .../core/command/AuthCmdImplTest.java | 58 -- .../core/command/BuildImageCmdImplTest.java | 321 --------- .../core/command/CommitCmdImplTest.java | 80 --- .../command/ConnectToNetworkCmdImplTest.java | 59 -- .../command/ContainerDiffCmdImplTest.java | 79 --- .../CopyArchiveFromContainerCmdImplTest.java | 73 -- .../CopyArchiveToContainerCmdImplTest.java | 94 --- .../CopyFileFromContainerCmdImplTest.java | 73 -- .../command/CreateContainerCmdImplTest.java | 630 ------------------ .../command/CreateNetworkCmdImplTest.java | 52 -- .../core/command/CreateVolumeCmdImplTest.java | 75 --- .../DisconnectFromNetworkCmdImplTest.java | 59 -- .../core/command/DockerfileFixture.java | 81 --- .../core/command/EventsCmdImplTest.java | 159 ----- .../core/command/ExecCreateCmdImplTest.java | 61 -- .../core/command/ExecStartCmdImplTest.java | 95 --- .../core/command/FrameReaderITest.java | 117 ---- .../core/command/FrameReaderTest.java | 61 -- .../core/command/InfoCmdImplTest.java | 71 -- .../command/InspectContainerCmdImplTest.java | 100 --- .../core/command/InspectExecCmdImplTest.java | 144 ---- .../command/InspectNetworkCmdImplTest.java | 57 -- .../command/InspectVolumeCmdImplTest.java | 65 -- .../command/KillContainerCmdImplTest.java | 80 --- .../command/ListContainersCmdImplTest.java | 170 ----- .../core/command/ListImagesCmdImplTest.java | 101 --- .../core/command/ListNetworksCmdImplTest.java | 55 -- .../core/command/ListVolumesCmdImplTest.java | 59 -- .../core/command/LogContainerCmdImplTest.java | 171 ----- .../core/command/PullImageCmdImplTest.java | 117 ---- .../core/command/PushImageCmdImplTest.java | 78 --- .../command/RemoveContainerCmdImplTest.java | 80 --- .../core/command/RemoveImageCmdImplTest.java | 87 --- .../command/RemoveNetworkCmdImplTest.java | 76 --- .../core/command/RemoveVolumeCmdImplTest.java | 65 -- .../command/RenameContainerCmdImplTest.java | 71 -- .../command/RestartContainerCmdImplTest.java | 84 --- .../core/command/SaveImageCmdImplTest.java | 2 + .../core/command/SearchImagesCmdImplTest.java | 59 -- .../command/StartContainerCmdImplTest.java | 559 ---------------- .../core/command/StatsCmdImplTest.java | 106 --- .../command/StopContainerCmdImplTest.java | 89 --- .../core/command/TagImageCmdImplTest.java | 63 -- .../command/UpdateContainerCmdImplTest.java | 121 ---- .../core/command/VersionCmdImplTest.java | 52 -- .../command/WaitContainerCmdImplTest.java | 107 --- .../exec/AttachContainerCmdExecTest.java | 160 ----- .../netty/exec/AuthCmdExecTest.java | 57 -- .../netty/exec/BuildImageCmdExecTest.java | 316 --------- .../netty/exec/CommitCmdExecTest.java | 80 --- .../netty/exec/ContainerDiffCmdExecTest.java | 80 --- .../CopyArchiveFromContainerCmdExecTest.java | 73 -- .../CopyArchiveToContainerCmdExecTest.java | 94 --- .../CopyFileFromContainerCmdExecTest.java | 73 -- .../exec/CreateContainerCmdExecTest.java | 567 ---------------- .../netty/exec/CreateNetworkCmdExecTest.java | 52 -- .../netty/exec/CreateVolumeCmdExecTest.java | 73 -- .../netty/exec/EventsCmdExecTest.java | 161 ----- .../netty/exec/ExecCreateCmdExecTest.java | 61 -- .../netty/exec/ExecStartCmdExecTest.java | 182 ----- .../netty/exec/InfoCmdExecTest.java | 71 -- .../exec/InspectContainerCmdExecTest.java | 100 --- .../netty/exec/InspectExecCmdExecTest.java | 145 ---- .../netty/exec/InspectNetworkCmdExecTest.java | 57 -- .../netty/exec/InspectVolumeCmdExecTest.java | 65 -- .../netty/exec/KillContainerCmdExecTest.java | 80 --- .../netty/exec/ListContainersCmdExecTest.java | 172 ----- .../netty/exec/ListImagesCmdExecTest.java | 100 --- .../netty/exec/ListNetworksCmdExecTest.java | 55 -- .../netty/exec/ListVolumesCmdExecTest.java | 59 -- .../netty/exec/LogContainerCmdExecTest.java | 172 ----- .../netty/exec/PingCmdExecTest.java | 43 -- .../netty/exec/PullImageCmdExecTest.java | 119 ---- .../netty/exec/PushImageCmdExecTest.java | 79 --- .../exec/RemoveContainerCmdExecTest.java | 81 --- .../netty/exec/RemoveImageCmdExecTest.java | 87 --- .../netty/exec/RemoveNetworkCmdExecTest.java | 76 --- .../netty/exec/RemoveVolumeCmdExecTest.java | 65 -- .../exec/RenameContainerCmdExecTest.java | 71 -- .../exec/RestartContainerCmdExecTest.java | 84 --- .../netty/exec/SearchImagesCmdExecTest.java | 59 -- .../netty/exec/StartContainerCmdExecTest.java | 562 ---------------- .../netty/exec/StatsCmdExecTest.java | 106 --- .../netty/exec/StopContainerCmdExecTest.java | 89 --- .../netty/exec/TagImageCmdExecTest.java | 63 -- .../exec/UpdateContainerCmdExecTest.java | 107 --- .../netty/exec/VersionCmdExecTest.java | 52 -- .../netty/exec/WaitContainerCmdExecTest.java | 110 --- 90 files changed, 8 insertions(+), 10233 deletions(-) delete mode 100644 src/test/java/com/github/dockerjava/core/command/AttachContainerCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/AuthCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/CommitCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/ContainerDiffCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/CopyArchiveFromContainerCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/CopyArchiveToContainerCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/CopyFileFromContainerCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/CreateNetworkCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/CreateVolumeCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/DockerfileFixture.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/ExecCreateCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/FrameReaderITest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/FrameReaderTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/InfoCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/InspectContainerCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/InspectExecCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/InspectNetworkCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/InspectVolumeCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/KillContainerCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/ListContainersCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/ListImagesCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/ListNetworksCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/ListVolumesCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/LogContainerCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/PullImageCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/PushImageCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/RemoveContainerCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/RemoveImageCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/RemoveNetworkCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/RemoveVolumeCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/RenameContainerCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/RestartContainerCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/SearchImagesCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/StatsCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/StopContainerCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/TagImageCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/UpdateContainerCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/VersionCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/core/command/WaitContainerCmdImplTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/AttachContainerCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/AuthCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/BuildImageCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/CommitCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/ContainerDiffCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/CopyArchiveFromContainerCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/CopyArchiveToContainerCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/CopyFileFromContainerCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/CreateContainerCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/CreateVolumeCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/EventsCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/ExecCreateCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/ExecStartCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/InfoCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/InspectVolumeCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/KillContainerCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/ListContainersCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/ListImagesCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/ListNetworksCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/ListVolumesCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/LogContainerCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/PingCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/PullImageCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/PushImageCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/RemoveContainerCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/RemoveImageCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/RemoveVolumeCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/RenameContainerCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/RestartContainerCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/SearchImagesCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/StartContainerCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/StatsCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/StopContainerCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/TagImageCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/UpdateContainerCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/VersionCmdExecTest.java delete mode 100644 src/test/java/com/github/dockerjava/netty/exec/WaitContainerCmdExecTest.java diff --git a/src/main/java/com/github/dockerjava/jaxrs/SaveImageCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/SaveImageCmdExec.java index 95addf2a8..c386ea3a0 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/SaveImageCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/SaveImageCmdExec.java @@ -23,14 +23,12 @@ public SaveImageCmdExec(WebTarget baseResource, DockerClientConfig dockerClientC @Override protected InputStream execute(SaveImageCmd command) { - - // If tag is present, only tar the specific image - // else tar all the images with the same name - String name = command.getName(); - if(!Strings.isNullOrEmpty(command.getTag())) { - name += ":" + command.getTag(); - } - + // If tag is present, only tar the specific image + // else tar all the images with the same name + String name = command.getName(); + if (!Strings.isNullOrEmpty(command.getTag())) { + name += ":" + command.getTag(); + } WebTarget webResource = getBaseResource().path("/images/" + name + "/get"); LOGGER.trace("GET: {}", webResource); diff --git a/src/test/java/com/github/dockerjava/core/command/AttachContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/AttachContainerCmdImplTest.java deleted file mode 100644 index 21507e44e..000000000 --- a/src/test/java/com/github/dockerjava/core/command/AttachContainerCmdImplTest.java +++ /dev/null @@ -1,153 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.InputStream; -import java.lang.reflect.Method; -import java.util.concurrent.TimeUnit; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.model.Frame; -import com.github.dockerjava.api.model.StreamType; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class AttachContainerCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void attachContainerWithoutTTY() throws Exception { - - String snippet = "hello world"; - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("echo", snippet) - .withTty(false).exec(); - - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - AttachContainerTestCallback callback = new AttachContainerTestCallback() { - @Override - public void onNext(Frame frame) { - assertEquals(frame.getStreamType(), StreamType.STDOUT); - super.onNext(frame); - }; - }; - - dockerClient.attachContainerCmd(container.getId()).withStdErr(true).withStdOut(true).withFollowStream(true) - .withLogs(true).exec(callback).awaitCompletion(30, TimeUnit.SECONDS); - callback.close(); - - assertThat(callback.toString(), containsString(snippet)); - } - - @Test - public void attachContainerWithTTY() throws Exception { - - File baseDir = new File(Thread.currentThread().getContextClassLoader() - .getResource("attachContainerTestDockerfile").getFile()); - - String imageId = buildImage(baseDir); - - CreateContainerResponse container = dockerClient.createContainerCmd(imageId).withTty(true).exec(); - - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - AttachContainerTestCallback callback = new AttachContainerTestCallback() { - @Override - public void onNext(Frame frame) { - assertEquals(frame.getStreamType(), StreamType.RAW); - super.onNext(frame); - }; - }; - - dockerClient.attachContainerCmd(container.getId()).withStdErr(true).withStdOut(true).withFollowStream(true) - .exec(callback).awaitCompletion(15, TimeUnit.SECONDS); - callback.close(); - - System.out.println("log: " + callback.toString()); - - // HexDump.dump(collectFramesCallback.toString().getBytes(), 0, System.out, 0); - - assertThat(callback.toString(), containsString("stdout\r\nstderr")); - } - - @Test(expectedExceptions = UnsupportedOperationException.class) - public void attachContainerStdinUnsupported() throws Exception { - - String snippet = "hello world"; - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("echo", snippet) - .withTty(false).exec(); - - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - AttachContainerTestCallback callback = new AttachContainerTestCallback() { - @Override - public void onNext(Frame frame) { - assertEquals(frame.getStreamType(), StreamType.STDOUT); - super.onNext(frame); - }; - }; - - InputStream stdin = new ByteArrayInputStream("".getBytes()); - - dockerClient.attachContainerCmd(container.getId()).withStdErr(true).withStdOut(true).withFollowStream(true) - .withLogs(true).withStdIn(stdin).exec(callback).awaitCompletion(30, TimeUnit.SECONDS); - callback.close(); - } - - public static class AttachContainerTestCallback extends AttachContainerResultCallback { - private StringBuffer log = new StringBuffer(); - - @Override - public void onNext(Frame item) { - log.append(new String(item.getPayload())); - super.onNext(item); - } - - @Override - public String toString() { - return log.toString(); - } - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/AuthCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/AuthCmdImplTest.java deleted file mode 100644 index c01c8b8cd..000000000 --- a/src/test/java/com/github/dockerjava/core/command/AuthCmdImplTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.github.dockerjava.core.command; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.UnauthorizedException; -import com.github.dockerjava.api.model.AuthResponse; -import com.github.dockerjava.client.AbstractDockerClientTest; -import com.github.dockerjava.core.DockerClientBuilder; - -@Test(groups = "integration") -public class AuthCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void testAuth() throws Exception { - AuthResponse response = dockerClient.authCmd().exec(); - - assertEquals(response.getStatus(), "Login Succeeded"); - } - - // Disabled because of 500/InternalServerException - @Test(enabled = false) - public void testAuthInvalid() throws Exception { - - try { - DockerClientBuilder.getInstance(config("garbage")).build().authCmd().exec(); - fail("Expected a UnauthorizedException caused by a bad password."); - } catch (UnauthorizedException e) { - assertEquals(e.getMessage(), "Wrong login/password, please try again\n"); - } - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java deleted file mode 100644 index 99eefb4de..000000000 --- a/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java +++ /dev/null @@ -1,321 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.notNullValue; -import static org.hamcrest.Matchers.nullValue; - -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; -import java.lang.reflect.Method; -import java.util.Collection; -import java.util.UUID; - -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.filefilter.TrueFileFilter; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.DockerClientException; -import com.github.dockerjava.api.command.BuildImageCmd; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.command.InspectImageResponse; -import com.github.dockerjava.api.model.AuthConfig; -import com.github.dockerjava.api.model.AuthConfigurations; -import com.github.dockerjava.api.model.ExposedPort; -import com.github.dockerjava.api.model.PortBinding; -import com.github.dockerjava.api.model.Ports; -import com.github.dockerjava.client.AbstractDockerClientTest; -import com.github.dockerjava.core.util.CompressArchiveUtil; - -@Test(groups = "integration") -public class BuildImageCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void testNginxDockerfileBuilder() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("nginx").getFile()); - - String imageId = buildImage(baseDir); - - InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); - assertThat(inspectImageResponse, not(nullValue())); - LOG.info("Image Inspect: {}", inspectImageResponse.toString()); - - assertThat(inspectImageResponse.getAuthor(), equalTo("Guillaume J. Charmes \"guillaume@dotcloud.com\"")); - } - - @Test(groups = "ignoreInCircleCi") - public void testNonstandard1() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader() - .getResource("nonstandard/subdirectory/Dockerfile-nonstandard").getFile()); - - buildImage(baseDir); - } - - @Test(groups = "ignoreInCircleCi") - public void testNonstandard2() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("nonstandard").getFile()); - File dockerFile = new File(Thread.currentThread().getContextClassLoader() - .getResource("nonstandard/subdirectory/Dockerfile-nonstandard").getFile()); - - dockerClient.buildImageCmd().withBaseDirectory(baseDir).withDockerfile(dockerFile).withNoCache(true) - .exec(new BuildImageResultCallback()).awaitImageId(); - } - - @Test - public void testDockerBuilderFromTar() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddFile").getFile()); - Collection files = FileUtils.listFiles(baseDir, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE); - File tarFile = CompressArchiveUtil.archiveTARFiles(baseDir, files, UUID.randomUUID().toString()); - String response = dockerfileBuild(new FileInputStream(tarFile)); - assertThat(response, containsString("Successfully executed testrun.sh")); - } - - @Test - public void testDockerBuildWithOnBuild() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddOnBuild/onbuild") - .getFile()); - dockerClient.buildImageCmd(baseDir).withNoCache(true).withTag("docker-java-onbuild") - .exec(new BuildImageResultCallback()).awaitImageId(); - baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddOnBuild/test").getFile()); - String response = dockerfileBuild(baseDir); - assertThat(response, containsString("Successfully executed testrun.sh")); - } - - @Test - public void testDockerBuilderAddUrl() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddUrl").getFile()); - String response = dockerfileBuild(baseDir); - assertThat(response, containsString("Docker")); - } - - @Test - public void testDockerBuilderAddFileInSubfolder() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddFileInSubfolder") - .getFile()); - String response = dockerfileBuild(baseDir); - assertThat(response, containsString("Successfully executed testrun.sh")); - } - - @Test - public void testDockerBuilderAddFilesViaWildcard() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddFilesViaWildcard") - .getFile()); - String response = dockerfileBuild(baseDir); - assertThat(response, containsString("Successfully executed testinclude1.sh")); - assertThat(response, not(containsString("Successfully executed testinclude2.sh"))); - } - - @Test - public void testDockerBuilderAddFolder() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddFolder").getFile()); - String response = dockerfileBuild(baseDir); - assertThat(response, containsString("Successfully executed testAddFolder.sh")); - } - - @Test - public void testDockerBuilderEnv() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testEnv").getFile()); - String response = dockerfileBuild(baseDir); - assertThat(response, containsString("Successfully executed testrun.sh")); - } - - private String dockerfileBuild(InputStream tarInputStream) throws Exception { - - return execBuild(dockerClient.buildImageCmd().withTarInputStream(tarInputStream)); - } - - private String dockerfileBuild(File baseDir) throws Exception { - - return execBuild(dockerClient.buildImageCmd(baseDir)); - } - - private String execBuild(BuildImageCmd buildImageCmd) throws Exception { - String imageId = buildImageCmd.withNoCache(true).exec(new BuildImageResultCallback()).awaitImageId(); - - // Create container based on image - CreateContainerResponse container = dockerClient.createContainerCmd(imageId).exec(); - - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()).awaitStatusCode(); - - return containerLog(container.getId()); - } - - @Test(expectedExceptions = {DockerClientException.class}) - public void testDockerfileIgnored() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testDockerfileIgnored") - .getFile()); - - dockerClient.buildImageCmd(baseDir).withNoCache(true).exec(new BuildImageResultCallback()).awaitImageId(); - } - - @Test - public void testDockerfileNotIgnored() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testDockerfileNotIgnored") - .getFile()); - - dockerClient.buildImageCmd(baseDir).withNoCache(true).exec(new BuildImageResultCallback()).awaitImageId(); - } - - @Test(expectedExceptions = {DockerClientException.class}) - public void testInvalidDockerIgnorePattern() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader() - .getResource("testInvalidDockerignorePattern").getFile()); - - dockerClient.buildImageCmd(baseDir).withNoCache(true).exec(new BuildImageResultCallback()).awaitImageId(); - } - - @Test(groups = "ignoreInCircleCi") - public void testDockerIgnore() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testDockerignore") - .getFile()); - String response = dockerfileBuild(baseDir); - assertThat(response, containsString("/tmp/a/a /tmp/a/c /tmp/a/d")); - } - - @Test - public void testNetCatDockerfileBuilder() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("netcat").getFile()); - - String imageId = dockerClient.buildImageCmd(baseDir).withNoCache(true).exec(new BuildImageResultCallback()) - .awaitImageId(); - - assertNotNull(imageId, "Not successful in build"); - - InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); - assertThat(inspectImageResponse, not(nullValue())); - assertThat(inspectImageResponse.getId(), not(nullValue())); - LOG.info("Image Inspect: {}", inspectImageResponse.toString()); - - CreateContainerResponse container = dockerClient.createContainerCmd(inspectImageResponse.getId()).exec(); - assertThat(container.getId(), not(isEmptyString())); - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getId(), notNullValue()); - assertThat(inspectContainerResponse.getNetworkSettings().getPorts(), notNullValue()); - - // No use as such if not running on the server - // for (Ports.Port p : inspectContainerResponse.getNetworkSettings().getPorts().getAllPorts()) { - // int port = Integer.valueOf(p.getHostPort()); - // LOG.info("Checking port {} is open", port); - // assertThat(available(port), is(false)); - // } - dockerClient.stopContainerCmd(container.getId()).withTimeout(0).exec(); - - } - - @Test - public void testAddAndCopySubstitution() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testENVSubstitution") - .getFile()); - String response = dockerfileBuild(baseDir); - assertThat(response, containsString("testENVSubstitution successfully completed")); - } - - @Test - public void testBuildFromPrivateRegistry() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("privateRegistry").getFile()); - - String imageId = buildImage(baseDir); - - InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); - assertThat(inspectImageResponse, not(nullValue())); - LOG.info("Image Inspect: {}", inspectImageResponse.toString()); - - dockerClient.tagImageCmd(imageId, "testregistry", "2").withForce().exec(); - - // see https://github.com/docker/distribution/blob/master/docs/deploying.md#native-basic-auth - CreateContainerResponse testregistry = dockerClient - .createContainerCmd("testregistry:2") - .withName("registry") - .withPortBindings(new PortBinding(new Ports.Binding(5000), ExposedPort.tcp(5000))) - .withEnv("REGISTRY_AUTH=htpasswd", "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm", - "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd", "REGISTRY_LOG_LEVEL=debug", - "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt", "REGISTRY_HTTP_TLS_KEY=/certs/domain.key") - .exec(); - - dockerClient.startContainerCmd(testregistry.getId()).exec(); - - // wait for registry to boot - Thread.sleep(3000); - - // credentials as configured in /auth/htpasswd - AuthConfig authConfig = new AuthConfig() - .withUsername("testuser") - .withPassword("testpassword") - .withEmail("foo@bar.de") - .withRegistryAddress("localhost:5000"); - - dockerClient.authCmd().withAuthConfig(authConfig).exec(); - dockerClient.tagImageCmd("busybox:latest", "localhost:5000/testuser/busybox", "latest").withForce().exec(); - - dockerClient.pushImageCmd("localhost:5000/testuser/busybox").withTag("latest").withAuthConfig(authConfig) - .exec(new PushImageResultCallback()).awaitSuccess(); - - dockerClient.removeImageCmd("localhost:5000/testuser/busybox").withForce(true).exec(); - - baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testBuildFromPrivateRegistry") - .getFile()); - - AuthConfigurations authConfigurations = new AuthConfigurations(); - authConfigurations.addConfig(authConfig); - - imageId = dockerClient.buildImageCmd(baseDir).withNoCache(true).withBuildAuthConfigs(authConfigurations) - .exec(new BuildImageResultCallback()).awaitImageId(); - - inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); - assertThat(inspectImageResponse, not(nullValue())); - LOG.info("Image Inspect: {}", inspectImageResponse.toString()); - - } - - @Test - public void testBuildArgs() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testBuildArgs").getFile()); - - String imageId = dockerClient.buildImageCmd(baseDir).withNoCache(true).withBuildArg("testArg", "abc") - .exec(new BuildImageResultCallback()) - .awaitImageId(); - - InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); - assertThat(inspectImageResponse, not(nullValue())); - LOG.info("Image Inspect: {}", inspectImageResponse.toString()); - - assertThat(inspectImageResponse.getConfig().getLabels().get("test"), equalTo("abc")); - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/CommitCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/CommitCmdImplTest.java deleted file mode 100644 index b8758d332..000000000 --- a/src/test/java/com/github/dockerjava/core/command/CommitCmdImplTest.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.startsWith; -import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectImageResponse; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class CommitCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void commit() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("touch", "/test").exec(); - - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - dockerClient.startContainerCmd(container.getId()).exec(); - - LOG.info("Commiting container: {}", container.toString()); - String imageId = dockerClient.commitCmd(container.getId()).exec(); - - InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); - LOG.info("Image Inspect: {}", inspectImageResponse.toString()); - - assertThat(inspectImageResponse, hasField("container", startsWith(container.getId()))); - assertThat(inspectImageResponse.getContainerConfig().getImage(), equalTo("busybox")); - - InspectImageResponse busyboxImg = dockerClient.inspectImageCmd("busybox").exec(); - - assertThat(inspectImageResponse.getParent(), equalTo(busyboxImg.getId())); - } - - @Test - public void commitNonExistingContainer() throws DockerException { - try { - dockerClient.commitCmd("non-existent").exec(); - fail("expected NotFoundException"); - } catch (NotFoundException e) { - } - } - -} diff --git a/src/test/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImplTest.java deleted file mode 100644 index ad051e0bd..000000000 --- a/src/test/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImplTest.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.github.dockerjava.core.command; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.CreateNetworkResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.model.Network; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class ConnectToNetworkCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void connectToNetwork() throws InterruptedException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); - dockerClient.startContainerCmd(container.getId()).exec(); - - CreateNetworkResponse network = dockerClient.createNetworkCmd().withName("testNetwork").exec(); - - dockerClient.connectToNetworkCmd().withNetworkId(network.getId()).withContainerId(container.getId()).exec(); - - Network updatedNetwork = dockerClient.inspectNetworkCmd().withNetworkId(network.getId()).exec(); - - assertTrue(updatedNetwork.getContainers().containsKey(container.getId())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertNotNull(inspectContainerResponse.getNetworkSettings().getNetworks().get("testNetwork")); - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/ContainerDiffCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ContainerDiffCmdImplTest.java deleted file mode 100644 index 62c7b2ec0..000000000 --- a/src/test/java/com/github/dockerjava/core/command/ContainerDiffCmdImplTest.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.github.dockerjava.core.command; - -import static ch.lambdaj.Lambda.selectUnique; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; -import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; - -import java.lang.reflect.Method; -import java.util.List; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.model.ChangeLog; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class ContainerDiffCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(groups = "ignoreInCircleCi") - public void testContainerDiff() throws DockerException { - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("touch", "/test").exec(); - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - dockerClient.startContainerCmd(container.getId()).exec(); - - int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()) - .awaitStatusCode(); - assertThat(exitCode, equalTo(0)); - - List filesystemDiff = dockerClient.containerDiffCmd(container.getId()).exec(); - LOG.info("Container DIFF: {}", filesystemDiff.toString()); - - assertThat(filesystemDiff.size(), equalTo(1)); - ChangeLog testChangeLog = selectUnique(filesystemDiff, hasField("path", equalTo("/test"))); - - assertThat(testChangeLog, hasField("path", equalTo("/test"))); - assertThat(testChangeLog, hasField("kind", equalTo(1))); - } - - @Test - public void testContainerDiffWithNonExistingContainer() throws DockerException { - try { - dockerClient.containerDiffCmd("non-existing").exec(); - fail("expected NotFoundException"); - } catch (NotFoundException e) { - } - } - -} diff --git a/src/test/java/com/github/dockerjava/core/command/CopyArchiveFromContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/CopyArchiveFromContainerCmdImplTest.java deleted file mode 100644 index 0f9da6058..000000000 --- a/src/test/java/com/github/dockerjava/core/command/CopyArchiveFromContainerCmdImplTest.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.isEmptyOrNullString; -import static org.hamcrest.Matchers.not; - -import java.io.InputStream; -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class CopyArchiveFromContainerCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void copyFromContainer() throws Exception { - // TODO extract this into a shared method - CreateContainerResponse container = dockerClient.createContainerCmd("busybox") - .withName("docker-java-itest-copyFromContainer").withCmd("touch", "/copyFromContainer").exec(); - - LOG.info("Created container: {}", container); - assertThat(container.getId(), not(isEmptyOrNullString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InputStream response = dockerClient.copyArchiveFromContainerCmd(container.getId(), "/copyFromContainer").exec(); - Boolean bytesAvailable = response.available() > 0; - assertTrue(bytesAvailable, "The file was not copied from the container."); - - // read the stream fully. Otherwise, the underlying stream will not be closed. - String responseAsString = asString(response); - assertNotNull(responseAsString); - assertTrue(responseAsString.length() > 0); - } - - @Test - public void copyFromNonExistingContainer() throws Exception { - try { - dockerClient.copyArchiveFromContainerCmd("non-existing", "/test").exec(); - fail("expected NotFoundException"); - } catch (NotFoundException ignored) { - } - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/CopyArchiveToContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/CopyArchiveToContainerCmdImplTest.java deleted file mode 100644 index 0f8f2164b..000000000 --- a/src/test/java/com/github/dockerjava/core/command/CopyArchiveToContainerCmdImplTest.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.isEmptyOrNullString; -import static org.hamcrest.Matchers.not; - -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.Method; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.client.AbstractDockerClientTest; -import com.github.dockerjava.core.util.CompressArchiveUtil; - -@Test(groups = "integration") -public class CopyArchiveToContainerCmdImplTest extends AbstractDockerClientTest { - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void copyFileToContainer() throws Exception { - CreateContainerResponse container = prepareContainerForCopy(); - Path temp = Files.createTempFile("", ".tar.gz"); - CompressArchiveUtil.tar(Paths.get("src/test/resources/testReadFile"), temp, true, false); - try (InputStream uploadStream = Files.newInputStream(temp)) { - dockerClient.copyArchiveToContainerCmd(container.getId()).withTarInputStream(uploadStream).exec(); - assertFileCopied(container); - } - } - - @Test - public void copyStreamToContainer() throws Exception { - CreateContainerResponse container = prepareContainerForCopy(); - dockerClient.copyArchiveToContainerCmd(container.getId()).withHostResource("src/test/resources/testReadFile") - .exec(); - assertFileCopied(container); - } - - private CreateContainerResponse prepareContainerForCopy() { - CreateContainerResponse container = dockerClient.createContainerCmd("busybox") - .withName("docker-java-itest-copyToContainer").exec(); - LOG.info("Created container: {}", container); - assertThat(container.getId(), not(isEmptyOrNullString())); - dockerClient.startContainerCmd(container.getId()).exec(); - // Copy a folder to the container - return container; - } - - private void assertFileCopied(CreateContainerResponse container) throws IOException { - try (InputStream response = dockerClient.copyArchiveFromContainerCmd(container.getId(), "testReadFile").exec()) { - boolean bytesAvailable = response.available() > 0; - assertTrue(bytesAvailable, "The file was not copied to the container."); - } - } - - @Test - public void copyToNonExistingContainer() throws Exception { - try { - dockerClient.copyArchiveToContainerCmd("non-existing").withHostResource("src/test/resources/testReadFile") - .exec(); - fail("expected NotFoundException"); - } catch (NotFoundException ignored) { - } - } - -} diff --git a/src/test/java/com/github/dockerjava/core/command/CopyFileFromContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/CopyFileFromContainerCmdImplTest.java deleted file mode 100644 index 3e4e88612..000000000 --- a/src/test/java/com/github/dockerjava/core/command/CopyFileFromContainerCmdImplTest.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.isEmptyOrNullString; -import static org.hamcrest.Matchers.not; - -import java.io.InputStream; -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class CopyFileFromContainerCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void copyFromContainer() throws Exception { - // TODO extract this into a shared method - CreateContainerResponse container = dockerClient.createContainerCmd("busybox") - .withName("docker-java-itest-copyFromContainer").withCmd("touch", "/copyFromContainer").exec(); - - LOG.info("Created container: {}", container); - assertThat(container.getId(), not(isEmptyOrNullString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InputStream response = dockerClient.copyFileFromContainerCmd(container.getId(), "/copyFromContainer").exec(); - Boolean bytesAvailable = response.available() > 0; - assertTrue(bytesAvailable, "The file was not copied from the container."); - - // read the stream fully. Otherwise, the underlying stream will not be closed. - String responseAsString = asString(response); - assertNotNull(responseAsString); - assertTrue(responseAsString.length() > 0); - } - - @Test - public void copyFromNonExistingContainer() throws Exception { - try { - dockerClient.copyFileFromContainerCmd("non-existing", "/test").exec(); - fail("expected NotFoundException"); - } catch (NotFoundException ignored) { - } - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java deleted file mode 100644 index f2fd32b6a..000000000 --- a/src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java +++ /dev/null @@ -1,630 +0,0 @@ -package com.github.dockerjava.core.command; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.exception.ConflictException; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.model.Bind; -import com.github.dockerjava.api.model.Device; -import com.github.dockerjava.api.model.ExposedPort; -import com.github.dockerjava.api.model.Frame; -import com.github.dockerjava.api.model.Link; -import com.github.dockerjava.api.model.LogConfig; -import com.github.dockerjava.api.model.Ports; -import com.github.dockerjava.api.model.RestartPolicy; -import com.github.dockerjava.api.model.Ulimit; -import com.github.dockerjava.api.model.Volume; -import com.github.dockerjava.api.model.VolumesFrom; -import com.github.dockerjava.client.AbstractDockerClientTest; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import java.lang.reflect.Method; -import java.security.SecureRandom; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.TimeUnit; - -import static com.github.dockerjava.api.model.Capability.MKNOD; -import static com.github.dockerjava.api.model.Capability.NET_ADMIN; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.contains; -import static org.hamcrest.Matchers.containsInAnyOrder; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.hasItemInArray; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.notNullValue; -import static org.hamcrest.Matchers.startsWith; - -@Test(groups = "integration") -public class CreateContainerCmdImplTest extends AbstractDockerClientTest { - public static final String BUSYBOX_IMAGE = "busybox"; - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(expectedExceptions = ConflictException.class) - public void createContainerWithExistingName() throws DockerException { - - String containerName = "generated_" + new SecureRandom().nextInt(); - - CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("env") - .withName(containerName).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("env").withName(containerName).exec(); - } - - @Test - public void createContainerWithVolume() throws DockerException { - - Volume volume = new Volume("/var/log"); - - CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withVolumes(volume) - .withCmd("true").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - LOG.info("Inspect container {}", inspectContainerResponse.getConfig().getVolumes()); - - assertThat(inspectContainerResponse.getConfig().getVolumes().keySet(), contains("/var/log")); - - assertThat(inspectContainerResponse.getMounts().get(0).getDestination(), equalTo(volume)); - assertThat(inspectContainerResponse.getMounts().get(0).getMode(), equalTo("")); - assertThat(inspectContainerResponse.getMounts().get(0).getRW(), equalTo(true)); - } - - @Test - public void createContainerWithReadOnlyVolume() throws DockerException { - - Volume volume = new Volume("/srv/test"); - - CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withVolumes(volume) - .withCmd("true").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - LOG.info("Inspect container {}", inspectContainerResponse.getConfig().getVolumes()); - - assertThat(inspectContainerResponse.getConfig().getVolumes().keySet(), contains("/srv/test")); - - assertThat(inspectContainerResponse.getMounts().get(0).getDestination(), equalTo(volume)); - // TODO: Create a read-only volume and test like this - // assertFalse(inspectContainerResponse.getMounts().get(0).getRW()); - } - - @Test - public void createContainerWithVolumesFrom() throws DockerException { - - Volume volume1 = new Volume("/opt/webapp1"); - Volume volume2 = new Volume("/opt/webapp2"); - - String container1Name = UUID.randomUUID().toString(); - - Bind bind1 = new Bind("/src/webapp1", volume1); - Bind bind2 = new Bind("/src/webapp2", volume2); - - // create a running container with bind mounts - CreateContainerResponse container1 = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("sleep", "9999") - .withName(container1Name) - .withBinds(bind1, bind2).exec(); - LOG.info("Created container1 {}", container1.toString()); - - InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) - .exec(); - - assertThat(Arrays.asList(inspectContainerResponse1.getHostConfig().getBinds()), containsInAnyOrder(bind1, bind2)); - - assertThat(inspectContainerResponse1, mountedVolumes(containsInAnyOrder(volume1, volume2))); - - // create a second container with volumes from first container - CreateContainerResponse container2 = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("sleep", "9999") - .withVolumesFrom(new VolumesFrom(container1Name)).exec(); - LOG.info("Created container2 {}", container2.toString()); - - InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) - .exec(); - - // No volumes are created, the information is just stored in .HostConfig.VolumesFrom - assertThat(inspectContainerResponse2.getHostConfig().getVolumesFrom(), hasItemInArray(new VolumesFrom( - container1Name))); - - // To ensure that the information stored in VolumesFrom really is considered - // when starting the container, we start it and verify that it has the same - // bind mounts as the first container. - // This is somehow out of scope here, but it helped me to understand how the - // VolumesFrom feature really works. - dockerClient.startContainerCmd(container2.getId()).exec(); - LOG.info("Started container2 {}", container2.toString()); - - inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()).exec(); - - assertThat(inspectContainerResponse2.getHostConfig().getVolumesFrom(), hasItemInArray(new VolumesFrom( - container1Name))); - - assertThat(inspectContainerResponse2, mountedVolumes(containsInAnyOrder(volume1, volume2))); - } - - @Test - public void createContainerWithEnv() throws Exception { - - CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withEnv("VARIABLE=success") - .withCmd("env").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getConfig().getEnv()), containsInAnyOrder("VARIABLE=success")); - - dockerClient.startContainerCmd(container.getId()).exec(); - - assertThat(containerLog(container.getId()), containsString("VARIABLE=success")); - } - - @Test - public void createContainerWithHostname() throws Exception { - - CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withHostName("docker-java") - .withCmd("env").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getConfig().getHostName(), equalTo("docker-java")); - - dockerClient.startContainerCmd(container.getId()).exec(); - - assertThat(containerLog(container.getId()), containsString("HOSTNAME=docker-java")); - } - - @Test - public void createContainerWithName() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withName("container") - .withCmd("env").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getName(), equalTo("/container")); - - try { - dockerClient.createContainerCmd(BUSYBOX_IMAGE).withName("container").withCmd("env").exec(); - fail("Expected ConflictException"); - } catch (ConflictException e) { - } - - } - - @Test - public void createContainerWithLink() throws DockerException { - - CreateContainerResponse container1 = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("sleep", "9999") - .withName("container1").exec(); - LOG.info("Created container1 {}", container1.toString()); - assertThat(container1.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container1.getId()).exec(); - - InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) - .exec(); - LOG.info("Container1 Inspect: {}", inspectContainerResponse1.toString()); - assertThat(inspectContainerResponse1.getState().getRunning(), is(true)); - - CreateContainerResponse container2 = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withName("container2") - .withCmd("env").withLinks(new Link("container1", "container1Link")).exec(); - LOG.info("Created container {}", container2.toString()); - assertThat(container2.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) - .exec(); - assertThat(inspectContainerResponse2.getHostConfig().getLinks(), equalTo(new Link[]{new Link("container1", - "container1Link")})); - } - - @Test - public void createContainerWithCapAddAndCapDrop() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCapAdd(NET_ADMIN) - .withCapDrop(MKNOD).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getCapAdd()), contains(NET_ADMIN)); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getCapDrop()), contains(MKNOD)); - } - - @Test - public void createContainerWithDns() throws DockerException { - - String aDnsServer = "8.8.8.8"; - String anotherDnsServer = "8.8.4.4"; - - CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("true") - .withDns(aDnsServer, anotherDnsServer).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDns()), - contains(aDnsServer, anotherDnsServer)); - } - - @Test - public void createContainerWithEntrypoint() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withName("container") - .withEntrypoint("sleep", "9999").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getConfig().getEntrypoint()), contains("sleep", "9999")); - - } - - @Test - public void createContainerWithExtraHosts() throws DockerException { - - String[] extraHosts = {"dockerhost:127.0.0.1", "otherhost:10.0.0.1"}; - - CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withName("container") - .withExtraHosts(extraHosts).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getExtraHosts()), - containsInAnyOrder("dockerhost:127.0.0.1", "otherhost:10.0.0.1")); - } - - @Test - public void createContainerWithDevices() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("sleep", "9999") - .withDevices(new Device("rwm", "/dev/nulo", "/dev/zero")).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDevices()), contains(new Device("rwm", - "/dev/nulo", "/dev/zero"))); - } - - @Test - public void createContainerWithPortBindings() throws DockerException { - - ExposedPort tcp22 = ExposedPort.tcp(22); - ExposedPort tcp23 = ExposedPort.tcp(23); - - Ports portBindings = new Ports(); - portBindings.bind(tcp22, Ports.binding(11022)); - portBindings.bind(tcp23, Ports.binding(11023)); - portBindings.bind(tcp23, Ports.binding(11024)); - - CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("true") - .withExposedPorts(tcp22, tcp23).withPortBindings(portBindings).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getConfig().getExposedPorts()), contains(tcp22, tcp23)); - - assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp22)[0], - is(equalTo(Ports.binding(11022)))); - - assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[0], - is(equalTo(Ports.binding(11023)))); - - assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[1], - is(equalTo(Ports.binding(11024)))); - - } - - @Test - public void createContainerWithLinking() throws DockerException { - - CreateContainerResponse container1 = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("sleep", "9999") - .withName("container1").exec(); - - LOG.info("Created container1 {}", container1.toString()); - assertThat(container1.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container1.getId()).exec(); - - InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) - .exec(); - LOG.info("Container1 Inspect: {}", inspectContainerResponse1.toString()); - - assertThat(inspectContainerResponse1.getConfig(), is(notNullValue())); - assertThat(inspectContainerResponse1.getId(), not(isEmptyString())); - assertThat(inspectContainerResponse1.getId(), startsWith(container1.getId())); - assertThat(inspectContainerResponse1.getName(), equalTo("/container1")); - assertThat(inspectContainerResponse1.getImageId(), not(isEmptyString())); - assertThat(inspectContainerResponse1.getState(), is(notNullValue())); - assertThat(inspectContainerResponse1.getState().getRunning(), is(true)); - - if (!inspectContainerResponse1.getState().getRunning()) { - assertThat(inspectContainerResponse1.getState().getExitCode(), is(equalTo(0))); - } - - CreateContainerResponse container2 = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("sleep", "9999") - .withName("container2").withLinks(new Link("container1", "container1Link")).exec(); - - LOG.info("Created container2 {}", container2.toString()); - assertThat(container2.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) - .exec(); - LOG.info("Container2 Inspect: {}", inspectContainerResponse2.toString()); - - assertThat(inspectContainerResponse2.getConfig(), is(notNullValue())); - assertThat(inspectContainerResponse2.getId(), not(isEmptyString())); - assertThat(inspectContainerResponse2.getHostConfig(), is(notNullValue())); - assertThat(inspectContainerResponse2.getHostConfig().getLinks(), is(notNullValue())); - assertThat(inspectContainerResponse2.getHostConfig().getLinks(), equalTo(new Link[]{new Link("container1", - "container1Link")})); - assertThat(inspectContainerResponse2.getId(), startsWith(container2.getId())); - assertThat(inspectContainerResponse2.getName(), equalTo("/container2")); - assertThat(inspectContainerResponse2.getImageId(), not(isEmptyString())); - - } - - @Test - public void createContainerWithRestartPolicy() throws DockerException { - - RestartPolicy restartPolicy = RestartPolicy.onFailureRestart(5); - - CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("sleep", "9999") - .withRestartPolicy(restartPolicy).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getHostConfig().getRestartPolicy(), is(equalTo(restartPolicy))); - } - - @Test - public void createContainerWithPidMode() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("true") - .withPidMode("host").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getHostConfig().getPidMode(), is(equalTo("host"))); - } - - /** - * This tests support for --net option for the docker run command: --net="bridge" Set the Network mode for the container 'bridge': - * creates a new network stack for the container on the docker bridge 'none': no networking for this container 'container:': reuses - * another container network stack 'host': use the host network stack inside the container. Note: the host mode gives the container full - * access to local system services such as D-bus and is therefore considered insecure. - */ - @Test - public void createContainerWithNetworkMode() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("true") - .withNetworkMode("host").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getHostConfig().getNetworkMode(), is(equalTo("host"))); - } - - @Test - public void createContainerWithMacAddress() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE) - .withMacAddress("00:80:41:ae:fd:7e").withCmd("true").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertEquals(inspectContainerResponse.getConfig().getMacAddress(), "00:80:41:ae:fd:7e"); - } - - @Test(groups = "ignoreInCircleCi") - public void createContainerWithULimits() throws DockerException { - - Ulimit[] ulimits = {new Ulimit("nproc", 709, 1026), new Ulimit("nofile", 1024, 4096)}; - - CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withName("container") - .withUlimits(ulimits).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getUlimits()), - containsInAnyOrder(new Ulimit("nproc", 709, 1026), new Ulimit("nofile", 1024, 4096))); - - } - - @Test(groups = "ignoreInCircleCi") - public void createContainerWithLabels() throws DockerException { - - Map labels = new HashMap(); - labels.put("com.github.dockerjava.null", null); - labels.put("com.github.dockerjava.Boolean", "true"); - - CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("sleep", "9999") - .withLabels(labels).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - // null becomes empty string - labels.put("com.github.dockerjava.null", ""); - assertThat(inspectContainerResponse.getConfig().getLabels(), is(equalTo(labels))); - } - - @Test(groups = "ignoreInCircleCi") - public void createContainerWithLogConfig() throws DockerException { - - LogConfig logConfig = new LogConfig(LogConfig.LoggingType.NONE, null); - CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withLogConfig(logConfig).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - // null becomes empty string - assertEquals(inspectContainerResponse.getHostConfig().getLogConfig().type, logConfig.type); - } - - /** - * https://github.com/calavera/docker/blob/3781cde61ff10b1d9114ae5b4c5c1d1b2c20a1ee/integration-cli/docker_cli_run_unix_test.go#L319-L333 - */ - @Test - public void testWithStopSignal() throws Exception { - Integer signal = 10; // SIGUSR1 in busybox - - CreateContainerResponse resp = dockerClient.createContainerCmd(BUSYBOX_IMAGE) - .withCmd("/bin/sh", "-c", "trap 'echo \"exit trapped 10\"; exit 10' USR1; while true; do sleep 1; done") - .withAttachStdin(true) - .withTty(true) - .withStopSignal(signal.toString()) - .exec(); - final String containerId = resp.getId(); - assertThat(containerId, not(isEmptyString())); - dockerClient.startContainerCmd(containerId).exec(); - - InspectContainerResponse inspect = dockerClient.inspectContainerCmd(containerId).exec(); - assertThat(inspect.getState().getRunning(), is(true)); - - dockerClient.stopContainerCmd(containerId).exec(); - Thread.sleep(TimeUnit.SECONDS.toMillis(3)); - - inspect = dockerClient.inspectContainerCmd(containerId).exec(); - assertThat(inspect.getState().getRunning(), is(false)); - assertThat(inspect.getState().getExitCode(), is(signal)); - - StringBuilder stringBuilder = new StringBuilder(); - final StringBuilderLogReader callback = new StringBuilderLogReader(stringBuilder); - dockerClient.logContainerCmd(containerId) - .withStdErr(true) - .withStdOut(true) - .withTailAll() - .exec(callback) - .awaitCompletion(); - - String log = callback.builder.toString(); - assertThat(log, is("exit trapped 10")); - } - - private static class StringBuilderLogReader extends LogContainerResultCallback { - public StringBuilder builder; - - public StringBuilderLogReader(StringBuilder builder) { - this.builder = builder; - } - - @Override - public void onNext(Frame item) { - builder.append(new String(item.getPayload()).trim()); - super.onNext(item); - } - } - - @Test(groups = "ignoreInCircleCi") - public void createContainerWithCgroupParent() throws DockerException { - CreateContainerResponse container = dockerClient.createContainerCmd("busybox") - .withCgroupParent("/parent").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainer = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainer.getHostConfig().getCgroupParent(), is("/parent")); - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/CreateNetworkCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/CreateNetworkCmdImplTest.java deleted file mode 100644 index eefeb535f..000000000 --- a/src/test/java/com/github/dockerjava/core/command/CreateNetworkCmdImplTest.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.github.dockerjava.core.command; - -import com.github.dockerjava.api.command.CreateNetworkResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.model.Network; -import com.github.dockerjava.client.AbstractDockerClientTest; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import java.lang.reflect.Method; - -@Test(groups = "integration") -public class CreateNetworkCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void createNetwork() throws DockerException { - - String networkName = "testNetwork"; - - CreateNetworkResponse createNetworkResponse = dockerClient.createNetworkCmd().withName(networkName).exec(); - - assertNotNull(createNetworkResponse.getId()); - - Network network = dockerClient.inspectNetworkCmd().withNetworkId(createNetworkResponse.getId()).exec(); - assertEquals(network.getName(), networkName); - assertEquals(network.getDriver(), "bridge"); - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/CreateVolumeCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/CreateVolumeCmdImplTest.java deleted file mode 100644 index 39688b424..000000000 --- a/src/test/java/com/github/dockerjava/core/command/CreateVolumeCmdImplTest.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.equalTo; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateVolumeResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class CreateVolumeCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void createVolume() throws DockerException { - - String volumeName = "volume1"; - - CreateVolumeResponse createVolumeResponse = dockerClient.createVolumeCmd().withName(volumeName) - .withDriver("local").exec(); - - assertThat(createVolumeResponse.getName(), equalTo(volumeName)); - assertThat(createVolumeResponse.getDriver(), equalTo("local")); - assertThat(createVolumeResponse.getMountpoint(), containsString("/volume1/")); - } - - @Test - public void createVolumeWithExistingName() throws DockerException { - - String volumeName = "volume1"; - - CreateVolumeResponse createVolumeResponse1 = dockerClient.createVolumeCmd().withName(volumeName) - .withDriver("local").exec(); - - assertThat(createVolumeResponse1.getName(), equalTo(volumeName)); - assertThat(createVolumeResponse1.getDriver(), equalTo("local")); - assertThat(createVolumeResponse1.getMountpoint(), containsString("/volume1/")); - - CreateVolumeResponse createVolumeResponse2 = dockerClient.createVolumeCmd().withName(volumeName) - .withDriver("local").exec(); - - assertThat(createVolumeResponse2.getName(), equalTo(volumeName)); - assertThat(createVolumeResponse2.getDriver(), equalTo("local")); - assertThat(createVolumeResponse2.getMountpoint(), equalTo(createVolumeResponse1.getMountpoint())); - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImplTest.java deleted file mode 100644 index 7f94c5a0f..000000000 --- a/src/test/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImplTest.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.github.dockerjava.core.command; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.CreateNetworkResponse; -import com.github.dockerjava.api.model.Network; -import com.github.dockerjava.client.AbstractDockerClientTest; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import java.lang.reflect.Method; - -@Test(groups = "integration") -public class DisconnectFromNetworkCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void disconnectFromNetwork() throws InterruptedException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); - dockerClient.startContainerCmd(container.getId()).exec(); - - CreateNetworkResponse network = dockerClient.createNetworkCmd().withName("testNetwork").exec(); - - dockerClient.connectToNetworkCmd().withNetworkId(network.getId()).withContainerId(container.getId()).exec(); - - Network updatedNetwork = dockerClient.inspectNetworkCmd().withNetworkId(network.getId()).exec(); - - assertTrue(updatedNetwork.getContainers().containsKey(container.getId())); - - dockerClient.disconnectFromNetworkCmd().withNetworkId(network.getId()).withContainerId(container.getId()).exec(); - - updatedNetwork = dockerClient.inspectNetworkCmd().withNetworkId(network.getId()).exec(); - - assertFalse(updatedNetwork.getContainers().containsKey(container.getId())); - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/DockerfileFixture.java b/src/test/java/com/github/dockerjava/core/command/DockerfileFixture.java deleted file mode 100644 index acb8b8a5d..000000000 --- a/src/test/java/com/github/dockerjava/core/command/DockerfileFixture.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.github.dockerjava.core.command; - -import java.io.File; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.github.dockerjava.api.DockerClient; -import com.github.dockerjava.api.exception.InternalServerErrorException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.model.Image; - -/** - * Start and stop a single container for testing. - */ -public class DockerfileFixture implements AutoCloseable { - - private static final Logger LOGGER = LoggerFactory.getLogger(DockerfileFixture.class); - - private final DockerClient dockerClient; - - private String directory; - - private String repository; - - private String containerId; - - public DockerfileFixture(DockerClient dockerClient, String directory) { - this.dockerClient = dockerClient; - this.directory = directory; - } - - public void open() throws Exception { - - LOGGER.info("building {}", directory); - - dockerClient.buildImageCmd(new File("src/test/resources", directory)).withNoCache(true) - .exec(new BuildImageResultCallback()).awaitImageId(); - - Image lastCreatedImage = dockerClient.listImagesCmd().exec().get(0); - - repository = lastCreatedImage.getRepoTags()[0]; - - LOGGER.info("created {} {}", lastCreatedImage.getId(), repository); - - containerId = dockerClient.createContainerCmd(lastCreatedImage.getId()).exec().getId(); - - LOGGER.info("starting {}", containerId); - - dockerClient.startContainerCmd(containerId).exec(); - } - - @Override - public void close() throws Exception { - - if (containerId != null) { - LOGGER.info("removing container {}", containerId); - try { - dockerClient.removeContainerCmd(containerId).withForce(true) // stop too - .exec(); - } catch (NotFoundException | InternalServerErrorException ignored) { - LOGGER.info("ignoring {}", ignored.getMessage()); - } - containerId = null; - } - - if (repository != null) { - LOGGER.info("removing repository {}", repository); - try { - dockerClient.removeImageCmd(repository).withForce(true).exec(); - } catch (NotFoundException | InternalServerErrorException e) { - LOGGER.info("ignoring {}", e.getMessage()); - } - repository = null; - } - } - - public String getContainerId() { - return containerId; - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java deleted file mode 100644 index 939f95087..000000000 --- a/src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java +++ /dev/null @@ -1,159 +0,0 @@ -package com.github.dockerjava.core.command; - -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.model.Event; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class EventsCmdImplTest extends AbstractDockerClientTest { - - private static int KNOWN_NUM_EVENTS = 4; - - private static String getEpochTime() { - return String.valueOf(System.currentTimeMillis() / 1000); - } - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - /* - * This specific test may fail with boot2docker as time may not in sync with host system - */ - @Test - public void testEventStreamTimeBound() throws Exception { - // Don't include other tests events - TimeUnit.SECONDS.sleep(1); - - String startTime = getEpochTime(); - int expectedEvents = generateEvents(); - String endTime = getEpochTime(); - - CountDownLatch countDownLatch = new CountDownLatch(expectedEvents); - EventsTestCallback eventCallback = new EventsTestCallback(countDownLatch); - - dockerClient.eventsCmd().withSince(startTime).withUntil(endTime).exec(eventCallback); - - Boolean zeroCount = countDownLatch.await(10, TimeUnit.SECONDS); - - eventCallback.close(); - - assertTrue(zeroCount, "Received only: " + eventCallback.getEvents()); - } - - @Test - public void testEventStreaming1() throws Exception { - // Don't include other tests events - TimeUnit.SECONDS.sleep(1); - - CountDownLatch countDownLatch = new CountDownLatch(KNOWN_NUM_EVENTS); - EventsTestCallback eventCallback = new EventsTestCallback(countDownLatch); - - dockerClient.eventsCmd().withSince(getEpochTime()).exec(eventCallback); - - generateEvents(); - - Boolean zeroCount = countDownLatch.await(10, TimeUnit.SECONDS); - - eventCallback.close(); - assertTrue(zeroCount, "Received only: " + eventCallback.getEvents()); - } - - @Test - public void testEventStreaming2() throws Exception { - // Don't include other tests events - TimeUnit.SECONDS.sleep(1); - - CountDownLatch countDownLatch = new CountDownLatch(KNOWN_NUM_EVENTS); - EventsTestCallback eventCallback = new EventsTestCallback(countDownLatch); - - dockerClient.eventsCmd().withSince(getEpochTime()).exec(eventCallback); - - generateEvents(); - - Boolean zeroCount = countDownLatch.await(10, TimeUnit.SECONDS); - - eventCallback.close(); - assertTrue(zeroCount, "Received only: " + eventCallback.getEvents()); - } - - public void testEventStreamingWithFilter() throws Exception { - // Don't include other tests events - TimeUnit.SECONDS.sleep(1); - - CountDownLatch countDownLatch = new CountDownLatch(1); - EventsTestCallback eventCallback = dockerClient.eventsCmd().withEventFilter("start") - .exec(new EventsTestCallback(countDownLatch)); - - generateEvents(); - - Boolean zeroCount = countDownLatch.await(10, TimeUnit.SECONDS); - - eventCallback.close(); - assertTrue(zeroCount, "Received only: " + eventCallback.getEvents()); - } - - /** - * This method generates {#link KNOWN_NUM_EVENTS} events - */ - private int generateEvents() throws Exception { - String testImage = "busybox"; - - dockerClient.pullImageCmd(testImage).exec(new PullImageResultCallback()).awaitSuccess(); - - CreateContainerResponse container = dockerClient.createContainerCmd(testImage).withCmd("sleep", "9999").exec(); - dockerClient.startContainerCmd(container.getId()).exec(); - dockerClient.stopContainerCmd(container.getId()).exec(); - return KNOWN_NUM_EVENTS; - } - - private class EventsTestCallback extends EventsResultCallback { - - private final CountDownLatch countDownLatch; - - private final List events = new ArrayList(); - - public EventsTestCallback(CountDownLatch countDownLatch) { - this.countDownLatch = countDownLatch; - } - - public void onNext(Event event) { - LOG.info("Received event #{}: {}", countDownLatch.getCount(), event); - countDownLatch.countDown(); - events.add(event); - } - - public List getEvents() { - return new ArrayList(events); - } - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/ExecCreateCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ExecCreateCmdImplTest.java deleted file mode 100644 index 139c81f56..000000000 --- a/src/test/java/com/github/dockerjava/core/command/ExecCreateCmdImplTest.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; - -import java.lang.reflect.Method; -import java.security.SecureRandom; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.ExecCreateCmdResponse; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class ExecCreateCmdImplTest extends AbstractDockerClientTest { - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(groups = "ignoreInCircleCi") - public void execCreateTest() { - String containerName = "generated_" + new SecureRandom().nextInt(); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("top") - .withName(containerName).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) - .withCmd("touch", "file.log").exec(); - - assertThat(execCreateCmdResponse.getId(), not(isEmptyString())); - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java deleted file mode 100644 index c4f0b9189..000000000 --- a/src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; - -import java.io.InputStream; -import java.lang.reflect.Method; -import java.security.SecureRandom; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.ExecCreateCmdResponse; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class ExecStartCmdImplTest extends AbstractDockerClientTest { - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(groups = "ignoreInCircleCi") - public void execStart() throws Exception { - String containerName = "generated_" + new SecureRandom().nextInt(); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("top") - .withName(containerName).exec(); - LOG.info("Created container {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) - .withAttachStdout(true).withCmd("touch", "/execStartTest.log").exec(); - dockerClient.execStartCmd(execCreateCmdResponse.getId()).exec( - new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); - - InputStream response = dockerClient.copyArchiveFromContainerCmd(container.getId(), "/execStartTest.log").exec(); - Boolean bytesAvailable = response.available() > 0; - assertTrue(bytesAvailable, "The file was not copied from the container."); - - // read the stream fully. Otherwise, the underlying stream will not be closed. - String responseAsString = asString(response); - assertNotNull(responseAsString); - assertTrue(responseAsString.length() > 0); - } - - @Test(groups = "ignoreInCircleCi") - public void execStartAttached() throws Exception { - String containerName = "generated_" + new SecureRandom().nextInt(); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName(containerName).exec(); - LOG.info("Created container {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) - .withAttachStdout(true).withCmd("touch", "/execStartTest.log").exec(); - dockerClient.execStartCmd(execCreateCmdResponse.getId()).withDetach(false).withTty(true) - .exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); - - InputStream response = dockerClient.copyArchiveFromContainerCmd(container.getId(), "/execStartTest.log").exec(); - Boolean bytesAvailable = response.available() > 0; - assertTrue(bytesAvailable, "The file was not copied from the container."); - - // read the stream fully. Otherwise, the underlying stream will not be closed. - String responseAsString = asString(response); - assertNotNull(responseAsString); - assertTrue(responseAsString.length() > 0); - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/FrameReaderITest.java b/src/test/java/com/github/dockerjava/core/command/FrameReaderITest.java deleted file mode 100644 index 06d07667c..000000000 --- a/src/test/java/com/github/dockerjava/core/command/FrameReaderITest.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.contains; -import static org.hamcrest.Matchers.containsInAnyOrder; -import static org.hamcrest.Matchers.hasEntry; -import static org.hamcrest.Matchers.hasProperty; -import static org.hamcrest.Matchers.hasSize; -import static org.hamcrest.Matchers.is; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertFalse; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.LinkedHashSet; -import java.util.List; - -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.DockerClient; -import com.github.dockerjava.api.model.Frame; -import com.github.dockerjava.api.model.StreamType; -import com.github.dockerjava.client.AbstractDockerClientTest; -import com.github.dockerjava.core.DockerClientBuilder; - -@Test(groups = "integration") -public class FrameReaderITest { - - private DockerClient dockerClient; - - private DockerfileFixture dockerfileFixture; - - @BeforeTest - public void beforeTest() throws Exception { - dockerClient = DockerClientBuilder.getInstance().build(); - dockerfileFixture = new DockerfileFixture(dockerClient, "frameReaderDockerfile"); - dockerfileFixture.open(); - } - - @AfterTest - public void deleteDockerContainerImage() throws Exception { - dockerfileFixture.close(); - dockerClient.close(); - } - - @Test - public void canCloseFrameReaderAndReadExpectedLines() throws Exception { - // wait for the container to be successfully executed - int exitCode = dockerClient.waitContainerCmd(dockerfileFixture.getContainerId()) - .exec(new WaitContainerResultCallback()).awaitStatusCode(); - assertEquals(0, exitCode); - - final List loggingFrames = getLoggingFrames(); - final Frame outFrame = new Frame(StreamType.STDOUT, "to stdout\n".getBytes()); - final Frame errFrame = new Frame(StreamType.STDERR, "to stderr\n".getBytes()); - - assertThat(loggingFrames, containsInAnyOrder(outFrame, errFrame)); - assertThat(loggingFrames, hasSize(2)); - } - - private List getLoggingFrames() throws Exception { - - FrameReaderITestCallback collectFramesCallback = new FrameReaderITestCallback(); - - dockerClient.logContainerCmd(dockerfileFixture.getContainerId()).withStdOut(true).withStdErr(true) - .withTailAll() - // we can't follow stream here as it blocks reading from resulting InputStream infinitely - // .withFollowStream() - .exec(collectFramesCallback).awaitCompletion(); - - return collectFramesCallback.frames; - } - - @Test - public void canLogInOneThreadAndExecuteCommandsInAnother() throws Exception { - - Thread thread = new Thread(new Runnable() { - @Override - public void run() { - try { - - Iterator frames = getLoggingFrames().iterator(); - - while (frames.hasNext()) { - frames.next(); - } - - } catch (Exception e) { - throw new RuntimeException(e); - } - } - }); - - thread.start(); - - try (DockerfileFixture busyboxDockerfile = new DockerfileFixture(dockerClient, "busyboxDockerfile")) { - busyboxDockerfile.open(); - } - - thread.join(); - - } - - public static class FrameReaderITestCallback extends LogContainerResultCallback { - - public List frames = new ArrayList(); - - @Override - public void onNext(Frame item) { - frames.add(item); - super.onNext(item); - } - - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/FrameReaderTest.java b/src/test/java/com/github/dockerjava/core/command/FrameReaderTest.java deleted file mode 100644 index 38ddf1402..000000000 --- a/src/test/java/com/github/dockerjava/core/command/FrameReaderTest.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertNull; - -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; - -import org.testng.annotations.Test; - -import com.github.dockerjava.api.model.Frame; -import com.github.dockerjava.api.model.StreamType; - -public class FrameReaderTest { - public static final int HEADER_SIZE = 8; - - private final List bytes = new ArrayList<>(); - - private final InputStream inputStream = new InputStream() { - @Override - public int read() throws IOException { - return bytes.isEmpty() ? -1 : bytes.remove(0); - } - }; - - private final FrameReader frameReader = new FrameReader(inputStream); - - @Test - public void endOfStreamReturnsNull() throws Exception { - assertNull(nextFrame()); - } - - @Test - public void stdInBytesFrameReturnsFrame() throws Exception { - assertEquals(nextFrame(0, 0, 0, 0, 0, 0, 0, 0), new Frame(StreamType.STDIN, new byte[0])); - } - - private Frame nextFrame(int... bytes) throws IOException { - setBytes(bytes); - return frameReader.readFrame(); - } - - @Test - public void stdOutBytesFrameReturnsFrame() throws Exception { - assertEquals(nextFrame(1, 0, 0, 0, 0, 0, 0, 0), new Frame(StreamType.STDOUT, new byte[0])); - } - - @Test - public void stdErrBytesFrameReturnsFrame() throws Exception { - assertEquals(nextFrame(2, 0, 0, 0, 0, 0, 0, 0), new Frame(StreamType.STDERR, new byte[0])); - } - - private void setBytes(int... bytes) { - this.bytes.clear(); - for (int aByte : bytes) { - this.bytes.add(aByte); - } - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/InfoCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/InfoCmdImplTest.java deleted file mode 100644 index d234efe4c..000000000 --- a/src/test/java/com/github/dockerjava/core/command/InfoCmdImplTest.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.isEmptyOrNullString; -import static org.hamcrest.Matchers.not; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.model.Info; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class InfoCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void info() throws DockerException { - // Make sure that there is at least one container for the assertion - // TODO extract this into a shared method - if (dockerClient.listContainersCmd().withShowAll(true).exec().size() == 0) { - CreateContainerResponse container = dockerClient.createContainerCmd("busybox") - .withName("docker-java-itest-info").withCmd("touch", "/test").exec(); - - LOG.info("Created container: {}", container); - assertThat(container.getId(), not(isEmptyOrNullString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - } - - Info dockerInfo = dockerClient.infoCmd().exec(); - LOG.info(dockerInfo.toString()); - - assertTrue(dockerInfo.toString().contains("containers")); - assertTrue(dockerInfo.toString().contains("images")); - assertTrue(dockerInfo.toString().contains("debug")); - - assertTrue(dockerInfo.getContainers() > 0); - assertTrue(dockerInfo.getImages() > 0); - assertTrue(dockerInfo.getNFd() > 0); - assertTrue(dockerInfo.getNGoroutines() > 0); - assertTrue(dockerInfo.getNCPU() > 0); - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/InspectContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/InspectContainerCmdImplTest.java deleted file mode 100644 index 47ed11201..000000000 --- a/src/test/java/com/github/dockerjava/core/command/InspectContainerCmdImplTest.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; - -import java.lang.reflect.Method; -import java.security.SecureRandom; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class InspectContainerCmdImplTest extends AbstractDockerClientTest { - - public static final Logger LOG = LoggerFactory.getLogger(InspectContainerCmdImplTest.class); - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test() - public void inspectContainer() throws DockerException { - - String containerName = "generated_" + new SecureRandom().nextInt(); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("top") - .withName(containerName).exec(); - LOG.info("Created container {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse containerInfo = dockerClient.inspectContainerCmd(container.getId()).exec(); - assertEquals(containerInfo.getId(), container.getId()); - - } - - @Test(expectedExceptions = NotFoundException.class) - public void inspectNonExistingContainer() throws DockerException { - dockerClient.inspectContainerCmd("non-existing").exec(); - } - - @Test - public void inspectContainerRestartCount() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox") - .withCmd("env").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getRestartCount(), equalTo(0)); - } - - @Test - public void inspectContainerNetworkSettings() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox") - .withCmd("env").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertFalse(inspectContainerResponse.getNetworkSettings().getHairpinMode()); - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/InspectExecCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/InspectExecCmdImplTest.java deleted file mode 100644 index d86bcc39e..000000000 --- a/src/test/java/com/github/dockerjava/core/command/InspectExecCmdImplTest.java +++ /dev/null @@ -1,144 +0,0 @@ -package com.github.dockerjava.core.command; - -import static com.github.dockerjava.core.RemoteApiVersion.VERSION_1_22; -import static com.github.dockerjava.utils.TestUtils.getVersion; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.notNullValue; -import static org.hamcrest.Matchers.nullValue; - -import java.io.IOException; -import java.lang.reflect.Method; -import java.security.SecureRandom; - -import com.github.dockerjava.core.RemoteApiVersion; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.ExecCreateCmdResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.command.InspectExecResponse; -import com.github.dockerjava.client.AbstractDockerClientTest; -import com.github.dockerjava.test.serdes.JSONTestHelper; - -@Test(groups = "integration") -public class InspectExecCmdImplTest extends AbstractDockerClientTest { - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(groups = "ignoreInCircleCi") - public void inspectExec() throws Exception { - String containerName = "generated_" + new SecureRandom().nextInt(); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName(containerName).exec(); - LOG.info("Created container {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - // Check that file does not exist - ExecCreateCmdResponse checkFileExec1 = dockerClient.execCreateCmd(container.getId()).withAttachStdout(true) - .withAttachStderr(true).withCmd("test", "-e", "/marker").exec(); - LOG.info("Created exec {}", checkFileExec1.toString()); - assertThat(checkFileExec1.getId(), not(isEmptyString())); - dockerClient.execStartCmd(checkFileExec1.getId()).withDetach(false) - .exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); - InspectExecResponse first = dockerClient.inspectExecCmd(checkFileExec1.getId()).exec(); - assertThat(first.isRunning(), is(false)); - assertThat(first.getExitCode(), is(1)); - - // Create the file - ExecCreateCmdResponse touchFileExec = dockerClient.execCreateCmd(container.getId()).withAttachStdout(true) - .withAttachStderr(true).withCmd("touch", "/marker").exec(); - LOG.info("Created exec {}", touchFileExec.toString()); - assertThat(touchFileExec.getId(), not(isEmptyString())); - dockerClient.execStartCmd(touchFileExec.getId()).withDetach(false) - .exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); - InspectExecResponse second = dockerClient.inspectExecCmd(touchFileExec.getId()).exec(); - assertThat(second.isRunning(), is(false)); - assertThat(second.getExitCode(), is(0)); - - // Check that file does exist now - ExecCreateCmdResponse checkFileExec2 = dockerClient.execCreateCmd(container.getId()).withAttachStdout(true) - .withAttachStderr(true).withCmd("test", "-e", "/marker").exec(); - LOG.info("Created exec {}", checkFileExec2.toString()); - assertThat(checkFileExec2.getId(), not(isEmptyString())); - dockerClient.execStartCmd(checkFileExec2.getId()).withDetach(false) - .exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); - InspectExecResponse third = dockerClient.inspectExecCmd(checkFileExec2.getId()).exec(); - assertThat(third.isRunning(), is(false)); - assertThat(third.getExitCode(), is(0)); - - // Get container info and check its roundtrip to ensure the consistency - InspectContainerResponse containerInfo = dockerClient.inspectContainerCmd(container.getId()).exec(); - assertEquals(containerInfo.getId(), container.getId()); - JSONTestHelper.testRoundTrip(containerInfo); - } - - @Test(groups = "ignoreInCircleCi") - public void inspectExecNetworkSettings() throws IOException { - final RemoteApiVersion apiVersion = getVersion(dockerClient); - - String containerName = "generated_" + new SecureRandom().nextInt(); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName(containerName).exec(); - LOG.info("Created container {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - ExecCreateCmdResponse exec = dockerClient.execCreateCmd(container.getId()).withAttachStdout(true) - .withAttachStderr(true).withCmd("/bin/bash").exec(); - LOG.info("Created exec {}", exec.toString()); - assertThat(exec.getId(), not(isEmptyString())); - - InspectExecResponse inspectExecResponse = dockerClient.inspectExecCmd(exec.getId()).exec(); - - if (apiVersion.isGreaterOrEqual(RemoteApiVersion.VERSION_1_22)) { - assertThat(inspectExecResponse.getExitCode(), is(nullValue())); - assertThat(inspectExecResponse.getCanRemove(), is(false)); - assertThat(inspectExecResponse.getContainerID(), is(container.getId())); - } else { - assertThat(inspectExecResponse.getExitCode(), is(0)); - assertNotNull(inspectExecResponse.getContainer().getNetworkSettings().getNetworks().get("bridge")); - } - - assertThat(inspectExecResponse.isOpenStdin(), is(false)); - assertThat(inspectExecResponse.isOpenStdout(), is(true)); - assertThat(inspectExecResponse.isRunning(), is(false)); - - final InspectExecResponse.Container inspectContainer = inspectExecResponse.getContainer(); - if (apiVersion.isGreaterOrEqual(VERSION_1_22)) { - assertThat(inspectContainer, nullValue()); - } else { - assertThat(inspectContainer, notNullValue()); - assertNotNull(inspectContainer.getNetworkSettings().getNetworks().get("bridge")); - } - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/InspectNetworkCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/InspectNetworkCmdImplTest.java deleted file mode 100644 index 9d992eb15..000000000 --- a/src/test/java/com/github/dockerjava/core/command/InspectNetworkCmdImplTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.github.dockerjava.core.command; - -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.model.Network; -import com.github.dockerjava.client.AbstractDockerClientTest; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import java.lang.reflect.Method; -import java.util.List; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; - -@Test(groups = "integration") -public class InspectNetworkCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void inspectNetwork() throws DockerException { - - List networks = dockerClient.listNetworksCmd().exec(); - - Network expected = findNetwork(networks, "bridge"); - - Network network = dockerClient.inspectNetworkCmd().withNetworkId(expected.getId()).exec(); - - assertThat(network.getName(), equalTo(expected.getName())); - assertThat(network.getScope(), equalTo(expected.getScope())); - assertThat(network.getDriver(), equalTo(expected.getDriver())); - assertThat(network.getIpam().getConfig().get(0).getSubnet(), equalTo(expected.getIpam().getConfig().get(0).getSubnet())); - assertThat(network.getIpam().getDriver(), equalTo(expected.getIpam().getDriver())); - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/InspectVolumeCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/InspectVolumeCmdImplTest.java deleted file mode 100644 index c24f173df..000000000 --- a/src/test/java/com/github/dockerjava/core/command/InspectVolumeCmdImplTest.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.equalTo; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.InspectVolumeResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class InspectVolumeCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void inspectVolume() throws DockerException { - - String volumeName = "volume1"; - - dockerClient.createVolumeCmd().withName(volumeName).withDriver("local").exec(); - - InspectVolumeResponse inspectVolumeResponse = dockerClient.inspectVolumeCmd(volumeName).exec(); - - assertThat(inspectVolumeResponse.getName(), equalTo("volume1")); - assertThat(inspectVolumeResponse.getDriver(), equalTo("local")); - assertThat(inspectVolumeResponse.getMountpoint(), containsString("/volume1/")); - } - - @Test(expectedExceptions = NotFoundException.class) - public void inspectNonExistentVolume() throws DockerException { - - String volumeName = "non-existing"; - - dockerClient.inspectVolumeCmd(volumeName).exec(); - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/KillContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/KillContainerCmdImplTest.java deleted file mode 100644 index 3ba85928e..000000000 --- a/src/test/java/com/github/dockerjava/core/command/KillContainerCmdImplTest.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; - -import java.lang.reflect.Method; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class KillContainerCmdImplTest extends AbstractDockerClientTest { - - public static final Logger LOG = LoggerFactory.getLogger(KillContainerCmdImplTest.class); - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(groups = "ignoreInCircleCi") - public void killContainer() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - dockerClient.startContainerCmd(container.getId()).exec(); - - LOG.info("Killing container: {}", container.getId()); - dockerClient.killContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); - - assertThat(inspectContainerResponse.getState().getRunning(), is(equalTo(false))); - assertThat(inspectContainerResponse.getState().getExitCode(), not(equalTo(0))); - - } - - @Test - public void killNonExistingContainer() throws DockerException { - - try { - dockerClient.killContainerCmd("non-existing").exec(); - fail("expected NotFoundException"); - } catch (NotFoundException e) { - } - } - -} diff --git a/src/test/java/com/github/dockerjava/core/command/ListContainersCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ListContainersCmdImplTest.java deleted file mode 100644 index 7bbfb3945..000000000 --- a/src/test/java/com/github/dockerjava/core/command/ListContainersCmdImplTest.java +++ /dev/null @@ -1,170 +0,0 @@ -package com.github.dockerjava.core.command; - -import static ch.lambdaj.Lambda.filter; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.hasItem; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.notNullValue; -import static org.hamcrest.Matchers.startsWith; -import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; - -import java.lang.reflect.Method; -import java.util.List; -import java.util.Map; - -import org.hamcrest.Matcher; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.model.Container; -import com.github.dockerjava.client.AbstractDockerClientTest; -import com.google.common.collect.ImmutableMap; - -@Test(groups = "integration") -public class ListContainersCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void testListContainers() throws Exception { - - String testImage = "busybox"; - - // need to block until image is pulled completely - dockerClient.pullImageCmd(testImage).exec(new PullImageResultCallback()).awaitSuccess(); - - List containers = dockerClient.listContainersCmd().withShowAll(true).exec(); - assertThat(containers, notNullValue()); - LOG.info("Container List: {}", containers); - - int size = containers.size(); - - CreateContainerResponse container1 = dockerClient.createContainerCmd(testImage).withCmd("echo").exec(); - - assertThat(container1.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container1.getId()).exec(); - - assertThat(inspectContainerResponse.getConfig().getImage(), is(equalTo(testImage))); - - dockerClient.startContainerCmd(container1.getId()).exec(); - - LOG.info("container id: " + container1.getId()); - - List containers2 = dockerClient.listContainersCmd().withShowAll(true).exec(); - - for (Container container : containers2) { - LOG.info("listContainer: id=" + container.getId() + " image=" + container.getImage()); - } - - assertThat(size + 1, is(equalTo(containers2.size()))); - Matcher matcher = hasItem(hasField("id", startsWith(container1.getId()))); - assertThat(containers2, matcher); - - List filteredContainers = filter(hasField("id", startsWith(container1.getId())), containers2); - assertThat(filteredContainers.size(), is(equalTo(1))); - - for (Container container : filteredContainers) { - LOG.info("filteredContainer: " + container); - } - - Container container2 = filteredContainers.get(0); - assertThat(container2.getCommand(), not(isEmptyString())); - assertThat(container2.getImage(), startsWith(testImage)); - } - - @Test - public void testListContainersWithLabelsFilter() throws Exception { - - String testImage = "busybox"; - - // need to block until image is pulled completely - dockerClient.pullImageCmd(testImage).exec(new PullImageResultCallback()).awaitCompletion(); - - List containers = dockerClient.listContainersCmd().withShowAll(true).exec(); - assertThat(containers, notNullValue()); - LOG.info("Container List: {}", containers); - - int size = containers.size(); - - CreateContainerResponse container1 = dockerClient.createContainerCmd(testImage).withCmd("echo").exec(); - - assertThat(container1.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container1.getId()).exec(); - - assertThat(inspectContainerResponse.getConfig().getImage(), is(equalTo(testImage))); - - dockerClient.startContainerCmd(container1.getId()).exec(); - - LOG.info("container id: " + container1.getId()); - - List containers2 = dockerClient.listContainersCmd().withShowAll(true).exec(); - - for (Container container : containers2) { - LOG.info("listContainer: id=" + container.getId() + " image=" + container.getImage()); - } - - assertThat(size + 1, is(equalTo(containers2.size()))); - Matcher matcher = hasItem(hasField("id", startsWith(container1.getId()))); - assertThat(containers2, matcher); - - List filteredContainers = filter(hasField("id", startsWith(container1.getId())), containers2); - assertThat(filteredContainers.size(), is(equalTo(1))); - - for (Container container : filteredContainers) { - LOG.info("filteredContainer: " + container); - } - - Container container2 = filteredContainers.get(0); - assertThat(container2.getCommand(), not(isEmptyString())); - assertThat(container2.getImage(), startsWith(testImage)); - - Map labels = ImmutableMap.of("test", "docker-java"); - - // list with filter by label - dockerClient.createContainerCmd(testImage).withCmd("echo").withLabels(labels).exec(); - filteredContainers = dockerClient.listContainersCmd().withShowAll(true) - .withLabelFilter(labels).exec(); - assertThat(filteredContainers.size(), is(equalTo(1))); - Container container3 = filteredContainers.get(0); - assertThat(container3.getCommand(), not(isEmptyString())); - assertThat(container3.getImage(), startsWith(testImage)); - - filteredContainers = dockerClient.listContainersCmd().withShowAll(true) - .withLabelFilter("test").exec(); - assertThat(filteredContainers.size(), is(equalTo(1))); - container3 = filteredContainers.get(0); - assertThat(container3.getCommand(), not(isEmptyString())); - assertThat(container3.getImage(), startsWith(testImage)); - assertEquals(container3.getLabels(), labels); - } - -} diff --git a/src/test/java/com/github/dockerjava/core/command/ListImagesCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ListImagesCmdImplTest.java deleted file mode 100644 index 1b811867a..000000000 --- a/src/test/java/com/github/dockerjava/core/command/ListImagesCmdImplTest.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.emptyArray; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.greaterThan; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.notNullValue; - -import java.lang.reflect.Method; -import java.util.List; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.model.Image; -import com.github.dockerjava.api.model.Info; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class ListImagesCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void listImages() throws DockerException { - List images = dockerClient.listImagesCmd().withShowAll(true).exec(); - assertThat(images, notNullValue()); - LOG.info("Images List: {}", images); - Info info = dockerClient.infoCmd().exec(); - - assertThat(images.size(), equalTo(info.getImages())); - - Image img = images.get(0); - assertThat(img.getCreated(), is(greaterThan(0L))); - assertThat(img.getVirtualSize(), is(greaterThan(0L))); - assertThat(img.getId(), not(isEmptyString())); - assertThat(img.getRepoTags(), not(emptyArray())); - } - - @Test(groups = "ignoreInCircleCi") - public void listImagesWithDanglingFilter() throws DockerException { - String imageId = createDanglingImage(); - List images = dockerClient.listImagesCmd().withDanglingFilter(true).withShowAll(true) - .exec(); - assertThat(images, notNullValue()); - LOG.info("Images List: {}", images); - assertThat(images.size(), is(greaterThan(0))); - Boolean imageInFilteredList = isImageInFilteredList(images, imageId); - assertTrue(imageInFilteredList); - } - - private boolean isImageInFilteredList(List images, String expectedImageId) { - for (Image image : images) { - if (expectedImageId.equals(image.getId())) { - return true; - } - } - return false; - } - - private String createDanglingImage() { - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - dockerClient.startContainerCmd(container.getId()).exec(); - - LOG.info("Committing container {}", container.toString()); - String imageId = dockerClient.commitCmd(container.getId()).exec(); - - dockerClient.stopContainerCmd(container.getId()).exec(); - dockerClient.removeContainerCmd(container.getId()).exec(); - return imageId; - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/ListNetworksCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ListNetworksCmdImplTest.java deleted file mode 100644 index 192adb4bc..000000000 --- a/src/test/java/com/github/dockerjava/core/command/ListNetworksCmdImplTest.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; - -import java.lang.reflect.Method; -import java.util.List; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.model.Network; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class ListNetworksCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void listNetworks() throws DockerException { - - List networks = dockerClient.listNetworksCmd().exec(); - - Network network = findNetwork(networks, "bridge"); - - assertThat(network.getName(), equalTo("bridge")); - assertThat(network.getScope(), equalTo("local")); - assertThat(network.getDriver(), equalTo("bridge")); - assertThat(network.getIpam().getDriver(), equalTo("default")); - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/ListVolumesCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ListVolumesCmdImplTest.java deleted file mode 100644 index 646f502c8..000000000 --- a/src/test/java/com/github/dockerjava/core/command/ListVolumesCmdImplTest.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.greaterThanOrEqualTo; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateVolumeResponse; -import com.github.dockerjava.api.command.ListVolumesResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class ListVolumesCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void listVolumes() throws DockerException { - - CreateVolumeResponse createVolumeResponse = dockerClient.createVolumeCmd().withName("volume1") - .withDriver("local").exec(); - - assertThat(createVolumeResponse.getName(), equalTo("volume1")); - assertThat(createVolumeResponse.getDriver(), equalTo("local")); - assertThat(createVolumeResponse.getMountpoint(), containsString("/volume1/")); - - ListVolumesResponse listVolumesResponse = dockerClient.listVolumesCmd().exec(); - - assertThat(listVolumesResponse.getVolumes().size(), greaterThanOrEqualTo(1)); - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/LogContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/LogContainerCmdImplTest.java deleted file mode 100644 index 817179eb2..000000000 --- a/src/test/java/com/github/dockerjava/core/command/LogContainerCmdImplTest.java +++ /dev/null @@ -1,171 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.containsString; - -import java.io.IOException; -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class LogContainerCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void asyncLogContainer() throws Exception { - - String snippet = "hello world"; - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("/bin/echo", snippet) - .exec(); - - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()) - .awaitStatusCode(); - - assertThat(exitCode, equalTo(0)); - - LogContainerTestCallback loggingCallback = new LogContainerTestCallback(); - - // this essentially test the since=0 case - dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback); - - loggingCallback.awaitCompletion(); - - assertTrue(loggingCallback.toString().contains(snippet)); - } - - @Test - public void asyncLogNonExistingContainer() throws Exception { - - LogContainerTestCallback loggingCallback = new LogContainerTestCallback() { - @Override - public void onError(Throwable throwable) { - - assertEquals(throwable.getClass().getName(), NotFoundException.class.getName()); - - try { - // close the callback to prevent the call to onComplete - close(); - } catch (IOException e) { - throw new RuntimeException(); - } - - super.onError(throwable); - } - - public void onComplete() { - super.onComplete(); - fail("expected NotFoundException"); - }; - }; - - dockerClient.logContainerCmd("non-existing").withStdErr(true).withStdOut(true).exec(loggingCallback) - .awaitCompletion(); - } - - @Test - public void asyncMultipleLogContainer() throws Exception { - - String snippet = "hello world"; - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("/bin/echo", snippet) - .exec(); - - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()) - .awaitStatusCode(); - - assertThat(exitCode, equalTo(0)); - - LogContainerTestCallback loggingCallback = new LogContainerTestCallback(); - - dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback); - - loggingCallback.close(); - - loggingCallback = new LogContainerTestCallback(); - - dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback); - - loggingCallback.close(); - - loggingCallback = new LogContainerTestCallback(); - - dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback); - - loggingCallback.awaitCompletion(); - - assertTrue(loggingCallback.toString().contains(snippet)); - } - - @Test - public void asyncLogContainerWithSince() throws Exception { - String snippet = "hello world"; - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("/bin/echo", snippet) - .exec(); - - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - int timestamp = (int) (System.currentTimeMillis() / 1000); - - dockerClient.startContainerCmd(container.getId()).exec(); - - int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()) - .awaitStatusCode(); - - assertThat(exitCode, equalTo(0)); - - LogContainerTestCallback loggingCallback = new LogContainerTestCallback(); - - dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).withSince(timestamp) - .exec(loggingCallback); - - loggingCallback.awaitCompletion(); - - assertThat(loggingCallback.toString(), containsString(snippet)); - } - -} diff --git a/src/test/java/com/github/dockerjava/core/command/PullImageCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/PullImageCmdImplTest.java deleted file mode 100644 index d5e6d2c48..000000000 --- a/src/test/java/com/github/dockerjava/core/command/PullImageCmdImplTest.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.lessThanOrEqualTo; -import static org.hamcrest.Matchers.notNullValue; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.async.ResultCallback; -import com.github.dockerjava.api.command.InspectImageResponse; -import com.github.dockerjava.api.command.PullImageCmd; -import com.github.dockerjava.api.model.Info; -import com.github.dockerjava.api.model.PullResponseItem; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class PullImageCmdImplTest extends AbstractDockerClientTest { - - private static final PullImageCmd.Exec NOP_EXEC = new PullImageCmd.Exec() { - public Void exec(PullImageCmd command, ResultCallback resultCallback) { - return null; - }; - }; - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void nullAuthConfig() throws Exception { - PullImageCmdImpl pullImageCmd = new PullImageCmdImpl(NOP_EXEC, null, ""); - try { - pullImageCmd.withAuthConfig(null); - fail(); - } catch (Exception e) { - assertEquals(e.getMessage(), "authConfig was not specified"); - } finally { - pullImageCmd.close(); - } - } - - @Test - public void testPullImage() throws Exception { - Info info = dockerClient.infoCmd().exec(); - LOG.info("Client info: {}", info.toString()); - - int imgCount = info.getImages(); - LOG.info("imgCount1: {}", imgCount); - - // This should be an image that is not used by other repositories - // already - // pulled down, preferably small in size. If tag is not used pull will - // download all images in that repository but tmpImgs will only - // deleted 'latest' image but not images with other tags - String testImage = "hackmann/empty"; - - LOG.info("Removing image: {}", testImage); - - try { - dockerClient.removeImageCmd(testImage).withForce(true).exec(); - } catch (NotFoundException e) { - // just ignore if not exist - } - - info = dockerClient.infoCmd().exec(); - LOG.info("Client info: {}", info.toString()); - - imgCount = info.getImages(); - LOG.info("imgCount2: {}", imgCount); - - LOG.info("Pulling image: {}", testImage); - - dockerClient.pullImageCmd(testImage).exec(new PullImageResultCallback()).awaitSuccess(); - - info = dockerClient.infoCmd().exec(); - LOG.info("Client info after pull, {}", info.toString()); - - assertThat(imgCount, lessThanOrEqualTo(info.getImages())); - - InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(testImage).exec(); - LOG.info("Image Inspect: {}", inspectImageResponse.toString()); - assertThat(inspectImageResponse, notNullValue()); - } - - @Test - public void testPullNonExistingImage() throws Exception { - - // does not throw an exception - // stream needs to be fully read in order to close the underlying connection - dockerClient.pullImageCmd("xvxcv/foo").exec(new PullImageResultCallback()).awaitCompletion(); - } - -} diff --git a/src/test/java/com/github/dockerjava/core/command/PushImageCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/PushImageCmdImplTest.java deleted file mode 100644 index e89a071b8..000000000 --- a/src/test/java/com/github/dockerjava/core/command/PushImageCmdImplTest.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; - -import java.lang.reflect.Method; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.DockerClientException; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class PushImageCmdImplTest extends AbstractDockerClientTest { - - public static final Logger LOG = LoggerFactory.getLogger(PushImageCmdImplTest.class); - - String username; - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - username = dockerClient.authConfig().getUsername(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void pushLatest() throws Exception { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - LOG.info("Committing container: {}", container.toString()); - String imageId = dockerClient.commitCmd(container.getId()).withRepository(username + "/busybox").exec(); - - // we have to block until image is pushed - dockerClient.pushImageCmd(username + "/busybox").exec(new PushImageResultCallback()).awaitSuccess(); - - LOG.info("Removing image: {}", imageId); - dockerClient.removeImageCmd(imageId).exec(); - - dockerClient.pullImageCmd(username + "/busybox").exec(new PullImageResultCallback()).awaitSuccess(); - } - - @Test(expectedExceptions = DockerClientException.class) - public void pushNonExistentImage() throws Exception { - - dockerClient.pushImageCmd(username + "/xxx").exec(new PushImageResultCallback()).awaitSuccess(); - - } - -} diff --git a/src/test/java/com/github/dockerjava/core/command/RemoveContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/RemoveContainerCmdImplTest.java deleted file mode 100644 index 87ace71df..000000000 --- a/src/test/java/com/github/dockerjava/core/command/RemoveContainerCmdImplTest.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.hasItem; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.startsWith; -import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; - -import java.lang.reflect.Method; -import java.util.List; - -import org.hamcrest.Matcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.model.Container; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class RemoveContainerCmdImplTest extends AbstractDockerClientTest { - - public static final Logger LOG = LoggerFactory.getLogger(RemoveContainerCmdImplTest.class); - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(groups = "ignoreInCircleCi") - public void removeContainer() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true").exec(); - - dockerClient.startContainerCmd(container.getId()).exec(); - dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()).awaitStatusCode(); - - LOG.info("Removing container: {}", container.getId()); - dockerClient.removeContainerCmd(container.getId()).exec(); - - List containers2 = dockerClient.listContainersCmd().withShowAll(true).exec(); - - Matcher matcher = not(hasItem(hasField("id", startsWith(container.getId())))); - assertThat(containers2, matcher); - - } - - @Test - public void removeNonExistingContainer() throws DockerException { - try { - dockerClient.removeContainerCmd("non-existing").exec(); - fail("expected NotFoundException"); - } catch (NotFoundException e) { - } - } - -} diff --git a/src/test/java/com/github/dockerjava/core/command/RemoveImageCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/RemoveImageCmdImplTest.java deleted file mode 100644 index 90be81c7f..000000000 --- a/src/test/java/com/github/dockerjava/core/command/RemoveImageCmdImplTest.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.hasItem; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.startsWith; -import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; - -import java.lang.reflect.Method; -import java.util.List; - -import org.hamcrest.Matcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.model.Container; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class RemoveImageCmdImplTest extends AbstractDockerClientTest { - - public static final Logger LOG = LoggerFactory.getLogger(RemoveImageCmdImplTest.class); - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(groups = "ignoreInCircleCi") - public void removeImage() throws DockerException, InterruptedException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - dockerClient.startContainerCmd(container.getId()).exec(); - - LOG.info("Committing container {}", container.toString()); - String imageId = dockerClient.commitCmd(container.getId()).exec(); - - dockerClient.stopContainerCmd(container.getId()).exec(); - dockerClient.removeContainerCmd(container.getId()).exec(); - - LOG.info("Removing image: {}", imageId); - dockerClient.removeImageCmd(imageId).exec(); - - List containers = dockerClient.listContainersCmd().withShowAll(true).exec(); - - Matcher matcher = not(hasItem(hasField("id", startsWith(imageId)))); - assertThat(containers, matcher); - } - - @Test - public void removeNonExistingImage() throws DockerException, InterruptedException { - try { - dockerClient.removeImageCmd("non-existing").exec(); - fail("expected NotFoundException"); - } catch (NotFoundException e) { - } - - } - -} diff --git a/src/test/java/com/github/dockerjava/core/command/RemoveNetworkCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/RemoveNetworkCmdImplTest.java deleted file mode 100644 index e1e4e45fe..000000000 --- a/src/test/java/com/github/dockerjava/core/command/RemoveNetworkCmdImplTest.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.github.dockerjava.core.command; - -import com.github.dockerjava.api.command.CreateNetworkResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.model.Network; -import com.github.dockerjava.client.AbstractDockerClientTest; -import org.hamcrest.Matcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import java.lang.reflect.Method; -import java.util.List; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.hasItem; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.startsWith; -import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; - -@Test(groups = "integration") -public class RemoveNetworkCmdImplTest extends AbstractDockerClientTest { - - public static final Logger LOG = LoggerFactory.getLogger(RemoveNetworkCmdImplTest.class); - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(groups = "ignoreInCircleCi") - public void removeNetwork() throws DockerException { - - CreateNetworkResponse network = dockerClient.createNetworkCmd().withName("test-network").exec(); - - LOG.info("Removing network: {}", network.getId()); - dockerClient.removeNetworkCmd(network.getId()).exec(); - - List networks = dockerClient.listNetworksCmd().exec(); - - Matcher matcher = not(hasItem(hasField("id", startsWith(network.getId())))); - assertThat(networks, matcher); - - } - - @Test - public void removeNonExistingContainer() throws DockerException { - try { - dockerClient.removeNetworkCmd("non-existing").exec(); - fail("expected NotFoundException"); - } catch (NotFoundException e) { - } - } - -} diff --git a/src/test/java/com/github/dockerjava/core/command/RemoveVolumeCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/RemoveVolumeCmdImplTest.java deleted file mode 100644 index 249bf8493..000000000 --- a/src/test/java/com/github/dockerjava/core/command/RemoveVolumeCmdImplTest.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.equalTo; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateVolumeResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class RemoveVolumeCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void removeVolume() throws DockerException { - - String volumeName = "volume1"; - - CreateVolumeResponse createVolumeResponse = dockerClient.createVolumeCmd().withName(volumeName) - .withDriver("local").exec(); - - assertThat(createVolumeResponse.getName(), equalTo(volumeName)); - assertThat(createVolumeResponse.getDriver(), equalTo("local")); - assertThat(createVolumeResponse.getMountpoint(), containsString("/volume1/")); - - dockerClient.removeVolumeCmd(volumeName).exec(); - - try { - dockerClient.inspectVolumeCmd(volumeName).exec(); - fail("Expected NotFoundException"); - } catch (NotFoundException e) { - // just ignore - } - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/RenameContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/RenameContainerCmdImplTest.java deleted file mode 100644 index 9f503a87b..000000000 --- a/src/test/java/com/github/dockerjava/core/command/RenameContainerCmdImplTest.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.github.dockerjava.core.command; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.client.AbstractDockerClientTest; -import org.testng.ITestResult; -import org.testng.annotations.*; - -import java.lang.reflect.Method; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.*; - -@Test(groups = "integration") -public class RenameContainerCmdImplTest extends AbstractDockerClientTest { - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void renameContainer() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); - - String name1 = inspectContainerResponse.getName(); - - dockerClient.renameContainerCmd(container.getId()) - .withName(getClass().getCanonicalName() + "renameContainer") - .exec(); - - InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container.getId()).exec(); - LOG.info("Container Inspect After Rename: {}", inspectContainerResponse2.toString()); - - String name2 = inspectContainerResponse2.getName(); - - assertNotEquals(name1, name2); - - dockerClient.killContainerCmd(container.getId()).exec(); - } - - @Test(expectedExceptions = NotFoundException.class) - public void renameExistingContainer() throws DockerException, InterruptedException { - dockerClient.renameContainerCmd("non-existing") - .withName(getClass().getCanonicalName() + "renameExistingContainer") - .exec(); - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/RestartContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/RestartContainerCmdImplTest.java deleted file mode 100644 index 4920ac087..000000000 --- a/src/test/java/com/github/dockerjava/core/command/RestartContainerCmdImplTest.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class RestartContainerCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void restartContainer() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); - - String startTime = inspectContainerResponse.getState().getStartedAt(); - - dockerClient.restartContainerCmd(container.getId()).withtTimeout(2).exec(); - - InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container.getId()).exec(); - LOG.info("Container Inspect After Restart: {}", inspectContainerResponse2.toString()); - - String startTime2 = inspectContainerResponse2.getState().getStartedAt(); - - assertThat(startTime, not(equalTo(startTime2))); - - assertThat(inspectContainerResponse.getState().getRunning(), is(equalTo(true))); - - dockerClient.killContainerCmd(container.getId()).exec(); - } - - @Test - public void restartNonExistingContainer() throws DockerException, InterruptedException { - try { - dockerClient.restartContainerCmd("non-existing").exec(); - fail("expected NotFoundException"); - } catch (NotFoundException e) { - } - - } - -} diff --git a/src/test/java/com/github/dockerjava/core/command/SaveImageCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/SaveImageCmdImplTest.java index ffc81d4e0..6848af2cd 100644 --- a/src/test/java/com/github/dockerjava/core/command/SaveImageCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/SaveImageCmdImplTest.java @@ -49,6 +49,8 @@ public void saveImage() throws Exception { InputStream image = IOUtils.toBufferedInputStream(dockerClient.saveImageCmd("busybox").exec()); assertThat(image.available(), greaterThan(0)); + InputStream image2 = IOUtils.toBufferedInputStream(dockerClient.saveImageCmd("busybox").withTag("latest").exec()); + assertThat(image2.available(), greaterThan(0)); } diff --git a/src/test/java/com/github/dockerjava/core/command/SearchImagesCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/SearchImagesCmdImplTest.java deleted file mode 100644 index 78e018427..000000000 --- a/src/test/java/com/github/dockerjava/core/command/SearchImagesCmdImplTest.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.github.dockerjava.core.command; - -import static ch.lambdaj.Lambda.filter; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.hasItem; -import static org.hamcrest.Matchers.is; -import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; - -import java.lang.reflect.Method; -import java.util.List; - -import org.hamcrest.Matcher; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.model.SearchItem; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class SearchImagesCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void searchImages() throws DockerException { - List dockerSearch = dockerClient.searchImagesCmd("busybox").exec(); - LOG.info("Search returned {}", dockerSearch.toString()); - - Matcher matcher = hasItem(hasField("name", equalTo("busybox"))); - assertThat(dockerSearch, matcher); - - assertThat(filter(hasField("name", is("busybox")), dockerSearch).size(), equalTo(1)); - } - -} diff --git a/src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java deleted file mode 100644 index a2f1e51d8..000000000 --- a/src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java +++ /dev/null @@ -1,559 +0,0 @@ -package com.github.dockerjava.core.command; - -import static com.github.dockerjava.api.model.AccessMode.ro; -import static com.github.dockerjava.api.model.Capability.MKNOD; -import static com.github.dockerjava.api.model.Capability.NET_ADMIN; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.contains; -import static org.hamcrest.Matchers.containsInAnyOrder; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.hasSize; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.notNullValue; -import static org.hamcrest.Matchers.startsWith; - -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.List; -import java.util.UUID; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.command.StartContainerCmd; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.InternalServerErrorException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.model.Bind; -import com.github.dockerjava.api.model.Device; -import com.github.dockerjava.api.model.ExposedPort; -import com.github.dockerjava.api.model.Link; -import com.github.dockerjava.api.model.Ports; -import com.github.dockerjava.api.model.RestartPolicy; -import com.github.dockerjava.api.model.Volume; -import com.github.dockerjava.api.model.VolumesFrom; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class StartContainerCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void startContainerWithVolumes() throws DockerException { - - // see http://docs.docker.io/use/working_with_volumes/ - Volume volume1 = new Volume("/opt/webapp1"); - - Volume volume2 = new Volume("/opt/webapp2"); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withVolumes(volume1, volume2) - .withCmd("true").withBinds(new Bind("/src/webapp1", volume1, ro), new Bind("/src/webapp2", volume2)) - .exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getConfig().getVolumes().keySet(), contains("/opt/webapp1", "/opt/webapp2")); - - dockerClient.startContainerCmd(container.getId()).exec(); - - dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()).awaitStatusCode(); - - inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse, mountedVolumes(containsInAnyOrder(volume1, volume2))); - - final List mounts = inspectContainerResponse.getMounts(); - - assertThat(mounts, hasSize(2)); - - final InspectContainerResponse.Mount mount1 = new InspectContainerResponse.Mount() - .withRw(false).withMode("ro").withDestination(volume1).withSource("/src/webapp1"); - final InspectContainerResponse.Mount mount2 = new InspectContainerResponse.Mount() - .withRw(true).withMode("rw").withDestination(volume2).withSource("/src/webapp2"); - - assertThat(mounts, containsInAnyOrder(mount1, mount2)); - } - - @Test - public void startContainerWithVolumesFrom() throws DockerException { - - Volume volume1 = new Volume("/opt/webapp1"); - Volume volume2 = new Volume("/opt/webapp2"); - - String container1Name = UUID.randomUUID().toString(); - - CreateContainerResponse container1 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName(container1Name) - .withBinds(new Bind("/src/webapp1", volume1), new Bind("/src/webapp2", volume2)).exec(); - LOG.info("Created container1 {}", container1.toString()); - - dockerClient.startContainerCmd(container1.getId()).exec(); - LOG.info("Started container1 {}", container1.toString()); - - InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) - .exec(); - - assertThat(inspectContainerResponse1, mountedVolumes(containsInAnyOrder(volume1, volume2))); - - CreateContainerResponse container2 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withVolumesFrom(new VolumesFrom(container1Name)).exec(); - LOG.info("Created container2 {}", container2.toString()); - - dockerClient.startContainerCmd(container2.getId()).exec(); - LOG.info("Started container2 {}", container2.toString()); - - InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) - .exec(); - - assertThat(inspectContainerResponse2, mountedVolumes(containsInAnyOrder(volume1, volume2))); - } - - @Test - public void startContainerWithDns() throws DockerException { - - String aDnsServer = "8.8.8.8"; - String anotherDnsServer = "8.8.4.4"; - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") - .withDns(aDnsServer, anotherDnsServer).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDns()), - contains(aDnsServer, anotherDnsServer)); - } - - @Test - public void startContainerWithDnsSearch() throws DockerException { - - String dnsSearch = "example.com"; - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") - .withDnsSearch(dnsSearch).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - dockerClient.startContainerCmd(container.getId()).exec(); - - inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDnsSearch()), contains(dnsSearch)); - } - - @Test - public void startContainerWithPortBindings() throws DockerException { - - ExposedPort tcp22 = ExposedPort.tcp(22); - ExposedPort tcp23 = ExposedPort.tcp(23); - - Ports portBindings = new Ports(); - portBindings.bind(tcp22, Ports.binding(11022)); - portBindings.bind(tcp23, Ports.binding(11023)); - portBindings.bind(tcp23, Ports.binding(11024)); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") - .withExposedPorts(tcp22, tcp23).withPortBindings(portBindings).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - dockerClient.startContainerCmd(container.getId()).exec(); - - inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getConfig().getExposedPorts()), contains(tcp22, tcp23)); - - assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp22)[0], - is(equalTo(Ports.binding(11022)))); - - assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[0], - is(equalTo(Ports.binding(11023)))); - - assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[1], - is(equalTo(Ports.binding(11024)))); - - } - - @Test - public void startContainerWithRandomPortBindings() throws DockerException { - - ExposedPort tcp22 = ExposedPort.tcp(22); - ExposedPort tcp23 = ExposedPort.tcp(23); - - Ports portBindings = new Ports(); - portBindings.bind(tcp22, Ports.binding(null)); - portBindings.bind(tcp23, Ports.binding(null)); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withExposedPorts(tcp22, tcp23).withPortBindings(portBindings).withPublishAllPorts(true).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getConfig().getExposedPorts()), contains(tcp22, tcp23)); - - assertThat(inspectContainerResponse.getNetworkSettings().getPorts().getBindings().get(tcp22)[0].getHostPort(), - is(not(equalTo(tcp22.getPort())))); - - assertThat(inspectContainerResponse.getNetworkSettings().getPorts().getBindings().get(tcp23)[0].getHostPort(), - is(not(equalTo(tcp23.getPort())))); - - } - - @Test - public void startContainerWithConflictingPortBindings() throws DockerException { - - ExposedPort tcp22 = ExposedPort.tcp(22); - ExposedPort tcp23 = ExposedPort.tcp(23); - - Ports portBindings = new Ports(); - portBindings.bind(tcp22, Ports.binding(11022)); - portBindings.bind(tcp23, Ports.binding(11022)); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") - .withExposedPorts(tcp22, tcp23).withPortBindings(portBindings).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - try { - dockerClient.startContainerCmd(container.getId()).exec(); - fail("expected InternalServerErrorException"); - } catch (InternalServerErrorException e) { - - } - - } - - @Test - public void startContainerWithLinkingDeprecated() throws DockerException { - - CreateContainerResponse container1 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName("container1").exec(); - - LOG.info("Created container1 {}", container1.toString()); - assertThat(container1.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container1.getId()).exec(); - - InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) - .exec(); - LOG.info("Container1 Inspect: {}", inspectContainerResponse1.toString()); - - assertThat(inspectContainerResponse1.getConfig(), is(notNullValue())); - assertThat(inspectContainerResponse1.getId(), not(isEmptyString())); - assertThat(inspectContainerResponse1.getId(), startsWith(container1.getId())); - assertThat(inspectContainerResponse1.getName(), equalTo("/container1")); - assertThat(inspectContainerResponse1.getImageId(), not(isEmptyString())); - assertThat(inspectContainerResponse1.getState(), is(notNullValue())); - assertThat(inspectContainerResponse1.getState().getRunning(), is(true)); - - if (!inspectContainerResponse1.getState().getRunning()) { - assertThat(inspectContainerResponse1.getState().getExitCode(), is(equalTo(0))); - } - - CreateContainerResponse container2 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName("container2").withLinks(new Link("container1", "container1Link")).exec(); - - LOG.info("Created container2 {}", container2.toString()); - assertThat(container2.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container2.getId()).exec(); - - InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) - .exec(); - LOG.info("Container2 Inspect: {}", inspectContainerResponse2.toString()); - - assertThat(inspectContainerResponse2.getConfig(), is(notNullValue())); - assertThat(inspectContainerResponse2.getId(), not(isEmptyString())); - assertThat(inspectContainerResponse2.getHostConfig(), is(notNullValue())); - assertThat(inspectContainerResponse2.getHostConfig().getLinks(), is(notNullValue())); - assertThat(inspectContainerResponse2.getHostConfig().getLinks(), equalTo(new Link[] {new Link("container1", - "container1Link")})); - assertThat(inspectContainerResponse2.getId(), startsWith(container2.getId())); - assertThat(inspectContainerResponse2.getName(), equalTo("/container2")); - assertThat(inspectContainerResponse2.getImageId(), not(isEmptyString())); - assertThat(inspectContainerResponse2.getState(), is(notNullValue())); - assertThat(inspectContainerResponse2.getState().getRunning(), is(true)); - - } - - @Test - public void startContainerWithLinking() throws DockerException { - - CreateContainerResponse container1 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName("container1").exec(); - - LOG.info("Created container1 {}", container1.toString()); - assertThat(container1.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container1.getId()).exec(); - - InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) - .exec(); - LOG.info("Container1 Inspect: {}", inspectContainerResponse1.toString()); - - assertThat(inspectContainerResponse1.getConfig(), is(notNullValue())); - assertThat(inspectContainerResponse1.getId(), not(isEmptyString())); - assertThat(inspectContainerResponse1.getId(), startsWith(container1.getId())); - assertThat(inspectContainerResponse1.getName(), equalTo("/container1")); - assertThat(inspectContainerResponse1.getImageId(), not(isEmptyString())); - assertThat(inspectContainerResponse1.getState(), is(notNullValue())); - assertThat(inspectContainerResponse1.getState().getRunning(), is(true)); - - if (!inspectContainerResponse1.getState().getRunning()) { - assertThat(inspectContainerResponse1.getState().getExitCode(), is(equalTo(0))); - } - - CreateContainerResponse container2 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName("container2").withLinks(new Link("container1", "container1Link")).exec(); - - LOG.info("Created container2 {}", container2.toString()); - assertThat(container2.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container2.getId()).exec(); - - InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) - .exec(); - LOG.info("Container2 Inspect: {}", inspectContainerResponse2.toString()); - - assertThat(inspectContainerResponse2.getConfig(), is(notNullValue())); - assertThat(inspectContainerResponse2.getId(), not(isEmptyString())); - assertThat(inspectContainerResponse2.getHostConfig(), is(notNullValue())); - assertThat(inspectContainerResponse2.getHostConfig().getLinks(), is(notNullValue())); - assertThat(inspectContainerResponse2.getHostConfig().getLinks(), equalTo(new Link[] {new Link("container1", - "container1Link")})); - assertThat(inspectContainerResponse2.getId(), startsWith(container2.getId())); - assertThat(inspectContainerResponse2.getName(), equalTo("/container2")); - assertThat(inspectContainerResponse2.getImageId(), not(isEmptyString())); - assertThat(inspectContainerResponse2.getState(), is(notNullValue())); - assertThat(inspectContainerResponse2.getState().getRunning(), is(true)); - - } - - @Test - public void startContainer() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd(new String[] {"top"}) - .exec(); - - LOG.info("Created container {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); - - assertThat(inspectContainerResponse.getConfig(), is(notNullValue())); - assertThat(inspectContainerResponse.getId(), not(isEmptyString())); - - assertThat(inspectContainerResponse.getId(), startsWith(container.getId())); - - assertThat(inspectContainerResponse.getImageId(), not(isEmptyString())); - assertThat(inspectContainerResponse.getState(), is(notNullValue())); - - assertThat(inspectContainerResponse.getState().getRunning(), is(true)); - - if (!inspectContainerResponse.getState().getRunning()) { - assertThat(inspectContainerResponse.getState().getExitCode(), is(equalTo(0))); - } - } - - @Test - public void testStartNonExistingContainer() throws DockerException { - try { - dockerClient.startContainerCmd("non-existing").exec(); - fail("expected NotFoundException"); - } catch (NotFoundException e) { - } - } - - /** - * This tests support for --net option for the docker run command: --net="bridge" Set the Network mode for the container 'bridge': - * creates a new network stack for the container on the docker bridge 'none': no networking for this container 'container:': reuses - * another container network stack 'host': use the host network stack inside the container. Note: the host mode gives the container full - * access to local system services such as D-bus and is therefore considered insecure. - */ - @Test - public void startContainerWithNetworkMode() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") - .withNetworkMode("host").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - dockerClient.startContainerCmd(container.getId()).exec(); - - inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getHostConfig().getNetworkMode(), is(equalTo("host"))); - } - - @Test - public void startContainerWithCapAddAndCapDrop() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withCapAdd(NET_ADMIN).withCapDrop(MKNOD).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getState().getRunning(), is(true)); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getCapAdd()), contains(NET_ADMIN)); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getCapDrop()), contains(MKNOD)); - } - - @Test - public void startContainerWithDevices() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withDevices(new Device("rwm", "/dev/nulo", "/dev/zero")).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getState().getRunning(), is(true)); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDevices()), contains(new Device("rwm", - "/dev/nulo", "/dev/zero"))); - } - - @Test - public void startContainerWithExtraHosts() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withExtraHosts("dockerhost:127.0.0.1").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getState().getRunning(), is(true)); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getExtraHosts()), - contains("dockerhost:127.0.0.1")); - } - - @Test - public void startContainerWithRestartPolicy() throws DockerException { - - RestartPolicy restartPolicy = RestartPolicy.onFailureRestart(5); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withRestartPolicy(restartPolicy).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getState().getRunning(), is(true)); - - assertThat(inspectContainerResponse.getHostConfig().getRestartPolicy(), is(equalTo(restartPolicy))); - } - - @Test - public void existingHostConfigIsPreservedByBlankStartCmd() throws DockerException { - - String dnsServer = "8.8.8.8"; - - // prepare a container with custom DNS - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withDns(dnsServer) - .withCmd("true").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - // start container _without_any_customization_ (important!) - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - // The DNS setting survived. - assertThat(inspectContainerResponse.getHostConfig().getDns(), is(notNullValue())); - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDns()), contains(dnsServer)); - } - - @Test - public void anUnconfiguredCommandSerializesToEmptyJson() throws Exception { - ObjectMapper objectMapper = new ObjectMapper(); - StartContainerCmd command = dockerClient.startContainerCmd(""); - assertThat(objectMapper.writeValueAsString(command), is("{}")); - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/StatsCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/StatsCmdImplTest.java deleted file mode 100644 index d7f9ec1c5..000000000 --- a/src/test/java/com/github/dockerjava/core/command/StatsCmdImplTest.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; - -import java.io.IOException; -import java.lang.reflect.Method; -import java.security.SecureRandom; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.model.Statistics; -import com.github.dockerjava.client.AbstractDockerClientTest; -import com.github.dockerjava.core.async.ResultCallbackTemplate; - -@Test(groups = "integration") -public class StatsCmdImplTest extends AbstractDockerClientTest { - - private static int NUM_STATS = 5; - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(groups = "ignoreInCircleCi") - public void testStatsStreaming() throws InterruptedException, IOException { - TimeUnit.SECONDS.sleep(1); - - CountDownLatch countDownLatch = new CountDownLatch(NUM_STATS); - - String containerName = "generated_" + new SecureRandom().nextInt(); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("top") - .withName(containerName).exec(); - LOG.info("Created container {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - StatsCallbackTest statsCallback = dockerClient.statsCmd(container.getId()).exec( - new StatsCallbackTest(countDownLatch)); - - countDownLatch.await(3, TimeUnit.SECONDS); - Boolean gotStats = statsCallback.gotStats(); - - LOG.info("Stop stats collection"); - - statsCallback.close(); - - LOG.info("Stopping container"); - dockerClient.stopContainerCmd(container.getId()).exec(); - dockerClient.removeContainerCmd(container.getId()).exec(); - - LOG.info("Completed test"); - assertTrue(gotStats, "Expected true"); - - } - - private class StatsCallbackTest extends ResultCallbackTemplate { - private final CountDownLatch countDownLatch; - - private Boolean gotStats = false; - - public StatsCallbackTest(CountDownLatch countDownLatch) { - this.countDownLatch = countDownLatch; - } - - @Override - public void onNext(Statistics stats) { - LOG.info("Received stats #{}: {}", countDownLatch.getCount(), stats); - if (stats != null) { - gotStats = true; - } - countDownLatch.countDown(); - } - - public Boolean gotStats() { - return gotStats; - } - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/StopContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/StopContainerCmdImplTest.java deleted file mode 100644 index 913ed9474..000000000 --- a/src/test/java/com/github/dockerjava/core/command/StopContainerCmdImplTest.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.github.dockerjava.core.command; - -import static com.github.dockerjava.core.RemoteApiVersion.VERSION_1_22; -import static com.github.dockerjava.utils.TestUtils.getVersion; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; - -import java.lang.reflect.Method; - -import com.github.dockerjava.core.RemoteApiVersion; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class StopContainerCmdImplTest extends AbstractDockerClientTest { - - public static final Logger LOG = LoggerFactory.getLogger(StopContainerCmdImplTest.class); - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(groups = "ignoreInCircleCi") - public void testStopContainer() throws DockerException { - final RemoteApiVersion apiVersion = getVersion(dockerClient); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - dockerClient.startContainerCmd(container.getId()).exec(); - - LOG.info("Stopping container: {}", container.getId()); - dockerClient.stopContainerCmd(container.getId()).withTimeout(2).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); - - assertThat(inspectContainerResponse.getState().getRunning(), is(equalTo(false))); - - final Integer exitCode = inspectContainerResponse.getState().getExitCode(); - if (apiVersion.equals(VERSION_1_22)) { - assertThat(exitCode, is(0)); - } else { - assertThat(exitCode, not(0)); - } - } - - @Test - public void testStopNonExistingContainer() throws DockerException { - try { - dockerClient.stopContainerCmd("non-existing").withTimeout(2).exec(); - fail("expected NotFoundException"); - } catch (NotFoundException e) { - - } - } - -} diff --git a/src/test/java/com/github/dockerjava/core/command/TagImageCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/TagImageCmdImplTest.java deleted file mode 100644 index 94d4291d0..000000000 --- a/src/test/java/com/github/dockerjava/core/command/TagImageCmdImplTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.github.dockerjava.core.command; - -import java.lang.reflect.Method; - -import org.apache.commons.lang.math.RandomUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class TagImageCmdImplTest extends AbstractDockerClientTest { - - public static final Logger LOG = LoggerFactory.getLogger(TagImageCmdImplTest.class); - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void tagImage() throws Exception { - String tag = "" + RandomUtils.nextInt(Integer.MAX_VALUE); - - dockerClient.tagImageCmd("busybox:latest", "docker-java/busybox", tag).exec(); - - dockerClient.removeImageCmd("docker-java/busybox:" + tag).exec(); - } - - @Test - public void tagNonExistingImage() throws Exception { - String tag = "" + RandomUtils.nextInt(Integer.MAX_VALUE); - - try { - dockerClient.tagImageCmd("non-existing", "docker-java/busybox", tag).exec(); - fail("expected NotFoundException"); - } catch (NotFoundException e) { - } - } - -} diff --git a/src/test/java/com/github/dockerjava/core/command/UpdateContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/UpdateContainerCmdImplTest.java deleted file mode 100644 index c230fbb02..000000000 --- a/src/test/java/com/github/dockerjava/core/command/UpdateContainerCmdImplTest.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.github.dockerjava.core.command; - -import com.fasterxml.jackson.databind.JavaType; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.model.HostConfig; -import com.github.dockerjava.api.model.UpdateContainerResponse; -import com.github.dockerjava.client.AbstractDockerClientTest; -import com.github.dockerjava.core.RemoteApiVersion; -import org.testng.ITestResult; -import org.testng.SkipException; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import java.io.IOException; -import java.lang.reflect.Method; - -import static com.github.dockerjava.test.serdes.JSONSamples.testRoundTrip; -import static com.github.dockerjava.utils.TestUtils.getVersion; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.collection.IsCollectionWithSize.hasSize; -import static org.hamcrest.core.IsNull.notNullValue; - -/** - * @author Kanstantsin Shautsou - */ -@Test(groups = "integration") -public class UpdateContainerCmdImplTest extends AbstractDockerClientTest { - - public static final String BUSYBOX_IMAGE = "busybox"; - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(groups = "ignoreInCircleCi") - public void updateContainer() throws DockerException, IOException { - final RemoteApiVersion apiVersion = getVersion(dockerClient); - - if (!apiVersion.isGreaterOrEqual(RemoteApiVersion.VERSION_1_22)) { - throw new SkipException("API version should be >= 1.22"); - } - - CreateContainerResponse response = dockerClient.createContainerCmd(BUSYBOX_IMAGE) - .withCmd("sleep", "9999") - .exec(); - String containerId = response.getId(); - dockerClient.startContainerCmd(containerId).exec(); - - InspectContainerResponse inspectBefore = dockerClient.inspectContainerCmd(containerId).exec(); - - final UpdateContainerResponse updateResponse = dockerClient.updateContainerCmd(containerId) - .withBlkioWeight(300) - .withCpuShares(512) - .withCpuPeriod(100000) - .withCpuQuota(50000) -// .withCpusetCpus("0") // depends on env - .withCpusetMems("0") - .withMemory(314572800L) - .withMemorySwap(514288000L) - .withMemoryReservation(209715200L) -// .withKernelMemory(52428800) Can not update kernel memory to a running container, please stop it first. - .exec(); - - // docker toolbox 1.10.1 - assertThat(updateResponse.getWarnings(), hasSize(1)); - assertThat(updateResponse.getWarnings().get(0), - is("Your kernel does not support Block I/O weight. Weight discarded.")); - - InspectContainerResponse inspectAfter = dockerClient.inspectContainerCmd(containerId).exec(); - final HostConfig afterHostConfig = inspectAfter.getHostConfig(); - - assertThat(afterHostConfig.getMemory(), - is(314572800L)); - -// assertThat(afterHostConfig.getBlkioWeight(), is(300)); - assertThat(afterHostConfig.getCpuShares(), is(512)); - assertThat(afterHostConfig.getCpuPeriod(), is(100000)); - assertThat(afterHostConfig.getCpuQuota(), is(50000)); - assertThat(afterHostConfig.getCpusetMems(), is("0")); - - assertThat(afterHostConfig.getMemoryReservation(), is(209715200L)); - assertThat(afterHostConfig.getMemorySwap(), is(514288000L)); - - } - - @Test(enabled = false, description = "impossible to serder because model bundled in cmd") - public void serDerDocs1() throws IOException { - final ObjectMapper mapper = new ObjectMapper(); - final JavaType type = mapper.getTypeFactory().uncheckedSimpleType(UpdateContainerCmdImpl.class); - - final UpdateContainerCmdImpl upd = testRoundTrip(RemoteApiVersion.VERSION_1_22, - "/containers/container/update/docs.json", - type - ); - - assertThat(upd, notNullValue()); - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/VersionCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/VersionCmdImplTest.java deleted file mode 100644 index d8bfb3f23..000000000 --- a/src/test/java/com/github/dockerjava/core/command/VersionCmdImplTest.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.github.dockerjava.core.command; - -import java.lang.reflect.Method; - -import org.apache.commons.lang.StringUtils; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.model.Version; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class VersionCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void version() throws DockerException { - Version version = dockerClient.versionCmd().exec(); - LOG.info(version.toString()); - - assertTrue(version.getGoVersion().length() > 0); - assertTrue(version.getVersion().length() > 0); - - assertEquals(StringUtils.split(version.getVersion(), ".").length, 3); - - } - -} diff --git a/src/test/java/com/github/dockerjava/core/command/WaitContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/WaitContainerCmdImplTest.java deleted file mode 100644 index 8de80573c..000000000 --- a/src/test/java/com/github/dockerjava/core/command/WaitContainerCmdImplTest.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.github.dockerjava.core.command; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.model.WaitResponse; -import com.github.dockerjava.client.AbstractDockerClientTest; - -@Test(groups = "integration") -public class WaitContainerCmdImplTest extends AbstractDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void testWaitContainer() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true").exec(); - - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()) - .awaitStatusCode(); - LOG.info("Container exit code: {}", exitCode); - - assertThat(exitCode, equalTo(0)); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); - - assertThat(inspectContainerResponse.getState().getRunning(), is(equalTo(false))); - assertThat(inspectContainerResponse.getState().getExitCode(), is(equalTo(exitCode))); - } - - @Test(expectedExceptions = NotFoundException.class) - public void testWaitNonExistingContainer() throws DockerException { - - WaitContainerResultCallback callback = new WaitContainerResultCallback() { - public void onNext(WaitResponse waitResponse) { - fail("expected NotFoundException"); - }; - }; - - dockerClient.waitContainerCmd("non-existing").exec(callback).awaitStatusCode(); - } - - @Test - public void testWaitContainerAbort() throws Exception { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); - - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - WaitContainerResultCallback callback = dockerClient.waitContainerCmd(container.getId()).exec( - new WaitContainerResultCallback()); - - Thread.sleep(5000); - - callback.close(); - - dockerClient.killContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); - - assertThat(inspectContainerResponse.getState().getRunning(), is(equalTo(false))); - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/AttachContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/AttachContainerCmdExecTest.java deleted file mode 100644 index 7f8e66609..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/AttachContainerCmdExecTest.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.InputStream; -import java.lang.reflect.Method; -import java.util.concurrent.TimeUnit; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.model.Frame; -import com.github.dockerjava.api.model.StreamType; -import com.github.dockerjava.core.command.AttachContainerResultCallback; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class AttachContainerCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void attachContainerWithoutTTY() throws Exception { - - String snippet = "hello world"; - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("echo", snippet) - .withTty(false).exec(); - - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - AttachContainerTestCallback callback = new AttachContainerTestCallback() { - @Override - public void onNext(Frame frame) { - assertEquals(frame.getStreamType(), StreamType.STDOUT); - super.onNext(frame); - }; - }; - - dockerClient.attachContainerCmd(container.getId()).withStdErr(true).withStdOut(true).withFollowStream(true) - .withLogs(true).exec(callback).awaitCompletion(10, TimeUnit.SECONDS); - callback.close(); - - assertThat(callback.toString(), containsString(snippet)); - } - - @Test - public void attachContainerWithStdin() throws Exception { - - String snippet = "hello world"; - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("/bin/sh", "-c", "read line && echo $line") - .withTty(false).withStdinOpen(true).exec(); - - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertTrue(inspectContainerResponse.getState().getRunning()); - - AttachContainerTestCallback callback = new AttachContainerTestCallback() { - - @Override - public void onNext(Frame frame) { - assertEquals(frame.getStreamType(), StreamType.STDOUT); - super.onNext(frame); - }; - }; - - InputStream stdin = new ByteArrayInputStream((snippet + "\n").getBytes()); - - dockerClient.attachContainerCmd(container.getId()).withStdErr(true).withStdOut(true).withFollowStream(true) - .withStdIn(stdin).exec(callback).awaitCompletion(2, TimeUnit.SECONDS); - callback.close(); - - assertThat(callback.toString(), containsString(snippet)); - } - - @Test - public void attachContainerWithTTY() throws Exception { - - File baseDir = new File(Thread.currentThread().getContextClassLoader() - .getResource("attachContainerTestDockerfile").getFile()); - - String imageId = buildImage(baseDir); - - CreateContainerResponse container = dockerClient.createContainerCmd(imageId).withTty(true).exec(); - - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - AttachContainerTestCallback callback = new AttachContainerTestCallback() { - @Override - public void onNext(Frame frame) { - assertEquals(frame.getStreamType(), StreamType.RAW); - super.onNext(frame); - }; - }; - - dockerClient.attachContainerCmd(container.getId()).withStdErr(true).withStdOut(true).withFollowStream(true) - .exec(callback).awaitCompletion(10, TimeUnit.SECONDS); - callback.close(); - - // HexDump.dump(collectFramesCallback.toString().getBytes(), 0, System.out, 0); - - assertThat(callback.toString(), containsString("stdout\r\nstderr")); - } - - public static class AttachContainerTestCallback extends AttachContainerResultCallback { - private StringBuffer log = new StringBuffer(); - - @Override - public void onNext(Frame item) { - log.append(new String(item.getPayload())); - super.onNext(item); - } - - @Override - public String toString() { - return log.toString(); - } - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/AuthCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/AuthCmdExecTest.java deleted file mode 100644 index 66ac1bce3..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/AuthCmdExecTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.UnauthorizedException; -import com.github.dockerjava.api.model.AuthResponse; -import com.github.dockerjava.core.DockerClientBuilder; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class AuthCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void testAuth() throws Exception { - AuthResponse response = dockerClient.authCmd().exec(); - - assertEquals(response.getStatus(), "Login Succeeded"); - } - - @Test() - public void testAuthInvalid() throws Exception { - - try { - DockerClientBuilder.getInstance(config("garbage")).build().authCmd().exec(); - fail("Expected a UnauthorizedException caused by a bad password."); - } catch (UnauthorizedException e) { - assertEquals(e.getMessage(), "Wrong login/password, please try again\n"); - } - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/BuildImageCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/BuildImageCmdExecTest.java deleted file mode 100644 index 1299cf6ae..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/BuildImageCmdExecTest.java +++ /dev/null @@ -1,316 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.notNullValue; -import static org.hamcrest.Matchers.nullValue; - -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; -import java.lang.reflect.Method; -import java.util.Collection; -import java.util.UUID; - -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.filefilter.TrueFileFilter; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.BuildImageCmd; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.command.InspectImageResponse; -import com.github.dockerjava.api.exception.DockerClientException; -import com.github.dockerjava.api.model.AuthConfig; -import com.github.dockerjava.api.model.AuthConfigurations; -import com.github.dockerjava.api.model.ExposedPort; -import com.github.dockerjava.api.model.PortBinding; -import com.github.dockerjava.api.model.Ports; -import com.github.dockerjava.core.command.BuildImageResultCallback; -import com.github.dockerjava.core.command.PushImageResultCallback; -import com.github.dockerjava.core.command.WaitContainerResultCallback; -import com.github.dockerjava.core.util.CompressArchiveUtil; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class BuildImageCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void testNginxDockerfileBuilder() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("nginx").getFile()); - - String imageId = buildImage(baseDir); - - InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); - assertThat(inspectImageResponse, not(nullValue())); - LOG.info("Image Inspect: {}", inspectImageResponse.toString()); - - assertThat(inspectImageResponse.getAuthor(), equalTo("Guillaume J. Charmes \"guillaume@dotcloud.com\"")); - } - - @Test(groups = "ignoreInCircleCi") - public void testNonstandard1() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader() - .getResource("nonstandard/subdirectory/Dockerfile-nonstandard").getFile()); - - buildImage(baseDir); - } - - @Test(groups = "ignoreInCircleCi") - public void testNonstandard2() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("nonstandard").getFile()); - File dockerFile = new File(Thread.currentThread().getContextClassLoader() - .getResource("nonstandard/subdirectory/Dockerfile-nonstandard").getFile()); - - dockerClient.buildImageCmd().withBaseDirectory(baseDir).withDockerfile(dockerFile).withNoCache(true) - .exec(new BuildImageResultCallback()).awaitImageId(); - } - - @Test - public void testDockerBuilderFromTar() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddFile").getFile()); - Collection files = FileUtils.listFiles(baseDir, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE); - File tarFile = CompressArchiveUtil.archiveTARFiles(baseDir, files, UUID.randomUUID().toString()); - String response = dockerfileBuild(new FileInputStream(tarFile)); - assertThat(response, containsString("Successfully executed testrun.sh")); - } - - @Test - public void testDockerBuilderAddUrl() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddUrl").getFile()); - String response = dockerfileBuild(baseDir); - assertThat(response, containsString("Docker")); - } - - @Test - public void testDockerBuilderAddFileInSubfolder() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddFileInSubfolder") - .getFile()); - String response = dockerfileBuild(baseDir); - assertThat(response, containsString("Successfully executed testrun.sh")); - } - - @Test - public void testDockerBuilderAddFilesViaWildcard() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddFilesViaWildcard") - .getFile()); - String response = dockerfileBuild(baseDir); - assertThat(response, containsString("Successfully executed testinclude1.sh")); - assertThat(response, not(containsString("Successfully executed testinclude2.sh"))); - } - - @Test - public void testDockerBuilderAddFolder() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddFolder").getFile()); - String response = dockerfileBuild(baseDir); - assertThat(response, containsString("Successfully executed testAddFolder.sh")); - } - - @Test - public void testDockerBuilderEnv() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testEnv").getFile()); - String response = dockerfileBuild(baseDir); - assertThat(response, containsString("Successfully executed testrun.sh")); - } - - private String dockerfileBuild(InputStream tarInputStream) throws Exception { - - return execBuild(dockerClient.buildImageCmd().withTarInputStream(tarInputStream)); - } - - private String dockerfileBuild(File baseDir) throws Exception { - - return execBuild(dockerClient.buildImageCmd(baseDir)); - } - - private String execBuild(BuildImageCmd buildImageCmd) throws Exception { - String imageId = buildImageCmd.withNoCache(true).exec(new BuildImageResultCallback()).awaitImageId(); - - // Create container based on image - CreateContainerResponse container = dockerClient.createContainerCmd(imageId).exec(); - - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()).awaitStatusCode(); - - return containerLog(container.getId()); - } - - @Test(expectedExceptions = {DockerClientException.class}) - public void testDockerfileIgnored() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testDockerfileIgnored") - .getFile()); - - dockerClient.buildImageCmd(baseDir).withNoCache(true).exec(new BuildImageResultCallback()).awaitImageId(); - } - - @Test - public void testDockerfileNotIgnored() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testDockerfileNotIgnored") - .getFile()); - - dockerClient.buildImageCmd(baseDir).withNoCache(true).exec(new BuildImageResultCallback()).awaitImageId(); - } - - @Test(expectedExceptions = {DockerClientException.class}) - public void testInvalidDockerIgnorePattern() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader() - .getResource("testInvalidDockerignorePattern").getFile()); - - dockerClient.buildImageCmd(baseDir).withNoCache(true).exec(new BuildImageResultCallback()).awaitImageId(); - } - - @Test(groups = "ignoreInCircleCi") - public void testDockerIgnore() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testDockerignore") - .getFile()); - String response = dockerfileBuild(baseDir); - assertThat(response, containsString("/tmp/a/a /tmp/a/c /tmp/a/d")); - } - - @Test - public void testNetCatDockerfileBuilder() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("netcat").getFile()); - - String imageId = dockerClient.buildImageCmd(baseDir).withNoCache(true).exec(new BuildImageResultCallback()) - .awaitImageId(); - - assertNotNull(imageId, "Not successful in build"); - - InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); - assertThat(inspectImageResponse, not(nullValue())); - assertThat(inspectImageResponse.getId(), not(nullValue())); - LOG.info("Image Inspect: {}", inspectImageResponse.toString()); - - CreateContainerResponse container = dockerClient.createContainerCmd(inspectImageResponse.getId()).exec(); - assertThat(container.getId(), not(isEmptyString())); - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getId(), notNullValue()); - assertThat(inspectContainerResponse.getNetworkSettings().getPorts(), notNullValue()); - - // No use as such if not running on the server - // for (Ports.Port p : inspectContainerResponse.getNetworkSettings().getPorts().getAllPorts()) { - // int port = Integer.valueOf(p.getHostPort()); - // LOG.info("Checking port {} is open", port); - // assertThat(available(port), is(false)); - // } - dockerClient.stopContainerCmd(container.getId()).withTimeout(0).exec(); - - } - - @Test - public void testAddAndCopySubstitution() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testENVSubstitution") - .getFile()); - String response = dockerfileBuild(baseDir); - assertThat(response, containsString("testENVSubstitution successfully completed")); - } - - @Test - public void testBuildFromPrivateRegistry() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("privateRegistry").getFile()); - - String imageId = buildImage(baseDir); - - InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); - assertThat(inspectImageResponse, not(nullValue())); - LOG.info("Image Inspect: {}", inspectImageResponse.toString()); - - dockerClient.tagImageCmd(imageId, "testregistry", "2").withForce().exec(); - - // see https://github.com/docker/distribution/blob/master/docs/deploying.md#native-basic-auth - CreateContainerResponse testregistry = dockerClient - .createContainerCmd("testregistry:2") - .withName("registry") - .withPortBindings(new PortBinding(new Ports.Binding(5000), ExposedPort.tcp(5000))) - .withEnv("REGISTRY_AUTH=htpasswd", "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm", - "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd", "REGISTRY_LOG_LEVEL=debug", - "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt", "REGISTRY_HTTP_TLS_KEY=/certs/domain.key") - .exec(); - - dockerClient.startContainerCmd(testregistry.getId()).exec(); - - // wait for registry to boot - Thread.sleep(3000); - - // credentials as configured in /auth/htpasswd - AuthConfig authConfig = new AuthConfig() - .withUsername("testuser") - .withPassword("testpassword") - .withEmail("foo@bar.de") - .withRegistryAddress("localhost:5000"); - - dockerClient.authCmd().withAuthConfig(authConfig).exec(); - dockerClient.tagImageCmd("busybox:latest", "localhost:5000/testuser/busybox", "latest").withForce().exec(); - - dockerClient.pushImageCmd("localhost:5000/testuser/busybox").withTag("latest").withAuthConfig(authConfig) - .exec(new PushImageResultCallback()).awaitSuccess(); - - dockerClient.removeImageCmd("localhost:5000/testuser/busybox").withForce(true).exec(); - - baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testBuildFromPrivateRegistry") - .getFile()); - - AuthConfigurations authConfigurations = new AuthConfigurations(); - authConfigurations.addConfig(authConfig); - - imageId = dockerClient.buildImageCmd(baseDir) - .withNoCache(true) - .withBuildAuthConfigs(authConfigurations) - .exec(new BuildImageResultCallback()) - .awaitImageId(); - - inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); - assertThat(inspectImageResponse, not(nullValue())); - LOG.info("Image Inspect: {}", inspectImageResponse.toString()); - - } - - @Test - public void testBuildArgs() throws Exception { - File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testBuildArgs").getFile()); - - String imageId = dockerClient.buildImageCmd(baseDir).withNoCache(true).withBuildArg("testArg", "abc") - .exec(new BuildImageResultCallback()) - .awaitImageId(); - - InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); - assertThat(inspectImageResponse, not(nullValue())); - LOG.info("Image Inspect: {}", inspectImageResponse.toString()); - - assertThat(inspectImageResponse.getConfig().getLabels().get("test"), equalTo("abc")); - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/CommitCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/CommitCmdExecTest.java deleted file mode 100644 index 0186f4233..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/CommitCmdExecTest.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.startsWith; -import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectImageResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class CommitCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void commit() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("touch", "/test").exec(); - - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - dockerClient.startContainerCmd(container.getId()).exec(); - - LOG.info("Commiting container: {}", container.toString()); - String imageId = dockerClient.commitCmd(container.getId()).exec(); - - InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); - LOG.info("Image Inspect: {}", inspectImageResponse.toString()); - - assertThat(inspectImageResponse, hasField("container", startsWith(container.getId()))); - assertThat(inspectImageResponse.getContainerConfig().getImage(), equalTo("busybox")); - - InspectImageResponse busyboxImg = dockerClient.inspectImageCmd("busybox").exec(); - - assertThat(inspectImageResponse.getParent(), equalTo(busyboxImg.getId())); - } - - @Test - public void commitNonExistingContainer() throws DockerException { - try { - dockerClient.commitCmd("non-existent").exec(); - fail("expected NotFoundException"); - } catch (NotFoundException e) { - } - } - -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/ContainerDiffCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ContainerDiffCmdExecTest.java deleted file mode 100644 index 57c4b46a0..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/ContainerDiffCmdExecTest.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static ch.lambdaj.Lambda.selectUnique; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; -import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; - -import java.lang.reflect.Method; -import java.util.List; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.model.ChangeLog; -import com.github.dockerjava.core.command.WaitContainerResultCallback; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class ContainerDiffCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(groups = "ignoreInCircleCi") - public void testContainerDiff() throws DockerException { - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("touch", "/test").exec(); - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - dockerClient.startContainerCmd(container.getId()).exec(); - - int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()) - .awaitStatusCode(); - assertThat(exitCode, equalTo(0)); - - List filesystemDiff = dockerClient.containerDiffCmd(container.getId()).exec(); - LOG.info("Container DIFF: {}", filesystemDiff.toString()); - - assertThat(filesystemDiff.size(), equalTo(1)); - ChangeLog testChangeLog = selectUnique(filesystemDiff, hasField("path", equalTo("/test"))); - - assertThat(testChangeLog, hasField("path", equalTo("/test"))); - assertThat(testChangeLog, hasField("kind", equalTo(1))); - } - - @Test - public void testContainerDiffWithNonExistingContainer() throws DockerException { - try { - dockerClient.containerDiffCmd("non-existing").exec(); - fail("expected NotFoundException"); - } catch (NotFoundException e) { - } - } - -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/CopyArchiveFromContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/CopyArchiveFromContainerCmdExecTest.java deleted file mode 100644 index aa4dcc575..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/CopyArchiveFromContainerCmdExecTest.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.isEmptyOrNullString; -import static org.hamcrest.Matchers.not; - -import java.io.InputStream; -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class CopyArchiveFromContainerCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void copyFromContainer() throws Exception { - // TODO extract this into a shared method - CreateContainerResponse container = dockerClient.createContainerCmd("busybox") - .withName("docker-java-itest-copyFromContainer").withCmd("touch", "/copyFromContainer").exec(); - - LOG.info("Created container: {}", container); - assertThat(container.getId(), not(isEmptyOrNullString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InputStream response = dockerClient.copyArchiveFromContainerCmd(container.getId(), "/copyFromContainer").exec(); - Boolean bytesAvailable = response.available() > 0; - assertTrue(bytesAvailable, "The file was not copied from the container."); - - // read the stream fully. Otherwise, the underlying stream will not be closed. - String responseAsString = asString(response); - assertNotNull(responseAsString); - assertTrue(responseAsString.length() > 0); - } - - @Test - public void copyFromNonExistingContainer() throws Exception { - try { - dockerClient.copyArchiveFromContainerCmd("non-existing", "/test").exec(); - fail("expected NotFoundException"); - } catch (NotFoundException ignored) { - } - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/CopyArchiveToContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/CopyArchiveToContainerCmdExecTest.java deleted file mode 100644 index d755dfcba..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/CopyArchiveToContainerCmdExecTest.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.isEmptyOrNullString; -import static org.hamcrest.Matchers.not; - -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.Method; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.core.util.CompressArchiveUtil; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class CopyArchiveToContainerCmdExecTest extends AbstractNettyDockerClientTest { - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void copyFileToContainer() throws Exception { - CreateContainerResponse container = prepareContainerForCopy(); - Path temp = Files.createTempFile("", ".tar.gz"); - CompressArchiveUtil.tar(Paths.get("src/test/resources/testReadFile"), temp, true, false); - try (InputStream uploadStream = Files.newInputStream(temp)) { - dockerClient.copyArchiveToContainerCmd(container.getId()).withTarInputStream(uploadStream).exec(); - assertFileCopied(container); - } - } - - @Test - public void copyStreamToContainer() throws Exception { - CreateContainerResponse container = prepareContainerForCopy(); - dockerClient.copyArchiveToContainerCmd(container.getId()).withHostResource("src/test/resources/testReadFile") - .exec(); - assertFileCopied(container); - } - - private CreateContainerResponse prepareContainerForCopy() { - CreateContainerResponse container = dockerClient.createContainerCmd("busybox") - .withName("docker-java-itest-copyToContainer").exec(); - LOG.info("Created container: {}", container); - assertThat(container.getId(), not(isEmptyOrNullString())); - dockerClient.startContainerCmd(container.getId()).exec(); - // Copy a folder to the container - return container; - } - - private void assertFileCopied(CreateContainerResponse container) throws IOException { - try (InputStream response = dockerClient.copyArchiveFromContainerCmd(container.getId(), "testReadFile").exec()) { - boolean bytesAvailable = response.available() > 0; - assertTrue(bytesAvailable, "The file was not copied to the container."); - } - } - - @Test - public void copyToNonExistingContainer() throws Exception { - try { - dockerClient.copyArchiveToContainerCmd("non-existing").withHostResource("src/test/resources/testReadFile") - .exec(); - fail("expected NotFoundException"); - } catch (NotFoundException ignored) { - } - } - -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/CopyFileFromContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/CopyFileFromContainerCmdExecTest.java deleted file mode 100644 index b9682c592..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/CopyFileFromContainerCmdExecTest.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.isEmptyOrNullString; -import static org.hamcrest.Matchers.not; - -import java.io.InputStream; -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class CopyFileFromContainerCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void copyFromContainer() throws Exception { - // TODO extract this into a shared method - CreateContainerResponse container = dockerClient.createContainerCmd("busybox") - .withName("docker-java-itest-copyFromContainer").withCmd("touch", "/copyFromContainer").exec(); - - LOG.info("Created container: {}", container); - assertThat(container.getId(), not(isEmptyOrNullString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InputStream response = dockerClient.copyFileFromContainerCmd(container.getId(), "/copyFromContainer").exec(); - Boolean bytesAvailable = response.available() > 0; - assertTrue(bytesAvailable, "The file was not copied from the container."); - - // read the stream fully. Otherwise, the underlying stream will not be closed. - String responseAsString = asString(response); - assertNotNull(responseAsString); - assertTrue(responseAsString.length() > 0); - } - - @Test - public void copyFromNonExistingContainer() throws Exception { - try { - dockerClient.copyFileFromContainerCmd("non-existing", "/test").exec(); - fail("expected NotFoundException"); - } catch (NotFoundException ignored) { - } - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/CreateContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/CreateContainerCmdExecTest.java deleted file mode 100644 index 02c5cc54e..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/CreateContainerCmdExecTest.java +++ /dev/null @@ -1,567 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static com.github.dockerjava.api.model.Capability.MKNOD; -import static com.github.dockerjava.api.model.Capability.NET_ADMIN; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.contains; -import static org.hamcrest.Matchers.containsInAnyOrder; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.hasItemInArray; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.notNullValue; -import static org.hamcrest.Matchers.startsWith; - -import java.lang.reflect.Method; -import java.security.SecureRandom; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.exception.ConflictException; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.model.Bind; -import com.github.dockerjava.api.model.Device; -import com.github.dockerjava.api.model.ExposedPort; -import com.github.dockerjava.api.model.Link; -import com.github.dockerjava.api.model.LogConfig; -import com.github.dockerjava.api.model.Ports; -import com.github.dockerjava.api.model.RestartPolicy; -import com.github.dockerjava.api.model.Ulimit; -import com.github.dockerjava.api.model.Volume; -import com.github.dockerjava.api.model.VolumesFrom; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class CreateContainerCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(expectedExceptions = ConflictException.class) - public void createContainerWithExistingName() throws DockerException { - - String containerName = "generated_" + new SecureRandom().nextInt(); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("env") - .withName(containerName).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.createContainerCmd("busybox").withCmd("env").withName(containerName).exec(); - } - - @Test - public void createContainerWithVolume() throws DockerException { - - Volume volume = new Volume("/var/log"); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withVolumes(volume) - .withCmd("true").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - LOG.info("Inspect container {}", inspectContainerResponse.getConfig().getVolumes()); - - assertThat(inspectContainerResponse.getConfig().getVolumes().keySet(), contains("/var/log")); - - assertThat(inspectContainerResponse.getMounts().get(0).getDestination(), equalTo(volume)); - assertThat(inspectContainerResponse.getMounts().get(0).getMode(), equalTo("")); - assertThat(inspectContainerResponse.getMounts().get(0).getRW(), equalTo(true)); - } - - @Test - public void createContainerWithReadOnlyVolume() throws DockerException { - - Volume volume = new Volume("/srv/test"); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withVolumes(volume) - .withCmd("true").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - LOG.info("Inspect container {}", inspectContainerResponse.getConfig().getVolumes()); - - assertThat(inspectContainerResponse.getConfig().getVolumes().keySet(), contains("/srv/test")); - - assertThat(inspectContainerResponse.getMounts().get(0).getDestination(), equalTo(volume)); - // TODO: Create a read-only volume and test like this - // assertFalse(inspectContainerResponse.getMounts().get(0).getRW()); - } - - @Test - public void createContainerWithVolumesFrom() throws DockerException { - - Volume volume1 = new Volume("/opt/webapp1"); - Volume volume2 = new Volume("/opt/webapp2"); - - String container1Name = UUID.randomUUID().toString(); - - Bind bind1 = new Bind("/src/webapp1", volume1); - Bind bind2 = new Bind("/src/webapp2", volume2); - - // create a running container with bind mounts - CreateContainerResponse container1 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName(container1Name) - .withBinds(bind1, bind2).exec(); - LOG.info("Created container1 {}", container1.toString()); - - InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) - .exec(); - - assertThat(Arrays.asList(inspectContainerResponse1.getHostConfig().getBinds()), containsInAnyOrder(bind1, bind2)); - - assertThat(inspectContainerResponse1, mountedVolumes(containsInAnyOrder(volume1, volume2))); - - // create a second container with volumes from first container - CreateContainerResponse container2 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withVolumesFrom(new VolumesFrom(container1Name)).exec(); - LOG.info("Created container2 {}", container2.toString()); - - InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) - .exec(); - - // No volumes are created, the information is just stored in .HostConfig.VolumesFrom - assertThat(inspectContainerResponse2.getHostConfig().getVolumesFrom(), hasItemInArray(new VolumesFrom( - container1Name))); - - // To ensure that the information stored in VolumesFrom really is considered - // when starting the container, we start it and verify that it has the same - // bind mounts as the first container. - // This is somehow out of scope here, but it helped me to understand how the - // VolumesFrom feature really works. - dockerClient.startContainerCmd(container2.getId()).exec(); - LOG.info("Started container2 {}", container2.toString()); - - inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()).exec(); - - assertThat(inspectContainerResponse2.getHostConfig().getVolumesFrom(), hasItemInArray(new VolumesFrom( - container1Name))); - - assertThat(inspectContainerResponse2, mountedVolumes(containsInAnyOrder(volume1, volume2))); - } - - @Test - public void createContainerWithEnv() throws Exception { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withEnv("VARIABLE=success") - .withCmd("env").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getConfig().getEnv()), containsInAnyOrder("VARIABLE=success")); - - dockerClient.startContainerCmd(container.getId()).exec(); - - assertThat(containerLog(container.getId()), containsString("VARIABLE=success")); - } - - @Test - public void createContainerWithHostname() throws Exception { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withHostName("docker-java") - .withCmd("env").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getConfig().getHostName(), equalTo("docker-java")); - - dockerClient.startContainerCmd(container.getId()).exec(); - - assertThat(containerLog(container.getId()), containsString("HOSTNAME=docker-java")); - } - - @Test - public void createContainerWithName() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withName("container") - .withCmd("env").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getName(), equalTo("/container")); - } - - @Test - public void createContainerWithLink() throws DockerException { - - CreateContainerResponse container1 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName("container1").exec(); - LOG.info("Created container1 {}", container1.toString()); - assertThat(container1.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container1.getId()).exec(); - - InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) - .exec(); - LOG.info("Container1 Inspect: {}", inspectContainerResponse1.toString()); - assertThat(inspectContainerResponse1.getState().getRunning(), is(true)); - - CreateContainerResponse container2 = dockerClient.createContainerCmd("busybox").withName("container2") - .withCmd("env").withLinks(new Link("container1", "container1Link")).exec(); - LOG.info("Created container {}", container2.toString()); - assertThat(container2.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) - .exec(); - assertThat(inspectContainerResponse2.getHostConfig().getLinks(), equalTo(new Link[] {new Link("container1", - "container1Link")})); - } - - @Test - public void createContainerWithCapAddAndCapDrop() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCapAdd(NET_ADMIN) - .withCapDrop(MKNOD).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getCapAdd()), contains(NET_ADMIN)); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getCapDrop()), contains(MKNOD)); - } - - @Test - public void createContainerWithDns() throws DockerException { - - String aDnsServer = "8.8.8.8"; - String anotherDnsServer = "8.8.4.4"; - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") - .withDns(aDnsServer, anotherDnsServer).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDns()), - contains(aDnsServer, anotherDnsServer)); - } - - @Test - public void createContainerWithEntrypoint() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withName("container") - .withEntrypoint("sleep", "9999").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getConfig().getEntrypoint()), contains("sleep", "9999")); - - } - - @Test - public void createContainerWithExtraHosts() throws DockerException { - - String[] extraHosts = {"dockerhost:127.0.0.1", "otherhost:10.0.0.1"}; - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withName("container") - .withExtraHosts(extraHosts).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getExtraHosts()), - containsInAnyOrder("dockerhost:127.0.0.1", "otherhost:10.0.0.1")); - } - - @Test - public void createContainerWithDevices() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withDevices(new Device("rwm", "/dev/nulo", "/dev/zero")).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDevices()), contains(new Device("rwm", - "/dev/nulo", "/dev/zero"))); - } - - @Test - public void createContainerWithPortBindings() throws DockerException { - - ExposedPort tcp22 = ExposedPort.tcp(22); - ExposedPort tcp23 = ExposedPort.tcp(23); - - Ports portBindings = new Ports(); - portBindings.bind(tcp22, Ports.binding(11022)); - portBindings.bind(tcp23, Ports.binding(11023)); - portBindings.bind(tcp23, Ports.binding(11024)); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") - .withExposedPorts(tcp22, tcp23).withPortBindings(portBindings).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getConfig().getExposedPorts()), contains(tcp22, tcp23)); - - assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp22)[0], - is(equalTo(Ports.binding(11022)))); - - assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[0], - is(equalTo(Ports.binding(11023)))); - - assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[1], - is(equalTo(Ports.binding(11024)))); - - } - - @Test - public void createContainerWithLinking() throws DockerException { - - CreateContainerResponse container1 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName("container1").exec(); - - LOG.info("Created container1 {}", container1.toString()); - assertThat(container1.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container1.getId()).exec(); - - InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) - .exec(); - LOG.info("Container1 Inspect: {}", inspectContainerResponse1.toString()); - - assertThat(inspectContainerResponse1.getConfig(), is(notNullValue())); - assertThat(inspectContainerResponse1.getId(), not(isEmptyString())); - assertThat(inspectContainerResponse1.getId(), startsWith(container1.getId())); - assertThat(inspectContainerResponse1.getName(), equalTo("/container1")); - assertThat(inspectContainerResponse1.getImageId(), not(isEmptyString())); - assertThat(inspectContainerResponse1.getState(), is(notNullValue())); - assertThat(inspectContainerResponse1.getState().getRunning(), is(true)); - - if (!inspectContainerResponse1.getState().getRunning()) { - assertThat(inspectContainerResponse1.getState().getExitCode(), is(equalTo(0))); - } - - CreateContainerResponse container2 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName("container2").withLinks(new Link("container1", "container1Link")).exec(); - - LOG.info("Created container2 {}", container2.toString()); - assertThat(container2.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) - .exec(); - LOG.info("Container2 Inspect: {}", inspectContainerResponse2.toString()); - - assertThat(inspectContainerResponse2.getConfig(), is(notNullValue())); - assertThat(inspectContainerResponse2.getId(), not(isEmptyString())); - assertThat(inspectContainerResponse2.getHostConfig(), is(notNullValue())); - assertThat(inspectContainerResponse2.getHostConfig().getLinks(), is(notNullValue())); - assertThat(inspectContainerResponse2.getHostConfig().getLinks(), equalTo(new Link[] {new Link("container1", - "container1Link")})); - assertThat(inspectContainerResponse2.getId(), startsWith(container2.getId())); - assertThat(inspectContainerResponse2.getName(), equalTo("/container2")); - assertThat(inspectContainerResponse2.getImageId(), not(isEmptyString())); - - } - - @Test - public void createContainerWithRestartPolicy() throws DockerException { - - RestartPolicy restartPolicy = RestartPolicy.onFailureRestart(5); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withRestartPolicy(restartPolicy).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getHostConfig().getRestartPolicy(), is(equalTo(restartPolicy))); - } - - @Test - public void createContainerWithPidMode() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") - .withPidMode("host").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getHostConfig().getPidMode(), is(equalTo("host"))); - } - - /** - * This tests support for --net option for the docker run command: --net="bridge" Set the Network mode for the container 'bridge': - * creates a new network stack for the container on the docker bridge 'none': no networking for this container 'container:': reuses - * another container network stack 'host': use the host network stack inside the container. Note: the host mode gives the container full - * access to local system services such as D-bus and is therefore considered insecure. - */ - @Test - public void createContainerWithNetworkMode() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") - .withNetworkMode("host").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getHostConfig().getNetworkMode(), is(equalTo("host"))); - } - - @Test - public void createContainerWithMacAddress() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox") - .withMacAddress("00:80:41:ae:fd:7e").withCmd("true").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertEquals(inspectContainerResponse.getConfig().getMacAddress(), "00:80:41:ae:fd:7e"); - } - - @Test(groups = "ignoreInCircleCi") - public void createContainerWithULimits() throws DockerException { - - Ulimit[] ulimits = {new Ulimit("nproc", 709, 1026), new Ulimit("nofile", 1024, 4096)}; - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withName("container") - .withUlimits(ulimits).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getUlimits()), - containsInAnyOrder(new Ulimit("nproc", 709, 1026), new Ulimit("nofile", 1024, 4096))); - - } - - @Test(groups = "ignoreInCircleCi") - public void createContainerWithLabels() throws DockerException { - - Map labels = new HashMap(); - labels.put("com.github.dockerjava.null", null); - labels.put("com.github.dockerjava.Boolean", "true"); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withLabels(labels).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - // null becomes empty string - labels.put("com.github.dockerjava.null", ""); - assertThat(inspectContainerResponse.getConfig().getLabels(), is(equalTo(labels))); - } - - @Test(groups = "ignoreInCircleCi") - public void createContainerWithLogConfig() throws DockerException { - - LogConfig logConfig = new LogConfig(LogConfig.LoggingType.NONE, null); - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withLogConfig(logConfig).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - // null becomes empty string - assertEquals(inspectContainerResponse.getHostConfig().getLogConfig().type, logConfig.type); - } - - @Test(groups = "ignoreInCircleCi") - public void createContainerWithCgroupParent() throws DockerException { - CreateContainerResponse container = dockerClient.createContainerCmd("busybox") - .withCgroupParent("/parent").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainer = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainer.getHostConfig().getCgroupParent(), is("/parent")); - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExecTest.java deleted file mode 100644 index fa9962826..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExecTest.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import com.github.dockerjava.api.command.CreateNetworkResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.model.Network; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import java.lang.reflect.Method; - -@Test(groups = "integration") -public class CreateNetworkCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void createNetwork() throws DockerException { - - String networkName = "testNetwork"; - - CreateNetworkResponse createNetworkResponse = dockerClient.createNetworkCmd().withName(networkName).exec(); - - assertNotNull(createNetworkResponse.getId()); - - Network network = dockerClient.inspectNetworkCmd().withNetworkId(createNetworkResponse.getId()).exec(); - assertEquals(network.getName(), networkName); - assertEquals(network.getDriver(), "bridge"); - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/CreateVolumeCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/CreateVolumeCmdExecTest.java deleted file mode 100644 index 1e1a30b73..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/CreateVolumeCmdExecTest.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.equalTo; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateVolumeResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class CreateVolumeCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void createVolume() throws DockerException { - - CreateVolumeResponse createVolumeResponse = dockerClient.createVolumeCmd().withName("volume1") - .withDriver("local").exec(); - - assertThat(createVolumeResponse.getName(), equalTo("volume1")); - assertThat(createVolumeResponse.getDriver(), equalTo("local")); - assertThat(createVolumeResponse.getMountpoint(), containsString("/volume1/")); - } - - @Test - public void createVolumeWithExistingName() throws DockerException { - - String volumeName = "volume1"; - - CreateVolumeResponse createVolumeResponse1 = dockerClient.createVolumeCmd().withName(volumeName) - .withDriver("local").exec(); - - assertThat(createVolumeResponse1.getName(), equalTo(volumeName)); - assertThat(createVolumeResponse1.getDriver(), equalTo("local")); - assertThat(createVolumeResponse1.getMountpoint(), containsString("/volume1/")); - - CreateVolumeResponse createVolumeResponse2 = dockerClient.createVolumeCmd().withName(volumeName) - .withDriver("local").exec(); - - assertThat(createVolumeResponse2.getName(), equalTo(volumeName)); - assertThat(createVolumeResponse2.getDriver(), equalTo("local")); - assertThat(createVolumeResponse2.getMountpoint(), equalTo(createVolumeResponse1.getMountpoint())); - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/EventsCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/EventsCmdExecTest.java deleted file mode 100644 index a634e2562..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/EventsCmdExecTest.java +++ /dev/null @@ -1,161 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.model.Event; -import com.github.dockerjava.core.command.EventsResultCallback; -import com.github.dockerjava.core.command.PullImageResultCallback; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class EventsCmdExecTest extends AbstractNettyDockerClientTest { - - private static int KNOWN_NUM_EVENTS = 4; - - private static String getEpochTime() { - return String.valueOf(System.currentTimeMillis() / 1000); - } - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - /* - * This specific test may fail with boot2docker as time may not in sync with host system - */ - @Test - public void testEventStreamTimeBound() throws Exception { - // Don't include other tests events - TimeUnit.SECONDS.sleep(1); - - String startTime = getEpochTime(); - int expectedEvents = generateEvents(); - String endTime = getEpochTime(); - - CountDownLatch countDownLatch = new CountDownLatch(expectedEvents); - EventsTestCallback eventCallback = new EventsTestCallback(countDownLatch); - - dockerClient.eventsCmd().withSince(startTime).withUntil(endTime).exec(eventCallback); - - Boolean zeroCount = countDownLatch.await(10, TimeUnit.SECONDS); - - eventCallback.close(); - - assertTrue(zeroCount, "Received only: " + eventCallback.getEvents()); - } - - @Test - public void testEventStreaming1() throws Exception { - // Don't include other tests events - TimeUnit.SECONDS.sleep(1); - - CountDownLatch countDownLatch = new CountDownLatch(KNOWN_NUM_EVENTS); - EventsTestCallback eventCallback = new EventsTestCallback(countDownLatch); - - dockerClient.eventsCmd().withSince(getEpochTime()).exec(eventCallback); - - generateEvents(); - - Boolean zeroCount = countDownLatch.await(10, TimeUnit.SECONDS); - - eventCallback.close(); - assertTrue(zeroCount, "Received only: " + eventCallback.getEvents()); - } - - @Test - public void testEventStreaming2() throws Exception { - // Don't include other tests events - TimeUnit.SECONDS.sleep(1); - - CountDownLatch countDownLatch = new CountDownLatch(KNOWN_NUM_EVENTS); - EventsTestCallback eventCallback = new EventsTestCallback(countDownLatch); - - dockerClient.eventsCmd().withSince(getEpochTime()).exec(eventCallback); - - generateEvents(); - - Boolean zeroCount = countDownLatch.await(10, TimeUnit.SECONDS); - - eventCallback.close(); - assertTrue(zeroCount, "Received only: " + eventCallback.getEvents()); - } - - public void testEventStreamingWithFilter() throws Exception { - // Don't include other tests events - TimeUnit.SECONDS.sleep(1); - - CountDownLatch countDownLatch = new CountDownLatch(1); - EventsTestCallback eventCallback = dockerClient.eventsCmd().withEventFilter("start") - .exec(new EventsTestCallback(countDownLatch)); - - generateEvents(); - - Boolean zeroCount = countDownLatch.await(10, TimeUnit.SECONDS); - - eventCallback.close(); - assertTrue(zeroCount, "Received only: " + eventCallback.getEvents()); - } - - /** - * This method generates {#link KNOWN_NUM_EVENTS} events - */ - private int generateEvents() throws Exception { - String testImage = "busybox"; - - dockerClient.pullImageCmd(testImage).exec(new PullImageResultCallback()).awaitSuccess(); - - CreateContainerResponse container = dockerClient.createContainerCmd(testImage).withCmd("sleep", "9999").exec(); - dockerClient.startContainerCmd(container.getId()).exec(); - dockerClient.stopContainerCmd(container.getId()).exec(); - return KNOWN_NUM_EVENTS; - } - - private class EventsTestCallback extends EventsResultCallback { - - private final CountDownLatch countDownLatch; - - private final List events = new ArrayList(); - - public EventsTestCallback(CountDownLatch countDownLatch) { - this.countDownLatch = countDownLatch; - } - - public void onNext(Event event) { - LOG.info("Received event #{}: {}", countDownLatch.getCount(), event); - countDownLatch.countDown(); - events.add(event); - } - - public List getEvents() { - return new ArrayList(events); - } - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/ExecCreateCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ExecCreateCmdExecTest.java deleted file mode 100644 index d0ec28ac9..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/ExecCreateCmdExecTest.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; - -import java.lang.reflect.Method; -import java.security.SecureRandom; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.ExecCreateCmdResponse; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class ExecCreateCmdExecTest extends AbstractNettyDockerClientTest { - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(groups = "ignoreInCircleCi") - public void execCreateTest() { - String containerName = "generated_" + new SecureRandom().nextInt(); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("top") - .withName(containerName).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) - .withCmd("touch", "file.log").exec(); - - assertThat(execCreateCmdResponse.getId(), not(isEmptyString())); - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/ExecStartCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ExecStartCmdExecTest.java deleted file mode 100644 index 2938ac8c0..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/ExecStartCmdExecTest.java +++ /dev/null @@ -1,182 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.containsString; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.InputStream; -import java.lang.reflect.Method; -import java.security.SecureRandom; -import java.util.concurrent.TimeUnit; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.ExecCreateCmdResponse; -import com.github.dockerjava.core.command.ExecStartResultCallback; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class ExecStartCmdExecTest extends AbstractNettyDockerClientTest { - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(groups = "ignoreInCircleCi") - public void execStart() throws Exception { - String containerName = "generated_" + new SecureRandom().nextInt(); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("top") - .withName(containerName).exec(); - LOG.info("Created container {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) - .withAttachStdout(true).withCmd("touch", "/execStartTest.log").exec(); - dockerClient.execStartCmd(execCreateCmdResponse.getId()).withDetach(false) - .exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); - - InputStream response = dockerClient.copyArchiveFromContainerCmd(container.getId(), "/execStartTest.log").exec(); - - Boolean bytesAvailable = response.available() > 0; - assertTrue(bytesAvailable, "The file was not copied from the container."); - - // read the stream fully. Otherwise, the underlying stream will not be closed. - String responseAsString = asString(response); - assertNotNull(responseAsString); - assertTrue(responseAsString.length() > 0); - } - - @Test(groups = "ignoreInCircleCi") - public void execStartAttached() throws Exception { - String containerName = "generated_" + new SecureRandom().nextInt(); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName(containerName).exec(); - LOG.info("Created container {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) - .withAttachStdout(true).withCmd("touch", "/execStartTest.log").exec(); - dockerClient.execStartCmd(execCreateCmdResponse.getId()).withDetach(false) - .exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); - - InputStream response = dockerClient.copyArchiveFromContainerCmd(container.getId(), "/execStartTest.log").exec(); - Boolean bytesAvailable = response.available() > 0; - assertTrue(bytesAvailable, "The file was not copied from the container."); - - // read the stream fully. Otherwise, the underlying stream will not be closed. - String responseAsString = asString(response); - assertNotNull(responseAsString); - assertTrue(responseAsString.length() > 0); - } - - @Test(groups = "ignoreInCircleCi") - public void execStartAttachStdin() throws Exception { - String containerName = "generated_" + new SecureRandom().nextInt(); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName(containerName).exec(); - LOG.info("Created container {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InputStream stdin = new ByteArrayInputStream("STDIN\n".getBytes("UTF-8")); - - ByteArrayOutputStream stdout = new ByteArrayOutputStream(); - - ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) - .withAttachStdout(true).withAttachStdin(true).withCmd("cat").exec(); - boolean completed = dockerClient.execStartCmd(execCreateCmdResponse.getId()).withDetach(false).withTty(true).withStdIn(stdin) - .exec(new ExecStartResultCallback(stdout, System.err)).awaitCompletion(5, TimeUnit.SECONDS); - - assertTrue(completed, "The process was not finished."); - assertEquals(stdout.toString("UTF-8"), "STDIN\n"); - } - - public void execStartAttachStdinToShell() throws Exception { - String containerName = "generated_" + new SecureRandom().nextInt(); - - CreateContainerResponse container = dockerClient - .createContainerCmd("busybox") - .withCmd("sleep", "9999") - .withName(containerName) - .exec(); - - LOG.info("Created container {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InputStream stdin = new ByteArrayInputStream("ls\n".getBytes()); - - ByteArrayOutputStream stdout = new ByteArrayOutputStream(); - - ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) - .withAttachStdout(true) - .withAttachStdin(true) - .withTty(false) - .withCmd("/bin/sh").exec(); - - dockerClient.execStartCmd(execCreateCmdResponse.getId()) - .withDetach(false) - .withStdIn(stdin) - .exec(new ExecStartResultCallback(stdout, System.err)) - .awaitCompletion(); - - assertThat(stdout.toString(), containsString("etc\n")); - } - - @Test(groups = "ignoreInCircleCi") - public void execStartNotAttachedStdin() throws Exception { - String containerName = "generated_" + new SecureRandom().nextInt(); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName(containerName).exec(); - LOG.info("Created container {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InputStream stdin = new ByteArrayInputStream("echo STDIN\n".getBytes()); - - ByteArrayOutputStream stdout = new ByteArrayOutputStream(); - - ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) - .withAttachStdout(true).withAttachStdin(false).withCmd("/bin/sh").exec(); - boolean completed = dockerClient.execStartCmd(execCreateCmdResponse.getId()).withDetach(false).withStdIn(stdin) - .exec(new ExecStartResultCallback(stdout, System.err)).awaitCompletion(5, TimeUnit.SECONDS); - - assertTrue(completed, "The process was not finished."); - assertEquals(stdout.toString(), ""); - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/InfoCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InfoCmdExecTest.java deleted file mode 100644 index 850f98a74..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/InfoCmdExecTest.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.isEmptyOrNullString; -import static org.hamcrest.Matchers.not; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.model.Info; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class InfoCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void info() throws DockerException { - // Make sure that there is at least one container for the assertion - // TODO extract this into a shared method - if (dockerClient.listContainersCmd().withShowAll(true).exec().size() == 0) { - CreateContainerResponse container = dockerClient.createContainerCmd("busybox") - .withName("docker-java-itest-info").withCmd("touch", "/test").exec(); - - LOG.info("Created container: {}", container); - assertThat(container.getId(), not(isEmptyOrNullString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - } - - Info dockerInfo = dockerClient.infoCmd().exec(); - LOG.info(dockerInfo.toString()); - - assertTrue(dockerInfo.toString().contains("containers")); - assertTrue(dockerInfo.toString().contains("images")); - assertTrue(dockerInfo.toString().contains("debug")); - - assertTrue(dockerInfo.getContainers() > 0); - assertTrue(dockerInfo.getImages() > 0); - assertTrue(dockerInfo.getNFd() > 0); - assertTrue(dockerInfo.getNGoroutines() > 0); - assertTrue(dockerInfo.getNCPU() > 0); - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java deleted file mode 100644 index 87fe3b48b..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; - -import java.lang.reflect.Method; -import java.security.SecureRandom; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class InspectContainerCmdExecTest extends AbstractNettyDockerClientTest { - - public static final Logger LOG = LoggerFactory.getLogger(InspectContainerCmdExecTest.class); - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test() - public void inspectContainer() throws DockerException { - - String containerName = "generated_" + new SecureRandom().nextInt(); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("top") - .withName(containerName).exec(); - LOG.info("Created container {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse containerInfo = dockerClient.inspectContainerCmd(container.getId()).exec(); - assertEquals(containerInfo.getId(), container.getId()); - - } - - @Test(expectedExceptions = NotFoundException.class) - public void inspectNonExistingContainer() throws DockerException { - dockerClient.inspectContainerCmd("non-existing").exec(); - } - - @Test - public void inspectContainerRestartCount() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox") - .withCmd("env").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getRestartCount(), equalTo(0)); - } - - @Test - public void inspectContainerNetworkSettings() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox") - .withCmd("env").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertFalse(inspectContainerResponse.getNetworkSettings().getHairpinMode()); - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java deleted file mode 100644 index d0bb5ca1f..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java +++ /dev/null @@ -1,145 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static com.github.dockerjava.core.RemoteApiVersion.VERSION_1_22; -import static com.github.dockerjava.utils.TestUtils.getVersion; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.notNullValue; -import static org.hamcrest.Matchers.nullValue; - -import java.io.IOException; -import java.lang.reflect.Method; -import java.security.SecureRandom; - -import com.github.dockerjava.core.RemoteApiVersion; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.ExecCreateCmdResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.command.InspectExecResponse; -import com.github.dockerjava.core.command.ExecStartResultCallback; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; -import com.github.dockerjava.test.serdes.JSONTestHelper; - -@Test(groups = "integration") -public class InspectExecCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(groups = "ignoreInCircleCi") - public void inspectExec() throws Exception { - String containerName = "generated_" + new SecureRandom().nextInt(); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName(containerName).exec(); - LOG.info("Created container {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - // Check that file does not exist - ExecCreateCmdResponse checkFileExec1 = dockerClient.execCreateCmd(container.getId()).withAttachStdout(true) - .withAttachStderr(true).withCmd("test", "-e", "/marker").exec(); - LOG.info("Created exec {}", checkFileExec1.toString()); - assertThat(checkFileExec1.getId(), not(isEmptyString())); - dockerClient.execStartCmd(checkFileExec1.getId()).withDetach(false) - .exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); - InspectExecResponse first = dockerClient.inspectExecCmd(checkFileExec1.getId()).exec(); - assertThat(first.isRunning(), is(false)); - assertThat(first.getExitCode(), is(1)); - - // Create the file - ExecCreateCmdResponse touchFileExec = dockerClient.execCreateCmd(container.getId()).withAttachStdout(true) - .withAttachStderr(true).withCmd("touch", "/marker").exec(); - LOG.info("Created exec {}", touchFileExec.toString()); - assertThat(touchFileExec.getId(), not(isEmptyString())); - dockerClient.execStartCmd(touchFileExec.getId()).withDetach(false) - .exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); - InspectExecResponse second = dockerClient.inspectExecCmd(touchFileExec.getId()).exec(); - assertThat(second.isRunning(), is(false)); - assertThat(second.getExitCode(), is(0)); - - // Check that file does exist now - ExecCreateCmdResponse checkFileExec2 = dockerClient.execCreateCmd(container.getId()).withAttachStdout(true) - .withAttachStderr(true).withCmd("test", "-e", "/marker").exec(); - LOG.info("Created exec {}", checkFileExec2.toString()); - assertThat(checkFileExec2.getId(), not(isEmptyString())); - dockerClient.execStartCmd(checkFileExec2.getId()).withDetach(false) - .exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); - InspectExecResponse third = dockerClient.inspectExecCmd(checkFileExec2.getId()).exec(); - assertThat(third.isRunning(), is(false)); - assertThat(third.getExitCode(), is(0)); - - // Get container info and check its roundtrip to ensure the consistency - InspectContainerResponse containerInfo = dockerClient.inspectContainerCmd(container.getId()).exec(); - assertEquals(containerInfo.getId(), container.getId()); - JSONTestHelper.testRoundTrip(containerInfo); - } - - @Test(groups = "ignoreInCircleCi") - public void inspectExecNetworkSettings() throws IOException { - final RemoteApiVersion apiVersion = getVersion(dockerClient); - String containerName = "generated_" + new SecureRandom().nextInt(); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName(containerName).exec(); - LOG.info("Created container {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - ExecCreateCmdResponse exec = dockerClient.execCreateCmd(container.getId()).withAttachStdout(true) - .withAttachStderr(true).withCmd("/bin/bash").exec(); - LOG.info("Created exec {}", exec.toString()); - assertThat(exec.getId(), not(isEmptyString())); - - InspectExecResponse inspectExecResponse = dockerClient.inspectExecCmd(exec.getId()).exec(); - - if (apiVersion.isGreaterOrEqual(RemoteApiVersion.VERSION_1_22)) { - assertThat(inspectExecResponse.getExitCode(), is(nullValue())); - assertThat(inspectExecResponse.getCanRemove(), is(false)); - assertThat(inspectExecResponse.getContainerID(), is(container.getId())); - } else { - assertThat(inspectExecResponse.getExitCode(), is(0)); - assertNotNull(inspectExecResponse.getContainer().getNetworkSettings().getNetworks().get("bridge")); - } - - assertThat(inspectExecResponse.isOpenStdin(), is(false)); - assertThat(inspectExecResponse.isOpenStdout(), is(true)); - assertThat(inspectExecResponse.isRunning(), is(false)); - - final InspectExecResponse.Container inspectContainer = inspectExecResponse.getContainer(); - if (apiVersion.isGreaterOrEqual(VERSION_1_22)) { - assertThat(inspectContainer, nullValue()); - } else { - assertThat(inspectContainer, notNullValue()); - assertNotNull(inspectContainer.getNetworkSettings().getNetworks().get("bridge")); - } - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java deleted file mode 100644 index 7cbab660b..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.model.Network; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import java.lang.reflect.Method; -import java.util.List; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; - -@Test(groups = "integration") -public class InspectNetworkCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void inspectNetwork() throws DockerException { - - List networks = dockerClient.listNetworksCmd().exec(); - - Network expected = findNetwork(networks, "bridge"); - - Network network = dockerClient.inspectNetworkCmd().withNetworkId(expected.getId()).exec(); - - assertThat(network.getName(), equalTo(expected.getName())); - assertThat(network.getScope(), equalTo(expected.getScope())); - assertThat(network.getDriver(), equalTo(expected.getDriver())); - assertThat(network.getIpam().getConfig().get(0).getSubnet(), equalTo(expected.getIpam().getConfig().get(0).getSubnet())); - assertThat(network.getIpam().getDriver(), equalTo(expected.getIpam().getDriver())); - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/InspectVolumeCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InspectVolumeCmdExecTest.java deleted file mode 100644 index 191767f87..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/InspectVolumeCmdExecTest.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.equalTo; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.InspectVolumeResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class InspectVolumeCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void inspectVolume() throws DockerException { - - String volumeName = "volume1"; - - dockerClient.createVolumeCmd().withName(volumeName).withDriver("local").exec(); - - InspectVolumeResponse inspectVolumeResponse = dockerClient.inspectVolumeCmd(volumeName).exec(); - - assertThat(inspectVolumeResponse.getName(), equalTo("volume1")); - assertThat(inspectVolumeResponse.getDriver(), equalTo("local")); - assertThat(inspectVolumeResponse.getMountpoint(), containsString("/volume1/")); - } - - @Test(expectedExceptions = NotFoundException.class) - public void inspectNonExistentVolume() throws DockerException { - - String volumeName = "non-existing"; - - dockerClient.inspectVolumeCmd(volumeName).exec(); - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/KillContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/KillContainerCmdExecTest.java deleted file mode 100644 index 867373e63..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/KillContainerCmdExecTest.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; - -import java.lang.reflect.Method; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class KillContainerCmdExecTest extends AbstractNettyDockerClientTest { - - public static final Logger LOG = LoggerFactory.getLogger(KillContainerCmdExecTest.class); - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(groups = "ignoreInCircleCi") - public void killContainer() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - dockerClient.startContainerCmd(container.getId()).exec(); - - LOG.info("Killing container: {}", container.getId()); - dockerClient.killContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); - - assertThat(inspectContainerResponse.getState().getRunning(), is(equalTo(false))); - assertThat(inspectContainerResponse.getState().getExitCode(), not(equalTo(0))); - - } - - @Test - public void killNonExistingContainer() throws DockerException { - - try { - dockerClient.killContainerCmd("non-existing").exec(); - fail("expected NotFoundException"); - } catch (NotFoundException e) { - } - } - -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/ListContainersCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ListContainersCmdExecTest.java deleted file mode 100644 index 40464c6f7..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/ListContainersCmdExecTest.java +++ /dev/null @@ -1,172 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static ch.lambdaj.Lambda.filter; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.hasItem; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.notNullValue; -import static org.hamcrest.Matchers.startsWith; -import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; - -import java.lang.reflect.Method; -import java.util.List; -import java.util.Map; - -import org.hamcrest.Matcher; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.model.Container; -import com.github.dockerjava.core.command.PullImageResultCallback; -import com.github.dockerjava.core.util.FiltersBuilder; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; -import com.google.common.collect.ImmutableMap; - -@Test(groups = "integration") -public class ListContainersCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void testListContainers() throws Exception { - - String testImage = "busybox"; - - // // need to block until image is pulled completely - // dockerClient.pullImageCmd(testImage).exec(new PullImageResultCallback()).awaitSuccess(); - - List containers = dockerClient.listContainersCmd().withShowAll(true).exec(); - assertThat(containers, notNullValue()); - LOG.info("Container List: {}", containers); - - int size = containers.size(); - - CreateContainerResponse container1 = dockerClient.createContainerCmd(testImage).withCmd("echo").exec(); - - assertThat(container1.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container1.getId()).exec(); - - assertThat(inspectContainerResponse.getConfig().getImage(), is(equalTo(testImage))); - - dockerClient.startContainerCmd(container1.getId()).exec(); - - LOG.info("container id: " + container1.getId()); - - List containers2 = dockerClient.listContainersCmd().withShowAll(true).exec(); - - for (Container container : containers2) { - LOG.info("listContainer: id=" + container.getId() + " image=" + container.getImage()); - } - - assertThat(size + 1, is(equalTo(containers2.size()))); - Matcher matcher = hasItem(hasField("id", startsWith(container1.getId()))); - assertThat(containers2, matcher); - - List filteredContainers = filter(hasField("id", startsWith(container1.getId())), containers2); - assertThat(filteredContainers.size(), is(equalTo(1))); - - for (Container container : filteredContainers) { - LOG.info("filteredContainer: " + container); - } - - Container container2 = filteredContainers.get(0); - assertThat(container2.getCommand(), not(isEmptyString())); - assertThat(container2.getImage(), startsWith(testImage)); - } - - @Test - public void testListContainersWithLabelsFilter() throws Exception { - - String testImage = "busybox"; - - // need to block until image is pulled completely - dockerClient.pullImageCmd(testImage).exec(new PullImageResultCallback()).awaitCompletion(); - - List containers = dockerClient.listContainersCmd().withShowAll(true).exec(); - assertThat(containers, notNullValue()); - LOG.info("Container List: {}", containers); - - int size = containers.size(); - - CreateContainerResponse container1 = dockerClient.createContainerCmd(testImage).withCmd("echo").exec(); - - assertThat(container1.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container1.getId()).exec(); - - assertThat(inspectContainerResponse.getConfig().getImage(), is(equalTo(testImage))); - - dockerClient.startContainerCmd(container1.getId()).exec(); - - LOG.info("container id: " + container1.getId()); - - List containers2 = dockerClient.listContainersCmd().withShowAll(true).exec(); - - for (Container container : containers2) { - LOG.info("listContainer: id=" + container.getId() + " image=" + container.getImage()); - } - - assertThat(size + 1, is(equalTo(containers2.size()))); - Matcher matcher = hasItem(hasField("id", startsWith(container1.getId()))); - assertThat(containers2, matcher); - - List filteredContainers = filter(hasField("id", startsWith(container1.getId())), containers2); - assertThat(filteredContainers.size(), is(equalTo(1))); - - for (Container container : filteredContainers) { - LOG.info("filteredContainer: " + container); - } - - Container container2 = filteredContainers.get(0); - assertThat(container2.getCommand(), not(isEmptyString())); - assertThat(container2.getImage(), startsWith(testImage)); - - Map labels = ImmutableMap.of("test", "docker-java"); - - // list with filter by label - dockerClient.createContainerCmd(testImage).withCmd("echo").withLabels(labels).exec(); - filteredContainers = dockerClient.listContainersCmd().withShowAll(true) - .withLabelFilter(labels).exec(); - assertThat(filteredContainers.size(), is(equalTo(1))); - Container container3 = filteredContainers.get(0); - assertThat(container3.getCommand(), not(isEmptyString())); - assertThat(container3.getImage(), startsWith(testImage)); - - filteredContainers = dockerClient.listContainersCmd().withShowAll(true) - .withLabelFilter("test").exec(); - assertThat(filteredContainers.size(), is(equalTo(1))); - container3 = filteredContainers.get(0); - assertThat(container3.getCommand(), not(isEmptyString())); - assertThat(container3.getImage(), startsWith(testImage)); - assertEquals(container3.getLabels(), labels); - } - -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/ListImagesCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ListImagesCmdExecTest.java deleted file mode 100644 index c83fa7ef9..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/ListImagesCmdExecTest.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.emptyArray; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.greaterThan; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.notNullValue; - -import java.lang.reflect.Method; -import java.util.List; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.model.Image; -import com.github.dockerjava.api.model.Info; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class ListImagesCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void listImages() throws DockerException { - List images = dockerClient.listImagesCmd().withShowAll(true).exec(); - assertThat(images, notNullValue()); - LOG.info("Images List: {}", images); - Info info = dockerClient.infoCmd().exec(); - - assertThat(images.size(), equalTo(info.getImages())); - - Image img = images.get(0); - assertThat(img.getCreated(), is(greaterThan(0L))); - assertThat(img.getVirtualSize(), is(greaterThan(0L))); - assertThat(img.getId(), not(isEmptyString())); - assertThat(img.getRepoTags(), not(emptyArray())); - } - - @Test(groups = "ignoreInCircleCi") - public void listImagesWithDanglingFilter() throws DockerException { - String imageId = createDanglingImage(); - List images = dockerClient.listImagesCmd().withDanglingFilter(true).withShowAll(true).exec(); - assertThat(images, notNullValue()); - LOG.info("Images List: {}", images); - assertThat(images.size(), is(greaterThan(0))); - Boolean imageInFilteredList = isImageInFilteredList(images, imageId); - assertTrue(imageInFilteredList); - } - - private boolean isImageInFilteredList(List images, String expectedImageId) { - for (Image image : images) { - if (expectedImageId.equals(image.getId())) { - return true; - } - } - return false; - } - - private String createDanglingImage() { - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - dockerClient.startContainerCmd(container.getId()).exec(); - - LOG.info("Committing container {}", container.toString()); - String imageId = dockerClient.commitCmd(container.getId()).exec(); - - dockerClient.stopContainerCmd(container.getId()).exec(); - dockerClient.removeContainerCmd(container.getId()).exec(); - return imageId; - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/ListNetworksCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ListNetworksCmdExecTest.java deleted file mode 100644 index 8a5d975f0..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/ListNetworksCmdExecTest.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; - -import java.lang.reflect.Method; -import java.util.List; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.model.Network; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class ListNetworksCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void listNetworks() throws DockerException { - - List networks = dockerClient.listNetworksCmd().exec(); - - Network network = findNetwork(networks, "bridge"); - - assertThat(network.getName(), equalTo("bridge")); - assertThat(network.getScope(), equalTo("local")); - assertThat(network.getDriver(), equalTo("bridge")); - assertThat(network.getIpam().getDriver(), equalTo("default")); - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/ListVolumesCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ListVolumesCmdExecTest.java deleted file mode 100644 index bca5ebece..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/ListVolumesCmdExecTest.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.greaterThanOrEqualTo; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateVolumeResponse; -import com.github.dockerjava.api.command.ListVolumesResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class ListVolumesCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void listVolumes() throws DockerException { - - CreateVolumeResponse createVolumeResponse = dockerClient.createVolumeCmd().withName("volume1") - .withDriver("local").exec(); - - assertThat(createVolumeResponse.getName(), equalTo("volume1")); - assertThat(createVolumeResponse.getDriver(), equalTo("local")); - assertThat(createVolumeResponse.getMountpoint(), containsString("/volume1/")); - - ListVolumesResponse listVolumesResponse = dockerClient.listVolumesCmd().exec(); - - assertThat(listVolumesResponse.getVolumes().size(), greaterThanOrEqualTo(1)); - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/LogContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/LogContainerCmdExecTest.java deleted file mode 100644 index 310994755..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/LogContainerCmdExecTest.java +++ /dev/null @@ -1,172 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.containsString; - -import java.io.IOException; -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.core.command.WaitContainerResultCallback; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class LogContainerCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void asyncLogContainer() throws Exception { - - String snippet = "hello world"; - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("/bin/echo", snippet) - .exec(); - - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()) - .awaitStatusCode(); - - assertThat(exitCode, equalTo(0)); - - LogContainerTestCallback loggingCallback = new LogContainerTestCallback(); - - // this essentially test the since=0 case - dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback); - - loggingCallback.awaitCompletion(); - - assertTrue(loggingCallback.toString().contains(snippet)); - } - - @Test - public void asyncLogNonExistingContainer() throws Exception { - - LogContainerTestCallback loggingCallback = new LogContainerTestCallback() { - @Override - public void onError(Throwable throwable) { - - assertEquals(throwable.getClass().getName(), NotFoundException.class.getName()); - - try { - // close the callback to prevent the call to onComplete - close(); - } catch (IOException e) { - throw new RuntimeException(); - } - - super.onError(throwable); - } - - public void onComplete() { - super.onComplete(); - fail("expected NotFoundException"); - }; - }; - - dockerClient.logContainerCmd("non-existing").withStdErr(true).withStdOut(true).exec(loggingCallback) - .awaitCompletion(); - } - - @Test - public void asyncMultipleLogContainer() throws Exception { - - String snippet = "hello world"; - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("/bin/echo", snippet) - .exec(); - - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()) - .awaitStatusCode(); - - assertThat(exitCode, equalTo(0)); - - LogContainerTestCallback loggingCallback = new LogContainerTestCallback(); - - dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback); - - loggingCallback.close(); - - loggingCallback = new LogContainerTestCallback(); - - dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback); - - loggingCallback.close(); - - loggingCallback = new LogContainerTestCallback(); - - dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback); - - loggingCallback.awaitCompletion(); - - assertTrue(loggingCallback.toString().contains(snippet)); - } - - @Test - public void asyncLogContainerWithSince() throws Exception { - String snippet = "hello world"; - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("/bin/echo", snippet) - .exec(); - - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - int timestamp = (int) (System.currentTimeMillis() / 1000); - - dockerClient.startContainerCmd(container.getId()).exec(); - - int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()) - .awaitStatusCode(); - - assertThat(exitCode, equalTo(0)); - - LogContainerTestCallback loggingCallback = new LogContainerTestCallback(); - - dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).withSince(timestamp) - .exec(loggingCallback); - - loggingCallback.awaitCompletion(); - - assertThat(loggingCallback.toString(), containsString(snippet)); - } - -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/PingCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/PingCmdExecTest.java deleted file mode 100644 index 128c1969a..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/PingCmdExecTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class PingCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void ping() throws DockerException { - dockerClient.pingCmd().exec(); - } - -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/PullImageCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/PullImageCmdExecTest.java deleted file mode 100644 index 53fa8d660..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/PullImageCmdExecTest.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.lessThanOrEqualTo; -import static org.hamcrest.Matchers.notNullValue; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.async.ResultCallback; -import com.github.dockerjava.api.command.InspectImageResponse; -import com.github.dockerjava.api.command.PullImageCmd; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.model.Info; -import com.github.dockerjava.api.model.PullResponseItem; -import com.github.dockerjava.core.command.PullImageCmdImpl; -import com.github.dockerjava.core.command.PullImageResultCallback; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class PullImageCmdExecTest extends AbstractNettyDockerClientTest { - - private static final PullImageCmd.Exec NOP_EXEC = new PullImageCmd.Exec() { - public Void exec(PullImageCmd command, ResultCallback resultCallback) { - return null; - }; - }; - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void nullAuthConfig() throws Exception { - PullImageCmdImpl pullImageCmd = new PullImageCmdImpl(NOP_EXEC, null, ""); - try { - pullImageCmd.withAuthConfig(null); - fail(); - } catch (Exception e) { - assertEquals(e.getMessage(), "authConfig was not specified"); - } finally { - pullImageCmd.close(); - } - } - - @Test - public void testPullImage() throws Exception { - Info info = dockerClient.infoCmd().exec(); - LOG.info("Client info: {}", info.toString()); - - int imgCount = info.getImages(); - LOG.info("imgCount1: {}", imgCount); - - // This should be an image that is not used by other repositories - // already - // pulled down, preferably small in size. If tag is not used pull will - // download all images in that repository but tmpImgs will only - // deleted 'latest' image but not images with other tags - String testImage = "hackmann/empty"; - - LOG.info("Removing image: {}", testImage); - - try { - dockerClient.removeImageCmd(testImage).withForce(true).exec(); - } catch (NotFoundException e) { - // just ignore if not exist - } - - info = dockerClient.infoCmd().exec(); - LOG.info("Client info: {}", info.toString()); - - imgCount = info.getImages(); - LOG.info("imgCount2: {}", imgCount); - - LOG.info("Pulling image: {}", testImage); - - dockerClient.pullImageCmd(testImage).exec(new PullImageResultCallback()).awaitSuccess(); - - info = dockerClient.infoCmd().exec(); - LOG.info("Client info after pull, {}", info.toString()); - - assertThat(imgCount, lessThanOrEqualTo(info.getImages())); - - InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(testImage).exec(); - LOG.info("Image Inspect: {}", inspectImageResponse.toString()); - assertThat(inspectImageResponse, notNullValue()); - } - - @Test - public void testPullNonExistingImage() throws Exception { - - // does not throw an exception - // stream needs to be fully read in order to close the underlying connection - dockerClient.pullImageCmd("xvxcv/foo").exec(new PullImageResultCallback()).awaitCompletion(); - } - -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/PushImageCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/PushImageCmdExecTest.java deleted file mode 100644 index 777cc8eed..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/PushImageCmdExecTest.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; - -import java.lang.reflect.Method; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.exception.DockerClientException; -import com.github.dockerjava.core.command.PullImageResultCallback; -import com.github.dockerjava.core.command.PushImageResultCallback; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class PushImageCmdExecTest extends AbstractNettyDockerClientTest { - - public static final Logger LOG = LoggerFactory.getLogger(PushImageCmdExecTest.class); - - String username; - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - username = dockerClient.authConfig().getUsername(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void pushLatest() throws Exception { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - LOG.info("Committing container: {}", container.toString()); - String imageId = dockerClient.commitCmd(container.getId()).withRepository(username + "/busybox").exec(); - - // we have to block until image is pushed - dockerClient.pushImageCmd(username + "/busybox").exec(new PushImageResultCallback()).awaitSuccess(); - - LOG.info("Removing image: {}", imageId); - dockerClient.removeImageCmd(imageId).exec(); - - dockerClient.pullImageCmd(username + "/busybox").exec(new PullImageResultCallback()).awaitSuccess(); - } - - @Test(expectedExceptions = DockerClientException.class) - public void pushNonExistentImage() throws Exception { - - dockerClient.pushImageCmd(username + "/xxx").exec(new PushImageResultCallback()).awaitSuccess(); - } - -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/RemoveContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/RemoveContainerCmdExecTest.java deleted file mode 100644 index ffe456c09..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/RemoveContainerCmdExecTest.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.hasItem; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.startsWith; -import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; - -import java.lang.reflect.Method; -import java.util.List; - -import org.hamcrest.Matcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.model.Container; -import com.github.dockerjava.core.command.WaitContainerResultCallback; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class RemoveContainerCmdExecTest extends AbstractNettyDockerClientTest { - - public static final Logger LOG = LoggerFactory.getLogger(RemoveContainerCmdExecTest.class); - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(groups = "ignoreInCircleCi") - public void removeContainer() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true").exec(); - - dockerClient.startContainerCmd(container.getId()).exec(); - dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()).awaitStatusCode(); - - LOG.info("Removing container: {}", container.getId()); - dockerClient.removeContainerCmd(container.getId()).exec(); - - List containers2 = dockerClient.listContainersCmd().withShowAll(true).exec(); - - Matcher matcher = not(hasItem(hasField("id", startsWith(container.getId())))); - assertThat(containers2, matcher); - - } - - @Test - public void removeNonExistingContainer() throws DockerException { - try { - dockerClient.removeContainerCmd("non-existing").exec(); - fail("expected NotFoundException"); - } catch (NotFoundException e) { - } - } - -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/RemoveImageCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/RemoveImageCmdExecTest.java deleted file mode 100644 index e2f69ac1e..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/RemoveImageCmdExecTest.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.hasItem; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.startsWith; -import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; - -import java.lang.reflect.Method; -import java.util.List; - -import org.hamcrest.Matcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.model.Container; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class RemoveImageCmdExecTest extends AbstractNettyDockerClientTest { - - public static final Logger LOG = LoggerFactory.getLogger(RemoveImageCmdExecTest.class); - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(groups = "ignoreInCircleCi") - public void removeImage() throws DockerException, InterruptedException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - dockerClient.startContainerCmd(container.getId()).exec(); - - LOG.info("Committing container {}", container.toString()); - String imageId = dockerClient.commitCmd(container.getId()).exec(); - - dockerClient.stopContainerCmd(container.getId()).exec(); - dockerClient.removeContainerCmd(container.getId()).exec(); - - LOG.info("Removing image: {}", imageId); - dockerClient.removeImageCmd(imageId).exec(); - - List containers = dockerClient.listContainersCmd().withShowAll(true).exec(); - - Matcher matcher = not(hasItem(hasField("id", startsWith(imageId)))); - assertThat(containers, matcher); - } - - @Test - public void removeNonExistingImage() throws DockerException, InterruptedException { - try { - dockerClient.removeImageCmd("non-existing").exec(); - fail("expected NotFoundException"); - } catch (NotFoundException e) { - } - - } - -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExecTest.java deleted file mode 100644 index 9fda49f21..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExecTest.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import com.github.dockerjava.api.command.CreateNetworkResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.model.Network; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; -import org.hamcrest.Matcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import java.lang.reflect.Method; -import java.util.List; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.hasItem; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.startsWith; -import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; - -@Test(groups = "integration") -public class RemoveNetworkCmdExecTest extends AbstractNettyDockerClientTest { - - public static final Logger LOG = LoggerFactory.getLogger(RemoveNetworkCmdExecTest.class); - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(groups = "ignoreInCircleCi") - public void removeNetwork() throws DockerException { - - CreateNetworkResponse network = dockerClient.createNetworkCmd().withName("test-network").exec(); - - LOG.info("Removing network: {}", network.getId()); - dockerClient.removeNetworkCmd(network.getId()).exec(); - - List networks = dockerClient.listNetworksCmd().exec(); - - Matcher matcher = not(hasItem(hasField("id", startsWith(network.getId())))); - assertThat(networks, matcher); - - } - - @Test - public void removeNonExistingContainer() throws DockerException { - try { - dockerClient.removeNetworkCmd("non-existing").exec(); - fail("expected NotFoundException"); - } catch (NotFoundException e) { - } - } - -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/RemoveVolumeCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/RemoveVolumeCmdExecTest.java deleted file mode 100644 index 59aafde67..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/RemoveVolumeCmdExecTest.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.equalTo; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateVolumeResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class RemoveVolumeCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void removeVolume() throws DockerException { - - String volumeName = "volume1"; - - CreateVolumeResponse createVolumeResponse = dockerClient.createVolumeCmd().withName(volumeName) - .withDriver("local").exec(); - - assertThat(createVolumeResponse.getName(), equalTo(volumeName)); - assertThat(createVolumeResponse.getDriver(), equalTo("local")); - assertThat(createVolumeResponse.getMountpoint(), containsString("/volume1/")); - - dockerClient.removeVolumeCmd(volumeName).exec(); - - try { - dockerClient.inspectVolumeCmd(volumeName).exec(); - fail("Expected NotFoundException"); - } catch (NotFoundException e) { - // just ignore - } - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/RenameContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/RenameContainerCmdExecTest.java deleted file mode 100644 index c176bc1d6..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/RenameContainerCmdExecTest.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; -import org.testng.ITestResult; -import org.testng.annotations.*; - -import java.lang.reflect.Method; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.*; - -@Test(groups = "integration") -public class RenameContainerCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void renameContainer() throws DockerException { - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); - - String name1 = inspectContainerResponse.getName(); - - dockerClient.renameContainerCmd(container.getId()) - .withName(getClass().getCanonicalName() + "renameContainer") - .exec(); - - InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container.getId()).exec(); - LOG.info("Container Inspect After Rename: {}", inspectContainerResponse2.toString()); - - String name2 = inspectContainerResponse2.getName(); - - assertNotEquals(name1, name2); - - dockerClient.killContainerCmd(container.getId()).exec(); - } - - @Test(expectedExceptions = NotFoundException.class) - public void renameNonExistingContainer() throws DockerException, InterruptedException { - dockerClient.renameContainerCmd("non-existing") - .withName(getClass().getCanonicalName() + "renameExistingContainer") - .exec(); - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/RestartContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/RestartContainerCmdExecTest.java deleted file mode 100644 index 3360057a8..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/RestartContainerCmdExecTest.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class RestartContainerCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void restartContainer() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); - - String startTime = inspectContainerResponse.getState().getStartedAt(); - - dockerClient.restartContainerCmd(container.getId()).withtTimeout(2).exec(); - - InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container.getId()).exec(); - LOG.info("Container Inspect After Restart: {}", inspectContainerResponse2.toString()); - - String startTime2 = inspectContainerResponse2.getState().getStartedAt(); - - assertThat(startTime, not(equalTo(startTime2))); - - assertThat(inspectContainerResponse.getState().getRunning(), is(equalTo(true))); - - dockerClient.killContainerCmd(container.getId()).exec(); - } - - @Test - public void restartNonExistingContainer() throws DockerException, InterruptedException { - try { - dockerClient.restartContainerCmd("non-existing").exec(); - fail("expected NotFoundException"); - } catch (NotFoundException e) { - } - - } - -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/SearchImagesCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/SearchImagesCmdExecTest.java deleted file mode 100644 index 70e102335..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/SearchImagesCmdExecTest.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static ch.lambdaj.Lambda.filter; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.hasItem; -import static org.hamcrest.Matchers.is; -import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; - -import java.lang.reflect.Method; -import java.util.List; - -import org.hamcrest.Matcher; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.model.SearchItem; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class SearchImagesCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void searchImages() throws DockerException { - List dockerSearch = dockerClient.searchImagesCmd("busybox").exec(); - LOG.info("Search returned {}", dockerSearch.toString()); - - Matcher matcher = hasItem(hasField("name", equalTo("busybox"))); - assertThat(dockerSearch, matcher); - - assertThat(filter(hasField("name", is("busybox")), dockerSearch).size(), equalTo(1)); - } - -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/StartContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/StartContainerCmdExecTest.java deleted file mode 100644 index 6c70c1f07..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/StartContainerCmdExecTest.java +++ /dev/null @@ -1,562 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static com.github.dockerjava.api.model.AccessMode.ro; -import static com.github.dockerjava.api.model.Capability.MKNOD; -import static com.github.dockerjava.api.model.Capability.NET_ADMIN; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.contains; -import static org.hamcrest.Matchers.containsInAnyOrder; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.hasSize; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.notNullValue; -import static org.hamcrest.Matchers.startsWith; - -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.List; -import java.util.UUID; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.command.StartContainerCmd; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.InternalServerErrorException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.model.Bind; -import com.github.dockerjava.api.model.Device; -import com.github.dockerjava.api.model.ExposedPort; -import com.github.dockerjava.api.model.Link; -import com.github.dockerjava.api.model.Ports; -import com.github.dockerjava.api.model.RestartPolicy; -import com.github.dockerjava.api.model.Volume; -import com.github.dockerjava.api.model.VolumesFrom; -import com.github.dockerjava.core.command.WaitContainerResultCallback; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class StartContainerCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void startContainerWithVolumes() throws DockerException { - - // see http://docs.docker.io/use/working_with_volumes/ - Volume volume1 = new Volume("/opt/webapp1"); - - Volume volume2 = new Volume("/opt/webapp2"); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox") - .withVolumes(volume1, volume2) - .withCmd("true") - .withBinds(new Bind("/src/webapp1", volume1, ro), new Bind("/src/webapp2", volume2)) - .exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getConfig().getVolumes().keySet(), contains("/opt/webapp1", "/opt/webapp2")); - - dockerClient.startContainerCmd(container.getId()).exec(); - - dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()).awaitStatusCode(); - - inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse, mountedVolumes(containsInAnyOrder(volume1, volume2))); - - final List mounts = inspectContainerResponse.getMounts(); - - assertThat(mounts, hasSize(2)); - - final InspectContainerResponse.Mount mount1 = new InspectContainerResponse.Mount() - .withRw(false).withMode("ro").withDestination(volume1).withSource("/src/webapp1"); - final InspectContainerResponse.Mount mount2 = new InspectContainerResponse.Mount() - .withRw(true).withMode("rw").withDestination(volume2).withSource("/src/webapp2"); - - assertThat(mounts, containsInAnyOrder(mount1, mount2)); - } - - @Test - public void startContainerWithVolumesFrom() throws DockerException { - - Volume volume1 = new Volume("/opt/webapp1"); - Volume volume2 = new Volume("/opt/webapp2"); - - String container1Name = UUID.randomUUID().toString(); - - CreateContainerResponse container1 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName(container1Name) - .withBinds(new Bind("/src/webapp1", volume1), new Bind("/src/webapp2", volume2)).exec(); - LOG.info("Created container1 {}", container1.toString()); - - dockerClient.startContainerCmd(container1.getId()).exec(); - LOG.info("Started container1 {}", container1.toString()); - - InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) - .exec(); - - assertThat(inspectContainerResponse1, mountedVolumes(containsInAnyOrder(volume1, volume2))); - - CreateContainerResponse container2 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withVolumesFrom(new VolumesFrom(container1Name)).exec(); - LOG.info("Created container2 {}", container2.toString()); - - dockerClient.startContainerCmd(container2.getId()).exec(); - LOG.info("Started container2 {}", container2.toString()); - - InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) - .exec(); - - assertThat(inspectContainerResponse2, mountedVolumes(containsInAnyOrder(volume1, volume2))); - } - - @Test - public void startContainerWithDns() throws DockerException { - - String aDnsServer = "8.8.8.8"; - String anotherDnsServer = "8.8.4.4"; - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") - .withDns(aDnsServer, anotherDnsServer).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDns()), - contains(aDnsServer, anotherDnsServer)); - } - - @Test - public void startContainerWithDnsSearch() throws DockerException { - - String dnsSearch = "example.com"; - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") - .withDnsSearch(dnsSearch).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - dockerClient.startContainerCmd(container.getId()).exec(); - - inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDnsSearch()), contains(dnsSearch)); - } - - @Test - public void startContainerWithPortBindings() throws DockerException { - - ExposedPort tcp22 = ExposedPort.tcp(22); - ExposedPort tcp23 = ExposedPort.tcp(23); - - Ports portBindings = new Ports(); - portBindings.bind(tcp22, Ports.binding(11022)); - portBindings.bind(tcp23, Ports.binding(11023)); - portBindings.bind(tcp23, Ports.binding(11024)); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") - .withExposedPorts(tcp22, tcp23).withPortBindings(portBindings).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - dockerClient.startContainerCmd(container.getId()).exec(); - - inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getConfig().getExposedPorts()), contains(tcp22, tcp23)); - - assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp22)[0], - is(equalTo(Ports.binding(11022)))); - - assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[0], - is(equalTo(Ports.binding(11023)))); - - assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[1], - is(equalTo(Ports.binding(11024)))); - - } - - @Test - public void startContainerWithRandomPortBindings() throws DockerException { - - ExposedPort tcp22 = ExposedPort.tcp(22); - ExposedPort tcp23 = ExposedPort.tcp(23); - - Ports portBindings = new Ports(); - portBindings.bind(tcp22, Ports.binding(null)); - portBindings.bind(tcp23, Ports.binding(null)); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withExposedPorts(tcp22, tcp23).withPortBindings(portBindings).withPublishAllPorts(true).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(Arrays.asList(inspectContainerResponse.getConfig().getExposedPorts()), contains(tcp22, tcp23)); - - assertThat(inspectContainerResponse.getNetworkSettings().getPorts().getBindings().get(tcp22)[0].getHostPort(), - is(not(equalTo(tcp22.getPort())))); - - assertThat(inspectContainerResponse.getNetworkSettings().getPorts().getBindings().get(tcp23)[0].getHostPort(), - is(not(equalTo(tcp23.getPort())))); - - } - - @Test - public void startContainerWithConflictingPortBindings() throws DockerException { - - ExposedPort tcp22 = ExposedPort.tcp(22); - ExposedPort tcp23 = ExposedPort.tcp(23); - - Ports portBindings = new Ports(); - portBindings.bind(tcp22, Ports.binding(11022)); - portBindings.bind(tcp23, Ports.binding(11022)); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") - .withExposedPorts(tcp22, tcp23).withPortBindings(portBindings).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - try { - dockerClient.startContainerCmd(container.getId()).exec(); - fail("expected InternalServerErrorException"); - } catch (InternalServerErrorException e) { - - } - - } - - @Test - public void startContainerWithLinkingDeprecated() throws DockerException { - - CreateContainerResponse container1 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName("container1").exec(); - - LOG.info("Created container1 {}", container1.toString()); - assertThat(container1.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container1.getId()).exec(); - - InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) - .exec(); - LOG.info("Container1 Inspect: {}", inspectContainerResponse1.toString()); - - assertThat(inspectContainerResponse1.getConfig(), is(notNullValue())); - assertThat(inspectContainerResponse1.getId(), not(isEmptyString())); - assertThat(inspectContainerResponse1.getId(), startsWith(container1.getId())); - assertThat(inspectContainerResponse1.getName(), equalTo("/container1")); - assertThat(inspectContainerResponse1.getImageId(), not(isEmptyString())); - assertThat(inspectContainerResponse1.getState(), is(notNullValue())); - assertThat(inspectContainerResponse1.getState().getRunning(), is(true)); - - if (!inspectContainerResponse1.getState().getRunning()) { - assertThat(inspectContainerResponse1.getState().getExitCode(), is(equalTo(0))); - } - - CreateContainerResponse container2 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName("container2").withLinks(new Link("container1", "container1Link")).exec(); - - LOG.info("Created container2 {}", container2.toString()); - assertThat(container2.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container2.getId()).exec(); - - InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) - .exec(); - LOG.info("Container2 Inspect: {}", inspectContainerResponse2.toString()); - - assertThat(inspectContainerResponse2.getConfig(), is(notNullValue())); - assertThat(inspectContainerResponse2.getId(), not(isEmptyString())); - assertThat(inspectContainerResponse2.getHostConfig(), is(notNullValue())); - assertThat(inspectContainerResponse2.getHostConfig().getLinks(), is(notNullValue())); - assertThat(inspectContainerResponse2.getHostConfig().getLinks(), equalTo(new Link[] {new Link("container1", - "container1Link")})); - assertThat(inspectContainerResponse2.getId(), startsWith(container2.getId())); - assertThat(inspectContainerResponse2.getName(), equalTo("/container2")); - assertThat(inspectContainerResponse2.getImageId(), not(isEmptyString())); - assertThat(inspectContainerResponse2.getState(), is(notNullValue())); - assertThat(inspectContainerResponse2.getState().getRunning(), is(true)); - - } - - @Test - public void startContainerWithLinking() throws DockerException { - - CreateContainerResponse container1 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName("container1").exec(); - - LOG.info("Created container1 {}", container1.toString()); - assertThat(container1.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container1.getId()).exec(); - - InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) - .exec(); - LOG.info("Container1 Inspect: {}", inspectContainerResponse1.toString()); - - assertThat(inspectContainerResponse1.getConfig(), is(notNullValue())); - assertThat(inspectContainerResponse1.getId(), not(isEmptyString())); - assertThat(inspectContainerResponse1.getId(), startsWith(container1.getId())); - assertThat(inspectContainerResponse1.getName(), equalTo("/container1")); - assertThat(inspectContainerResponse1.getImageId(), not(isEmptyString())); - assertThat(inspectContainerResponse1.getState(), is(notNullValue())); - assertThat(inspectContainerResponse1.getState().getRunning(), is(true)); - - if (!inspectContainerResponse1.getState().getRunning()) { - assertThat(inspectContainerResponse1.getState().getExitCode(), is(equalTo(0))); - } - - CreateContainerResponse container2 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withName("container2").withLinks(new Link("container1", "container1Link")).exec(); - - LOG.info("Created container2 {}", container2.toString()); - assertThat(container2.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container2.getId()).exec(); - - InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) - .exec(); - LOG.info("Container2 Inspect: {}", inspectContainerResponse2.toString()); - - assertThat(inspectContainerResponse2.getConfig(), is(notNullValue())); - assertThat(inspectContainerResponse2.getId(), not(isEmptyString())); - assertThat(inspectContainerResponse2.getHostConfig(), is(notNullValue())); - assertThat(inspectContainerResponse2.getHostConfig().getLinks(), is(notNullValue())); - assertThat(inspectContainerResponse2.getHostConfig().getLinks(), equalTo(new Link[] {new Link("container1", - "container1Link")})); - assertThat(inspectContainerResponse2.getId(), startsWith(container2.getId())); - assertThat(inspectContainerResponse2.getName(), equalTo("/container2")); - assertThat(inspectContainerResponse2.getImageId(), not(isEmptyString())); - assertThat(inspectContainerResponse2.getState(), is(notNullValue())); - assertThat(inspectContainerResponse2.getState().getRunning(), is(true)); - - } - - @Test - public void startContainer() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd(new String[] {"top"}) - .exec(); - - LOG.info("Created container {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); - - assertThat(inspectContainerResponse.getConfig(), is(notNullValue())); - assertThat(inspectContainerResponse.getId(), not(isEmptyString())); - - assertThat(inspectContainerResponse.getId(), startsWith(container.getId())); - - assertThat(inspectContainerResponse.getImageId(), not(isEmptyString())); - assertThat(inspectContainerResponse.getState(), is(notNullValue())); - - assertThat(inspectContainerResponse.getState().getRunning(), is(true)); - - if (!inspectContainerResponse.getState().getRunning()) { - assertThat(inspectContainerResponse.getState().getExitCode(), is(equalTo(0))); - } - } - - @Test - public void testStartNonExistingContainer() throws DockerException { - try { - dockerClient.startContainerCmd("non-existing").exec(); - fail("expected NotFoundException"); - } catch (NotFoundException e) { - } - } - - /** - * This tests support for --net option for the docker run command: --net="bridge" Set the Network mode for the container 'bridge': - * creates a new network stack for the container on the docker bridge 'none': no networking for this container 'container:': reuses - * another container network stack 'host': use the host network stack inside the container. Note: the host mode gives the container full - * access to local system services such as D-bus and is therefore considered insecure. - */ - @Test - public void startContainerWithNetworkMode() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") - .withNetworkMode("host").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - dockerClient.startContainerCmd(container.getId()).exec(); - - inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getHostConfig().getNetworkMode(), is(equalTo("host"))); - } - - @Test - public void startContainerWithCapAddAndCapDrop() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withCapAdd(NET_ADMIN).withCapDrop(MKNOD).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getState().getRunning(), is(true)); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getCapAdd()), contains(NET_ADMIN)); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getCapDrop()), contains(MKNOD)); - } - - @Test - public void startContainerWithDevices() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withDevices(new Device("rwm", "/dev/nulo", "/dev/zero")).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getState().getRunning(), is(true)); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDevices()), contains(new Device("rwm", - "/dev/nulo", "/dev/zero"))); - } - - @Test - public void startContainerWithExtraHosts() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withExtraHosts("dockerhost:127.0.0.1").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getState().getRunning(), is(true)); - - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getExtraHosts()), - contains("dockerhost:127.0.0.1")); - } - - @Test - public void startContainerWithRestartPolicy() throws DockerException { - - RestartPolicy restartPolicy = RestartPolicy.onFailureRestart(5); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") - .withRestartPolicy(restartPolicy).exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - assertThat(inspectContainerResponse.getState().getRunning(), is(true)); - - assertThat(inspectContainerResponse.getHostConfig().getRestartPolicy(), is(equalTo(restartPolicy))); - } - - @Test - public void existingHostConfigIsPreservedByBlankStartCmd() throws DockerException { - - String dnsServer = "8.8.8.8"; - - // prepare a container with custom DNS - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withDns(dnsServer) - .withCmd("true").exec(); - - LOG.info("Created container {}", container.toString()); - - assertThat(container.getId(), not(isEmptyString())); - - // start container _without_any_customization_ (important!) - dockerClient.startContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - - // The DNS setting survived. - assertThat(inspectContainerResponse.getHostConfig().getDns(), is(notNullValue())); - assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDns()), contains(dnsServer)); - } - - @Test - public void anUnconfiguredCommandSerializesToEmptyJson() throws Exception { - ObjectMapper objectMapper = new ObjectMapper(); - StartContainerCmd command = dockerClient.startContainerCmd(""); - assertThat(objectMapper.writeValueAsString(command), is("{}")); - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/StatsCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/StatsCmdExecTest.java deleted file mode 100644 index 2b84ae6b0..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/StatsCmdExecTest.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; - -import java.io.IOException; -import java.lang.reflect.Method; -import java.security.SecureRandom; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.model.Statistics; -import com.github.dockerjava.core.async.ResultCallbackTemplate; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class StatsCmdExecTest extends AbstractNettyDockerClientTest { - - private static int NUM_STATS = 5; - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(groups = "ignoreInCircleCi") - public void testStatsStreaming() throws InterruptedException, IOException { - TimeUnit.SECONDS.sleep(1); - - CountDownLatch countDownLatch = new CountDownLatch(NUM_STATS); - - String containerName = "generated_" + new SecureRandom().nextInt(); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("top") - .withName(containerName).exec(); - LOG.info("Created container {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - StatsCallbackTest statsCallback = dockerClient.statsCmd(container.getId()) - .exec(new StatsCallbackTest(countDownLatch)); - - countDownLatch.await(3, TimeUnit.SECONDS); - Boolean gotStats = statsCallback.gotStats(); - - LOG.info("Stop stats collection"); - - statsCallback.close(); - - LOG.info("Stopping container"); - dockerClient.stopContainerCmd(container.getId()).exec(); - dockerClient.removeContainerCmd(container.getId()).exec(); - - LOG.info("Completed test"); - assertTrue(gotStats, "Expected true"); - - } - - private class StatsCallbackTest extends ResultCallbackTemplate { - private final CountDownLatch countDownLatch; - - private Boolean gotStats = false; - - public StatsCallbackTest(CountDownLatch countDownLatch) { - this.countDownLatch = countDownLatch; - } - - @Override - public void onNext(Statistics stats) { - LOG.info("Received stats #{}: {}", countDownLatch.getCount(), stats); - if (stats != null) { - gotStats = true; - } - countDownLatch.countDown(); - } - - public Boolean gotStats() { - return gotStats; - } - } -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/StopContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/StopContainerCmdExecTest.java deleted file mode 100644 index b3f545a42..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/StopContainerCmdExecTest.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static com.github.dockerjava.core.RemoteApiVersion.VERSION_1_22; -import static com.github.dockerjava.utils.TestUtils.getVersion; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; - -import java.lang.reflect.Method; - -import com.github.dockerjava.core.RemoteApiVersion; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class StopContainerCmdExecTest extends AbstractNettyDockerClientTest { - - public static final Logger LOG = LoggerFactory.getLogger(StopContainerCmdExecTest.class); - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test(groups = "ignoreInCircleCi") - public void testStopContainer() throws DockerException { - final RemoteApiVersion apiVersion = getVersion(dockerClient); - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - dockerClient.startContainerCmd(container.getId()).exec(); - - LOG.info("Stopping container: {}", container.getId()); - dockerClient.stopContainerCmd(container.getId()).withTimeout(2).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); - - assertThat(inspectContainerResponse.getState().getRunning(), is(equalTo(false))); - - final Integer exitCode = inspectContainerResponse.getState().getExitCode(); - if (apiVersion.equals(VERSION_1_22)) { - assertThat(exitCode, is(0)); - } else { - assertThat(exitCode, not(0)); - } - } - - @Test - public void testStopNonExistingContainer() throws DockerException { - try { - dockerClient.stopContainerCmd("non-existing").withTimeout(2).exec(); - fail("expected NotFoundException"); - } catch (NotFoundException e) { - - } - } - -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/TagImageCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/TagImageCmdExecTest.java deleted file mode 100644 index bbab169ef..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/TagImageCmdExecTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import java.lang.reflect.Method; - -import org.apache.commons.lang.math.RandomUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class TagImageCmdExecTest extends AbstractNettyDockerClientTest { - - public static final Logger LOG = LoggerFactory.getLogger(TagImageCmdExecTest.class); - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void tagImage() throws Exception { - String tag = "" + RandomUtils.nextInt(Integer.MAX_VALUE); - - dockerClient.tagImageCmd("busybox:latest", "docker-java/busybox", tag).exec(); - - dockerClient.removeImageCmd("docker-java/busybox:" + tag).exec(); - } - - @Test - public void tagNonExistingImage() throws Exception { - String tag = "" + RandomUtils.nextInt(Integer.MAX_VALUE); - - try { - dockerClient.tagImageCmd("non-existing", "docker-java/busybox", tag).exec(); - fail("expected NotFoundException"); - } catch (NotFoundException e) { - } - } - -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/UpdateContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/UpdateContainerCmdExecTest.java deleted file mode 100644 index e2907dc8a..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/UpdateContainerCmdExecTest.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.model.HostConfig; -import com.github.dockerjava.api.model.UpdateContainerResponse; -import com.github.dockerjava.core.RemoteApiVersion; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.ITestResult; -import org.testng.SkipException; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import java.io.IOException; -import java.lang.reflect.Method; - -import static com.github.dockerjava.utils.TestUtils.getVersion; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.collection.IsCollectionWithSize.hasSize; - -/** - * @author Kanstantsin Shautsou - */ -@Test(groups = "integration") -public class UpdateContainerCmdExecTest extends AbstractNettyDockerClientTest { - public static final Logger LOG = LoggerFactory.getLogger(UpdateContainerCmdExecTest.class); - private static final String BUSYBOX_IMAGE = "busybox"; - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void updateContainer() throws DockerException, IOException { - final RemoteApiVersion apiVersion = getVersion(dockerClient); - - if (!apiVersion.isGreaterOrEqual(RemoteApiVersion.VERSION_1_22)) { - throw new SkipException("API version should be >= 1.22"); - } - - CreateContainerResponse response = dockerClient.createContainerCmd(BUSYBOX_IMAGE) - .withCmd("sleep", "9999") - .exec(); - String containerId = response.getId(); - dockerClient.startContainerCmd(containerId).exec(); - - InspectContainerResponse inspectBefore = dockerClient.inspectContainerCmd(containerId).exec(); - final HostConfig beforeHostConfig = inspectBefore.getHostConfig(); - - final UpdateContainerResponse updateResponse = dockerClient.updateContainerCmd(containerId) - .withBlkioWeight(300) - .withCpuShares(512) - .withCpuPeriod(100000) - .withCpuQuota(50000) -// .withCpusetCpus("0") // depends on env - .withCpusetMems("0") - .withMemory(314572800L) - .withMemorySwap(514288000L) - .withMemoryReservation(209715200L) -// .withKernelMemory(52428800) Can not update kernel memory to a running container, please stop it first. - .exec(); - - // docker toolbox 1.10.1 - assertThat(updateResponse.getWarnings(), hasSize(1)); - assertThat(updateResponse.getWarnings().get(0), - is("Your kernel does not support Block I/O weight. Weight discarded.")); - - InspectContainerResponse inspectAfter = dockerClient.inspectContainerCmd(containerId).exec(); - final HostConfig afterHostConfig = inspectAfter.getHostConfig(); - - assertThat(afterHostConfig.getMemory(), - is(314572800L)); - -// assertThat(afterHostConfig.getBlkioWeight(), is(300)); - assertThat(afterHostConfig.getCpuShares(), is(512)); - assertThat(afterHostConfig.getCpuPeriod(), is(100000)); - assertThat(afterHostConfig.getCpuQuota(), is(50000)); - assertThat(afterHostConfig.getCpusetMems(), is("0")); - - assertThat(afterHostConfig.getMemoryReservation(), is(209715200L)); - assertThat(afterHostConfig.getMemorySwap(), is(514288000L)); - } - -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/VersionCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/VersionCmdExecTest.java deleted file mode 100644 index 7709fa56d..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/VersionCmdExecTest.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import java.lang.reflect.Method; - -import org.apache.commons.lang.StringUtils; -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.model.Version; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class VersionCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void version() throws DockerException { - Version version = dockerClient.versionCmd().exec(); - LOG.info(version.toString()); - - assertTrue(version.getGoVersion().length() > 0); - assertTrue(version.getVersion().length() > 0); - - assertEquals(StringUtils.split(version.getVersion(), ".").length, 3); - - } - -} diff --git a/src/test/java/com/github/dockerjava/netty/exec/WaitContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/WaitContainerCmdExecTest.java deleted file mode 100644 index 527d5f995..000000000 --- a/src/test/java/com/github/dockerjava/netty/exec/WaitContainerCmdExecTest.java +++ /dev/null @@ -1,110 +0,0 @@ -package com.github.dockerjava.netty.exec; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; - -import java.lang.reflect.Method; - -import org.testng.ITestResult; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.exception.DockerException; -import com.github.dockerjava.api.exception.NotFoundException; -import com.github.dockerjava.api.model.WaitResponse; -import com.github.dockerjava.core.command.WaitContainerResultCallback; -import com.github.dockerjava.netty.AbstractNettyDockerClientTest; - -@Test(groups = "integration") -public class WaitContainerCmdExecTest extends AbstractNettyDockerClientTest { - - @BeforeTest - public void beforeTest() throws Exception { - super.beforeTest(); - } - - @AfterTest - public void afterTest() { - super.afterTest(); - } - - @BeforeMethod - public void beforeMethod(Method method) { - super.beforeMethod(method); - } - - @AfterMethod - public void afterMethod(ITestResult result) { - super.afterMethod(result); - } - - @Test - public void testWaitContainer() throws DockerException { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true").exec(); - - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()) - .awaitStatusCode(); - LOG.info("Container exit code: {}", exitCode); - - assertThat(exitCode, equalTo(0)); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); - - assertThat(inspectContainerResponse.getState().getRunning(), is(equalTo(false))); - assertThat(inspectContainerResponse.getState().getExitCode(), is(equalTo(exitCode))); - } - - @Test(expectedExceptions = NotFoundException.class) - public void testWaitNonExistingContainer() throws DockerException { - - WaitContainerResultCallback callback = new WaitContainerResultCallback() { - public void onNext(WaitResponse waitResponse) { - fail("expected NotFoundException"); - }; - }; - - dockerClient.waitContainerCmd("non-existing").exec(callback).awaitStatusCode(); - } - - @Test - public void testWaitContainerAbort() throws Exception { - - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); - - LOG.info("Created container: {}", container.toString()); - assertThat(container.getId(), not(isEmptyString())); - - dockerClient.startContainerCmd(container.getId()).exec(); - - WaitContainerResultCallback callback = dockerClient.waitContainerCmd(container.getId()).exec( - new WaitContainerResultCallback()); - - Thread.sleep(5000); - - System.err.println("closing callback"); - - callback.close(); - - dockerClient.killContainerCmd(container.getId()).exec(); - - InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); - - assertThat(inspectContainerResponse.getState().getRunning(), is(equalTo(false))); - } -} From c1b7ace2b3c6b1db08b76b242968c9b24bef6db0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gillouard=20Fr=C3=A9d=C3=A9ric?= Date: Thu, 24 Mar 2016 11:53:09 +0100 Subject: [PATCH 3/3] Rollback delete --- .../command/AttachContainerCmdImplTest.java | 153 +++++ .../core/command/AuthCmdImplTest.java | 58 ++ .../core/command/BuildImageCmdImplTest.java | 321 +++++++++ .../core/command/CommitCmdImplTest.java | 80 +++ .../command/ConnectToNetworkCmdImplTest.java | 59 ++ .../command/ContainerDiffCmdImplTest.java | 79 +++ .../CopyArchiveFromContainerCmdImplTest.java | 73 ++ .../CopyArchiveToContainerCmdImplTest.java | 94 +++ .../CopyFileFromContainerCmdImplTest.java | 73 ++ .../command/CreateContainerCmdImplTest.java | 630 ++++++++++++++++++ .../command/CreateNetworkCmdImplTest.java | 52 ++ .../core/command/CreateVolumeCmdImplTest.java | 75 +++ .../DisconnectFromNetworkCmdImplTest.java | 59 ++ .../core/command/DockerfileFixture.java | 81 +++ .../core/command/EventsCmdImplTest.java | 159 +++++ .../core/command/ExecCreateCmdImplTest.java | 61 ++ .../core/command/ExecStartCmdImplTest.java | 95 +++ .../core/command/FrameReaderITest.java | 117 ++++ .../core/command/FrameReaderTest.java | 61 ++ .../core/command/InfoCmdImplTest.java | 71 ++ .../command/InspectContainerCmdImplTest.java | 100 +++ .../core/command/InspectExecCmdImplTest.java | 144 ++++ .../command/InspectNetworkCmdImplTest.java | 57 ++ .../command/InspectVolumeCmdImplTest.java | 65 ++ .../command/KillContainerCmdImplTest.java | 80 +++ .../command/ListContainersCmdImplTest.java | 170 +++++ .../core/command/ListImagesCmdImplTest.java | 101 +++ .../core/command/ListNetworksCmdImplTest.java | 55 ++ .../core/command/ListVolumesCmdImplTest.java | 59 ++ .../core/command/LogContainerCmdImplTest.java | 171 +++++ .../core/command/PullImageCmdImplTest.java | 117 ++++ .../core/command/PushImageCmdImplTest.java | 78 +++ .../command/RemoveContainerCmdImplTest.java | 80 +++ .../core/command/RemoveImageCmdImplTest.java | 87 +++ .../command/RemoveNetworkCmdImplTest.java | 76 +++ .../core/command/RemoveVolumeCmdImplTest.java | 65 ++ .../command/RenameContainerCmdImplTest.java | 71 ++ .../command/RestartContainerCmdImplTest.java | 84 +++ .../core/command/SearchImagesCmdImplTest.java | 59 ++ .../command/StartContainerCmdImplTest.java | 559 ++++++++++++++++ .../core/command/StatsCmdImplTest.java | 106 +++ .../command/StopContainerCmdImplTest.java | 89 +++ .../core/command/TagImageCmdImplTest.java | 63 ++ .../command/UpdateContainerCmdImplTest.java | 121 ++++ .../core/command/VersionCmdImplTest.java | 52 ++ .../command/WaitContainerCmdImplTest.java | 107 +++ .../exec/AttachContainerCmdExecTest.java | 160 +++++ .../netty/exec/AuthCmdExecTest.java | 57 ++ .../netty/exec/BuildImageCmdExecTest.java | 316 +++++++++ .../netty/exec/CommitCmdExecTest.java | 80 +++ .../netty/exec/ContainerDiffCmdExecTest.java | 80 +++ .../CopyArchiveFromContainerCmdExecTest.java | 73 ++ .../CopyArchiveToContainerCmdExecTest.java | 94 +++ .../CopyFileFromContainerCmdExecTest.java | 73 ++ .../exec/CreateContainerCmdExecTest.java | 567 ++++++++++++++++ .../netty/exec/CreateNetworkCmdExecTest.java | 52 ++ .../netty/exec/CreateVolumeCmdExecTest.java | 73 ++ .../netty/exec/EventsCmdExecTest.java | 161 +++++ .../netty/exec/ExecCreateCmdExecTest.java | 61 ++ .../netty/exec/ExecStartCmdExecTest.java | 182 +++++ .../netty/exec/InfoCmdExecTest.java | 71 ++ .../exec/InspectContainerCmdExecTest.java | 100 +++ .../netty/exec/InspectExecCmdExecTest.java | 145 ++++ .../netty/exec/InspectNetworkCmdExecTest.java | 57 ++ .../netty/exec/InspectVolumeCmdExecTest.java | 65 ++ .../netty/exec/KillContainerCmdExecTest.java | 80 +++ .../netty/exec/ListContainersCmdExecTest.java | 172 +++++ .../netty/exec/ListImagesCmdExecTest.java | 100 +++ .../netty/exec/ListNetworksCmdExecTest.java | 55 ++ .../netty/exec/ListVolumesCmdExecTest.java | 59 ++ .../netty/exec/LogContainerCmdExecTest.java | 172 +++++ .../netty/exec/PingCmdExecTest.java | 43 ++ .../netty/exec/PullImageCmdExecTest.java | 119 ++++ .../netty/exec/PushImageCmdExecTest.java | 79 +++ .../exec/RemoveContainerCmdExecTest.java | 81 +++ .../netty/exec/RemoveImageCmdExecTest.java | 87 +++ .../netty/exec/RemoveNetworkCmdExecTest.java | 76 +++ .../netty/exec/RemoveVolumeCmdExecTest.java | 65 ++ .../exec/RenameContainerCmdExecTest.java | 71 ++ .../exec/RestartContainerCmdExecTest.java | 84 +++ .../netty/exec/SearchImagesCmdExecTest.java | 59 ++ .../netty/exec/StartContainerCmdExecTest.java | 562 ++++++++++++++++ .../netty/exec/StatsCmdExecTest.java | 106 +++ .../netty/exec/StopContainerCmdExecTest.java | 89 +++ .../netty/exec/TagImageCmdExecTest.java | 63 ++ .../exec/UpdateContainerCmdExecTest.java | 107 +++ .../netty/exec/VersionCmdExecTest.java | 52 ++ .../netty/exec/WaitContainerCmdExecTest.java | 110 +++ 88 files changed, 10225 insertions(+) create mode 100644 src/test/java/com/github/dockerjava/core/command/AttachContainerCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/AuthCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/CommitCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/ContainerDiffCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/CopyArchiveFromContainerCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/CopyArchiveToContainerCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/CopyFileFromContainerCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/CreateNetworkCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/CreateVolumeCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/DockerfileFixture.java create mode 100644 src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/ExecCreateCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/FrameReaderITest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/FrameReaderTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/InfoCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/InspectContainerCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/InspectExecCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/InspectNetworkCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/InspectVolumeCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/KillContainerCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/ListContainersCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/ListImagesCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/ListNetworksCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/ListVolumesCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/LogContainerCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/PullImageCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/PushImageCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/RemoveContainerCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/RemoveImageCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/RemoveNetworkCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/RemoveVolumeCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/RenameContainerCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/RestartContainerCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/SearchImagesCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/StatsCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/StopContainerCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/TagImageCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/UpdateContainerCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/VersionCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/WaitContainerCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/AttachContainerCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/AuthCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/BuildImageCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/CommitCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/ContainerDiffCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/CopyArchiveFromContainerCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/CopyArchiveToContainerCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/CopyFileFromContainerCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/CreateContainerCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/CreateVolumeCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/EventsCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/ExecCreateCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/ExecStartCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/InfoCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/InspectVolumeCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/KillContainerCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/ListContainersCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/ListImagesCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/ListNetworksCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/ListVolumesCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/LogContainerCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/PingCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/PullImageCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/PushImageCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/RemoveContainerCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/RemoveImageCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/RemoveVolumeCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/RenameContainerCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/RestartContainerCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/SearchImagesCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/StartContainerCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/StatsCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/StopContainerCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/TagImageCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/UpdateContainerCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/VersionCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/WaitContainerCmdExecTest.java diff --git a/src/test/java/com/github/dockerjava/core/command/AttachContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/AttachContainerCmdImplTest.java new file mode 100644 index 000000000..21507e44e --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/AttachContainerCmdImplTest.java @@ -0,0 +1,153 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.InputStream; +import java.lang.reflect.Method; +import java.util.concurrent.TimeUnit; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.model.Frame; +import com.github.dockerjava.api.model.StreamType; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class AttachContainerCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void attachContainerWithoutTTY() throws Exception { + + String snippet = "hello world"; + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("echo", snippet) + .withTty(false).exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + AttachContainerTestCallback callback = new AttachContainerTestCallback() { + @Override + public void onNext(Frame frame) { + assertEquals(frame.getStreamType(), StreamType.STDOUT); + super.onNext(frame); + }; + }; + + dockerClient.attachContainerCmd(container.getId()).withStdErr(true).withStdOut(true).withFollowStream(true) + .withLogs(true).exec(callback).awaitCompletion(30, TimeUnit.SECONDS); + callback.close(); + + assertThat(callback.toString(), containsString(snippet)); + } + + @Test + public void attachContainerWithTTY() throws Exception { + + File baseDir = new File(Thread.currentThread().getContextClassLoader() + .getResource("attachContainerTestDockerfile").getFile()); + + String imageId = buildImage(baseDir); + + CreateContainerResponse container = dockerClient.createContainerCmd(imageId).withTty(true).exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + AttachContainerTestCallback callback = new AttachContainerTestCallback() { + @Override + public void onNext(Frame frame) { + assertEquals(frame.getStreamType(), StreamType.RAW); + super.onNext(frame); + }; + }; + + dockerClient.attachContainerCmd(container.getId()).withStdErr(true).withStdOut(true).withFollowStream(true) + .exec(callback).awaitCompletion(15, TimeUnit.SECONDS); + callback.close(); + + System.out.println("log: " + callback.toString()); + + // HexDump.dump(collectFramesCallback.toString().getBytes(), 0, System.out, 0); + + assertThat(callback.toString(), containsString("stdout\r\nstderr")); + } + + @Test(expectedExceptions = UnsupportedOperationException.class) + public void attachContainerStdinUnsupported() throws Exception { + + String snippet = "hello world"; + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("echo", snippet) + .withTty(false).exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + AttachContainerTestCallback callback = new AttachContainerTestCallback() { + @Override + public void onNext(Frame frame) { + assertEquals(frame.getStreamType(), StreamType.STDOUT); + super.onNext(frame); + }; + }; + + InputStream stdin = new ByteArrayInputStream("".getBytes()); + + dockerClient.attachContainerCmd(container.getId()).withStdErr(true).withStdOut(true).withFollowStream(true) + .withLogs(true).withStdIn(stdin).exec(callback).awaitCompletion(30, TimeUnit.SECONDS); + callback.close(); + } + + public static class AttachContainerTestCallback extends AttachContainerResultCallback { + private StringBuffer log = new StringBuffer(); + + @Override + public void onNext(Frame item) { + log.append(new String(item.getPayload())); + super.onNext(item); + } + + @Override + public String toString() { + return log.toString(); + } + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/AuthCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/AuthCmdImplTest.java new file mode 100644 index 000000000..c01c8b8cd --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/AuthCmdImplTest.java @@ -0,0 +1,58 @@ +package com.github.dockerjava.core.command; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.UnauthorizedException; +import com.github.dockerjava.api.model.AuthResponse; +import com.github.dockerjava.client.AbstractDockerClientTest; +import com.github.dockerjava.core.DockerClientBuilder; + +@Test(groups = "integration") +public class AuthCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void testAuth() throws Exception { + AuthResponse response = dockerClient.authCmd().exec(); + + assertEquals(response.getStatus(), "Login Succeeded"); + } + + // Disabled because of 500/InternalServerException + @Test(enabled = false) + public void testAuthInvalid() throws Exception { + + try { + DockerClientBuilder.getInstance(config("garbage")).build().authCmd().exec(); + fail("Expected a UnauthorizedException caused by a bad password."); + } catch (UnauthorizedException e) { + assertEquals(e.getMessage(), "Wrong login/password, please try again\n"); + } + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java new file mode 100644 index 000000000..99eefb4de --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java @@ -0,0 +1,321 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.nullValue; + +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.UUID; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.filefilter.TrueFileFilter; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerClientException; +import com.github.dockerjava.api.command.BuildImageCmd; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.command.InspectImageResponse; +import com.github.dockerjava.api.model.AuthConfig; +import com.github.dockerjava.api.model.AuthConfigurations; +import com.github.dockerjava.api.model.ExposedPort; +import com.github.dockerjava.api.model.PortBinding; +import com.github.dockerjava.api.model.Ports; +import com.github.dockerjava.client.AbstractDockerClientTest; +import com.github.dockerjava.core.util.CompressArchiveUtil; + +@Test(groups = "integration") +public class BuildImageCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void testNginxDockerfileBuilder() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("nginx").getFile()); + + String imageId = buildImage(baseDir); + + InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); + assertThat(inspectImageResponse, not(nullValue())); + LOG.info("Image Inspect: {}", inspectImageResponse.toString()); + + assertThat(inspectImageResponse.getAuthor(), equalTo("Guillaume J. Charmes \"guillaume@dotcloud.com\"")); + } + + @Test(groups = "ignoreInCircleCi") + public void testNonstandard1() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader() + .getResource("nonstandard/subdirectory/Dockerfile-nonstandard").getFile()); + + buildImage(baseDir); + } + + @Test(groups = "ignoreInCircleCi") + public void testNonstandard2() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("nonstandard").getFile()); + File dockerFile = new File(Thread.currentThread().getContextClassLoader() + .getResource("nonstandard/subdirectory/Dockerfile-nonstandard").getFile()); + + dockerClient.buildImageCmd().withBaseDirectory(baseDir).withDockerfile(dockerFile).withNoCache(true) + .exec(new BuildImageResultCallback()).awaitImageId(); + } + + @Test + public void testDockerBuilderFromTar() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddFile").getFile()); + Collection files = FileUtils.listFiles(baseDir, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE); + File tarFile = CompressArchiveUtil.archiveTARFiles(baseDir, files, UUID.randomUUID().toString()); + String response = dockerfileBuild(new FileInputStream(tarFile)); + assertThat(response, containsString("Successfully executed testrun.sh")); + } + + @Test + public void testDockerBuildWithOnBuild() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddOnBuild/onbuild") + .getFile()); + dockerClient.buildImageCmd(baseDir).withNoCache(true).withTag("docker-java-onbuild") + .exec(new BuildImageResultCallback()).awaitImageId(); + baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddOnBuild/test").getFile()); + String response = dockerfileBuild(baseDir); + assertThat(response, containsString("Successfully executed testrun.sh")); + } + + @Test + public void testDockerBuilderAddUrl() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddUrl").getFile()); + String response = dockerfileBuild(baseDir); + assertThat(response, containsString("Docker")); + } + + @Test + public void testDockerBuilderAddFileInSubfolder() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddFileInSubfolder") + .getFile()); + String response = dockerfileBuild(baseDir); + assertThat(response, containsString("Successfully executed testrun.sh")); + } + + @Test + public void testDockerBuilderAddFilesViaWildcard() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddFilesViaWildcard") + .getFile()); + String response = dockerfileBuild(baseDir); + assertThat(response, containsString("Successfully executed testinclude1.sh")); + assertThat(response, not(containsString("Successfully executed testinclude2.sh"))); + } + + @Test + public void testDockerBuilderAddFolder() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddFolder").getFile()); + String response = dockerfileBuild(baseDir); + assertThat(response, containsString("Successfully executed testAddFolder.sh")); + } + + @Test + public void testDockerBuilderEnv() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testEnv").getFile()); + String response = dockerfileBuild(baseDir); + assertThat(response, containsString("Successfully executed testrun.sh")); + } + + private String dockerfileBuild(InputStream tarInputStream) throws Exception { + + return execBuild(dockerClient.buildImageCmd().withTarInputStream(tarInputStream)); + } + + private String dockerfileBuild(File baseDir) throws Exception { + + return execBuild(dockerClient.buildImageCmd(baseDir)); + } + + private String execBuild(BuildImageCmd buildImageCmd) throws Exception { + String imageId = buildImageCmd.withNoCache(true).exec(new BuildImageResultCallback()).awaitImageId(); + + // Create container based on image + CreateContainerResponse container = dockerClient.createContainerCmd(imageId).exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()).awaitStatusCode(); + + return containerLog(container.getId()); + } + + @Test(expectedExceptions = {DockerClientException.class}) + public void testDockerfileIgnored() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testDockerfileIgnored") + .getFile()); + + dockerClient.buildImageCmd(baseDir).withNoCache(true).exec(new BuildImageResultCallback()).awaitImageId(); + } + + @Test + public void testDockerfileNotIgnored() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testDockerfileNotIgnored") + .getFile()); + + dockerClient.buildImageCmd(baseDir).withNoCache(true).exec(new BuildImageResultCallback()).awaitImageId(); + } + + @Test(expectedExceptions = {DockerClientException.class}) + public void testInvalidDockerIgnorePattern() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader() + .getResource("testInvalidDockerignorePattern").getFile()); + + dockerClient.buildImageCmd(baseDir).withNoCache(true).exec(new BuildImageResultCallback()).awaitImageId(); + } + + @Test(groups = "ignoreInCircleCi") + public void testDockerIgnore() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testDockerignore") + .getFile()); + String response = dockerfileBuild(baseDir); + assertThat(response, containsString("/tmp/a/a /tmp/a/c /tmp/a/d")); + } + + @Test + public void testNetCatDockerfileBuilder() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("netcat").getFile()); + + String imageId = dockerClient.buildImageCmd(baseDir).withNoCache(true).exec(new BuildImageResultCallback()) + .awaitImageId(); + + assertNotNull(imageId, "Not successful in build"); + + InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); + assertThat(inspectImageResponse, not(nullValue())); + assertThat(inspectImageResponse.getId(), not(nullValue())); + LOG.info("Image Inspect: {}", inspectImageResponse.toString()); + + CreateContainerResponse container = dockerClient.createContainerCmd(inspectImageResponse.getId()).exec(); + assertThat(container.getId(), not(isEmptyString())); + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getId(), notNullValue()); + assertThat(inspectContainerResponse.getNetworkSettings().getPorts(), notNullValue()); + + // No use as such if not running on the server + // for (Ports.Port p : inspectContainerResponse.getNetworkSettings().getPorts().getAllPorts()) { + // int port = Integer.valueOf(p.getHostPort()); + // LOG.info("Checking port {} is open", port); + // assertThat(available(port), is(false)); + // } + dockerClient.stopContainerCmd(container.getId()).withTimeout(0).exec(); + + } + + @Test + public void testAddAndCopySubstitution() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testENVSubstitution") + .getFile()); + String response = dockerfileBuild(baseDir); + assertThat(response, containsString("testENVSubstitution successfully completed")); + } + + @Test + public void testBuildFromPrivateRegistry() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("privateRegistry").getFile()); + + String imageId = buildImage(baseDir); + + InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); + assertThat(inspectImageResponse, not(nullValue())); + LOG.info("Image Inspect: {}", inspectImageResponse.toString()); + + dockerClient.tagImageCmd(imageId, "testregistry", "2").withForce().exec(); + + // see https://github.com/docker/distribution/blob/master/docs/deploying.md#native-basic-auth + CreateContainerResponse testregistry = dockerClient + .createContainerCmd("testregistry:2") + .withName("registry") + .withPortBindings(new PortBinding(new Ports.Binding(5000), ExposedPort.tcp(5000))) + .withEnv("REGISTRY_AUTH=htpasswd", "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm", + "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd", "REGISTRY_LOG_LEVEL=debug", + "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt", "REGISTRY_HTTP_TLS_KEY=/certs/domain.key") + .exec(); + + dockerClient.startContainerCmd(testregistry.getId()).exec(); + + // wait for registry to boot + Thread.sleep(3000); + + // credentials as configured in /auth/htpasswd + AuthConfig authConfig = new AuthConfig() + .withUsername("testuser") + .withPassword("testpassword") + .withEmail("foo@bar.de") + .withRegistryAddress("localhost:5000"); + + dockerClient.authCmd().withAuthConfig(authConfig).exec(); + dockerClient.tagImageCmd("busybox:latest", "localhost:5000/testuser/busybox", "latest").withForce().exec(); + + dockerClient.pushImageCmd("localhost:5000/testuser/busybox").withTag("latest").withAuthConfig(authConfig) + .exec(new PushImageResultCallback()).awaitSuccess(); + + dockerClient.removeImageCmd("localhost:5000/testuser/busybox").withForce(true).exec(); + + baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testBuildFromPrivateRegistry") + .getFile()); + + AuthConfigurations authConfigurations = new AuthConfigurations(); + authConfigurations.addConfig(authConfig); + + imageId = dockerClient.buildImageCmd(baseDir).withNoCache(true).withBuildAuthConfigs(authConfigurations) + .exec(new BuildImageResultCallback()).awaitImageId(); + + inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); + assertThat(inspectImageResponse, not(nullValue())); + LOG.info("Image Inspect: {}", inspectImageResponse.toString()); + + } + + @Test + public void testBuildArgs() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testBuildArgs").getFile()); + + String imageId = dockerClient.buildImageCmd(baseDir).withNoCache(true).withBuildArg("testArg", "abc") + .exec(new BuildImageResultCallback()) + .awaitImageId(); + + InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); + assertThat(inspectImageResponse, not(nullValue())); + LOG.info("Image Inspect: {}", inspectImageResponse.toString()); + + assertThat(inspectImageResponse.getConfig().getLabels().get("test"), equalTo("abc")); + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/CommitCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/CommitCmdImplTest.java new file mode 100644 index 000000000..b8758d332 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/CommitCmdImplTest.java @@ -0,0 +1,80 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.startsWith; +import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectImageResponse; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class CommitCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void commit() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("touch", "/test").exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + dockerClient.startContainerCmd(container.getId()).exec(); + + LOG.info("Commiting container: {}", container.toString()); + String imageId = dockerClient.commitCmd(container.getId()).exec(); + + InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); + LOG.info("Image Inspect: {}", inspectImageResponse.toString()); + + assertThat(inspectImageResponse, hasField("container", startsWith(container.getId()))); + assertThat(inspectImageResponse.getContainerConfig().getImage(), equalTo("busybox")); + + InspectImageResponse busyboxImg = dockerClient.inspectImageCmd("busybox").exec(); + + assertThat(inspectImageResponse.getParent(), equalTo(busyboxImg.getId())); + } + + @Test + public void commitNonExistingContainer() throws DockerException { + try { + dockerClient.commitCmd("non-existent").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + } + } + +} diff --git a/src/test/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImplTest.java new file mode 100644 index 000000000..ad051e0bd --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImplTest.java @@ -0,0 +1,59 @@ +package com.github.dockerjava.core.command; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.CreateNetworkResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class ConnectToNetworkCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void connectToNetwork() throws InterruptedException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); + dockerClient.startContainerCmd(container.getId()).exec(); + + CreateNetworkResponse network = dockerClient.createNetworkCmd().withName("testNetwork").exec(); + + dockerClient.connectToNetworkCmd().withNetworkId(network.getId()).withContainerId(container.getId()).exec(); + + Network updatedNetwork = dockerClient.inspectNetworkCmd().withNetworkId(network.getId()).exec(); + + assertTrue(updatedNetwork.getContainers().containsKey(container.getId())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertNotNull(inspectContainerResponse.getNetworkSettings().getNetworks().get("testNetwork")); + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/ContainerDiffCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ContainerDiffCmdImplTest.java new file mode 100644 index 000000000..62c7b2ec0 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/ContainerDiffCmdImplTest.java @@ -0,0 +1,79 @@ +package com.github.dockerjava.core.command; + +import static ch.lambdaj.Lambda.selectUnique; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; +import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; + +import java.lang.reflect.Method; +import java.util.List; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.model.ChangeLog; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class ContainerDiffCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void testContainerDiff() throws DockerException { + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("touch", "/test").exec(); + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + dockerClient.startContainerCmd(container.getId()).exec(); + + int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()) + .awaitStatusCode(); + assertThat(exitCode, equalTo(0)); + + List filesystemDiff = dockerClient.containerDiffCmd(container.getId()).exec(); + LOG.info("Container DIFF: {}", filesystemDiff.toString()); + + assertThat(filesystemDiff.size(), equalTo(1)); + ChangeLog testChangeLog = selectUnique(filesystemDiff, hasField("path", equalTo("/test"))); + + assertThat(testChangeLog, hasField("path", equalTo("/test"))); + assertThat(testChangeLog, hasField("kind", equalTo(1))); + } + + @Test + public void testContainerDiffWithNonExistingContainer() throws DockerException { + try { + dockerClient.containerDiffCmd("non-existing").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + } + } + +} diff --git a/src/test/java/com/github/dockerjava/core/command/CopyArchiveFromContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/CopyArchiveFromContainerCmdImplTest.java new file mode 100644 index 000000000..0f9da6058 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/CopyArchiveFromContainerCmdImplTest.java @@ -0,0 +1,73 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.isEmptyOrNullString; +import static org.hamcrest.Matchers.not; + +import java.io.InputStream; +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class CopyArchiveFromContainerCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void copyFromContainer() throws Exception { + // TODO extract this into a shared method + CreateContainerResponse container = dockerClient.createContainerCmd("busybox") + .withName("docker-java-itest-copyFromContainer").withCmd("touch", "/copyFromContainer").exec(); + + LOG.info("Created container: {}", container); + assertThat(container.getId(), not(isEmptyOrNullString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InputStream response = dockerClient.copyArchiveFromContainerCmd(container.getId(), "/copyFromContainer").exec(); + Boolean bytesAvailable = response.available() > 0; + assertTrue(bytesAvailable, "The file was not copied from the container."); + + // read the stream fully. Otherwise, the underlying stream will not be closed. + String responseAsString = asString(response); + assertNotNull(responseAsString); + assertTrue(responseAsString.length() > 0); + } + + @Test + public void copyFromNonExistingContainer() throws Exception { + try { + dockerClient.copyArchiveFromContainerCmd("non-existing", "/test").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException ignored) { + } + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/CopyArchiveToContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/CopyArchiveToContainerCmdImplTest.java new file mode 100644 index 000000000..0f8f2164b --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/CopyArchiveToContainerCmdImplTest.java @@ -0,0 +1,94 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.isEmptyOrNullString; +import static org.hamcrest.Matchers.not; + +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Method; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.client.AbstractDockerClientTest; +import com.github.dockerjava.core.util.CompressArchiveUtil; + +@Test(groups = "integration") +public class CopyArchiveToContainerCmdImplTest extends AbstractDockerClientTest { + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void copyFileToContainer() throws Exception { + CreateContainerResponse container = prepareContainerForCopy(); + Path temp = Files.createTempFile("", ".tar.gz"); + CompressArchiveUtil.tar(Paths.get("src/test/resources/testReadFile"), temp, true, false); + try (InputStream uploadStream = Files.newInputStream(temp)) { + dockerClient.copyArchiveToContainerCmd(container.getId()).withTarInputStream(uploadStream).exec(); + assertFileCopied(container); + } + } + + @Test + public void copyStreamToContainer() throws Exception { + CreateContainerResponse container = prepareContainerForCopy(); + dockerClient.copyArchiveToContainerCmd(container.getId()).withHostResource("src/test/resources/testReadFile") + .exec(); + assertFileCopied(container); + } + + private CreateContainerResponse prepareContainerForCopy() { + CreateContainerResponse container = dockerClient.createContainerCmd("busybox") + .withName("docker-java-itest-copyToContainer").exec(); + LOG.info("Created container: {}", container); + assertThat(container.getId(), not(isEmptyOrNullString())); + dockerClient.startContainerCmd(container.getId()).exec(); + // Copy a folder to the container + return container; + } + + private void assertFileCopied(CreateContainerResponse container) throws IOException { + try (InputStream response = dockerClient.copyArchiveFromContainerCmd(container.getId(), "testReadFile").exec()) { + boolean bytesAvailable = response.available() > 0; + assertTrue(bytesAvailable, "The file was not copied to the container."); + } + } + + @Test + public void copyToNonExistingContainer() throws Exception { + try { + dockerClient.copyArchiveToContainerCmd("non-existing").withHostResource("src/test/resources/testReadFile") + .exec(); + fail("expected NotFoundException"); + } catch (NotFoundException ignored) { + } + } + +} diff --git a/src/test/java/com/github/dockerjava/core/command/CopyFileFromContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/CopyFileFromContainerCmdImplTest.java new file mode 100644 index 000000000..3e4e88612 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/CopyFileFromContainerCmdImplTest.java @@ -0,0 +1,73 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.isEmptyOrNullString; +import static org.hamcrest.Matchers.not; + +import java.io.InputStream; +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class CopyFileFromContainerCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void copyFromContainer() throws Exception { + // TODO extract this into a shared method + CreateContainerResponse container = dockerClient.createContainerCmd("busybox") + .withName("docker-java-itest-copyFromContainer").withCmd("touch", "/copyFromContainer").exec(); + + LOG.info("Created container: {}", container); + assertThat(container.getId(), not(isEmptyOrNullString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InputStream response = dockerClient.copyFileFromContainerCmd(container.getId(), "/copyFromContainer").exec(); + Boolean bytesAvailable = response.available() > 0; + assertTrue(bytesAvailable, "The file was not copied from the container."); + + // read the stream fully. Otherwise, the underlying stream will not be closed. + String responseAsString = asString(response); + assertNotNull(responseAsString); + assertTrue(responseAsString.length() > 0); + } + + @Test + public void copyFromNonExistingContainer() throws Exception { + try { + dockerClient.copyFileFromContainerCmd("non-existing", "/test").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException ignored) { + } + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java new file mode 100644 index 000000000..f2fd32b6a --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java @@ -0,0 +1,630 @@ +package com.github.dockerjava.core.command; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.exception.ConflictException; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.Bind; +import com.github.dockerjava.api.model.Device; +import com.github.dockerjava.api.model.ExposedPort; +import com.github.dockerjava.api.model.Frame; +import com.github.dockerjava.api.model.Link; +import com.github.dockerjava.api.model.LogConfig; +import com.github.dockerjava.api.model.Ports; +import com.github.dockerjava.api.model.RestartPolicy; +import com.github.dockerjava.api.model.Ulimit; +import com.github.dockerjava.api.model.Volume; +import com.github.dockerjava.api.model.VolumesFrom; +import com.github.dockerjava.client.AbstractDockerClientTest; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import java.lang.reflect.Method; +import java.security.SecureRandom; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import static com.github.dockerjava.api.model.Capability.MKNOD; +import static com.github.dockerjava.api.model.Capability.NET_ADMIN; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.hasItemInArray; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.startsWith; + +@Test(groups = "integration") +public class CreateContainerCmdImplTest extends AbstractDockerClientTest { + public static final String BUSYBOX_IMAGE = "busybox"; + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(expectedExceptions = ConflictException.class) + public void createContainerWithExistingName() throws DockerException { + + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("env") + .withName(containerName).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("env").withName(containerName).exec(); + } + + @Test + public void createContainerWithVolume() throws DockerException { + + Volume volume = new Volume("/var/log"); + + CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withVolumes(volume) + .withCmd("true").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + LOG.info("Inspect container {}", inspectContainerResponse.getConfig().getVolumes()); + + assertThat(inspectContainerResponse.getConfig().getVolumes().keySet(), contains("/var/log")); + + assertThat(inspectContainerResponse.getMounts().get(0).getDestination(), equalTo(volume)); + assertThat(inspectContainerResponse.getMounts().get(0).getMode(), equalTo("")); + assertThat(inspectContainerResponse.getMounts().get(0).getRW(), equalTo(true)); + } + + @Test + public void createContainerWithReadOnlyVolume() throws DockerException { + + Volume volume = new Volume("/srv/test"); + + CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withVolumes(volume) + .withCmd("true").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + LOG.info("Inspect container {}", inspectContainerResponse.getConfig().getVolumes()); + + assertThat(inspectContainerResponse.getConfig().getVolumes().keySet(), contains("/srv/test")); + + assertThat(inspectContainerResponse.getMounts().get(0).getDestination(), equalTo(volume)); + // TODO: Create a read-only volume and test like this + // assertFalse(inspectContainerResponse.getMounts().get(0).getRW()); + } + + @Test + public void createContainerWithVolumesFrom() throws DockerException { + + Volume volume1 = new Volume("/opt/webapp1"); + Volume volume2 = new Volume("/opt/webapp2"); + + String container1Name = UUID.randomUUID().toString(); + + Bind bind1 = new Bind("/src/webapp1", volume1); + Bind bind2 = new Bind("/src/webapp2", volume2); + + // create a running container with bind mounts + CreateContainerResponse container1 = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("sleep", "9999") + .withName(container1Name) + .withBinds(bind1, bind2).exec(); + LOG.info("Created container1 {}", container1.toString()); + + InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) + .exec(); + + assertThat(Arrays.asList(inspectContainerResponse1.getHostConfig().getBinds()), containsInAnyOrder(bind1, bind2)); + + assertThat(inspectContainerResponse1, mountedVolumes(containsInAnyOrder(volume1, volume2))); + + // create a second container with volumes from first container + CreateContainerResponse container2 = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("sleep", "9999") + .withVolumesFrom(new VolumesFrom(container1Name)).exec(); + LOG.info("Created container2 {}", container2.toString()); + + InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) + .exec(); + + // No volumes are created, the information is just stored in .HostConfig.VolumesFrom + assertThat(inspectContainerResponse2.getHostConfig().getVolumesFrom(), hasItemInArray(new VolumesFrom( + container1Name))); + + // To ensure that the information stored in VolumesFrom really is considered + // when starting the container, we start it and verify that it has the same + // bind mounts as the first container. + // This is somehow out of scope here, but it helped me to understand how the + // VolumesFrom feature really works. + dockerClient.startContainerCmd(container2.getId()).exec(); + LOG.info("Started container2 {}", container2.toString()); + + inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()).exec(); + + assertThat(inspectContainerResponse2.getHostConfig().getVolumesFrom(), hasItemInArray(new VolumesFrom( + container1Name))); + + assertThat(inspectContainerResponse2, mountedVolumes(containsInAnyOrder(volume1, volume2))); + } + + @Test + public void createContainerWithEnv() throws Exception { + + CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withEnv("VARIABLE=success") + .withCmd("env").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getConfig().getEnv()), containsInAnyOrder("VARIABLE=success")); + + dockerClient.startContainerCmd(container.getId()).exec(); + + assertThat(containerLog(container.getId()), containsString("VARIABLE=success")); + } + + @Test + public void createContainerWithHostname() throws Exception { + + CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withHostName("docker-java") + .withCmd("env").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getConfig().getHostName(), equalTo("docker-java")); + + dockerClient.startContainerCmd(container.getId()).exec(); + + assertThat(containerLog(container.getId()), containsString("HOSTNAME=docker-java")); + } + + @Test + public void createContainerWithName() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withName("container") + .withCmd("env").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getName(), equalTo("/container")); + + try { + dockerClient.createContainerCmd(BUSYBOX_IMAGE).withName("container").withCmd("env").exec(); + fail("Expected ConflictException"); + } catch (ConflictException e) { + } + + } + + @Test + public void createContainerWithLink() throws DockerException { + + CreateContainerResponse container1 = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("sleep", "9999") + .withName("container1").exec(); + LOG.info("Created container1 {}", container1.toString()); + assertThat(container1.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container1.getId()).exec(); + + InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) + .exec(); + LOG.info("Container1 Inspect: {}", inspectContainerResponse1.toString()); + assertThat(inspectContainerResponse1.getState().getRunning(), is(true)); + + CreateContainerResponse container2 = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withName("container2") + .withCmd("env").withLinks(new Link("container1", "container1Link")).exec(); + LOG.info("Created container {}", container2.toString()); + assertThat(container2.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) + .exec(); + assertThat(inspectContainerResponse2.getHostConfig().getLinks(), equalTo(new Link[]{new Link("container1", + "container1Link")})); + } + + @Test + public void createContainerWithCapAddAndCapDrop() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCapAdd(NET_ADMIN) + .withCapDrop(MKNOD).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getCapAdd()), contains(NET_ADMIN)); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getCapDrop()), contains(MKNOD)); + } + + @Test + public void createContainerWithDns() throws DockerException { + + String aDnsServer = "8.8.8.8"; + String anotherDnsServer = "8.8.4.4"; + + CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("true") + .withDns(aDnsServer, anotherDnsServer).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDns()), + contains(aDnsServer, anotherDnsServer)); + } + + @Test + public void createContainerWithEntrypoint() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withName("container") + .withEntrypoint("sleep", "9999").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getConfig().getEntrypoint()), contains("sleep", "9999")); + + } + + @Test + public void createContainerWithExtraHosts() throws DockerException { + + String[] extraHosts = {"dockerhost:127.0.0.1", "otherhost:10.0.0.1"}; + + CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withName("container") + .withExtraHosts(extraHosts).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getExtraHosts()), + containsInAnyOrder("dockerhost:127.0.0.1", "otherhost:10.0.0.1")); + } + + @Test + public void createContainerWithDevices() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("sleep", "9999") + .withDevices(new Device("rwm", "/dev/nulo", "/dev/zero")).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDevices()), contains(new Device("rwm", + "/dev/nulo", "/dev/zero"))); + } + + @Test + public void createContainerWithPortBindings() throws DockerException { + + ExposedPort tcp22 = ExposedPort.tcp(22); + ExposedPort tcp23 = ExposedPort.tcp(23); + + Ports portBindings = new Ports(); + portBindings.bind(tcp22, Ports.binding(11022)); + portBindings.bind(tcp23, Ports.binding(11023)); + portBindings.bind(tcp23, Ports.binding(11024)); + + CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("true") + .withExposedPorts(tcp22, tcp23).withPortBindings(portBindings).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getConfig().getExposedPorts()), contains(tcp22, tcp23)); + + assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp22)[0], + is(equalTo(Ports.binding(11022)))); + + assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[0], + is(equalTo(Ports.binding(11023)))); + + assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[1], + is(equalTo(Ports.binding(11024)))); + + } + + @Test + public void createContainerWithLinking() throws DockerException { + + CreateContainerResponse container1 = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("sleep", "9999") + .withName("container1").exec(); + + LOG.info("Created container1 {}", container1.toString()); + assertThat(container1.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container1.getId()).exec(); + + InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) + .exec(); + LOG.info("Container1 Inspect: {}", inspectContainerResponse1.toString()); + + assertThat(inspectContainerResponse1.getConfig(), is(notNullValue())); + assertThat(inspectContainerResponse1.getId(), not(isEmptyString())); + assertThat(inspectContainerResponse1.getId(), startsWith(container1.getId())); + assertThat(inspectContainerResponse1.getName(), equalTo("/container1")); + assertThat(inspectContainerResponse1.getImageId(), not(isEmptyString())); + assertThat(inspectContainerResponse1.getState(), is(notNullValue())); + assertThat(inspectContainerResponse1.getState().getRunning(), is(true)); + + if (!inspectContainerResponse1.getState().getRunning()) { + assertThat(inspectContainerResponse1.getState().getExitCode(), is(equalTo(0))); + } + + CreateContainerResponse container2 = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("sleep", "9999") + .withName("container2").withLinks(new Link("container1", "container1Link")).exec(); + + LOG.info("Created container2 {}", container2.toString()); + assertThat(container2.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) + .exec(); + LOG.info("Container2 Inspect: {}", inspectContainerResponse2.toString()); + + assertThat(inspectContainerResponse2.getConfig(), is(notNullValue())); + assertThat(inspectContainerResponse2.getId(), not(isEmptyString())); + assertThat(inspectContainerResponse2.getHostConfig(), is(notNullValue())); + assertThat(inspectContainerResponse2.getHostConfig().getLinks(), is(notNullValue())); + assertThat(inspectContainerResponse2.getHostConfig().getLinks(), equalTo(new Link[]{new Link("container1", + "container1Link")})); + assertThat(inspectContainerResponse2.getId(), startsWith(container2.getId())); + assertThat(inspectContainerResponse2.getName(), equalTo("/container2")); + assertThat(inspectContainerResponse2.getImageId(), not(isEmptyString())); + + } + + @Test + public void createContainerWithRestartPolicy() throws DockerException { + + RestartPolicy restartPolicy = RestartPolicy.onFailureRestart(5); + + CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("sleep", "9999") + .withRestartPolicy(restartPolicy).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getHostConfig().getRestartPolicy(), is(equalTo(restartPolicy))); + } + + @Test + public void createContainerWithPidMode() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("true") + .withPidMode("host").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getHostConfig().getPidMode(), is(equalTo("host"))); + } + + /** + * This tests support for --net option for the docker run command: --net="bridge" Set the Network mode for the container 'bridge': + * creates a new network stack for the container on the docker bridge 'none': no networking for this container 'container:': reuses + * another container network stack 'host': use the host network stack inside the container. Note: the host mode gives the container full + * access to local system services such as D-bus and is therefore considered insecure. + */ + @Test + public void createContainerWithNetworkMode() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("true") + .withNetworkMode("host").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getHostConfig().getNetworkMode(), is(equalTo("host"))); + } + + @Test + public void createContainerWithMacAddress() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE) + .withMacAddress("00:80:41:ae:fd:7e").withCmd("true").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertEquals(inspectContainerResponse.getConfig().getMacAddress(), "00:80:41:ae:fd:7e"); + } + + @Test(groups = "ignoreInCircleCi") + public void createContainerWithULimits() throws DockerException { + + Ulimit[] ulimits = {new Ulimit("nproc", 709, 1026), new Ulimit("nofile", 1024, 4096)}; + + CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withName("container") + .withUlimits(ulimits).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getUlimits()), + containsInAnyOrder(new Ulimit("nproc", 709, 1026), new Ulimit("nofile", 1024, 4096))); + + } + + @Test(groups = "ignoreInCircleCi") + public void createContainerWithLabels() throws DockerException { + + Map labels = new HashMap(); + labels.put("com.github.dockerjava.null", null); + labels.put("com.github.dockerjava.Boolean", "true"); + + CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withCmd("sleep", "9999") + .withLabels(labels).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + // null becomes empty string + labels.put("com.github.dockerjava.null", ""); + assertThat(inspectContainerResponse.getConfig().getLabels(), is(equalTo(labels))); + } + + @Test(groups = "ignoreInCircleCi") + public void createContainerWithLogConfig() throws DockerException { + + LogConfig logConfig = new LogConfig(LogConfig.LoggingType.NONE, null); + CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE).withLogConfig(logConfig).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + // null becomes empty string + assertEquals(inspectContainerResponse.getHostConfig().getLogConfig().type, logConfig.type); + } + + /** + * https://github.com/calavera/docker/blob/3781cde61ff10b1d9114ae5b4c5c1d1b2c20a1ee/integration-cli/docker_cli_run_unix_test.go#L319-L333 + */ + @Test + public void testWithStopSignal() throws Exception { + Integer signal = 10; // SIGUSR1 in busybox + + CreateContainerResponse resp = dockerClient.createContainerCmd(BUSYBOX_IMAGE) + .withCmd("/bin/sh", "-c", "trap 'echo \"exit trapped 10\"; exit 10' USR1; while true; do sleep 1; done") + .withAttachStdin(true) + .withTty(true) + .withStopSignal(signal.toString()) + .exec(); + final String containerId = resp.getId(); + assertThat(containerId, not(isEmptyString())); + dockerClient.startContainerCmd(containerId).exec(); + + InspectContainerResponse inspect = dockerClient.inspectContainerCmd(containerId).exec(); + assertThat(inspect.getState().getRunning(), is(true)); + + dockerClient.stopContainerCmd(containerId).exec(); + Thread.sleep(TimeUnit.SECONDS.toMillis(3)); + + inspect = dockerClient.inspectContainerCmd(containerId).exec(); + assertThat(inspect.getState().getRunning(), is(false)); + assertThat(inspect.getState().getExitCode(), is(signal)); + + StringBuilder stringBuilder = new StringBuilder(); + final StringBuilderLogReader callback = new StringBuilderLogReader(stringBuilder); + dockerClient.logContainerCmd(containerId) + .withStdErr(true) + .withStdOut(true) + .withTailAll() + .exec(callback) + .awaitCompletion(); + + String log = callback.builder.toString(); + assertThat(log, is("exit trapped 10")); + } + + private static class StringBuilderLogReader extends LogContainerResultCallback { + public StringBuilder builder; + + public StringBuilderLogReader(StringBuilder builder) { + this.builder = builder; + } + + @Override + public void onNext(Frame item) { + builder.append(new String(item.getPayload()).trim()); + super.onNext(item); + } + } + + @Test(groups = "ignoreInCircleCi") + public void createContainerWithCgroupParent() throws DockerException { + CreateContainerResponse container = dockerClient.createContainerCmd("busybox") + .withCgroupParent("/parent").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainer = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainer.getHostConfig().getCgroupParent(), is("/parent")); + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/CreateNetworkCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/CreateNetworkCmdImplTest.java new file mode 100644 index 000000000..eefeb535f --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/CreateNetworkCmdImplTest.java @@ -0,0 +1,52 @@ +package com.github.dockerjava.core.command; + +import com.github.dockerjava.api.command.CreateNetworkResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.client.AbstractDockerClientTest; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import java.lang.reflect.Method; + +@Test(groups = "integration") +public class CreateNetworkCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void createNetwork() throws DockerException { + + String networkName = "testNetwork"; + + CreateNetworkResponse createNetworkResponse = dockerClient.createNetworkCmd().withName(networkName).exec(); + + assertNotNull(createNetworkResponse.getId()); + + Network network = dockerClient.inspectNetworkCmd().withNetworkId(createNetworkResponse.getId()).exec(); + assertEquals(network.getName(), networkName); + assertEquals(network.getDriver(), "bridge"); + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/CreateVolumeCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/CreateVolumeCmdImplTest.java new file mode 100644 index 000000000..39688b424 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/CreateVolumeCmdImplTest.java @@ -0,0 +1,75 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateVolumeResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class CreateVolumeCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void createVolume() throws DockerException { + + String volumeName = "volume1"; + + CreateVolumeResponse createVolumeResponse = dockerClient.createVolumeCmd().withName(volumeName) + .withDriver("local").exec(); + + assertThat(createVolumeResponse.getName(), equalTo(volumeName)); + assertThat(createVolumeResponse.getDriver(), equalTo("local")); + assertThat(createVolumeResponse.getMountpoint(), containsString("/volume1/")); + } + + @Test + public void createVolumeWithExistingName() throws DockerException { + + String volumeName = "volume1"; + + CreateVolumeResponse createVolumeResponse1 = dockerClient.createVolumeCmd().withName(volumeName) + .withDriver("local").exec(); + + assertThat(createVolumeResponse1.getName(), equalTo(volumeName)); + assertThat(createVolumeResponse1.getDriver(), equalTo("local")); + assertThat(createVolumeResponse1.getMountpoint(), containsString("/volume1/")); + + CreateVolumeResponse createVolumeResponse2 = dockerClient.createVolumeCmd().withName(volumeName) + .withDriver("local").exec(); + + assertThat(createVolumeResponse2.getName(), equalTo(volumeName)); + assertThat(createVolumeResponse2.getDriver(), equalTo("local")); + assertThat(createVolumeResponse2.getMountpoint(), equalTo(createVolumeResponse1.getMountpoint())); + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImplTest.java new file mode 100644 index 000000000..7f94c5a0f --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImplTest.java @@ -0,0 +1,59 @@ +package com.github.dockerjava.core.command; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.CreateNetworkResponse; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.client.AbstractDockerClientTest; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import java.lang.reflect.Method; + +@Test(groups = "integration") +public class DisconnectFromNetworkCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void disconnectFromNetwork() throws InterruptedException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); + dockerClient.startContainerCmd(container.getId()).exec(); + + CreateNetworkResponse network = dockerClient.createNetworkCmd().withName("testNetwork").exec(); + + dockerClient.connectToNetworkCmd().withNetworkId(network.getId()).withContainerId(container.getId()).exec(); + + Network updatedNetwork = dockerClient.inspectNetworkCmd().withNetworkId(network.getId()).exec(); + + assertTrue(updatedNetwork.getContainers().containsKey(container.getId())); + + dockerClient.disconnectFromNetworkCmd().withNetworkId(network.getId()).withContainerId(container.getId()).exec(); + + updatedNetwork = dockerClient.inspectNetworkCmd().withNetworkId(network.getId()).exec(); + + assertFalse(updatedNetwork.getContainers().containsKey(container.getId())); + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/DockerfileFixture.java b/src/test/java/com/github/dockerjava/core/command/DockerfileFixture.java new file mode 100644 index 000000000..acb8b8a5d --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/DockerfileFixture.java @@ -0,0 +1,81 @@ +package com.github.dockerjava.core.command; + +import java.io.File; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.github.dockerjava.api.DockerClient; +import com.github.dockerjava.api.exception.InternalServerErrorException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.model.Image; + +/** + * Start and stop a single container for testing. + */ +public class DockerfileFixture implements AutoCloseable { + + private static final Logger LOGGER = LoggerFactory.getLogger(DockerfileFixture.class); + + private final DockerClient dockerClient; + + private String directory; + + private String repository; + + private String containerId; + + public DockerfileFixture(DockerClient dockerClient, String directory) { + this.dockerClient = dockerClient; + this.directory = directory; + } + + public void open() throws Exception { + + LOGGER.info("building {}", directory); + + dockerClient.buildImageCmd(new File("src/test/resources", directory)).withNoCache(true) + .exec(new BuildImageResultCallback()).awaitImageId(); + + Image lastCreatedImage = dockerClient.listImagesCmd().exec().get(0); + + repository = lastCreatedImage.getRepoTags()[0]; + + LOGGER.info("created {} {}", lastCreatedImage.getId(), repository); + + containerId = dockerClient.createContainerCmd(lastCreatedImage.getId()).exec().getId(); + + LOGGER.info("starting {}", containerId); + + dockerClient.startContainerCmd(containerId).exec(); + } + + @Override + public void close() throws Exception { + + if (containerId != null) { + LOGGER.info("removing container {}", containerId); + try { + dockerClient.removeContainerCmd(containerId).withForce(true) // stop too + .exec(); + } catch (NotFoundException | InternalServerErrorException ignored) { + LOGGER.info("ignoring {}", ignored.getMessage()); + } + containerId = null; + } + + if (repository != null) { + LOGGER.info("removing repository {}", repository); + try { + dockerClient.removeImageCmd(repository).withForce(true).exec(); + } catch (NotFoundException | InternalServerErrorException e) { + LOGGER.info("ignoring {}", e.getMessage()); + } + repository = null; + } + } + + public String getContainerId() { + return containerId; + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java new file mode 100644 index 000000000..939f95087 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java @@ -0,0 +1,159 @@ +package com.github.dockerjava.core.command; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.model.Event; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class EventsCmdImplTest extends AbstractDockerClientTest { + + private static int KNOWN_NUM_EVENTS = 4; + + private static String getEpochTime() { + return String.valueOf(System.currentTimeMillis() / 1000); + } + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + /* + * This specific test may fail with boot2docker as time may not in sync with host system + */ + @Test + public void testEventStreamTimeBound() throws Exception { + // Don't include other tests events + TimeUnit.SECONDS.sleep(1); + + String startTime = getEpochTime(); + int expectedEvents = generateEvents(); + String endTime = getEpochTime(); + + CountDownLatch countDownLatch = new CountDownLatch(expectedEvents); + EventsTestCallback eventCallback = new EventsTestCallback(countDownLatch); + + dockerClient.eventsCmd().withSince(startTime).withUntil(endTime).exec(eventCallback); + + Boolean zeroCount = countDownLatch.await(10, TimeUnit.SECONDS); + + eventCallback.close(); + + assertTrue(zeroCount, "Received only: " + eventCallback.getEvents()); + } + + @Test + public void testEventStreaming1() throws Exception { + // Don't include other tests events + TimeUnit.SECONDS.sleep(1); + + CountDownLatch countDownLatch = new CountDownLatch(KNOWN_NUM_EVENTS); + EventsTestCallback eventCallback = new EventsTestCallback(countDownLatch); + + dockerClient.eventsCmd().withSince(getEpochTime()).exec(eventCallback); + + generateEvents(); + + Boolean zeroCount = countDownLatch.await(10, TimeUnit.SECONDS); + + eventCallback.close(); + assertTrue(zeroCount, "Received only: " + eventCallback.getEvents()); + } + + @Test + public void testEventStreaming2() throws Exception { + // Don't include other tests events + TimeUnit.SECONDS.sleep(1); + + CountDownLatch countDownLatch = new CountDownLatch(KNOWN_NUM_EVENTS); + EventsTestCallback eventCallback = new EventsTestCallback(countDownLatch); + + dockerClient.eventsCmd().withSince(getEpochTime()).exec(eventCallback); + + generateEvents(); + + Boolean zeroCount = countDownLatch.await(10, TimeUnit.SECONDS); + + eventCallback.close(); + assertTrue(zeroCount, "Received only: " + eventCallback.getEvents()); + } + + public void testEventStreamingWithFilter() throws Exception { + // Don't include other tests events + TimeUnit.SECONDS.sleep(1); + + CountDownLatch countDownLatch = new CountDownLatch(1); + EventsTestCallback eventCallback = dockerClient.eventsCmd().withEventFilter("start") + .exec(new EventsTestCallback(countDownLatch)); + + generateEvents(); + + Boolean zeroCount = countDownLatch.await(10, TimeUnit.SECONDS); + + eventCallback.close(); + assertTrue(zeroCount, "Received only: " + eventCallback.getEvents()); + } + + /** + * This method generates {#link KNOWN_NUM_EVENTS} events + */ + private int generateEvents() throws Exception { + String testImage = "busybox"; + + dockerClient.pullImageCmd(testImage).exec(new PullImageResultCallback()).awaitSuccess(); + + CreateContainerResponse container = dockerClient.createContainerCmd(testImage).withCmd("sleep", "9999").exec(); + dockerClient.startContainerCmd(container.getId()).exec(); + dockerClient.stopContainerCmd(container.getId()).exec(); + return KNOWN_NUM_EVENTS; + } + + private class EventsTestCallback extends EventsResultCallback { + + private final CountDownLatch countDownLatch; + + private final List events = new ArrayList(); + + public EventsTestCallback(CountDownLatch countDownLatch) { + this.countDownLatch = countDownLatch; + } + + public void onNext(Event event) { + LOG.info("Received event #{}: {}", countDownLatch.getCount(), event); + countDownLatch.countDown(); + events.add(event); + } + + public List getEvents() { + return new ArrayList(events); + } + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/ExecCreateCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ExecCreateCmdImplTest.java new file mode 100644 index 000000000..139c81f56 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/ExecCreateCmdImplTest.java @@ -0,0 +1,61 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +import java.lang.reflect.Method; +import java.security.SecureRandom; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.ExecCreateCmdResponse; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class ExecCreateCmdImplTest extends AbstractDockerClientTest { + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void execCreateTest() { + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("top") + .withName(containerName).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) + .withCmd("touch", "file.log").exec(); + + assertThat(execCreateCmdResponse.getId(), not(isEmptyString())); + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java new file mode 100644 index 000000000..c4f0b9189 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java @@ -0,0 +1,95 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +import java.io.InputStream; +import java.lang.reflect.Method; +import java.security.SecureRandom; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.ExecCreateCmdResponse; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class ExecStartCmdImplTest extends AbstractDockerClientTest { + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void execStart() throws Exception { + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("top") + .withName(containerName).exec(); + LOG.info("Created container {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) + .withAttachStdout(true).withCmd("touch", "/execStartTest.log").exec(); + dockerClient.execStartCmd(execCreateCmdResponse.getId()).exec( + new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); + + InputStream response = dockerClient.copyArchiveFromContainerCmd(container.getId(), "/execStartTest.log").exec(); + Boolean bytesAvailable = response.available() > 0; + assertTrue(bytesAvailable, "The file was not copied from the container."); + + // read the stream fully. Otherwise, the underlying stream will not be closed. + String responseAsString = asString(response); + assertNotNull(responseAsString); + assertTrue(responseAsString.length() > 0); + } + + @Test(groups = "ignoreInCircleCi") + public void execStartAttached() throws Exception { + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName(containerName).exec(); + LOG.info("Created container {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) + .withAttachStdout(true).withCmd("touch", "/execStartTest.log").exec(); + dockerClient.execStartCmd(execCreateCmdResponse.getId()).withDetach(false).withTty(true) + .exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); + + InputStream response = dockerClient.copyArchiveFromContainerCmd(container.getId(), "/execStartTest.log").exec(); + Boolean bytesAvailable = response.available() > 0; + assertTrue(bytesAvailable, "The file was not copied from the container."); + + // read the stream fully. Otherwise, the underlying stream will not be closed. + String responseAsString = asString(response); + assertNotNull(responseAsString); + assertTrue(responseAsString.length() > 0); + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/FrameReaderITest.java b/src/test/java/com/github/dockerjava/core/command/FrameReaderITest.java new file mode 100644 index 000000000..06d07667c --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/FrameReaderITest.java @@ -0,0 +1,117 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.hamcrest.Matchers.hasEntry; +import static org.hamcrest.Matchers.hasProperty; +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.Matchers.is; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.List; + +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.DockerClient; +import com.github.dockerjava.api.model.Frame; +import com.github.dockerjava.api.model.StreamType; +import com.github.dockerjava.client.AbstractDockerClientTest; +import com.github.dockerjava.core.DockerClientBuilder; + +@Test(groups = "integration") +public class FrameReaderITest { + + private DockerClient dockerClient; + + private DockerfileFixture dockerfileFixture; + + @BeforeTest + public void beforeTest() throws Exception { + dockerClient = DockerClientBuilder.getInstance().build(); + dockerfileFixture = new DockerfileFixture(dockerClient, "frameReaderDockerfile"); + dockerfileFixture.open(); + } + + @AfterTest + public void deleteDockerContainerImage() throws Exception { + dockerfileFixture.close(); + dockerClient.close(); + } + + @Test + public void canCloseFrameReaderAndReadExpectedLines() throws Exception { + // wait for the container to be successfully executed + int exitCode = dockerClient.waitContainerCmd(dockerfileFixture.getContainerId()) + .exec(new WaitContainerResultCallback()).awaitStatusCode(); + assertEquals(0, exitCode); + + final List loggingFrames = getLoggingFrames(); + final Frame outFrame = new Frame(StreamType.STDOUT, "to stdout\n".getBytes()); + final Frame errFrame = new Frame(StreamType.STDERR, "to stderr\n".getBytes()); + + assertThat(loggingFrames, containsInAnyOrder(outFrame, errFrame)); + assertThat(loggingFrames, hasSize(2)); + } + + private List getLoggingFrames() throws Exception { + + FrameReaderITestCallback collectFramesCallback = new FrameReaderITestCallback(); + + dockerClient.logContainerCmd(dockerfileFixture.getContainerId()).withStdOut(true).withStdErr(true) + .withTailAll() + // we can't follow stream here as it blocks reading from resulting InputStream infinitely + // .withFollowStream() + .exec(collectFramesCallback).awaitCompletion(); + + return collectFramesCallback.frames; + } + + @Test + public void canLogInOneThreadAndExecuteCommandsInAnother() throws Exception { + + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + try { + + Iterator frames = getLoggingFrames().iterator(); + + while (frames.hasNext()) { + frames.next(); + } + + } catch (Exception e) { + throw new RuntimeException(e); + } + } + }); + + thread.start(); + + try (DockerfileFixture busyboxDockerfile = new DockerfileFixture(dockerClient, "busyboxDockerfile")) { + busyboxDockerfile.open(); + } + + thread.join(); + + } + + public static class FrameReaderITestCallback extends LogContainerResultCallback { + + public List frames = new ArrayList(); + + @Override + public void onNext(Frame item) { + frames.add(item); + super.onNext(item); + } + + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/FrameReaderTest.java b/src/test/java/com/github/dockerjava/core/command/FrameReaderTest.java new file mode 100644 index 000000000..38ddf1402 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/FrameReaderTest.java @@ -0,0 +1,61 @@ +package com.github.dockerjava.core.command; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNull; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import org.testng.annotations.Test; + +import com.github.dockerjava.api.model.Frame; +import com.github.dockerjava.api.model.StreamType; + +public class FrameReaderTest { + public static final int HEADER_SIZE = 8; + + private final List bytes = new ArrayList<>(); + + private final InputStream inputStream = new InputStream() { + @Override + public int read() throws IOException { + return bytes.isEmpty() ? -1 : bytes.remove(0); + } + }; + + private final FrameReader frameReader = new FrameReader(inputStream); + + @Test + public void endOfStreamReturnsNull() throws Exception { + assertNull(nextFrame()); + } + + @Test + public void stdInBytesFrameReturnsFrame() throws Exception { + assertEquals(nextFrame(0, 0, 0, 0, 0, 0, 0, 0), new Frame(StreamType.STDIN, new byte[0])); + } + + private Frame nextFrame(int... bytes) throws IOException { + setBytes(bytes); + return frameReader.readFrame(); + } + + @Test + public void stdOutBytesFrameReturnsFrame() throws Exception { + assertEquals(nextFrame(1, 0, 0, 0, 0, 0, 0, 0), new Frame(StreamType.STDOUT, new byte[0])); + } + + @Test + public void stdErrBytesFrameReturnsFrame() throws Exception { + assertEquals(nextFrame(2, 0, 0, 0, 0, 0, 0, 0), new Frame(StreamType.STDERR, new byte[0])); + } + + private void setBytes(int... bytes) { + this.bytes.clear(); + for (int aByte : bytes) { + this.bytes.add(aByte); + } + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/InfoCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/InfoCmdImplTest.java new file mode 100644 index 000000000..d234efe4c --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/InfoCmdImplTest.java @@ -0,0 +1,71 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.isEmptyOrNullString; +import static org.hamcrest.Matchers.not; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.model.Info; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class InfoCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void info() throws DockerException { + // Make sure that there is at least one container for the assertion + // TODO extract this into a shared method + if (dockerClient.listContainersCmd().withShowAll(true).exec().size() == 0) { + CreateContainerResponse container = dockerClient.createContainerCmd("busybox") + .withName("docker-java-itest-info").withCmd("touch", "/test").exec(); + + LOG.info("Created container: {}", container); + assertThat(container.getId(), not(isEmptyOrNullString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + } + + Info dockerInfo = dockerClient.infoCmd().exec(); + LOG.info(dockerInfo.toString()); + + assertTrue(dockerInfo.toString().contains("containers")); + assertTrue(dockerInfo.toString().contains("images")); + assertTrue(dockerInfo.toString().contains("debug")); + + assertTrue(dockerInfo.getContainers() > 0); + assertTrue(dockerInfo.getImages() > 0); + assertTrue(dockerInfo.getNFd() > 0); + assertTrue(dockerInfo.getNGoroutines() > 0); + assertTrue(dockerInfo.getNCPU() > 0); + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/InspectContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/InspectContainerCmdImplTest.java new file mode 100644 index 000000000..47ed11201 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/InspectContainerCmdImplTest.java @@ -0,0 +1,100 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +import java.lang.reflect.Method; +import java.security.SecureRandom; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class InspectContainerCmdImplTest extends AbstractDockerClientTest { + + public static final Logger LOG = LoggerFactory.getLogger(InspectContainerCmdImplTest.class); + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test() + public void inspectContainer() throws DockerException { + + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("top") + .withName(containerName).exec(); + LOG.info("Created container {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse containerInfo = dockerClient.inspectContainerCmd(container.getId()).exec(); + assertEquals(containerInfo.getId(), container.getId()); + + } + + @Test(expectedExceptions = NotFoundException.class) + public void inspectNonExistingContainer() throws DockerException { + dockerClient.inspectContainerCmd("non-existing").exec(); + } + + @Test + public void inspectContainerRestartCount() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox") + .withCmd("env").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getRestartCount(), equalTo(0)); + } + + @Test + public void inspectContainerNetworkSettings() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox") + .withCmd("env").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertFalse(inspectContainerResponse.getNetworkSettings().getHairpinMode()); + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/InspectExecCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/InspectExecCmdImplTest.java new file mode 100644 index 000000000..d86bcc39e --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/InspectExecCmdImplTest.java @@ -0,0 +1,144 @@ +package com.github.dockerjava.core.command; + +import static com.github.dockerjava.core.RemoteApiVersion.VERSION_1_22; +import static com.github.dockerjava.utils.TestUtils.getVersion; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.nullValue; + +import java.io.IOException; +import java.lang.reflect.Method; +import java.security.SecureRandom; + +import com.github.dockerjava.core.RemoteApiVersion; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.ExecCreateCmdResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.command.InspectExecResponse; +import com.github.dockerjava.client.AbstractDockerClientTest; +import com.github.dockerjava.test.serdes.JSONTestHelper; + +@Test(groups = "integration") +public class InspectExecCmdImplTest extends AbstractDockerClientTest { + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void inspectExec() throws Exception { + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName(containerName).exec(); + LOG.info("Created container {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + // Check that file does not exist + ExecCreateCmdResponse checkFileExec1 = dockerClient.execCreateCmd(container.getId()).withAttachStdout(true) + .withAttachStderr(true).withCmd("test", "-e", "/marker").exec(); + LOG.info("Created exec {}", checkFileExec1.toString()); + assertThat(checkFileExec1.getId(), not(isEmptyString())); + dockerClient.execStartCmd(checkFileExec1.getId()).withDetach(false) + .exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); + InspectExecResponse first = dockerClient.inspectExecCmd(checkFileExec1.getId()).exec(); + assertThat(first.isRunning(), is(false)); + assertThat(first.getExitCode(), is(1)); + + // Create the file + ExecCreateCmdResponse touchFileExec = dockerClient.execCreateCmd(container.getId()).withAttachStdout(true) + .withAttachStderr(true).withCmd("touch", "/marker").exec(); + LOG.info("Created exec {}", touchFileExec.toString()); + assertThat(touchFileExec.getId(), not(isEmptyString())); + dockerClient.execStartCmd(touchFileExec.getId()).withDetach(false) + .exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); + InspectExecResponse second = dockerClient.inspectExecCmd(touchFileExec.getId()).exec(); + assertThat(second.isRunning(), is(false)); + assertThat(second.getExitCode(), is(0)); + + // Check that file does exist now + ExecCreateCmdResponse checkFileExec2 = dockerClient.execCreateCmd(container.getId()).withAttachStdout(true) + .withAttachStderr(true).withCmd("test", "-e", "/marker").exec(); + LOG.info("Created exec {}", checkFileExec2.toString()); + assertThat(checkFileExec2.getId(), not(isEmptyString())); + dockerClient.execStartCmd(checkFileExec2.getId()).withDetach(false) + .exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); + InspectExecResponse third = dockerClient.inspectExecCmd(checkFileExec2.getId()).exec(); + assertThat(third.isRunning(), is(false)); + assertThat(third.getExitCode(), is(0)); + + // Get container info and check its roundtrip to ensure the consistency + InspectContainerResponse containerInfo = dockerClient.inspectContainerCmd(container.getId()).exec(); + assertEquals(containerInfo.getId(), container.getId()); + JSONTestHelper.testRoundTrip(containerInfo); + } + + @Test(groups = "ignoreInCircleCi") + public void inspectExecNetworkSettings() throws IOException { + final RemoteApiVersion apiVersion = getVersion(dockerClient); + + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName(containerName).exec(); + LOG.info("Created container {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + ExecCreateCmdResponse exec = dockerClient.execCreateCmd(container.getId()).withAttachStdout(true) + .withAttachStderr(true).withCmd("/bin/bash").exec(); + LOG.info("Created exec {}", exec.toString()); + assertThat(exec.getId(), not(isEmptyString())); + + InspectExecResponse inspectExecResponse = dockerClient.inspectExecCmd(exec.getId()).exec(); + + if (apiVersion.isGreaterOrEqual(RemoteApiVersion.VERSION_1_22)) { + assertThat(inspectExecResponse.getExitCode(), is(nullValue())); + assertThat(inspectExecResponse.getCanRemove(), is(false)); + assertThat(inspectExecResponse.getContainerID(), is(container.getId())); + } else { + assertThat(inspectExecResponse.getExitCode(), is(0)); + assertNotNull(inspectExecResponse.getContainer().getNetworkSettings().getNetworks().get("bridge")); + } + + assertThat(inspectExecResponse.isOpenStdin(), is(false)); + assertThat(inspectExecResponse.isOpenStdout(), is(true)); + assertThat(inspectExecResponse.isRunning(), is(false)); + + final InspectExecResponse.Container inspectContainer = inspectExecResponse.getContainer(); + if (apiVersion.isGreaterOrEqual(VERSION_1_22)) { + assertThat(inspectContainer, nullValue()); + } else { + assertThat(inspectContainer, notNullValue()); + assertNotNull(inspectContainer.getNetworkSettings().getNetworks().get("bridge")); + } + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/InspectNetworkCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/InspectNetworkCmdImplTest.java new file mode 100644 index 000000000..9d992eb15 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/InspectNetworkCmdImplTest.java @@ -0,0 +1,57 @@ +package com.github.dockerjava.core.command; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.client.AbstractDockerClientTest; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import java.lang.reflect.Method; +import java.util.List; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; + +@Test(groups = "integration") +public class InspectNetworkCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void inspectNetwork() throws DockerException { + + List networks = dockerClient.listNetworksCmd().exec(); + + Network expected = findNetwork(networks, "bridge"); + + Network network = dockerClient.inspectNetworkCmd().withNetworkId(expected.getId()).exec(); + + assertThat(network.getName(), equalTo(expected.getName())); + assertThat(network.getScope(), equalTo(expected.getScope())); + assertThat(network.getDriver(), equalTo(expected.getDriver())); + assertThat(network.getIpam().getConfig().get(0).getSubnet(), equalTo(expected.getIpam().getConfig().get(0).getSubnet())); + assertThat(network.getIpam().getDriver(), equalTo(expected.getIpam().getDriver())); + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/InspectVolumeCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/InspectVolumeCmdImplTest.java new file mode 100644 index 000000000..c24f173df --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/InspectVolumeCmdImplTest.java @@ -0,0 +1,65 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.InspectVolumeResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class InspectVolumeCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void inspectVolume() throws DockerException { + + String volumeName = "volume1"; + + dockerClient.createVolumeCmd().withName(volumeName).withDriver("local").exec(); + + InspectVolumeResponse inspectVolumeResponse = dockerClient.inspectVolumeCmd(volumeName).exec(); + + assertThat(inspectVolumeResponse.getName(), equalTo("volume1")); + assertThat(inspectVolumeResponse.getDriver(), equalTo("local")); + assertThat(inspectVolumeResponse.getMountpoint(), containsString("/volume1/")); + } + + @Test(expectedExceptions = NotFoundException.class) + public void inspectNonExistentVolume() throws DockerException { + + String volumeName = "non-existing"; + + dockerClient.inspectVolumeCmd(volumeName).exec(); + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/KillContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/KillContainerCmdImplTest.java new file mode 100644 index 000000000..3ba85928e --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/KillContainerCmdImplTest.java @@ -0,0 +1,80 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +import java.lang.reflect.Method; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class KillContainerCmdImplTest extends AbstractDockerClientTest { + + public static final Logger LOG = LoggerFactory.getLogger(KillContainerCmdImplTest.class); + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void killContainer() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + dockerClient.startContainerCmd(container.getId()).exec(); + + LOG.info("Killing container: {}", container.getId()); + dockerClient.killContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); + + assertThat(inspectContainerResponse.getState().getRunning(), is(equalTo(false))); + assertThat(inspectContainerResponse.getState().getExitCode(), not(equalTo(0))); + + } + + @Test + public void killNonExistingContainer() throws DockerException { + + try { + dockerClient.killContainerCmd("non-existing").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + } + } + +} diff --git a/src/test/java/com/github/dockerjava/core/command/ListContainersCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ListContainersCmdImplTest.java new file mode 100644 index 000000000..7bbfb3945 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/ListContainersCmdImplTest.java @@ -0,0 +1,170 @@ +package com.github.dockerjava.core.command; + +import static ch.lambdaj.Lambda.filter; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.startsWith; +import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; + +import java.lang.reflect.Method; +import java.util.List; +import java.util.Map; + +import org.hamcrest.Matcher; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.model.Container; +import com.github.dockerjava.client.AbstractDockerClientTest; +import com.google.common.collect.ImmutableMap; + +@Test(groups = "integration") +public class ListContainersCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void testListContainers() throws Exception { + + String testImage = "busybox"; + + // need to block until image is pulled completely + dockerClient.pullImageCmd(testImage).exec(new PullImageResultCallback()).awaitSuccess(); + + List containers = dockerClient.listContainersCmd().withShowAll(true).exec(); + assertThat(containers, notNullValue()); + LOG.info("Container List: {}", containers); + + int size = containers.size(); + + CreateContainerResponse container1 = dockerClient.createContainerCmd(testImage).withCmd("echo").exec(); + + assertThat(container1.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container1.getId()).exec(); + + assertThat(inspectContainerResponse.getConfig().getImage(), is(equalTo(testImage))); + + dockerClient.startContainerCmd(container1.getId()).exec(); + + LOG.info("container id: " + container1.getId()); + + List containers2 = dockerClient.listContainersCmd().withShowAll(true).exec(); + + for (Container container : containers2) { + LOG.info("listContainer: id=" + container.getId() + " image=" + container.getImage()); + } + + assertThat(size + 1, is(equalTo(containers2.size()))); + Matcher matcher = hasItem(hasField("id", startsWith(container1.getId()))); + assertThat(containers2, matcher); + + List filteredContainers = filter(hasField("id", startsWith(container1.getId())), containers2); + assertThat(filteredContainers.size(), is(equalTo(1))); + + for (Container container : filteredContainers) { + LOG.info("filteredContainer: " + container); + } + + Container container2 = filteredContainers.get(0); + assertThat(container2.getCommand(), not(isEmptyString())); + assertThat(container2.getImage(), startsWith(testImage)); + } + + @Test + public void testListContainersWithLabelsFilter() throws Exception { + + String testImage = "busybox"; + + // need to block until image is pulled completely + dockerClient.pullImageCmd(testImage).exec(new PullImageResultCallback()).awaitCompletion(); + + List containers = dockerClient.listContainersCmd().withShowAll(true).exec(); + assertThat(containers, notNullValue()); + LOG.info("Container List: {}", containers); + + int size = containers.size(); + + CreateContainerResponse container1 = dockerClient.createContainerCmd(testImage).withCmd("echo").exec(); + + assertThat(container1.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container1.getId()).exec(); + + assertThat(inspectContainerResponse.getConfig().getImage(), is(equalTo(testImage))); + + dockerClient.startContainerCmd(container1.getId()).exec(); + + LOG.info("container id: " + container1.getId()); + + List containers2 = dockerClient.listContainersCmd().withShowAll(true).exec(); + + for (Container container : containers2) { + LOG.info("listContainer: id=" + container.getId() + " image=" + container.getImage()); + } + + assertThat(size + 1, is(equalTo(containers2.size()))); + Matcher matcher = hasItem(hasField("id", startsWith(container1.getId()))); + assertThat(containers2, matcher); + + List filteredContainers = filter(hasField("id", startsWith(container1.getId())), containers2); + assertThat(filteredContainers.size(), is(equalTo(1))); + + for (Container container : filteredContainers) { + LOG.info("filteredContainer: " + container); + } + + Container container2 = filteredContainers.get(0); + assertThat(container2.getCommand(), not(isEmptyString())); + assertThat(container2.getImage(), startsWith(testImage)); + + Map labels = ImmutableMap.of("test", "docker-java"); + + // list with filter by label + dockerClient.createContainerCmd(testImage).withCmd("echo").withLabels(labels).exec(); + filteredContainers = dockerClient.listContainersCmd().withShowAll(true) + .withLabelFilter(labels).exec(); + assertThat(filteredContainers.size(), is(equalTo(1))); + Container container3 = filteredContainers.get(0); + assertThat(container3.getCommand(), not(isEmptyString())); + assertThat(container3.getImage(), startsWith(testImage)); + + filteredContainers = dockerClient.listContainersCmd().withShowAll(true) + .withLabelFilter("test").exec(); + assertThat(filteredContainers.size(), is(equalTo(1))); + container3 = filteredContainers.get(0); + assertThat(container3.getCommand(), not(isEmptyString())); + assertThat(container3.getImage(), startsWith(testImage)); + assertEquals(container3.getLabels(), labels); + } + +} diff --git a/src/test/java/com/github/dockerjava/core/command/ListImagesCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ListImagesCmdImplTest.java new file mode 100644 index 000000000..1b811867a --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/ListImagesCmdImplTest.java @@ -0,0 +1,101 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.emptyArray; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.greaterThan; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.notNullValue; + +import java.lang.reflect.Method; +import java.util.List; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.model.Image; +import com.github.dockerjava.api.model.Info; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class ListImagesCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void listImages() throws DockerException { + List images = dockerClient.listImagesCmd().withShowAll(true).exec(); + assertThat(images, notNullValue()); + LOG.info("Images List: {}", images); + Info info = dockerClient.infoCmd().exec(); + + assertThat(images.size(), equalTo(info.getImages())); + + Image img = images.get(0); + assertThat(img.getCreated(), is(greaterThan(0L))); + assertThat(img.getVirtualSize(), is(greaterThan(0L))); + assertThat(img.getId(), not(isEmptyString())); + assertThat(img.getRepoTags(), not(emptyArray())); + } + + @Test(groups = "ignoreInCircleCi") + public void listImagesWithDanglingFilter() throws DockerException { + String imageId = createDanglingImage(); + List images = dockerClient.listImagesCmd().withDanglingFilter(true).withShowAll(true) + .exec(); + assertThat(images, notNullValue()); + LOG.info("Images List: {}", images); + assertThat(images.size(), is(greaterThan(0))); + Boolean imageInFilteredList = isImageInFilteredList(images, imageId); + assertTrue(imageInFilteredList); + } + + private boolean isImageInFilteredList(List images, String expectedImageId) { + for (Image image : images) { + if (expectedImageId.equals(image.getId())) { + return true; + } + } + return false; + } + + private String createDanglingImage() { + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + dockerClient.startContainerCmd(container.getId()).exec(); + + LOG.info("Committing container {}", container.toString()); + String imageId = dockerClient.commitCmd(container.getId()).exec(); + + dockerClient.stopContainerCmd(container.getId()).exec(); + dockerClient.removeContainerCmd(container.getId()).exec(); + return imageId; + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/ListNetworksCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ListNetworksCmdImplTest.java new file mode 100644 index 000000000..192adb4bc --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/ListNetworksCmdImplTest.java @@ -0,0 +1,55 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; + +import java.lang.reflect.Method; +import java.util.List; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class ListNetworksCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void listNetworks() throws DockerException { + + List networks = dockerClient.listNetworksCmd().exec(); + + Network network = findNetwork(networks, "bridge"); + + assertThat(network.getName(), equalTo("bridge")); + assertThat(network.getScope(), equalTo("local")); + assertThat(network.getDriver(), equalTo("bridge")); + assertThat(network.getIpam().getDriver(), equalTo("default")); + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/ListVolumesCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ListVolumesCmdImplTest.java new file mode 100644 index 000000000..646f502c8 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/ListVolumesCmdImplTest.java @@ -0,0 +1,59 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.greaterThanOrEqualTo; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateVolumeResponse; +import com.github.dockerjava.api.command.ListVolumesResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class ListVolumesCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void listVolumes() throws DockerException { + + CreateVolumeResponse createVolumeResponse = dockerClient.createVolumeCmd().withName("volume1") + .withDriver("local").exec(); + + assertThat(createVolumeResponse.getName(), equalTo("volume1")); + assertThat(createVolumeResponse.getDriver(), equalTo("local")); + assertThat(createVolumeResponse.getMountpoint(), containsString("/volume1/")); + + ListVolumesResponse listVolumesResponse = dockerClient.listVolumesCmd().exec(); + + assertThat(listVolumesResponse.getVolumes().size(), greaterThanOrEqualTo(1)); + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/LogContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/LogContainerCmdImplTest.java new file mode 100644 index 000000000..817179eb2 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/LogContainerCmdImplTest.java @@ -0,0 +1,171 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.containsString; + +import java.io.IOException; +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class LogContainerCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void asyncLogContainer() throws Exception { + + String snippet = "hello world"; + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("/bin/echo", snippet) + .exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()) + .awaitStatusCode(); + + assertThat(exitCode, equalTo(0)); + + LogContainerTestCallback loggingCallback = new LogContainerTestCallback(); + + // this essentially test the since=0 case + dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback); + + loggingCallback.awaitCompletion(); + + assertTrue(loggingCallback.toString().contains(snippet)); + } + + @Test + public void asyncLogNonExistingContainer() throws Exception { + + LogContainerTestCallback loggingCallback = new LogContainerTestCallback() { + @Override + public void onError(Throwable throwable) { + + assertEquals(throwable.getClass().getName(), NotFoundException.class.getName()); + + try { + // close the callback to prevent the call to onComplete + close(); + } catch (IOException e) { + throw new RuntimeException(); + } + + super.onError(throwable); + } + + public void onComplete() { + super.onComplete(); + fail("expected NotFoundException"); + }; + }; + + dockerClient.logContainerCmd("non-existing").withStdErr(true).withStdOut(true).exec(loggingCallback) + .awaitCompletion(); + } + + @Test + public void asyncMultipleLogContainer() throws Exception { + + String snippet = "hello world"; + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("/bin/echo", snippet) + .exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()) + .awaitStatusCode(); + + assertThat(exitCode, equalTo(0)); + + LogContainerTestCallback loggingCallback = new LogContainerTestCallback(); + + dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback); + + loggingCallback.close(); + + loggingCallback = new LogContainerTestCallback(); + + dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback); + + loggingCallback.close(); + + loggingCallback = new LogContainerTestCallback(); + + dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback); + + loggingCallback.awaitCompletion(); + + assertTrue(loggingCallback.toString().contains(snippet)); + } + + @Test + public void asyncLogContainerWithSince() throws Exception { + String snippet = "hello world"; + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("/bin/echo", snippet) + .exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + int timestamp = (int) (System.currentTimeMillis() / 1000); + + dockerClient.startContainerCmd(container.getId()).exec(); + + int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()) + .awaitStatusCode(); + + assertThat(exitCode, equalTo(0)); + + LogContainerTestCallback loggingCallback = new LogContainerTestCallback(); + + dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).withSince(timestamp) + .exec(loggingCallback); + + loggingCallback.awaitCompletion(); + + assertThat(loggingCallback.toString(), containsString(snippet)); + } + +} diff --git a/src/test/java/com/github/dockerjava/core/command/PullImageCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/PullImageCmdImplTest.java new file mode 100644 index 000000000..d5e6d2c48 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/PullImageCmdImplTest.java @@ -0,0 +1,117 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.lessThanOrEqualTo; +import static org.hamcrest.Matchers.notNullValue; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.async.ResultCallback; +import com.github.dockerjava.api.command.InspectImageResponse; +import com.github.dockerjava.api.command.PullImageCmd; +import com.github.dockerjava.api.model.Info; +import com.github.dockerjava.api.model.PullResponseItem; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class PullImageCmdImplTest extends AbstractDockerClientTest { + + private static final PullImageCmd.Exec NOP_EXEC = new PullImageCmd.Exec() { + public Void exec(PullImageCmd command, ResultCallback resultCallback) { + return null; + }; + }; + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void nullAuthConfig() throws Exception { + PullImageCmdImpl pullImageCmd = new PullImageCmdImpl(NOP_EXEC, null, ""); + try { + pullImageCmd.withAuthConfig(null); + fail(); + } catch (Exception e) { + assertEquals(e.getMessage(), "authConfig was not specified"); + } finally { + pullImageCmd.close(); + } + } + + @Test + public void testPullImage() throws Exception { + Info info = dockerClient.infoCmd().exec(); + LOG.info("Client info: {}", info.toString()); + + int imgCount = info.getImages(); + LOG.info("imgCount1: {}", imgCount); + + // This should be an image that is not used by other repositories + // already + // pulled down, preferably small in size. If tag is not used pull will + // download all images in that repository but tmpImgs will only + // deleted 'latest' image but not images with other tags + String testImage = "hackmann/empty"; + + LOG.info("Removing image: {}", testImage); + + try { + dockerClient.removeImageCmd(testImage).withForce(true).exec(); + } catch (NotFoundException e) { + // just ignore if not exist + } + + info = dockerClient.infoCmd().exec(); + LOG.info("Client info: {}", info.toString()); + + imgCount = info.getImages(); + LOG.info("imgCount2: {}", imgCount); + + LOG.info("Pulling image: {}", testImage); + + dockerClient.pullImageCmd(testImage).exec(new PullImageResultCallback()).awaitSuccess(); + + info = dockerClient.infoCmd().exec(); + LOG.info("Client info after pull, {}", info.toString()); + + assertThat(imgCount, lessThanOrEqualTo(info.getImages())); + + InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(testImage).exec(); + LOG.info("Image Inspect: {}", inspectImageResponse.toString()); + assertThat(inspectImageResponse, notNullValue()); + } + + @Test + public void testPullNonExistingImage() throws Exception { + + // does not throw an exception + // stream needs to be fully read in order to close the underlying connection + dockerClient.pullImageCmd("xvxcv/foo").exec(new PullImageResultCallback()).awaitCompletion(); + } + +} diff --git a/src/test/java/com/github/dockerjava/core/command/PushImageCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/PushImageCmdImplTest.java new file mode 100644 index 000000000..e89a071b8 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/PushImageCmdImplTest.java @@ -0,0 +1,78 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +import java.lang.reflect.Method; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerClientException; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class PushImageCmdImplTest extends AbstractDockerClientTest { + + public static final Logger LOG = LoggerFactory.getLogger(PushImageCmdImplTest.class); + + String username; + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + username = dockerClient.authConfig().getUsername(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void pushLatest() throws Exception { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + LOG.info("Committing container: {}", container.toString()); + String imageId = dockerClient.commitCmd(container.getId()).withRepository(username + "/busybox").exec(); + + // we have to block until image is pushed + dockerClient.pushImageCmd(username + "/busybox").exec(new PushImageResultCallback()).awaitSuccess(); + + LOG.info("Removing image: {}", imageId); + dockerClient.removeImageCmd(imageId).exec(); + + dockerClient.pullImageCmd(username + "/busybox").exec(new PullImageResultCallback()).awaitSuccess(); + } + + @Test(expectedExceptions = DockerClientException.class) + public void pushNonExistentImage() throws Exception { + + dockerClient.pushImageCmd(username + "/xxx").exec(new PushImageResultCallback()).awaitSuccess(); + + } + +} diff --git a/src/test/java/com/github/dockerjava/core/command/RemoveContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/RemoveContainerCmdImplTest.java new file mode 100644 index 000000000..87ace71df --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/RemoveContainerCmdImplTest.java @@ -0,0 +1,80 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.startsWith; +import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; + +import java.lang.reflect.Method; +import java.util.List; + +import org.hamcrest.Matcher; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.model.Container; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class RemoveContainerCmdImplTest extends AbstractDockerClientTest { + + public static final Logger LOG = LoggerFactory.getLogger(RemoveContainerCmdImplTest.class); + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void removeContainer() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true").exec(); + + dockerClient.startContainerCmd(container.getId()).exec(); + dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()).awaitStatusCode(); + + LOG.info("Removing container: {}", container.getId()); + dockerClient.removeContainerCmd(container.getId()).exec(); + + List containers2 = dockerClient.listContainersCmd().withShowAll(true).exec(); + + Matcher matcher = not(hasItem(hasField("id", startsWith(container.getId())))); + assertThat(containers2, matcher); + + } + + @Test + public void removeNonExistingContainer() throws DockerException { + try { + dockerClient.removeContainerCmd("non-existing").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + } + } + +} diff --git a/src/test/java/com/github/dockerjava/core/command/RemoveImageCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/RemoveImageCmdImplTest.java new file mode 100644 index 000000000..90be81c7f --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/RemoveImageCmdImplTest.java @@ -0,0 +1,87 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.startsWith; +import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; + +import java.lang.reflect.Method; +import java.util.List; + +import org.hamcrest.Matcher; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.model.Container; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class RemoveImageCmdImplTest extends AbstractDockerClientTest { + + public static final Logger LOG = LoggerFactory.getLogger(RemoveImageCmdImplTest.class); + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void removeImage() throws DockerException, InterruptedException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + dockerClient.startContainerCmd(container.getId()).exec(); + + LOG.info("Committing container {}", container.toString()); + String imageId = dockerClient.commitCmd(container.getId()).exec(); + + dockerClient.stopContainerCmd(container.getId()).exec(); + dockerClient.removeContainerCmd(container.getId()).exec(); + + LOG.info("Removing image: {}", imageId); + dockerClient.removeImageCmd(imageId).exec(); + + List containers = dockerClient.listContainersCmd().withShowAll(true).exec(); + + Matcher matcher = not(hasItem(hasField("id", startsWith(imageId)))); + assertThat(containers, matcher); + } + + @Test + public void removeNonExistingImage() throws DockerException, InterruptedException { + try { + dockerClient.removeImageCmd("non-existing").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + } + + } + +} diff --git a/src/test/java/com/github/dockerjava/core/command/RemoveNetworkCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/RemoveNetworkCmdImplTest.java new file mode 100644 index 000000000..e1e4e45fe --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/RemoveNetworkCmdImplTest.java @@ -0,0 +1,76 @@ +package com.github.dockerjava.core.command; + +import com.github.dockerjava.api.command.CreateNetworkResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.client.AbstractDockerClientTest; +import org.hamcrest.Matcher; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import java.lang.reflect.Method; +import java.util.List; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.startsWith; +import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; + +@Test(groups = "integration") +public class RemoveNetworkCmdImplTest extends AbstractDockerClientTest { + + public static final Logger LOG = LoggerFactory.getLogger(RemoveNetworkCmdImplTest.class); + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void removeNetwork() throws DockerException { + + CreateNetworkResponse network = dockerClient.createNetworkCmd().withName("test-network").exec(); + + LOG.info("Removing network: {}", network.getId()); + dockerClient.removeNetworkCmd(network.getId()).exec(); + + List networks = dockerClient.listNetworksCmd().exec(); + + Matcher matcher = not(hasItem(hasField("id", startsWith(network.getId())))); + assertThat(networks, matcher); + + } + + @Test + public void removeNonExistingContainer() throws DockerException { + try { + dockerClient.removeNetworkCmd("non-existing").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + } + } + +} diff --git a/src/test/java/com/github/dockerjava/core/command/RemoveVolumeCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/RemoveVolumeCmdImplTest.java new file mode 100644 index 000000000..249bf8493 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/RemoveVolumeCmdImplTest.java @@ -0,0 +1,65 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateVolumeResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class RemoveVolumeCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void removeVolume() throws DockerException { + + String volumeName = "volume1"; + + CreateVolumeResponse createVolumeResponse = dockerClient.createVolumeCmd().withName(volumeName) + .withDriver("local").exec(); + + assertThat(createVolumeResponse.getName(), equalTo(volumeName)); + assertThat(createVolumeResponse.getDriver(), equalTo("local")); + assertThat(createVolumeResponse.getMountpoint(), containsString("/volume1/")); + + dockerClient.removeVolumeCmd(volumeName).exec(); + + try { + dockerClient.inspectVolumeCmd(volumeName).exec(); + fail("Expected NotFoundException"); + } catch (NotFoundException e) { + // just ignore + } + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/RenameContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/RenameContainerCmdImplTest.java new file mode 100644 index 000000000..9f503a87b --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/RenameContainerCmdImplTest.java @@ -0,0 +1,71 @@ +package com.github.dockerjava.core.command; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.client.AbstractDockerClientTest; +import org.testng.ITestResult; +import org.testng.annotations.*; + +import java.lang.reflect.Method; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; + +@Test(groups = "integration") +public class RenameContainerCmdImplTest extends AbstractDockerClientTest { + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void renameContainer() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); + + String name1 = inspectContainerResponse.getName(); + + dockerClient.renameContainerCmd(container.getId()) + .withName(getClass().getCanonicalName() + "renameContainer") + .exec(); + + InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container.getId()).exec(); + LOG.info("Container Inspect After Rename: {}", inspectContainerResponse2.toString()); + + String name2 = inspectContainerResponse2.getName(); + + assertNotEquals(name1, name2); + + dockerClient.killContainerCmd(container.getId()).exec(); + } + + @Test(expectedExceptions = NotFoundException.class) + public void renameExistingContainer() throws DockerException, InterruptedException { + dockerClient.renameContainerCmd("non-existing") + .withName(getClass().getCanonicalName() + "renameExistingContainer") + .exec(); + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/RestartContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/RestartContainerCmdImplTest.java new file mode 100644 index 000000000..4920ac087 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/RestartContainerCmdImplTest.java @@ -0,0 +1,84 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class RestartContainerCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void restartContainer() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); + + String startTime = inspectContainerResponse.getState().getStartedAt(); + + dockerClient.restartContainerCmd(container.getId()).withtTimeout(2).exec(); + + InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container.getId()).exec(); + LOG.info("Container Inspect After Restart: {}", inspectContainerResponse2.toString()); + + String startTime2 = inspectContainerResponse2.getState().getStartedAt(); + + assertThat(startTime, not(equalTo(startTime2))); + + assertThat(inspectContainerResponse.getState().getRunning(), is(equalTo(true))); + + dockerClient.killContainerCmd(container.getId()).exec(); + } + + @Test + public void restartNonExistingContainer() throws DockerException, InterruptedException { + try { + dockerClient.restartContainerCmd("non-existing").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + } + + } + +} diff --git a/src/test/java/com/github/dockerjava/core/command/SearchImagesCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/SearchImagesCmdImplTest.java new file mode 100644 index 000000000..78e018427 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/SearchImagesCmdImplTest.java @@ -0,0 +1,59 @@ +package com.github.dockerjava.core.command; + +import static ch.lambdaj.Lambda.filter; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.is; +import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; + +import java.lang.reflect.Method; +import java.util.List; + +import org.hamcrest.Matcher; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.SearchItem; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class SearchImagesCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void searchImages() throws DockerException { + List dockerSearch = dockerClient.searchImagesCmd("busybox").exec(); + LOG.info("Search returned {}", dockerSearch.toString()); + + Matcher matcher = hasItem(hasField("name", equalTo("busybox"))); + assertThat(dockerSearch, matcher); + + assertThat(filter(hasField("name", is("busybox")), dockerSearch).size(), equalTo(1)); + } + +} diff --git a/src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java new file mode 100644 index 000000000..a2f1e51d8 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java @@ -0,0 +1,559 @@ +package com.github.dockerjava.core.command; + +import static com.github.dockerjava.api.model.AccessMode.ro; +import static com.github.dockerjava.api.model.Capability.MKNOD; +import static com.github.dockerjava.api.model.Capability.NET_ADMIN; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.startsWith; + +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.command.StartContainerCmd; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.InternalServerErrorException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.model.Bind; +import com.github.dockerjava.api.model.Device; +import com.github.dockerjava.api.model.ExposedPort; +import com.github.dockerjava.api.model.Link; +import com.github.dockerjava.api.model.Ports; +import com.github.dockerjava.api.model.RestartPolicy; +import com.github.dockerjava.api.model.Volume; +import com.github.dockerjava.api.model.VolumesFrom; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class StartContainerCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void startContainerWithVolumes() throws DockerException { + + // see http://docs.docker.io/use/working_with_volumes/ + Volume volume1 = new Volume("/opt/webapp1"); + + Volume volume2 = new Volume("/opt/webapp2"); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withVolumes(volume1, volume2) + .withCmd("true").withBinds(new Bind("/src/webapp1", volume1, ro), new Bind("/src/webapp2", volume2)) + .exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getConfig().getVolumes().keySet(), contains("/opt/webapp1", "/opt/webapp2")); + + dockerClient.startContainerCmd(container.getId()).exec(); + + dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()).awaitStatusCode(); + + inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse, mountedVolumes(containsInAnyOrder(volume1, volume2))); + + final List mounts = inspectContainerResponse.getMounts(); + + assertThat(mounts, hasSize(2)); + + final InspectContainerResponse.Mount mount1 = new InspectContainerResponse.Mount() + .withRw(false).withMode("ro").withDestination(volume1).withSource("/src/webapp1"); + final InspectContainerResponse.Mount mount2 = new InspectContainerResponse.Mount() + .withRw(true).withMode("rw").withDestination(volume2).withSource("/src/webapp2"); + + assertThat(mounts, containsInAnyOrder(mount1, mount2)); + } + + @Test + public void startContainerWithVolumesFrom() throws DockerException { + + Volume volume1 = new Volume("/opt/webapp1"); + Volume volume2 = new Volume("/opt/webapp2"); + + String container1Name = UUID.randomUUID().toString(); + + CreateContainerResponse container1 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName(container1Name) + .withBinds(new Bind("/src/webapp1", volume1), new Bind("/src/webapp2", volume2)).exec(); + LOG.info("Created container1 {}", container1.toString()); + + dockerClient.startContainerCmd(container1.getId()).exec(); + LOG.info("Started container1 {}", container1.toString()); + + InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) + .exec(); + + assertThat(inspectContainerResponse1, mountedVolumes(containsInAnyOrder(volume1, volume2))); + + CreateContainerResponse container2 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withVolumesFrom(new VolumesFrom(container1Name)).exec(); + LOG.info("Created container2 {}", container2.toString()); + + dockerClient.startContainerCmd(container2.getId()).exec(); + LOG.info("Started container2 {}", container2.toString()); + + InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) + .exec(); + + assertThat(inspectContainerResponse2, mountedVolumes(containsInAnyOrder(volume1, volume2))); + } + + @Test + public void startContainerWithDns() throws DockerException { + + String aDnsServer = "8.8.8.8"; + String anotherDnsServer = "8.8.4.4"; + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") + .withDns(aDnsServer, anotherDnsServer).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDns()), + contains(aDnsServer, anotherDnsServer)); + } + + @Test + public void startContainerWithDnsSearch() throws DockerException { + + String dnsSearch = "example.com"; + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") + .withDnsSearch(dnsSearch).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + dockerClient.startContainerCmd(container.getId()).exec(); + + inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDnsSearch()), contains(dnsSearch)); + } + + @Test + public void startContainerWithPortBindings() throws DockerException { + + ExposedPort tcp22 = ExposedPort.tcp(22); + ExposedPort tcp23 = ExposedPort.tcp(23); + + Ports portBindings = new Ports(); + portBindings.bind(tcp22, Ports.binding(11022)); + portBindings.bind(tcp23, Ports.binding(11023)); + portBindings.bind(tcp23, Ports.binding(11024)); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") + .withExposedPorts(tcp22, tcp23).withPortBindings(portBindings).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + dockerClient.startContainerCmd(container.getId()).exec(); + + inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getConfig().getExposedPorts()), contains(tcp22, tcp23)); + + assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp22)[0], + is(equalTo(Ports.binding(11022)))); + + assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[0], + is(equalTo(Ports.binding(11023)))); + + assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[1], + is(equalTo(Ports.binding(11024)))); + + } + + @Test + public void startContainerWithRandomPortBindings() throws DockerException { + + ExposedPort tcp22 = ExposedPort.tcp(22); + ExposedPort tcp23 = ExposedPort.tcp(23); + + Ports portBindings = new Ports(); + portBindings.bind(tcp22, Ports.binding(null)); + portBindings.bind(tcp23, Ports.binding(null)); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withExposedPorts(tcp22, tcp23).withPortBindings(portBindings).withPublishAllPorts(true).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getConfig().getExposedPorts()), contains(tcp22, tcp23)); + + assertThat(inspectContainerResponse.getNetworkSettings().getPorts().getBindings().get(tcp22)[0].getHostPort(), + is(not(equalTo(tcp22.getPort())))); + + assertThat(inspectContainerResponse.getNetworkSettings().getPorts().getBindings().get(tcp23)[0].getHostPort(), + is(not(equalTo(tcp23.getPort())))); + + } + + @Test + public void startContainerWithConflictingPortBindings() throws DockerException { + + ExposedPort tcp22 = ExposedPort.tcp(22); + ExposedPort tcp23 = ExposedPort.tcp(23); + + Ports portBindings = new Ports(); + portBindings.bind(tcp22, Ports.binding(11022)); + portBindings.bind(tcp23, Ports.binding(11022)); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") + .withExposedPorts(tcp22, tcp23).withPortBindings(portBindings).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + try { + dockerClient.startContainerCmd(container.getId()).exec(); + fail("expected InternalServerErrorException"); + } catch (InternalServerErrorException e) { + + } + + } + + @Test + public void startContainerWithLinkingDeprecated() throws DockerException { + + CreateContainerResponse container1 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName("container1").exec(); + + LOG.info("Created container1 {}", container1.toString()); + assertThat(container1.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container1.getId()).exec(); + + InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) + .exec(); + LOG.info("Container1 Inspect: {}", inspectContainerResponse1.toString()); + + assertThat(inspectContainerResponse1.getConfig(), is(notNullValue())); + assertThat(inspectContainerResponse1.getId(), not(isEmptyString())); + assertThat(inspectContainerResponse1.getId(), startsWith(container1.getId())); + assertThat(inspectContainerResponse1.getName(), equalTo("/container1")); + assertThat(inspectContainerResponse1.getImageId(), not(isEmptyString())); + assertThat(inspectContainerResponse1.getState(), is(notNullValue())); + assertThat(inspectContainerResponse1.getState().getRunning(), is(true)); + + if (!inspectContainerResponse1.getState().getRunning()) { + assertThat(inspectContainerResponse1.getState().getExitCode(), is(equalTo(0))); + } + + CreateContainerResponse container2 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName("container2").withLinks(new Link("container1", "container1Link")).exec(); + + LOG.info("Created container2 {}", container2.toString()); + assertThat(container2.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container2.getId()).exec(); + + InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) + .exec(); + LOG.info("Container2 Inspect: {}", inspectContainerResponse2.toString()); + + assertThat(inspectContainerResponse2.getConfig(), is(notNullValue())); + assertThat(inspectContainerResponse2.getId(), not(isEmptyString())); + assertThat(inspectContainerResponse2.getHostConfig(), is(notNullValue())); + assertThat(inspectContainerResponse2.getHostConfig().getLinks(), is(notNullValue())); + assertThat(inspectContainerResponse2.getHostConfig().getLinks(), equalTo(new Link[] {new Link("container1", + "container1Link")})); + assertThat(inspectContainerResponse2.getId(), startsWith(container2.getId())); + assertThat(inspectContainerResponse2.getName(), equalTo("/container2")); + assertThat(inspectContainerResponse2.getImageId(), not(isEmptyString())); + assertThat(inspectContainerResponse2.getState(), is(notNullValue())); + assertThat(inspectContainerResponse2.getState().getRunning(), is(true)); + + } + + @Test + public void startContainerWithLinking() throws DockerException { + + CreateContainerResponse container1 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName("container1").exec(); + + LOG.info("Created container1 {}", container1.toString()); + assertThat(container1.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container1.getId()).exec(); + + InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) + .exec(); + LOG.info("Container1 Inspect: {}", inspectContainerResponse1.toString()); + + assertThat(inspectContainerResponse1.getConfig(), is(notNullValue())); + assertThat(inspectContainerResponse1.getId(), not(isEmptyString())); + assertThat(inspectContainerResponse1.getId(), startsWith(container1.getId())); + assertThat(inspectContainerResponse1.getName(), equalTo("/container1")); + assertThat(inspectContainerResponse1.getImageId(), not(isEmptyString())); + assertThat(inspectContainerResponse1.getState(), is(notNullValue())); + assertThat(inspectContainerResponse1.getState().getRunning(), is(true)); + + if (!inspectContainerResponse1.getState().getRunning()) { + assertThat(inspectContainerResponse1.getState().getExitCode(), is(equalTo(0))); + } + + CreateContainerResponse container2 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName("container2").withLinks(new Link("container1", "container1Link")).exec(); + + LOG.info("Created container2 {}", container2.toString()); + assertThat(container2.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container2.getId()).exec(); + + InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) + .exec(); + LOG.info("Container2 Inspect: {}", inspectContainerResponse2.toString()); + + assertThat(inspectContainerResponse2.getConfig(), is(notNullValue())); + assertThat(inspectContainerResponse2.getId(), not(isEmptyString())); + assertThat(inspectContainerResponse2.getHostConfig(), is(notNullValue())); + assertThat(inspectContainerResponse2.getHostConfig().getLinks(), is(notNullValue())); + assertThat(inspectContainerResponse2.getHostConfig().getLinks(), equalTo(new Link[] {new Link("container1", + "container1Link")})); + assertThat(inspectContainerResponse2.getId(), startsWith(container2.getId())); + assertThat(inspectContainerResponse2.getName(), equalTo("/container2")); + assertThat(inspectContainerResponse2.getImageId(), not(isEmptyString())); + assertThat(inspectContainerResponse2.getState(), is(notNullValue())); + assertThat(inspectContainerResponse2.getState().getRunning(), is(true)); + + } + + @Test + public void startContainer() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd(new String[] {"top"}) + .exec(); + + LOG.info("Created container {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); + + assertThat(inspectContainerResponse.getConfig(), is(notNullValue())); + assertThat(inspectContainerResponse.getId(), not(isEmptyString())); + + assertThat(inspectContainerResponse.getId(), startsWith(container.getId())); + + assertThat(inspectContainerResponse.getImageId(), not(isEmptyString())); + assertThat(inspectContainerResponse.getState(), is(notNullValue())); + + assertThat(inspectContainerResponse.getState().getRunning(), is(true)); + + if (!inspectContainerResponse.getState().getRunning()) { + assertThat(inspectContainerResponse.getState().getExitCode(), is(equalTo(0))); + } + } + + @Test + public void testStartNonExistingContainer() throws DockerException { + try { + dockerClient.startContainerCmd("non-existing").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + } + } + + /** + * This tests support for --net option for the docker run command: --net="bridge" Set the Network mode for the container 'bridge': + * creates a new network stack for the container on the docker bridge 'none': no networking for this container 'container:': reuses + * another container network stack 'host': use the host network stack inside the container. Note: the host mode gives the container full + * access to local system services such as D-bus and is therefore considered insecure. + */ + @Test + public void startContainerWithNetworkMode() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") + .withNetworkMode("host").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + dockerClient.startContainerCmd(container.getId()).exec(); + + inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getHostConfig().getNetworkMode(), is(equalTo("host"))); + } + + @Test + public void startContainerWithCapAddAndCapDrop() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withCapAdd(NET_ADMIN).withCapDrop(MKNOD).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getState().getRunning(), is(true)); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getCapAdd()), contains(NET_ADMIN)); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getCapDrop()), contains(MKNOD)); + } + + @Test + public void startContainerWithDevices() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withDevices(new Device("rwm", "/dev/nulo", "/dev/zero")).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getState().getRunning(), is(true)); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDevices()), contains(new Device("rwm", + "/dev/nulo", "/dev/zero"))); + } + + @Test + public void startContainerWithExtraHosts() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withExtraHosts("dockerhost:127.0.0.1").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getState().getRunning(), is(true)); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getExtraHosts()), + contains("dockerhost:127.0.0.1")); + } + + @Test + public void startContainerWithRestartPolicy() throws DockerException { + + RestartPolicy restartPolicy = RestartPolicy.onFailureRestart(5); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withRestartPolicy(restartPolicy).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getState().getRunning(), is(true)); + + assertThat(inspectContainerResponse.getHostConfig().getRestartPolicy(), is(equalTo(restartPolicy))); + } + + @Test + public void existingHostConfigIsPreservedByBlankStartCmd() throws DockerException { + + String dnsServer = "8.8.8.8"; + + // prepare a container with custom DNS + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withDns(dnsServer) + .withCmd("true").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + // start container _without_any_customization_ (important!) + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + // The DNS setting survived. + assertThat(inspectContainerResponse.getHostConfig().getDns(), is(notNullValue())); + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDns()), contains(dnsServer)); + } + + @Test + public void anUnconfiguredCommandSerializesToEmptyJson() throws Exception { + ObjectMapper objectMapper = new ObjectMapper(); + StartContainerCmd command = dockerClient.startContainerCmd(""); + assertThat(objectMapper.writeValueAsString(command), is("{}")); + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/StatsCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/StatsCmdImplTest.java new file mode 100644 index 000000000..d7f9ec1c5 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/StatsCmdImplTest.java @@ -0,0 +1,106 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +import java.io.IOException; +import java.lang.reflect.Method; +import java.security.SecureRandom; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.model.Statistics; +import com.github.dockerjava.client.AbstractDockerClientTest; +import com.github.dockerjava.core.async.ResultCallbackTemplate; + +@Test(groups = "integration") +public class StatsCmdImplTest extends AbstractDockerClientTest { + + private static int NUM_STATS = 5; + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void testStatsStreaming() throws InterruptedException, IOException { + TimeUnit.SECONDS.sleep(1); + + CountDownLatch countDownLatch = new CountDownLatch(NUM_STATS); + + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("top") + .withName(containerName).exec(); + LOG.info("Created container {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + StatsCallbackTest statsCallback = dockerClient.statsCmd(container.getId()).exec( + new StatsCallbackTest(countDownLatch)); + + countDownLatch.await(3, TimeUnit.SECONDS); + Boolean gotStats = statsCallback.gotStats(); + + LOG.info("Stop stats collection"); + + statsCallback.close(); + + LOG.info("Stopping container"); + dockerClient.stopContainerCmd(container.getId()).exec(); + dockerClient.removeContainerCmd(container.getId()).exec(); + + LOG.info("Completed test"); + assertTrue(gotStats, "Expected true"); + + } + + private class StatsCallbackTest extends ResultCallbackTemplate { + private final CountDownLatch countDownLatch; + + private Boolean gotStats = false; + + public StatsCallbackTest(CountDownLatch countDownLatch) { + this.countDownLatch = countDownLatch; + } + + @Override + public void onNext(Statistics stats) { + LOG.info("Received stats #{}: {}", countDownLatch.getCount(), stats); + if (stats != null) { + gotStats = true; + } + countDownLatch.countDown(); + } + + public Boolean gotStats() { + return gotStats; + } + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/StopContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/StopContainerCmdImplTest.java new file mode 100644 index 000000000..913ed9474 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/StopContainerCmdImplTest.java @@ -0,0 +1,89 @@ +package com.github.dockerjava.core.command; + +import static com.github.dockerjava.core.RemoteApiVersion.VERSION_1_22; +import static com.github.dockerjava.utils.TestUtils.getVersion; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +import java.lang.reflect.Method; + +import com.github.dockerjava.core.RemoteApiVersion; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class StopContainerCmdImplTest extends AbstractDockerClientTest { + + public static final Logger LOG = LoggerFactory.getLogger(StopContainerCmdImplTest.class); + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void testStopContainer() throws DockerException { + final RemoteApiVersion apiVersion = getVersion(dockerClient); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + dockerClient.startContainerCmd(container.getId()).exec(); + + LOG.info("Stopping container: {}", container.getId()); + dockerClient.stopContainerCmd(container.getId()).withTimeout(2).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); + + assertThat(inspectContainerResponse.getState().getRunning(), is(equalTo(false))); + + final Integer exitCode = inspectContainerResponse.getState().getExitCode(); + if (apiVersion.equals(VERSION_1_22)) { + assertThat(exitCode, is(0)); + } else { + assertThat(exitCode, not(0)); + } + } + + @Test + public void testStopNonExistingContainer() throws DockerException { + try { + dockerClient.stopContainerCmd("non-existing").withTimeout(2).exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + + } + } + +} diff --git a/src/test/java/com/github/dockerjava/core/command/TagImageCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/TagImageCmdImplTest.java new file mode 100644 index 000000000..94d4291d0 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/TagImageCmdImplTest.java @@ -0,0 +1,63 @@ +package com.github.dockerjava.core.command; + +import java.lang.reflect.Method; + +import org.apache.commons.lang.math.RandomUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class TagImageCmdImplTest extends AbstractDockerClientTest { + + public static final Logger LOG = LoggerFactory.getLogger(TagImageCmdImplTest.class); + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void tagImage() throws Exception { + String tag = "" + RandomUtils.nextInt(Integer.MAX_VALUE); + + dockerClient.tagImageCmd("busybox:latest", "docker-java/busybox", tag).exec(); + + dockerClient.removeImageCmd("docker-java/busybox:" + tag).exec(); + } + + @Test + public void tagNonExistingImage() throws Exception { + String tag = "" + RandomUtils.nextInt(Integer.MAX_VALUE); + + try { + dockerClient.tagImageCmd("non-existing", "docker-java/busybox", tag).exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + } + } + +} diff --git a/src/test/java/com/github/dockerjava/core/command/UpdateContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/UpdateContainerCmdImplTest.java new file mode 100644 index 000000000..c230fbb02 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/UpdateContainerCmdImplTest.java @@ -0,0 +1,121 @@ +package com.github.dockerjava.core.command; + +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.HostConfig; +import com.github.dockerjava.api.model.UpdateContainerResponse; +import com.github.dockerjava.client.AbstractDockerClientTest; +import com.github.dockerjava.core.RemoteApiVersion; +import org.testng.ITestResult; +import org.testng.SkipException; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import java.io.IOException; +import java.lang.reflect.Method; + +import static com.github.dockerjava.test.serdes.JSONSamples.testRoundTrip; +import static com.github.dockerjava.utils.TestUtils.getVersion; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.collection.IsCollectionWithSize.hasSize; +import static org.hamcrest.core.IsNull.notNullValue; + +/** + * @author Kanstantsin Shautsou + */ +@Test(groups = "integration") +public class UpdateContainerCmdImplTest extends AbstractDockerClientTest { + + public static final String BUSYBOX_IMAGE = "busybox"; + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void updateContainer() throws DockerException, IOException { + final RemoteApiVersion apiVersion = getVersion(dockerClient); + + if (!apiVersion.isGreaterOrEqual(RemoteApiVersion.VERSION_1_22)) { + throw new SkipException("API version should be >= 1.22"); + } + + CreateContainerResponse response = dockerClient.createContainerCmd(BUSYBOX_IMAGE) + .withCmd("sleep", "9999") + .exec(); + String containerId = response.getId(); + dockerClient.startContainerCmd(containerId).exec(); + + InspectContainerResponse inspectBefore = dockerClient.inspectContainerCmd(containerId).exec(); + + final UpdateContainerResponse updateResponse = dockerClient.updateContainerCmd(containerId) + .withBlkioWeight(300) + .withCpuShares(512) + .withCpuPeriod(100000) + .withCpuQuota(50000) +// .withCpusetCpus("0") // depends on env + .withCpusetMems("0") + .withMemory(314572800L) + .withMemorySwap(514288000L) + .withMemoryReservation(209715200L) +// .withKernelMemory(52428800) Can not update kernel memory to a running container, please stop it first. + .exec(); + + // docker toolbox 1.10.1 + assertThat(updateResponse.getWarnings(), hasSize(1)); + assertThat(updateResponse.getWarnings().get(0), + is("Your kernel does not support Block I/O weight. Weight discarded.")); + + InspectContainerResponse inspectAfter = dockerClient.inspectContainerCmd(containerId).exec(); + final HostConfig afterHostConfig = inspectAfter.getHostConfig(); + + assertThat(afterHostConfig.getMemory(), + is(314572800L)); + +// assertThat(afterHostConfig.getBlkioWeight(), is(300)); + assertThat(afterHostConfig.getCpuShares(), is(512)); + assertThat(afterHostConfig.getCpuPeriod(), is(100000)); + assertThat(afterHostConfig.getCpuQuota(), is(50000)); + assertThat(afterHostConfig.getCpusetMems(), is("0")); + + assertThat(afterHostConfig.getMemoryReservation(), is(209715200L)); + assertThat(afterHostConfig.getMemorySwap(), is(514288000L)); + + } + + @Test(enabled = false, description = "impossible to serder because model bundled in cmd") + public void serDerDocs1() throws IOException { + final ObjectMapper mapper = new ObjectMapper(); + final JavaType type = mapper.getTypeFactory().uncheckedSimpleType(UpdateContainerCmdImpl.class); + + final UpdateContainerCmdImpl upd = testRoundTrip(RemoteApiVersion.VERSION_1_22, + "/containers/container/update/docs.json", + type + ); + + assertThat(upd, notNullValue()); + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/VersionCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/VersionCmdImplTest.java new file mode 100644 index 000000000..d8bfb3f23 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/VersionCmdImplTest.java @@ -0,0 +1,52 @@ +package com.github.dockerjava.core.command; + +import java.lang.reflect.Method; + +import org.apache.commons.lang.StringUtils; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.Version; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class VersionCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void version() throws DockerException { + Version version = dockerClient.versionCmd().exec(); + LOG.info(version.toString()); + + assertTrue(version.getGoVersion().length() > 0); + assertTrue(version.getVersion().length() > 0); + + assertEquals(StringUtils.split(version.getVersion(), ".").length, 3); + + } + +} diff --git a/src/test/java/com/github/dockerjava/core/command/WaitContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/WaitContainerCmdImplTest.java new file mode 100644 index 000000000..8de80573c --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/WaitContainerCmdImplTest.java @@ -0,0 +1,107 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.model.WaitResponse; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class WaitContainerCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void testWaitContainer() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true").exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()) + .awaitStatusCode(); + LOG.info("Container exit code: {}", exitCode); + + assertThat(exitCode, equalTo(0)); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); + + assertThat(inspectContainerResponse.getState().getRunning(), is(equalTo(false))); + assertThat(inspectContainerResponse.getState().getExitCode(), is(equalTo(exitCode))); + } + + @Test(expectedExceptions = NotFoundException.class) + public void testWaitNonExistingContainer() throws DockerException { + + WaitContainerResultCallback callback = new WaitContainerResultCallback() { + public void onNext(WaitResponse waitResponse) { + fail("expected NotFoundException"); + }; + }; + + dockerClient.waitContainerCmd("non-existing").exec(callback).awaitStatusCode(); + } + + @Test + public void testWaitContainerAbort() throws Exception { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + WaitContainerResultCallback callback = dockerClient.waitContainerCmd(container.getId()).exec( + new WaitContainerResultCallback()); + + Thread.sleep(5000); + + callback.close(); + + dockerClient.killContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); + + assertThat(inspectContainerResponse.getState().getRunning(), is(equalTo(false))); + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/AttachContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/AttachContainerCmdExecTest.java new file mode 100644 index 000000000..7f8e66609 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/AttachContainerCmdExecTest.java @@ -0,0 +1,160 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.InputStream; +import java.lang.reflect.Method; +import java.util.concurrent.TimeUnit; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.model.Frame; +import com.github.dockerjava.api.model.StreamType; +import com.github.dockerjava.core.command.AttachContainerResultCallback; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class AttachContainerCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void attachContainerWithoutTTY() throws Exception { + + String snippet = "hello world"; + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("echo", snippet) + .withTty(false).exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + AttachContainerTestCallback callback = new AttachContainerTestCallback() { + @Override + public void onNext(Frame frame) { + assertEquals(frame.getStreamType(), StreamType.STDOUT); + super.onNext(frame); + }; + }; + + dockerClient.attachContainerCmd(container.getId()).withStdErr(true).withStdOut(true).withFollowStream(true) + .withLogs(true).exec(callback).awaitCompletion(10, TimeUnit.SECONDS); + callback.close(); + + assertThat(callback.toString(), containsString(snippet)); + } + + @Test + public void attachContainerWithStdin() throws Exception { + + String snippet = "hello world"; + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("/bin/sh", "-c", "read line && echo $line") + .withTty(false).withStdinOpen(true).exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertTrue(inspectContainerResponse.getState().getRunning()); + + AttachContainerTestCallback callback = new AttachContainerTestCallback() { + + @Override + public void onNext(Frame frame) { + assertEquals(frame.getStreamType(), StreamType.STDOUT); + super.onNext(frame); + }; + }; + + InputStream stdin = new ByteArrayInputStream((snippet + "\n").getBytes()); + + dockerClient.attachContainerCmd(container.getId()).withStdErr(true).withStdOut(true).withFollowStream(true) + .withStdIn(stdin).exec(callback).awaitCompletion(2, TimeUnit.SECONDS); + callback.close(); + + assertThat(callback.toString(), containsString(snippet)); + } + + @Test + public void attachContainerWithTTY() throws Exception { + + File baseDir = new File(Thread.currentThread().getContextClassLoader() + .getResource("attachContainerTestDockerfile").getFile()); + + String imageId = buildImage(baseDir); + + CreateContainerResponse container = dockerClient.createContainerCmd(imageId).withTty(true).exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + AttachContainerTestCallback callback = new AttachContainerTestCallback() { + @Override + public void onNext(Frame frame) { + assertEquals(frame.getStreamType(), StreamType.RAW); + super.onNext(frame); + }; + }; + + dockerClient.attachContainerCmd(container.getId()).withStdErr(true).withStdOut(true).withFollowStream(true) + .exec(callback).awaitCompletion(10, TimeUnit.SECONDS); + callback.close(); + + // HexDump.dump(collectFramesCallback.toString().getBytes(), 0, System.out, 0); + + assertThat(callback.toString(), containsString("stdout\r\nstderr")); + } + + public static class AttachContainerTestCallback extends AttachContainerResultCallback { + private StringBuffer log = new StringBuffer(); + + @Override + public void onNext(Frame item) { + log.append(new String(item.getPayload())); + super.onNext(item); + } + + @Override + public String toString() { + return log.toString(); + } + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/AuthCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/AuthCmdExecTest.java new file mode 100644 index 000000000..66ac1bce3 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/AuthCmdExecTest.java @@ -0,0 +1,57 @@ +package com.github.dockerjava.netty.exec; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.UnauthorizedException; +import com.github.dockerjava.api.model.AuthResponse; +import com.github.dockerjava.core.DockerClientBuilder; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class AuthCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void testAuth() throws Exception { + AuthResponse response = dockerClient.authCmd().exec(); + + assertEquals(response.getStatus(), "Login Succeeded"); + } + + @Test() + public void testAuthInvalid() throws Exception { + + try { + DockerClientBuilder.getInstance(config("garbage")).build().authCmd().exec(); + fail("Expected a UnauthorizedException caused by a bad password."); + } catch (UnauthorizedException e) { + assertEquals(e.getMessage(), "Wrong login/password, please try again\n"); + } + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/BuildImageCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/BuildImageCmdExecTest.java new file mode 100644 index 000000000..1299cf6ae --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/BuildImageCmdExecTest.java @@ -0,0 +1,316 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.nullValue; + +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.UUID; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.filefilter.TrueFileFilter; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.BuildImageCmd; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.command.InspectImageResponse; +import com.github.dockerjava.api.exception.DockerClientException; +import com.github.dockerjava.api.model.AuthConfig; +import com.github.dockerjava.api.model.AuthConfigurations; +import com.github.dockerjava.api.model.ExposedPort; +import com.github.dockerjava.api.model.PortBinding; +import com.github.dockerjava.api.model.Ports; +import com.github.dockerjava.core.command.BuildImageResultCallback; +import com.github.dockerjava.core.command.PushImageResultCallback; +import com.github.dockerjava.core.command.WaitContainerResultCallback; +import com.github.dockerjava.core.util.CompressArchiveUtil; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class BuildImageCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void testNginxDockerfileBuilder() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("nginx").getFile()); + + String imageId = buildImage(baseDir); + + InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); + assertThat(inspectImageResponse, not(nullValue())); + LOG.info("Image Inspect: {}", inspectImageResponse.toString()); + + assertThat(inspectImageResponse.getAuthor(), equalTo("Guillaume J. Charmes \"guillaume@dotcloud.com\"")); + } + + @Test(groups = "ignoreInCircleCi") + public void testNonstandard1() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader() + .getResource("nonstandard/subdirectory/Dockerfile-nonstandard").getFile()); + + buildImage(baseDir); + } + + @Test(groups = "ignoreInCircleCi") + public void testNonstandard2() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("nonstandard").getFile()); + File dockerFile = new File(Thread.currentThread().getContextClassLoader() + .getResource("nonstandard/subdirectory/Dockerfile-nonstandard").getFile()); + + dockerClient.buildImageCmd().withBaseDirectory(baseDir).withDockerfile(dockerFile).withNoCache(true) + .exec(new BuildImageResultCallback()).awaitImageId(); + } + + @Test + public void testDockerBuilderFromTar() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddFile").getFile()); + Collection files = FileUtils.listFiles(baseDir, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE); + File tarFile = CompressArchiveUtil.archiveTARFiles(baseDir, files, UUID.randomUUID().toString()); + String response = dockerfileBuild(new FileInputStream(tarFile)); + assertThat(response, containsString("Successfully executed testrun.sh")); + } + + @Test + public void testDockerBuilderAddUrl() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddUrl").getFile()); + String response = dockerfileBuild(baseDir); + assertThat(response, containsString("Docker")); + } + + @Test + public void testDockerBuilderAddFileInSubfolder() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddFileInSubfolder") + .getFile()); + String response = dockerfileBuild(baseDir); + assertThat(response, containsString("Successfully executed testrun.sh")); + } + + @Test + public void testDockerBuilderAddFilesViaWildcard() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddFilesViaWildcard") + .getFile()); + String response = dockerfileBuild(baseDir); + assertThat(response, containsString("Successfully executed testinclude1.sh")); + assertThat(response, not(containsString("Successfully executed testinclude2.sh"))); + } + + @Test + public void testDockerBuilderAddFolder() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddFolder").getFile()); + String response = dockerfileBuild(baseDir); + assertThat(response, containsString("Successfully executed testAddFolder.sh")); + } + + @Test + public void testDockerBuilderEnv() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testEnv").getFile()); + String response = dockerfileBuild(baseDir); + assertThat(response, containsString("Successfully executed testrun.sh")); + } + + private String dockerfileBuild(InputStream tarInputStream) throws Exception { + + return execBuild(dockerClient.buildImageCmd().withTarInputStream(tarInputStream)); + } + + private String dockerfileBuild(File baseDir) throws Exception { + + return execBuild(dockerClient.buildImageCmd(baseDir)); + } + + private String execBuild(BuildImageCmd buildImageCmd) throws Exception { + String imageId = buildImageCmd.withNoCache(true).exec(new BuildImageResultCallback()).awaitImageId(); + + // Create container based on image + CreateContainerResponse container = dockerClient.createContainerCmd(imageId).exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()).awaitStatusCode(); + + return containerLog(container.getId()); + } + + @Test(expectedExceptions = {DockerClientException.class}) + public void testDockerfileIgnored() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testDockerfileIgnored") + .getFile()); + + dockerClient.buildImageCmd(baseDir).withNoCache(true).exec(new BuildImageResultCallback()).awaitImageId(); + } + + @Test + public void testDockerfileNotIgnored() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testDockerfileNotIgnored") + .getFile()); + + dockerClient.buildImageCmd(baseDir).withNoCache(true).exec(new BuildImageResultCallback()).awaitImageId(); + } + + @Test(expectedExceptions = {DockerClientException.class}) + public void testInvalidDockerIgnorePattern() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader() + .getResource("testInvalidDockerignorePattern").getFile()); + + dockerClient.buildImageCmd(baseDir).withNoCache(true).exec(new BuildImageResultCallback()).awaitImageId(); + } + + @Test(groups = "ignoreInCircleCi") + public void testDockerIgnore() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testDockerignore") + .getFile()); + String response = dockerfileBuild(baseDir); + assertThat(response, containsString("/tmp/a/a /tmp/a/c /tmp/a/d")); + } + + @Test + public void testNetCatDockerfileBuilder() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("netcat").getFile()); + + String imageId = dockerClient.buildImageCmd(baseDir).withNoCache(true).exec(new BuildImageResultCallback()) + .awaitImageId(); + + assertNotNull(imageId, "Not successful in build"); + + InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); + assertThat(inspectImageResponse, not(nullValue())); + assertThat(inspectImageResponse.getId(), not(nullValue())); + LOG.info("Image Inspect: {}", inspectImageResponse.toString()); + + CreateContainerResponse container = dockerClient.createContainerCmd(inspectImageResponse.getId()).exec(); + assertThat(container.getId(), not(isEmptyString())); + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getId(), notNullValue()); + assertThat(inspectContainerResponse.getNetworkSettings().getPorts(), notNullValue()); + + // No use as such if not running on the server + // for (Ports.Port p : inspectContainerResponse.getNetworkSettings().getPorts().getAllPorts()) { + // int port = Integer.valueOf(p.getHostPort()); + // LOG.info("Checking port {} is open", port); + // assertThat(available(port), is(false)); + // } + dockerClient.stopContainerCmd(container.getId()).withTimeout(0).exec(); + + } + + @Test + public void testAddAndCopySubstitution() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testENVSubstitution") + .getFile()); + String response = dockerfileBuild(baseDir); + assertThat(response, containsString("testENVSubstitution successfully completed")); + } + + @Test + public void testBuildFromPrivateRegistry() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("privateRegistry").getFile()); + + String imageId = buildImage(baseDir); + + InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); + assertThat(inspectImageResponse, not(nullValue())); + LOG.info("Image Inspect: {}", inspectImageResponse.toString()); + + dockerClient.tagImageCmd(imageId, "testregistry", "2").withForce().exec(); + + // see https://github.com/docker/distribution/blob/master/docs/deploying.md#native-basic-auth + CreateContainerResponse testregistry = dockerClient + .createContainerCmd("testregistry:2") + .withName("registry") + .withPortBindings(new PortBinding(new Ports.Binding(5000), ExposedPort.tcp(5000))) + .withEnv("REGISTRY_AUTH=htpasswd", "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm", + "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd", "REGISTRY_LOG_LEVEL=debug", + "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt", "REGISTRY_HTTP_TLS_KEY=/certs/domain.key") + .exec(); + + dockerClient.startContainerCmd(testregistry.getId()).exec(); + + // wait for registry to boot + Thread.sleep(3000); + + // credentials as configured in /auth/htpasswd + AuthConfig authConfig = new AuthConfig() + .withUsername("testuser") + .withPassword("testpassword") + .withEmail("foo@bar.de") + .withRegistryAddress("localhost:5000"); + + dockerClient.authCmd().withAuthConfig(authConfig).exec(); + dockerClient.tagImageCmd("busybox:latest", "localhost:5000/testuser/busybox", "latest").withForce().exec(); + + dockerClient.pushImageCmd("localhost:5000/testuser/busybox").withTag("latest").withAuthConfig(authConfig) + .exec(new PushImageResultCallback()).awaitSuccess(); + + dockerClient.removeImageCmd("localhost:5000/testuser/busybox").withForce(true).exec(); + + baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testBuildFromPrivateRegistry") + .getFile()); + + AuthConfigurations authConfigurations = new AuthConfigurations(); + authConfigurations.addConfig(authConfig); + + imageId = dockerClient.buildImageCmd(baseDir) + .withNoCache(true) + .withBuildAuthConfigs(authConfigurations) + .exec(new BuildImageResultCallback()) + .awaitImageId(); + + inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); + assertThat(inspectImageResponse, not(nullValue())); + LOG.info("Image Inspect: {}", inspectImageResponse.toString()); + + } + + @Test + public void testBuildArgs() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testBuildArgs").getFile()); + + String imageId = dockerClient.buildImageCmd(baseDir).withNoCache(true).withBuildArg("testArg", "abc") + .exec(new BuildImageResultCallback()) + .awaitImageId(); + + InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); + assertThat(inspectImageResponse, not(nullValue())); + LOG.info("Image Inspect: {}", inspectImageResponse.toString()); + + assertThat(inspectImageResponse.getConfig().getLabels().get("test"), equalTo("abc")); + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/CommitCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/CommitCmdExecTest.java new file mode 100644 index 000000000..0186f4233 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/CommitCmdExecTest.java @@ -0,0 +1,80 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.startsWith; +import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectImageResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class CommitCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void commit() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("touch", "/test").exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + dockerClient.startContainerCmd(container.getId()).exec(); + + LOG.info("Commiting container: {}", container.toString()); + String imageId = dockerClient.commitCmd(container.getId()).exec(); + + InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); + LOG.info("Image Inspect: {}", inspectImageResponse.toString()); + + assertThat(inspectImageResponse, hasField("container", startsWith(container.getId()))); + assertThat(inspectImageResponse.getContainerConfig().getImage(), equalTo("busybox")); + + InspectImageResponse busyboxImg = dockerClient.inspectImageCmd("busybox").exec(); + + assertThat(inspectImageResponse.getParent(), equalTo(busyboxImg.getId())); + } + + @Test + public void commitNonExistingContainer() throws DockerException { + try { + dockerClient.commitCmd("non-existent").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + } + } + +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/ContainerDiffCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ContainerDiffCmdExecTest.java new file mode 100644 index 000000000..57c4b46a0 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/ContainerDiffCmdExecTest.java @@ -0,0 +1,80 @@ +package com.github.dockerjava.netty.exec; + +import static ch.lambdaj.Lambda.selectUnique; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; +import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; + +import java.lang.reflect.Method; +import java.util.List; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.model.ChangeLog; +import com.github.dockerjava.core.command.WaitContainerResultCallback; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class ContainerDiffCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void testContainerDiff() throws DockerException { + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("touch", "/test").exec(); + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + dockerClient.startContainerCmd(container.getId()).exec(); + + int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()) + .awaitStatusCode(); + assertThat(exitCode, equalTo(0)); + + List filesystemDiff = dockerClient.containerDiffCmd(container.getId()).exec(); + LOG.info("Container DIFF: {}", filesystemDiff.toString()); + + assertThat(filesystemDiff.size(), equalTo(1)); + ChangeLog testChangeLog = selectUnique(filesystemDiff, hasField("path", equalTo("/test"))); + + assertThat(testChangeLog, hasField("path", equalTo("/test"))); + assertThat(testChangeLog, hasField("kind", equalTo(1))); + } + + @Test + public void testContainerDiffWithNonExistingContainer() throws DockerException { + try { + dockerClient.containerDiffCmd("non-existing").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + } + } + +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/CopyArchiveFromContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/CopyArchiveFromContainerCmdExecTest.java new file mode 100644 index 000000000..aa4dcc575 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/CopyArchiveFromContainerCmdExecTest.java @@ -0,0 +1,73 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.isEmptyOrNullString; +import static org.hamcrest.Matchers.not; + +import java.io.InputStream; +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class CopyArchiveFromContainerCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void copyFromContainer() throws Exception { + // TODO extract this into a shared method + CreateContainerResponse container = dockerClient.createContainerCmd("busybox") + .withName("docker-java-itest-copyFromContainer").withCmd("touch", "/copyFromContainer").exec(); + + LOG.info("Created container: {}", container); + assertThat(container.getId(), not(isEmptyOrNullString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InputStream response = dockerClient.copyArchiveFromContainerCmd(container.getId(), "/copyFromContainer").exec(); + Boolean bytesAvailable = response.available() > 0; + assertTrue(bytesAvailable, "The file was not copied from the container."); + + // read the stream fully. Otherwise, the underlying stream will not be closed. + String responseAsString = asString(response); + assertNotNull(responseAsString); + assertTrue(responseAsString.length() > 0); + } + + @Test + public void copyFromNonExistingContainer() throws Exception { + try { + dockerClient.copyArchiveFromContainerCmd("non-existing", "/test").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException ignored) { + } + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/CopyArchiveToContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/CopyArchiveToContainerCmdExecTest.java new file mode 100644 index 000000000..d755dfcba --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/CopyArchiveToContainerCmdExecTest.java @@ -0,0 +1,94 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.isEmptyOrNullString; +import static org.hamcrest.Matchers.not; + +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Method; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.core.util.CompressArchiveUtil; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class CopyArchiveToContainerCmdExecTest extends AbstractNettyDockerClientTest { + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void copyFileToContainer() throws Exception { + CreateContainerResponse container = prepareContainerForCopy(); + Path temp = Files.createTempFile("", ".tar.gz"); + CompressArchiveUtil.tar(Paths.get("src/test/resources/testReadFile"), temp, true, false); + try (InputStream uploadStream = Files.newInputStream(temp)) { + dockerClient.copyArchiveToContainerCmd(container.getId()).withTarInputStream(uploadStream).exec(); + assertFileCopied(container); + } + } + + @Test + public void copyStreamToContainer() throws Exception { + CreateContainerResponse container = prepareContainerForCopy(); + dockerClient.copyArchiveToContainerCmd(container.getId()).withHostResource("src/test/resources/testReadFile") + .exec(); + assertFileCopied(container); + } + + private CreateContainerResponse prepareContainerForCopy() { + CreateContainerResponse container = dockerClient.createContainerCmd("busybox") + .withName("docker-java-itest-copyToContainer").exec(); + LOG.info("Created container: {}", container); + assertThat(container.getId(), not(isEmptyOrNullString())); + dockerClient.startContainerCmd(container.getId()).exec(); + // Copy a folder to the container + return container; + } + + private void assertFileCopied(CreateContainerResponse container) throws IOException { + try (InputStream response = dockerClient.copyArchiveFromContainerCmd(container.getId(), "testReadFile").exec()) { + boolean bytesAvailable = response.available() > 0; + assertTrue(bytesAvailable, "The file was not copied to the container."); + } + } + + @Test + public void copyToNonExistingContainer() throws Exception { + try { + dockerClient.copyArchiveToContainerCmd("non-existing").withHostResource("src/test/resources/testReadFile") + .exec(); + fail("expected NotFoundException"); + } catch (NotFoundException ignored) { + } + } + +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/CopyFileFromContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/CopyFileFromContainerCmdExecTest.java new file mode 100644 index 000000000..b9682c592 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/CopyFileFromContainerCmdExecTest.java @@ -0,0 +1,73 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.isEmptyOrNullString; +import static org.hamcrest.Matchers.not; + +import java.io.InputStream; +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class CopyFileFromContainerCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void copyFromContainer() throws Exception { + // TODO extract this into a shared method + CreateContainerResponse container = dockerClient.createContainerCmd("busybox") + .withName("docker-java-itest-copyFromContainer").withCmd("touch", "/copyFromContainer").exec(); + + LOG.info("Created container: {}", container); + assertThat(container.getId(), not(isEmptyOrNullString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InputStream response = dockerClient.copyFileFromContainerCmd(container.getId(), "/copyFromContainer").exec(); + Boolean bytesAvailable = response.available() > 0; + assertTrue(bytesAvailable, "The file was not copied from the container."); + + // read the stream fully. Otherwise, the underlying stream will not be closed. + String responseAsString = asString(response); + assertNotNull(responseAsString); + assertTrue(responseAsString.length() > 0); + } + + @Test + public void copyFromNonExistingContainer() throws Exception { + try { + dockerClient.copyFileFromContainerCmd("non-existing", "/test").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException ignored) { + } + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/CreateContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/CreateContainerCmdExecTest.java new file mode 100644 index 000000000..02c5cc54e --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/CreateContainerCmdExecTest.java @@ -0,0 +1,567 @@ +package com.github.dockerjava.netty.exec; + +import static com.github.dockerjava.api.model.Capability.MKNOD; +import static com.github.dockerjava.api.model.Capability.NET_ADMIN; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.hasItemInArray; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.startsWith; + +import java.lang.reflect.Method; +import java.security.SecureRandom; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.exception.ConflictException; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.Bind; +import com.github.dockerjava.api.model.Device; +import com.github.dockerjava.api.model.ExposedPort; +import com.github.dockerjava.api.model.Link; +import com.github.dockerjava.api.model.LogConfig; +import com.github.dockerjava.api.model.Ports; +import com.github.dockerjava.api.model.RestartPolicy; +import com.github.dockerjava.api.model.Ulimit; +import com.github.dockerjava.api.model.Volume; +import com.github.dockerjava.api.model.VolumesFrom; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class CreateContainerCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(expectedExceptions = ConflictException.class) + public void createContainerWithExistingName() throws DockerException { + + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("env") + .withName(containerName).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.createContainerCmd("busybox").withCmd("env").withName(containerName).exec(); + } + + @Test + public void createContainerWithVolume() throws DockerException { + + Volume volume = new Volume("/var/log"); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withVolumes(volume) + .withCmd("true").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + LOG.info("Inspect container {}", inspectContainerResponse.getConfig().getVolumes()); + + assertThat(inspectContainerResponse.getConfig().getVolumes().keySet(), contains("/var/log")); + + assertThat(inspectContainerResponse.getMounts().get(0).getDestination(), equalTo(volume)); + assertThat(inspectContainerResponse.getMounts().get(0).getMode(), equalTo("")); + assertThat(inspectContainerResponse.getMounts().get(0).getRW(), equalTo(true)); + } + + @Test + public void createContainerWithReadOnlyVolume() throws DockerException { + + Volume volume = new Volume("/srv/test"); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withVolumes(volume) + .withCmd("true").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + LOG.info("Inspect container {}", inspectContainerResponse.getConfig().getVolumes()); + + assertThat(inspectContainerResponse.getConfig().getVolumes().keySet(), contains("/srv/test")); + + assertThat(inspectContainerResponse.getMounts().get(0).getDestination(), equalTo(volume)); + // TODO: Create a read-only volume and test like this + // assertFalse(inspectContainerResponse.getMounts().get(0).getRW()); + } + + @Test + public void createContainerWithVolumesFrom() throws DockerException { + + Volume volume1 = new Volume("/opt/webapp1"); + Volume volume2 = new Volume("/opt/webapp2"); + + String container1Name = UUID.randomUUID().toString(); + + Bind bind1 = new Bind("/src/webapp1", volume1); + Bind bind2 = new Bind("/src/webapp2", volume2); + + // create a running container with bind mounts + CreateContainerResponse container1 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName(container1Name) + .withBinds(bind1, bind2).exec(); + LOG.info("Created container1 {}", container1.toString()); + + InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) + .exec(); + + assertThat(Arrays.asList(inspectContainerResponse1.getHostConfig().getBinds()), containsInAnyOrder(bind1, bind2)); + + assertThat(inspectContainerResponse1, mountedVolumes(containsInAnyOrder(volume1, volume2))); + + // create a second container with volumes from first container + CreateContainerResponse container2 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withVolumesFrom(new VolumesFrom(container1Name)).exec(); + LOG.info("Created container2 {}", container2.toString()); + + InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) + .exec(); + + // No volumes are created, the information is just stored in .HostConfig.VolumesFrom + assertThat(inspectContainerResponse2.getHostConfig().getVolumesFrom(), hasItemInArray(new VolumesFrom( + container1Name))); + + // To ensure that the information stored in VolumesFrom really is considered + // when starting the container, we start it and verify that it has the same + // bind mounts as the first container. + // This is somehow out of scope here, but it helped me to understand how the + // VolumesFrom feature really works. + dockerClient.startContainerCmd(container2.getId()).exec(); + LOG.info("Started container2 {}", container2.toString()); + + inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()).exec(); + + assertThat(inspectContainerResponse2.getHostConfig().getVolumesFrom(), hasItemInArray(new VolumesFrom( + container1Name))); + + assertThat(inspectContainerResponse2, mountedVolumes(containsInAnyOrder(volume1, volume2))); + } + + @Test + public void createContainerWithEnv() throws Exception { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withEnv("VARIABLE=success") + .withCmd("env").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getConfig().getEnv()), containsInAnyOrder("VARIABLE=success")); + + dockerClient.startContainerCmd(container.getId()).exec(); + + assertThat(containerLog(container.getId()), containsString("VARIABLE=success")); + } + + @Test + public void createContainerWithHostname() throws Exception { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withHostName("docker-java") + .withCmd("env").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getConfig().getHostName(), equalTo("docker-java")); + + dockerClient.startContainerCmd(container.getId()).exec(); + + assertThat(containerLog(container.getId()), containsString("HOSTNAME=docker-java")); + } + + @Test + public void createContainerWithName() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withName("container") + .withCmd("env").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getName(), equalTo("/container")); + } + + @Test + public void createContainerWithLink() throws DockerException { + + CreateContainerResponse container1 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName("container1").exec(); + LOG.info("Created container1 {}", container1.toString()); + assertThat(container1.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container1.getId()).exec(); + + InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) + .exec(); + LOG.info("Container1 Inspect: {}", inspectContainerResponse1.toString()); + assertThat(inspectContainerResponse1.getState().getRunning(), is(true)); + + CreateContainerResponse container2 = dockerClient.createContainerCmd("busybox").withName("container2") + .withCmd("env").withLinks(new Link("container1", "container1Link")).exec(); + LOG.info("Created container {}", container2.toString()); + assertThat(container2.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) + .exec(); + assertThat(inspectContainerResponse2.getHostConfig().getLinks(), equalTo(new Link[] {new Link("container1", + "container1Link")})); + } + + @Test + public void createContainerWithCapAddAndCapDrop() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCapAdd(NET_ADMIN) + .withCapDrop(MKNOD).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getCapAdd()), contains(NET_ADMIN)); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getCapDrop()), contains(MKNOD)); + } + + @Test + public void createContainerWithDns() throws DockerException { + + String aDnsServer = "8.8.8.8"; + String anotherDnsServer = "8.8.4.4"; + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") + .withDns(aDnsServer, anotherDnsServer).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDns()), + contains(aDnsServer, anotherDnsServer)); + } + + @Test + public void createContainerWithEntrypoint() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withName("container") + .withEntrypoint("sleep", "9999").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getConfig().getEntrypoint()), contains("sleep", "9999")); + + } + + @Test + public void createContainerWithExtraHosts() throws DockerException { + + String[] extraHosts = {"dockerhost:127.0.0.1", "otherhost:10.0.0.1"}; + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withName("container") + .withExtraHosts(extraHosts).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getExtraHosts()), + containsInAnyOrder("dockerhost:127.0.0.1", "otherhost:10.0.0.1")); + } + + @Test + public void createContainerWithDevices() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withDevices(new Device("rwm", "/dev/nulo", "/dev/zero")).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDevices()), contains(new Device("rwm", + "/dev/nulo", "/dev/zero"))); + } + + @Test + public void createContainerWithPortBindings() throws DockerException { + + ExposedPort tcp22 = ExposedPort.tcp(22); + ExposedPort tcp23 = ExposedPort.tcp(23); + + Ports portBindings = new Ports(); + portBindings.bind(tcp22, Ports.binding(11022)); + portBindings.bind(tcp23, Ports.binding(11023)); + portBindings.bind(tcp23, Ports.binding(11024)); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") + .withExposedPorts(tcp22, tcp23).withPortBindings(portBindings).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getConfig().getExposedPorts()), contains(tcp22, tcp23)); + + assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp22)[0], + is(equalTo(Ports.binding(11022)))); + + assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[0], + is(equalTo(Ports.binding(11023)))); + + assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[1], + is(equalTo(Ports.binding(11024)))); + + } + + @Test + public void createContainerWithLinking() throws DockerException { + + CreateContainerResponse container1 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName("container1").exec(); + + LOG.info("Created container1 {}", container1.toString()); + assertThat(container1.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container1.getId()).exec(); + + InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) + .exec(); + LOG.info("Container1 Inspect: {}", inspectContainerResponse1.toString()); + + assertThat(inspectContainerResponse1.getConfig(), is(notNullValue())); + assertThat(inspectContainerResponse1.getId(), not(isEmptyString())); + assertThat(inspectContainerResponse1.getId(), startsWith(container1.getId())); + assertThat(inspectContainerResponse1.getName(), equalTo("/container1")); + assertThat(inspectContainerResponse1.getImageId(), not(isEmptyString())); + assertThat(inspectContainerResponse1.getState(), is(notNullValue())); + assertThat(inspectContainerResponse1.getState().getRunning(), is(true)); + + if (!inspectContainerResponse1.getState().getRunning()) { + assertThat(inspectContainerResponse1.getState().getExitCode(), is(equalTo(0))); + } + + CreateContainerResponse container2 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName("container2").withLinks(new Link("container1", "container1Link")).exec(); + + LOG.info("Created container2 {}", container2.toString()); + assertThat(container2.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) + .exec(); + LOG.info("Container2 Inspect: {}", inspectContainerResponse2.toString()); + + assertThat(inspectContainerResponse2.getConfig(), is(notNullValue())); + assertThat(inspectContainerResponse2.getId(), not(isEmptyString())); + assertThat(inspectContainerResponse2.getHostConfig(), is(notNullValue())); + assertThat(inspectContainerResponse2.getHostConfig().getLinks(), is(notNullValue())); + assertThat(inspectContainerResponse2.getHostConfig().getLinks(), equalTo(new Link[] {new Link("container1", + "container1Link")})); + assertThat(inspectContainerResponse2.getId(), startsWith(container2.getId())); + assertThat(inspectContainerResponse2.getName(), equalTo("/container2")); + assertThat(inspectContainerResponse2.getImageId(), not(isEmptyString())); + + } + + @Test + public void createContainerWithRestartPolicy() throws DockerException { + + RestartPolicy restartPolicy = RestartPolicy.onFailureRestart(5); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withRestartPolicy(restartPolicy).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getHostConfig().getRestartPolicy(), is(equalTo(restartPolicy))); + } + + @Test + public void createContainerWithPidMode() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") + .withPidMode("host").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getHostConfig().getPidMode(), is(equalTo("host"))); + } + + /** + * This tests support for --net option for the docker run command: --net="bridge" Set the Network mode for the container 'bridge': + * creates a new network stack for the container on the docker bridge 'none': no networking for this container 'container:': reuses + * another container network stack 'host': use the host network stack inside the container. Note: the host mode gives the container full + * access to local system services such as D-bus and is therefore considered insecure. + */ + @Test + public void createContainerWithNetworkMode() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") + .withNetworkMode("host").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getHostConfig().getNetworkMode(), is(equalTo("host"))); + } + + @Test + public void createContainerWithMacAddress() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox") + .withMacAddress("00:80:41:ae:fd:7e").withCmd("true").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertEquals(inspectContainerResponse.getConfig().getMacAddress(), "00:80:41:ae:fd:7e"); + } + + @Test(groups = "ignoreInCircleCi") + public void createContainerWithULimits() throws DockerException { + + Ulimit[] ulimits = {new Ulimit("nproc", 709, 1026), new Ulimit("nofile", 1024, 4096)}; + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withName("container") + .withUlimits(ulimits).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getUlimits()), + containsInAnyOrder(new Ulimit("nproc", 709, 1026), new Ulimit("nofile", 1024, 4096))); + + } + + @Test(groups = "ignoreInCircleCi") + public void createContainerWithLabels() throws DockerException { + + Map labels = new HashMap(); + labels.put("com.github.dockerjava.null", null); + labels.put("com.github.dockerjava.Boolean", "true"); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withLabels(labels).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + // null becomes empty string + labels.put("com.github.dockerjava.null", ""); + assertThat(inspectContainerResponse.getConfig().getLabels(), is(equalTo(labels))); + } + + @Test(groups = "ignoreInCircleCi") + public void createContainerWithLogConfig() throws DockerException { + + LogConfig logConfig = new LogConfig(LogConfig.LoggingType.NONE, null); + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withLogConfig(logConfig).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + // null becomes empty string + assertEquals(inspectContainerResponse.getHostConfig().getLogConfig().type, logConfig.type); + } + + @Test(groups = "ignoreInCircleCi") + public void createContainerWithCgroupParent() throws DockerException { + CreateContainerResponse container = dockerClient.createContainerCmd("busybox") + .withCgroupParent("/parent").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainer = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainer.getHostConfig().getCgroupParent(), is("/parent")); + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExecTest.java new file mode 100644 index 000000000..fa9962826 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExecTest.java @@ -0,0 +1,52 @@ +package com.github.dockerjava.netty.exec; + +import com.github.dockerjava.api.command.CreateNetworkResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import java.lang.reflect.Method; + +@Test(groups = "integration") +public class CreateNetworkCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void createNetwork() throws DockerException { + + String networkName = "testNetwork"; + + CreateNetworkResponse createNetworkResponse = dockerClient.createNetworkCmd().withName(networkName).exec(); + + assertNotNull(createNetworkResponse.getId()); + + Network network = dockerClient.inspectNetworkCmd().withNetworkId(createNetworkResponse.getId()).exec(); + assertEquals(network.getName(), networkName); + assertEquals(network.getDriver(), "bridge"); + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/CreateVolumeCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/CreateVolumeCmdExecTest.java new file mode 100644 index 000000000..1e1a30b73 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/CreateVolumeCmdExecTest.java @@ -0,0 +1,73 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateVolumeResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class CreateVolumeCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void createVolume() throws DockerException { + + CreateVolumeResponse createVolumeResponse = dockerClient.createVolumeCmd().withName("volume1") + .withDriver("local").exec(); + + assertThat(createVolumeResponse.getName(), equalTo("volume1")); + assertThat(createVolumeResponse.getDriver(), equalTo("local")); + assertThat(createVolumeResponse.getMountpoint(), containsString("/volume1/")); + } + + @Test + public void createVolumeWithExistingName() throws DockerException { + + String volumeName = "volume1"; + + CreateVolumeResponse createVolumeResponse1 = dockerClient.createVolumeCmd().withName(volumeName) + .withDriver("local").exec(); + + assertThat(createVolumeResponse1.getName(), equalTo(volumeName)); + assertThat(createVolumeResponse1.getDriver(), equalTo("local")); + assertThat(createVolumeResponse1.getMountpoint(), containsString("/volume1/")); + + CreateVolumeResponse createVolumeResponse2 = dockerClient.createVolumeCmd().withName(volumeName) + .withDriver("local").exec(); + + assertThat(createVolumeResponse2.getName(), equalTo(volumeName)); + assertThat(createVolumeResponse2.getDriver(), equalTo("local")); + assertThat(createVolumeResponse2.getMountpoint(), equalTo(createVolumeResponse1.getMountpoint())); + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/EventsCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/EventsCmdExecTest.java new file mode 100644 index 000000000..a634e2562 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/EventsCmdExecTest.java @@ -0,0 +1,161 @@ +package com.github.dockerjava.netty.exec; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.model.Event; +import com.github.dockerjava.core.command.EventsResultCallback; +import com.github.dockerjava.core.command.PullImageResultCallback; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class EventsCmdExecTest extends AbstractNettyDockerClientTest { + + private static int KNOWN_NUM_EVENTS = 4; + + private static String getEpochTime() { + return String.valueOf(System.currentTimeMillis() / 1000); + } + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + /* + * This specific test may fail with boot2docker as time may not in sync with host system + */ + @Test + public void testEventStreamTimeBound() throws Exception { + // Don't include other tests events + TimeUnit.SECONDS.sleep(1); + + String startTime = getEpochTime(); + int expectedEvents = generateEvents(); + String endTime = getEpochTime(); + + CountDownLatch countDownLatch = new CountDownLatch(expectedEvents); + EventsTestCallback eventCallback = new EventsTestCallback(countDownLatch); + + dockerClient.eventsCmd().withSince(startTime).withUntil(endTime).exec(eventCallback); + + Boolean zeroCount = countDownLatch.await(10, TimeUnit.SECONDS); + + eventCallback.close(); + + assertTrue(zeroCount, "Received only: " + eventCallback.getEvents()); + } + + @Test + public void testEventStreaming1() throws Exception { + // Don't include other tests events + TimeUnit.SECONDS.sleep(1); + + CountDownLatch countDownLatch = new CountDownLatch(KNOWN_NUM_EVENTS); + EventsTestCallback eventCallback = new EventsTestCallback(countDownLatch); + + dockerClient.eventsCmd().withSince(getEpochTime()).exec(eventCallback); + + generateEvents(); + + Boolean zeroCount = countDownLatch.await(10, TimeUnit.SECONDS); + + eventCallback.close(); + assertTrue(zeroCount, "Received only: " + eventCallback.getEvents()); + } + + @Test + public void testEventStreaming2() throws Exception { + // Don't include other tests events + TimeUnit.SECONDS.sleep(1); + + CountDownLatch countDownLatch = new CountDownLatch(KNOWN_NUM_EVENTS); + EventsTestCallback eventCallback = new EventsTestCallback(countDownLatch); + + dockerClient.eventsCmd().withSince(getEpochTime()).exec(eventCallback); + + generateEvents(); + + Boolean zeroCount = countDownLatch.await(10, TimeUnit.SECONDS); + + eventCallback.close(); + assertTrue(zeroCount, "Received only: " + eventCallback.getEvents()); + } + + public void testEventStreamingWithFilter() throws Exception { + // Don't include other tests events + TimeUnit.SECONDS.sleep(1); + + CountDownLatch countDownLatch = new CountDownLatch(1); + EventsTestCallback eventCallback = dockerClient.eventsCmd().withEventFilter("start") + .exec(new EventsTestCallback(countDownLatch)); + + generateEvents(); + + Boolean zeroCount = countDownLatch.await(10, TimeUnit.SECONDS); + + eventCallback.close(); + assertTrue(zeroCount, "Received only: " + eventCallback.getEvents()); + } + + /** + * This method generates {#link KNOWN_NUM_EVENTS} events + */ + private int generateEvents() throws Exception { + String testImage = "busybox"; + + dockerClient.pullImageCmd(testImage).exec(new PullImageResultCallback()).awaitSuccess(); + + CreateContainerResponse container = dockerClient.createContainerCmd(testImage).withCmd("sleep", "9999").exec(); + dockerClient.startContainerCmd(container.getId()).exec(); + dockerClient.stopContainerCmd(container.getId()).exec(); + return KNOWN_NUM_EVENTS; + } + + private class EventsTestCallback extends EventsResultCallback { + + private final CountDownLatch countDownLatch; + + private final List events = new ArrayList(); + + public EventsTestCallback(CountDownLatch countDownLatch) { + this.countDownLatch = countDownLatch; + } + + public void onNext(Event event) { + LOG.info("Received event #{}: {}", countDownLatch.getCount(), event); + countDownLatch.countDown(); + events.add(event); + } + + public List getEvents() { + return new ArrayList(events); + } + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/ExecCreateCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ExecCreateCmdExecTest.java new file mode 100644 index 000000000..d0ec28ac9 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/ExecCreateCmdExecTest.java @@ -0,0 +1,61 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +import java.lang.reflect.Method; +import java.security.SecureRandom; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.ExecCreateCmdResponse; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class ExecCreateCmdExecTest extends AbstractNettyDockerClientTest { + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void execCreateTest() { + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("top") + .withName(containerName).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) + .withCmd("touch", "file.log").exec(); + + assertThat(execCreateCmdResponse.getId(), not(isEmptyString())); + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/ExecStartCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ExecStartCmdExecTest.java new file mode 100644 index 000000000..2938ac8c0 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/ExecStartCmdExecTest.java @@ -0,0 +1,182 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.containsString; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.lang.reflect.Method; +import java.security.SecureRandom; +import java.util.concurrent.TimeUnit; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.ExecCreateCmdResponse; +import com.github.dockerjava.core.command.ExecStartResultCallback; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class ExecStartCmdExecTest extends AbstractNettyDockerClientTest { + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void execStart() throws Exception { + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("top") + .withName(containerName).exec(); + LOG.info("Created container {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) + .withAttachStdout(true).withCmd("touch", "/execStartTest.log").exec(); + dockerClient.execStartCmd(execCreateCmdResponse.getId()).withDetach(false) + .exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); + + InputStream response = dockerClient.copyArchiveFromContainerCmd(container.getId(), "/execStartTest.log").exec(); + + Boolean bytesAvailable = response.available() > 0; + assertTrue(bytesAvailable, "The file was not copied from the container."); + + // read the stream fully. Otherwise, the underlying stream will not be closed. + String responseAsString = asString(response); + assertNotNull(responseAsString); + assertTrue(responseAsString.length() > 0); + } + + @Test(groups = "ignoreInCircleCi") + public void execStartAttached() throws Exception { + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName(containerName).exec(); + LOG.info("Created container {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) + .withAttachStdout(true).withCmd("touch", "/execStartTest.log").exec(); + dockerClient.execStartCmd(execCreateCmdResponse.getId()).withDetach(false) + .exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); + + InputStream response = dockerClient.copyArchiveFromContainerCmd(container.getId(), "/execStartTest.log").exec(); + Boolean bytesAvailable = response.available() > 0; + assertTrue(bytesAvailable, "The file was not copied from the container."); + + // read the stream fully. Otherwise, the underlying stream will not be closed. + String responseAsString = asString(response); + assertNotNull(responseAsString); + assertTrue(responseAsString.length() > 0); + } + + @Test(groups = "ignoreInCircleCi") + public void execStartAttachStdin() throws Exception { + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName(containerName).exec(); + LOG.info("Created container {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InputStream stdin = new ByteArrayInputStream("STDIN\n".getBytes("UTF-8")); + + ByteArrayOutputStream stdout = new ByteArrayOutputStream(); + + ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) + .withAttachStdout(true).withAttachStdin(true).withCmd("cat").exec(); + boolean completed = dockerClient.execStartCmd(execCreateCmdResponse.getId()).withDetach(false).withTty(true).withStdIn(stdin) + .exec(new ExecStartResultCallback(stdout, System.err)).awaitCompletion(5, TimeUnit.SECONDS); + + assertTrue(completed, "The process was not finished."); + assertEquals(stdout.toString("UTF-8"), "STDIN\n"); + } + + public void execStartAttachStdinToShell() throws Exception { + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient + .createContainerCmd("busybox") + .withCmd("sleep", "9999") + .withName(containerName) + .exec(); + + LOG.info("Created container {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InputStream stdin = new ByteArrayInputStream("ls\n".getBytes()); + + ByteArrayOutputStream stdout = new ByteArrayOutputStream(); + + ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) + .withAttachStdout(true) + .withAttachStdin(true) + .withTty(false) + .withCmd("/bin/sh").exec(); + + dockerClient.execStartCmd(execCreateCmdResponse.getId()) + .withDetach(false) + .withStdIn(stdin) + .exec(new ExecStartResultCallback(stdout, System.err)) + .awaitCompletion(); + + assertThat(stdout.toString(), containsString("etc\n")); + } + + @Test(groups = "ignoreInCircleCi") + public void execStartNotAttachedStdin() throws Exception { + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName(containerName).exec(); + LOG.info("Created container {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InputStream stdin = new ByteArrayInputStream("echo STDIN\n".getBytes()); + + ByteArrayOutputStream stdout = new ByteArrayOutputStream(); + + ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) + .withAttachStdout(true).withAttachStdin(false).withCmd("/bin/sh").exec(); + boolean completed = dockerClient.execStartCmd(execCreateCmdResponse.getId()).withDetach(false).withStdIn(stdin) + .exec(new ExecStartResultCallback(stdout, System.err)).awaitCompletion(5, TimeUnit.SECONDS); + + assertTrue(completed, "The process was not finished."); + assertEquals(stdout.toString(), ""); + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/InfoCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InfoCmdExecTest.java new file mode 100644 index 000000000..850f98a74 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/InfoCmdExecTest.java @@ -0,0 +1,71 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.isEmptyOrNullString; +import static org.hamcrest.Matchers.not; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.Info; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class InfoCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void info() throws DockerException { + // Make sure that there is at least one container for the assertion + // TODO extract this into a shared method + if (dockerClient.listContainersCmd().withShowAll(true).exec().size() == 0) { + CreateContainerResponse container = dockerClient.createContainerCmd("busybox") + .withName("docker-java-itest-info").withCmd("touch", "/test").exec(); + + LOG.info("Created container: {}", container); + assertThat(container.getId(), not(isEmptyOrNullString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + } + + Info dockerInfo = dockerClient.infoCmd().exec(); + LOG.info(dockerInfo.toString()); + + assertTrue(dockerInfo.toString().contains("containers")); + assertTrue(dockerInfo.toString().contains("images")); + assertTrue(dockerInfo.toString().contains("debug")); + + assertTrue(dockerInfo.getContainers() > 0); + assertTrue(dockerInfo.getImages() > 0); + assertTrue(dockerInfo.getNFd() > 0); + assertTrue(dockerInfo.getNGoroutines() > 0); + assertTrue(dockerInfo.getNCPU() > 0); + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java new file mode 100644 index 000000000..87fe3b48b --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java @@ -0,0 +1,100 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +import java.lang.reflect.Method; +import java.security.SecureRandom; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class InspectContainerCmdExecTest extends AbstractNettyDockerClientTest { + + public static final Logger LOG = LoggerFactory.getLogger(InspectContainerCmdExecTest.class); + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test() + public void inspectContainer() throws DockerException { + + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("top") + .withName(containerName).exec(); + LOG.info("Created container {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse containerInfo = dockerClient.inspectContainerCmd(container.getId()).exec(); + assertEquals(containerInfo.getId(), container.getId()); + + } + + @Test(expectedExceptions = NotFoundException.class) + public void inspectNonExistingContainer() throws DockerException { + dockerClient.inspectContainerCmd("non-existing").exec(); + } + + @Test + public void inspectContainerRestartCount() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox") + .withCmd("env").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getRestartCount(), equalTo(0)); + } + + @Test + public void inspectContainerNetworkSettings() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox") + .withCmd("env").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertFalse(inspectContainerResponse.getNetworkSettings().getHairpinMode()); + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java new file mode 100644 index 000000000..d0bb5ca1f --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java @@ -0,0 +1,145 @@ +package com.github.dockerjava.netty.exec; + +import static com.github.dockerjava.core.RemoteApiVersion.VERSION_1_22; +import static com.github.dockerjava.utils.TestUtils.getVersion; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.nullValue; + +import java.io.IOException; +import java.lang.reflect.Method; +import java.security.SecureRandom; + +import com.github.dockerjava.core.RemoteApiVersion; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.ExecCreateCmdResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.command.InspectExecResponse; +import com.github.dockerjava.core.command.ExecStartResultCallback; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; +import com.github.dockerjava.test.serdes.JSONTestHelper; + +@Test(groups = "integration") +public class InspectExecCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void inspectExec() throws Exception { + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName(containerName).exec(); + LOG.info("Created container {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + // Check that file does not exist + ExecCreateCmdResponse checkFileExec1 = dockerClient.execCreateCmd(container.getId()).withAttachStdout(true) + .withAttachStderr(true).withCmd("test", "-e", "/marker").exec(); + LOG.info("Created exec {}", checkFileExec1.toString()); + assertThat(checkFileExec1.getId(), not(isEmptyString())); + dockerClient.execStartCmd(checkFileExec1.getId()).withDetach(false) + .exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); + InspectExecResponse first = dockerClient.inspectExecCmd(checkFileExec1.getId()).exec(); + assertThat(first.isRunning(), is(false)); + assertThat(first.getExitCode(), is(1)); + + // Create the file + ExecCreateCmdResponse touchFileExec = dockerClient.execCreateCmd(container.getId()).withAttachStdout(true) + .withAttachStderr(true).withCmd("touch", "/marker").exec(); + LOG.info("Created exec {}", touchFileExec.toString()); + assertThat(touchFileExec.getId(), not(isEmptyString())); + dockerClient.execStartCmd(touchFileExec.getId()).withDetach(false) + .exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); + InspectExecResponse second = dockerClient.inspectExecCmd(touchFileExec.getId()).exec(); + assertThat(second.isRunning(), is(false)); + assertThat(second.getExitCode(), is(0)); + + // Check that file does exist now + ExecCreateCmdResponse checkFileExec2 = dockerClient.execCreateCmd(container.getId()).withAttachStdout(true) + .withAttachStderr(true).withCmd("test", "-e", "/marker").exec(); + LOG.info("Created exec {}", checkFileExec2.toString()); + assertThat(checkFileExec2.getId(), not(isEmptyString())); + dockerClient.execStartCmd(checkFileExec2.getId()).withDetach(false) + .exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); + InspectExecResponse third = dockerClient.inspectExecCmd(checkFileExec2.getId()).exec(); + assertThat(third.isRunning(), is(false)); + assertThat(third.getExitCode(), is(0)); + + // Get container info and check its roundtrip to ensure the consistency + InspectContainerResponse containerInfo = dockerClient.inspectContainerCmd(container.getId()).exec(); + assertEquals(containerInfo.getId(), container.getId()); + JSONTestHelper.testRoundTrip(containerInfo); + } + + @Test(groups = "ignoreInCircleCi") + public void inspectExecNetworkSettings() throws IOException { + final RemoteApiVersion apiVersion = getVersion(dockerClient); + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName(containerName).exec(); + LOG.info("Created container {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + ExecCreateCmdResponse exec = dockerClient.execCreateCmd(container.getId()).withAttachStdout(true) + .withAttachStderr(true).withCmd("/bin/bash").exec(); + LOG.info("Created exec {}", exec.toString()); + assertThat(exec.getId(), not(isEmptyString())); + + InspectExecResponse inspectExecResponse = dockerClient.inspectExecCmd(exec.getId()).exec(); + + if (apiVersion.isGreaterOrEqual(RemoteApiVersion.VERSION_1_22)) { + assertThat(inspectExecResponse.getExitCode(), is(nullValue())); + assertThat(inspectExecResponse.getCanRemove(), is(false)); + assertThat(inspectExecResponse.getContainerID(), is(container.getId())); + } else { + assertThat(inspectExecResponse.getExitCode(), is(0)); + assertNotNull(inspectExecResponse.getContainer().getNetworkSettings().getNetworks().get("bridge")); + } + + assertThat(inspectExecResponse.isOpenStdin(), is(false)); + assertThat(inspectExecResponse.isOpenStdout(), is(true)); + assertThat(inspectExecResponse.isRunning(), is(false)); + + final InspectExecResponse.Container inspectContainer = inspectExecResponse.getContainer(); + if (apiVersion.isGreaterOrEqual(VERSION_1_22)) { + assertThat(inspectContainer, nullValue()); + } else { + assertThat(inspectContainer, notNullValue()); + assertNotNull(inspectContainer.getNetworkSettings().getNetworks().get("bridge")); + } + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java new file mode 100644 index 000000000..7cbab660b --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java @@ -0,0 +1,57 @@ +package com.github.dockerjava.netty.exec; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import java.lang.reflect.Method; +import java.util.List; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; + +@Test(groups = "integration") +public class InspectNetworkCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void inspectNetwork() throws DockerException { + + List networks = dockerClient.listNetworksCmd().exec(); + + Network expected = findNetwork(networks, "bridge"); + + Network network = dockerClient.inspectNetworkCmd().withNetworkId(expected.getId()).exec(); + + assertThat(network.getName(), equalTo(expected.getName())); + assertThat(network.getScope(), equalTo(expected.getScope())); + assertThat(network.getDriver(), equalTo(expected.getDriver())); + assertThat(network.getIpam().getConfig().get(0).getSubnet(), equalTo(expected.getIpam().getConfig().get(0).getSubnet())); + assertThat(network.getIpam().getDriver(), equalTo(expected.getIpam().getDriver())); + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/InspectVolumeCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InspectVolumeCmdExecTest.java new file mode 100644 index 000000000..191767f87 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/InspectVolumeCmdExecTest.java @@ -0,0 +1,65 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.InspectVolumeResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class InspectVolumeCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void inspectVolume() throws DockerException { + + String volumeName = "volume1"; + + dockerClient.createVolumeCmd().withName(volumeName).withDriver("local").exec(); + + InspectVolumeResponse inspectVolumeResponse = dockerClient.inspectVolumeCmd(volumeName).exec(); + + assertThat(inspectVolumeResponse.getName(), equalTo("volume1")); + assertThat(inspectVolumeResponse.getDriver(), equalTo("local")); + assertThat(inspectVolumeResponse.getMountpoint(), containsString("/volume1/")); + } + + @Test(expectedExceptions = NotFoundException.class) + public void inspectNonExistentVolume() throws DockerException { + + String volumeName = "non-existing"; + + dockerClient.inspectVolumeCmd(volumeName).exec(); + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/KillContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/KillContainerCmdExecTest.java new file mode 100644 index 000000000..867373e63 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/KillContainerCmdExecTest.java @@ -0,0 +1,80 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +import java.lang.reflect.Method; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class KillContainerCmdExecTest extends AbstractNettyDockerClientTest { + + public static final Logger LOG = LoggerFactory.getLogger(KillContainerCmdExecTest.class); + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void killContainer() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + dockerClient.startContainerCmd(container.getId()).exec(); + + LOG.info("Killing container: {}", container.getId()); + dockerClient.killContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); + + assertThat(inspectContainerResponse.getState().getRunning(), is(equalTo(false))); + assertThat(inspectContainerResponse.getState().getExitCode(), not(equalTo(0))); + + } + + @Test + public void killNonExistingContainer() throws DockerException { + + try { + dockerClient.killContainerCmd("non-existing").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + } + } + +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/ListContainersCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ListContainersCmdExecTest.java new file mode 100644 index 000000000..40464c6f7 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/ListContainersCmdExecTest.java @@ -0,0 +1,172 @@ +package com.github.dockerjava.netty.exec; + +import static ch.lambdaj.Lambda.filter; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.startsWith; +import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; + +import java.lang.reflect.Method; +import java.util.List; +import java.util.Map; + +import org.hamcrest.Matcher; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.model.Container; +import com.github.dockerjava.core.command.PullImageResultCallback; +import com.github.dockerjava.core.util.FiltersBuilder; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; +import com.google.common.collect.ImmutableMap; + +@Test(groups = "integration") +public class ListContainersCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void testListContainers() throws Exception { + + String testImage = "busybox"; + + // // need to block until image is pulled completely + // dockerClient.pullImageCmd(testImage).exec(new PullImageResultCallback()).awaitSuccess(); + + List containers = dockerClient.listContainersCmd().withShowAll(true).exec(); + assertThat(containers, notNullValue()); + LOG.info("Container List: {}", containers); + + int size = containers.size(); + + CreateContainerResponse container1 = dockerClient.createContainerCmd(testImage).withCmd("echo").exec(); + + assertThat(container1.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container1.getId()).exec(); + + assertThat(inspectContainerResponse.getConfig().getImage(), is(equalTo(testImage))); + + dockerClient.startContainerCmd(container1.getId()).exec(); + + LOG.info("container id: " + container1.getId()); + + List containers2 = dockerClient.listContainersCmd().withShowAll(true).exec(); + + for (Container container : containers2) { + LOG.info("listContainer: id=" + container.getId() + " image=" + container.getImage()); + } + + assertThat(size + 1, is(equalTo(containers2.size()))); + Matcher matcher = hasItem(hasField("id", startsWith(container1.getId()))); + assertThat(containers2, matcher); + + List filteredContainers = filter(hasField("id", startsWith(container1.getId())), containers2); + assertThat(filteredContainers.size(), is(equalTo(1))); + + for (Container container : filteredContainers) { + LOG.info("filteredContainer: " + container); + } + + Container container2 = filteredContainers.get(0); + assertThat(container2.getCommand(), not(isEmptyString())); + assertThat(container2.getImage(), startsWith(testImage)); + } + + @Test + public void testListContainersWithLabelsFilter() throws Exception { + + String testImage = "busybox"; + + // need to block until image is pulled completely + dockerClient.pullImageCmd(testImage).exec(new PullImageResultCallback()).awaitCompletion(); + + List containers = dockerClient.listContainersCmd().withShowAll(true).exec(); + assertThat(containers, notNullValue()); + LOG.info("Container List: {}", containers); + + int size = containers.size(); + + CreateContainerResponse container1 = dockerClient.createContainerCmd(testImage).withCmd("echo").exec(); + + assertThat(container1.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container1.getId()).exec(); + + assertThat(inspectContainerResponse.getConfig().getImage(), is(equalTo(testImage))); + + dockerClient.startContainerCmd(container1.getId()).exec(); + + LOG.info("container id: " + container1.getId()); + + List containers2 = dockerClient.listContainersCmd().withShowAll(true).exec(); + + for (Container container : containers2) { + LOG.info("listContainer: id=" + container.getId() + " image=" + container.getImage()); + } + + assertThat(size + 1, is(equalTo(containers2.size()))); + Matcher matcher = hasItem(hasField("id", startsWith(container1.getId()))); + assertThat(containers2, matcher); + + List filteredContainers = filter(hasField("id", startsWith(container1.getId())), containers2); + assertThat(filteredContainers.size(), is(equalTo(1))); + + for (Container container : filteredContainers) { + LOG.info("filteredContainer: " + container); + } + + Container container2 = filteredContainers.get(0); + assertThat(container2.getCommand(), not(isEmptyString())); + assertThat(container2.getImage(), startsWith(testImage)); + + Map labels = ImmutableMap.of("test", "docker-java"); + + // list with filter by label + dockerClient.createContainerCmd(testImage).withCmd("echo").withLabels(labels).exec(); + filteredContainers = dockerClient.listContainersCmd().withShowAll(true) + .withLabelFilter(labels).exec(); + assertThat(filteredContainers.size(), is(equalTo(1))); + Container container3 = filteredContainers.get(0); + assertThat(container3.getCommand(), not(isEmptyString())); + assertThat(container3.getImage(), startsWith(testImage)); + + filteredContainers = dockerClient.listContainersCmd().withShowAll(true) + .withLabelFilter("test").exec(); + assertThat(filteredContainers.size(), is(equalTo(1))); + container3 = filteredContainers.get(0); + assertThat(container3.getCommand(), not(isEmptyString())); + assertThat(container3.getImage(), startsWith(testImage)); + assertEquals(container3.getLabels(), labels); + } + +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/ListImagesCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ListImagesCmdExecTest.java new file mode 100644 index 000000000..c83fa7ef9 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/ListImagesCmdExecTest.java @@ -0,0 +1,100 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.emptyArray; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.greaterThan; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.notNullValue; + +import java.lang.reflect.Method; +import java.util.List; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.Image; +import com.github.dockerjava.api.model.Info; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class ListImagesCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void listImages() throws DockerException { + List images = dockerClient.listImagesCmd().withShowAll(true).exec(); + assertThat(images, notNullValue()); + LOG.info("Images List: {}", images); + Info info = dockerClient.infoCmd().exec(); + + assertThat(images.size(), equalTo(info.getImages())); + + Image img = images.get(0); + assertThat(img.getCreated(), is(greaterThan(0L))); + assertThat(img.getVirtualSize(), is(greaterThan(0L))); + assertThat(img.getId(), not(isEmptyString())); + assertThat(img.getRepoTags(), not(emptyArray())); + } + + @Test(groups = "ignoreInCircleCi") + public void listImagesWithDanglingFilter() throws DockerException { + String imageId = createDanglingImage(); + List images = dockerClient.listImagesCmd().withDanglingFilter(true).withShowAll(true).exec(); + assertThat(images, notNullValue()); + LOG.info("Images List: {}", images); + assertThat(images.size(), is(greaterThan(0))); + Boolean imageInFilteredList = isImageInFilteredList(images, imageId); + assertTrue(imageInFilteredList); + } + + private boolean isImageInFilteredList(List images, String expectedImageId) { + for (Image image : images) { + if (expectedImageId.equals(image.getId())) { + return true; + } + } + return false; + } + + private String createDanglingImage() { + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + dockerClient.startContainerCmd(container.getId()).exec(); + + LOG.info("Committing container {}", container.toString()); + String imageId = dockerClient.commitCmd(container.getId()).exec(); + + dockerClient.stopContainerCmd(container.getId()).exec(); + dockerClient.removeContainerCmd(container.getId()).exec(); + return imageId; + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/ListNetworksCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ListNetworksCmdExecTest.java new file mode 100644 index 000000000..8a5d975f0 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/ListNetworksCmdExecTest.java @@ -0,0 +1,55 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; + +import java.lang.reflect.Method; +import java.util.List; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class ListNetworksCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void listNetworks() throws DockerException { + + List networks = dockerClient.listNetworksCmd().exec(); + + Network network = findNetwork(networks, "bridge"); + + assertThat(network.getName(), equalTo("bridge")); + assertThat(network.getScope(), equalTo("local")); + assertThat(network.getDriver(), equalTo("bridge")); + assertThat(network.getIpam().getDriver(), equalTo("default")); + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/ListVolumesCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ListVolumesCmdExecTest.java new file mode 100644 index 000000000..bca5ebece --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/ListVolumesCmdExecTest.java @@ -0,0 +1,59 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.greaterThanOrEqualTo; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateVolumeResponse; +import com.github.dockerjava.api.command.ListVolumesResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class ListVolumesCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void listVolumes() throws DockerException { + + CreateVolumeResponse createVolumeResponse = dockerClient.createVolumeCmd().withName("volume1") + .withDriver("local").exec(); + + assertThat(createVolumeResponse.getName(), equalTo("volume1")); + assertThat(createVolumeResponse.getDriver(), equalTo("local")); + assertThat(createVolumeResponse.getMountpoint(), containsString("/volume1/")); + + ListVolumesResponse listVolumesResponse = dockerClient.listVolumesCmd().exec(); + + assertThat(listVolumesResponse.getVolumes().size(), greaterThanOrEqualTo(1)); + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/LogContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/LogContainerCmdExecTest.java new file mode 100644 index 000000000..310994755 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/LogContainerCmdExecTest.java @@ -0,0 +1,172 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.containsString; + +import java.io.IOException; +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.core.command.WaitContainerResultCallback; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class LogContainerCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void asyncLogContainer() throws Exception { + + String snippet = "hello world"; + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("/bin/echo", snippet) + .exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()) + .awaitStatusCode(); + + assertThat(exitCode, equalTo(0)); + + LogContainerTestCallback loggingCallback = new LogContainerTestCallback(); + + // this essentially test the since=0 case + dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback); + + loggingCallback.awaitCompletion(); + + assertTrue(loggingCallback.toString().contains(snippet)); + } + + @Test + public void asyncLogNonExistingContainer() throws Exception { + + LogContainerTestCallback loggingCallback = new LogContainerTestCallback() { + @Override + public void onError(Throwable throwable) { + + assertEquals(throwable.getClass().getName(), NotFoundException.class.getName()); + + try { + // close the callback to prevent the call to onComplete + close(); + } catch (IOException e) { + throw new RuntimeException(); + } + + super.onError(throwable); + } + + public void onComplete() { + super.onComplete(); + fail("expected NotFoundException"); + }; + }; + + dockerClient.logContainerCmd("non-existing").withStdErr(true).withStdOut(true).exec(loggingCallback) + .awaitCompletion(); + } + + @Test + public void asyncMultipleLogContainer() throws Exception { + + String snippet = "hello world"; + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("/bin/echo", snippet) + .exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()) + .awaitStatusCode(); + + assertThat(exitCode, equalTo(0)); + + LogContainerTestCallback loggingCallback = new LogContainerTestCallback(); + + dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback); + + loggingCallback.close(); + + loggingCallback = new LogContainerTestCallback(); + + dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback); + + loggingCallback.close(); + + loggingCallback = new LogContainerTestCallback(); + + dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).exec(loggingCallback); + + loggingCallback.awaitCompletion(); + + assertTrue(loggingCallback.toString().contains(snippet)); + } + + @Test + public void asyncLogContainerWithSince() throws Exception { + String snippet = "hello world"; + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("/bin/echo", snippet) + .exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + int timestamp = (int) (System.currentTimeMillis() / 1000); + + dockerClient.startContainerCmd(container.getId()).exec(); + + int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()) + .awaitStatusCode(); + + assertThat(exitCode, equalTo(0)); + + LogContainerTestCallback loggingCallback = new LogContainerTestCallback(); + + dockerClient.logContainerCmd(container.getId()).withStdErr(true).withStdOut(true).withSince(timestamp) + .exec(loggingCallback); + + loggingCallback.awaitCompletion(); + + assertThat(loggingCallback.toString(), containsString(snippet)); + } + +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/PingCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/PingCmdExecTest.java new file mode 100644 index 000000000..128c1969a --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/PingCmdExecTest.java @@ -0,0 +1,43 @@ +package com.github.dockerjava.netty.exec; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class PingCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void ping() throws DockerException { + dockerClient.pingCmd().exec(); + } + +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/PullImageCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/PullImageCmdExecTest.java new file mode 100644 index 000000000..53fa8d660 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/PullImageCmdExecTest.java @@ -0,0 +1,119 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.lessThanOrEqualTo; +import static org.hamcrest.Matchers.notNullValue; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.async.ResultCallback; +import com.github.dockerjava.api.command.InspectImageResponse; +import com.github.dockerjava.api.command.PullImageCmd; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.model.Info; +import com.github.dockerjava.api.model.PullResponseItem; +import com.github.dockerjava.core.command.PullImageCmdImpl; +import com.github.dockerjava.core.command.PullImageResultCallback; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class PullImageCmdExecTest extends AbstractNettyDockerClientTest { + + private static final PullImageCmd.Exec NOP_EXEC = new PullImageCmd.Exec() { + public Void exec(PullImageCmd command, ResultCallback resultCallback) { + return null; + }; + }; + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void nullAuthConfig() throws Exception { + PullImageCmdImpl pullImageCmd = new PullImageCmdImpl(NOP_EXEC, null, ""); + try { + pullImageCmd.withAuthConfig(null); + fail(); + } catch (Exception e) { + assertEquals(e.getMessage(), "authConfig was not specified"); + } finally { + pullImageCmd.close(); + } + } + + @Test + public void testPullImage() throws Exception { + Info info = dockerClient.infoCmd().exec(); + LOG.info("Client info: {}", info.toString()); + + int imgCount = info.getImages(); + LOG.info("imgCount1: {}", imgCount); + + // This should be an image that is not used by other repositories + // already + // pulled down, preferably small in size. If tag is not used pull will + // download all images in that repository but tmpImgs will only + // deleted 'latest' image but not images with other tags + String testImage = "hackmann/empty"; + + LOG.info("Removing image: {}", testImage); + + try { + dockerClient.removeImageCmd(testImage).withForce(true).exec(); + } catch (NotFoundException e) { + // just ignore if not exist + } + + info = dockerClient.infoCmd().exec(); + LOG.info("Client info: {}", info.toString()); + + imgCount = info.getImages(); + LOG.info("imgCount2: {}", imgCount); + + LOG.info("Pulling image: {}", testImage); + + dockerClient.pullImageCmd(testImage).exec(new PullImageResultCallback()).awaitSuccess(); + + info = dockerClient.infoCmd().exec(); + LOG.info("Client info after pull, {}", info.toString()); + + assertThat(imgCount, lessThanOrEqualTo(info.getImages())); + + InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(testImage).exec(); + LOG.info("Image Inspect: {}", inspectImageResponse.toString()); + assertThat(inspectImageResponse, notNullValue()); + } + + @Test + public void testPullNonExistingImage() throws Exception { + + // does not throw an exception + // stream needs to be fully read in order to close the underlying connection + dockerClient.pullImageCmd("xvxcv/foo").exec(new PullImageResultCallback()).awaitCompletion(); + } + +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/PushImageCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/PushImageCmdExecTest.java new file mode 100644 index 000000000..777cc8eed --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/PushImageCmdExecTest.java @@ -0,0 +1,79 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +import java.lang.reflect.Method; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.exception.DockerClientException; +import com.github.dockerjava.core.command.PullImageResultCallback; +import com.github.dockerjava.core.command.PushImageResultCallback; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class PushImageCmdExecTest extends AbstractNettyDockerClientTest { + + public static final Logger LOG = LoggerFactory.getLogger(PushImageCmdExecTest.class); + + String username; + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + username = dockerClient.authConfig().getUsername(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void pushLatest() throws Exception { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + LOG.info("Committing container: {}", container.toString()); + String imageId = dockerClient.commitCmd(container.getId()).withRepository(username + "/busybox").exec(); + + // we have to block until image is pushed + dockerClient.pushImageCmd(username + "/busybox").exec(new PushImageResultCallback()).awaitSuccess(); + + LOG.info("Removing image: {}", imageId); + dockerClient.removeImageCmd(imageId).exec(); + + dockerClient.pullImageCmd(username + "/busybox").exec(new PullImageResultCallback()).awaitSuccess(); + } + + @Test(expectedExceptions = DockerClientException.class) + public void pushNonExistentImage() throws Exception { + + dockerClient.pushImageCmd(username + "/xxx").exec(new PushImageResultCallback()).awaitSuccess(); + } + +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/RemoveContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/RemoveContainerCmdExecTest.java new file mode 100644 index 000000000..ffe456c09 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/RemoveContainerCmdExecTest.java @@ -0,0 +1,81 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.startsWith; +import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; + +import java.lang.reflect.Method; +import java.util.List; + +import org.hamcrest.Matcher; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.model.Container; +import com.github.dockerjava.core.command.WaitContainerResultCallback; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class RemoveContainerCmdExecTest extends AbstractNettyDockerClientTest { + + public static final Logger LOG = LoggerFactory.getLogger(RemoveContainerCmdExecTest.class); + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void removeContainer() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true").exec(); + + dockerClient.startContainerCmd(container.getId()).exec(); + dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()).awaitStatusCode(); + + LOG.info("Removing container: {}", container.getId()); + dockerClient.removeContainerCmd(container.getId()).exec(); + + List containers2 = dockerClient.listContainersCmd().withShowAll(true).exec(); + + Matcher matcher = not(hasItem(hasField("id", startsWith(container.getId())))); + assertThat(containers2, matcher); + + } + + @Test + public void removeNonExistingContainer() throws DockerException { + try { + dockerClient.removeContainerCmd("non-existing").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + } + } + +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/RemoveImageCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/RemoveImageCmdExecTest.java new file mode 100644 index 000000000..e2f69ac1e --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/RemoveImageCmdExecTest.java @@ -0,0 +1,87 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.startsWith; +import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; + +import java.lang.reflect.Method; +import java.util.List; + +import org.hamcrest.Matcher; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.model.Container; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class RemoveImageCmdExecTest extends AbstractNettyDockerClientTest { + + public static final Logger LOG = LoggerFactory.getLogger(RemoveImageCmdExecTest.class); + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void removeImage() throws DockerException, InterruptedException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + dockerClient.startContainerCmd(container.getId()).exec(); + + LOG.info("Committing container {}", container.toString()); + String imageId = dockerClient.commitCmd(container.getId()).exec(); + + dockerClient.stopContainerCmd(container.getId()).exec(); + dockerClient.removeContainerCmd(container.getId()).exec(); + + LOG.info("Removing image: {}", imageId); + dockerClient.removeImageCmd(imageId).exec(); + + List containers = dockerClient.listContainersCmd().withShowAll(true).exec(); + + Matcher matcher = not(hasItem(hasField("id", startsWith(imageId)))); + assertThat(containers, matcher); + } + + @Test + public void removeNonExistingImage() throws DockerException, InterruptedException { + try { + dockerClient.removeImageCmd("non-existing").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + } + + } + +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExecTest.java new file mode 100644 index 000000000..9fda49f21 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExecTest.java @@ -0,0 +1,76 @@ +package com.github.dockerjava.netty.exec; + +import com.github.dockerjava.api.command.CreateNetworkResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; +import org.hamcrest.Matcher; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import java.lang.reflect.Method; +import java.util.List; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.startsWith; +import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; + +@Test(groups = "integration") +public class RemoveNetworkCmdExecTest extends AbstractNettyDockerClientTest { + + public static final Logger LOG = LoggerFactory.getLogger(RemoveNetworkCmdExecTest.class); + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void removeNetwork() throws DockerException { + + CreateNetworkResponse network = dockerClient.createNetworkCmd().withName("test-network").exec(); + + LOG.info("Removing network: {}", network.getId()); + dockerClient.removeNetworkCmd(network.getId()).exec(); + + List networks = dockerClient.listNetworksCmd().exec(); + + Matcher matcher = not(hasItem(hasField("id", startsWith(network.getId())))); + assertThat(networks, matcher); + + } + + @Test + public void removeNonExistingContainer() throws DockerException { + try { + dockerClient.removeNetworkCmd("non-existing").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + } + } + +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/RemoveVolumeCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/RemoveVolumeCmdExecTest.java new file mode 100644 index 000000000..59aafde67 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/RemoveVolumeCmdExecTest.java @@ -0,0 +1,65 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateVolumeResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class RemoveVolumeCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void removeVolume() throws DockerException { + + String volumeName = "volume1"; + + CreateVolumeResponse createVolumeResponse = dockerClient.createVolumeCmd().withName(volumeName) + .withDriver("local").exec(); + + assertThat(createVolumeResponse.getName(), equalTo(volumeName)); + assertThat(createVolumeResponse.getDriver(), equalTo("local")); + assertThat(createVolumeResponse.getMountpoint(), containsString("/volume1/")); + + dockerClient.removeVolumeCmd(volumeName).exec(); + + try { + dockerClient.inspectVolumeCmd(volumeName).exec(); + fail("Expected NotFoundException"); + } catch (NotFoundException e) { + // just ignore + } + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/RenameContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/RenameContainerCmdExecTest.java new file mode 100644 index 000000000..c176bc1d6 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/RenameContainerCmdExecTest.java @@ -0,0 +1,71 @@ +package com.github.dockerjava.netty.exec; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; +import org.testng.ITestResult; +import org.testng.annotations.*; + +import java.lang.reflect.Method; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; + +@Test(groups = "integration") +public class RenameContainerCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void renameContainer() throws DockerException { + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); + + String name1 = inspectContainerResponse.getName(); + + dockerClient.renameContainerCmd(container.getId()) + .withName(getClass().getCanonicalName() + "renameContainer") + .exec(); + + InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container.getId()).exec(); + LOG.info("Container Inspect After Rename: {}", inspectContainerResponse2.toString()); + + String name2 = inspectContainerResponse2.getName(); + + assertNotEquals(name1, name2); + + dockerClient.killContainerCmd(container.getId()).exec(); + } + + @Test(expectedExceptions = NotFoundException.class) + public void renameNonExistingContainer() throws DockerException, InterruptedException { + dockerClient.renameContainerCmd("non-existing") + .withName(getClass().getCanonicalName() + "renameExistingContainer") + .exec(); + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/RestartContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/RestartContainerCmdExecTest.java new file mode 100644 index 000000000..3360057a8 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/RestartContainerCmdExecTest.java @@ -0,0 +1,84 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class RestartContainerCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void restartContainer() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); + + String startTime = inspectContainerResponse.getState().getStartedAt(); + + dockerClient.restartContainerCmd(container.getId()).withtTimeout(2).exec(); + + InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container.getId()).exec(); + LOG.info("Container Inspect After Restart: {}", inspectContainerResponse2.toString()); + + String startTime2 = inspectContainerResponse2.getState().getStartedAt(); + + assertThat(startTime, not(equalTo(startTime2))); + + assertThat(inspectContainerResponse.getState().getRunning(), is(equalTo(true))); + + dockerClient.killContainerCmd(container.getId()).exec(); + } + + @Test + public void restartNonExistingContainer() throws DockerException, InterruptedException { + try { + dockerClient.restartContainerCmd("non-existing").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + } + + } + +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/SearchImagesCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/SearchImagesCmdExecTest.java new file mode 100644 index 000000000..70e102335 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/SearchImagesCmdExecTest.java @@ -0,0 +1,59 @@ +package com.github.dockerjava.netty.exec; + +import static ch.lambdaj.Lambda.filter; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.is; +import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; + +import java.lang.reflect.Method; +import java.util.List; + +import org.hamcrest.Matcher; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.SearchItem; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class SearchImagesCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void searchImages() throws DockerException { + List dockerSearch = dockerClient.searchImagesCmd("busybox").exec(); + LOG.info("Search returned {}", dockerSearch.toString()); + + Matcher matcher = hasItem(hasField("name", equalTo("busybox"))); + assertThat(dockerSearch, matcher); + + assertThat(filter(hasField("name", is("busybox")), dockerSearch).size(), equalTo(1)); + } + +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/StartContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/StartContainerCmdExecTest.java new file mode 100644 index 000000000..6c70c1f07 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/StartContainerCmdExecTest.java @@ -0,0 +1,562 @@ +package com.github.dockerjava.netty.exec; + +import static com.github.dockerjava.api.model.AccessMode.ro; +import static com.github.dockerjava.api.model.Capability.MKNOD; +import static com.github.dockerjava.api.model.Capability.NET_ADMIN; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.startsWith; + +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.command.StartContainerCmd; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.InternalServerErrorException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.model.Bind; +import com.github.dockerjava.api.model.Device; +import com.github.dockerjava.api.model.ExposedPort; +import com.github.dockerjava.api.model.Link; +import com.github.dockerjava.api.model.Ports; +import com.github.dockerjava.api.model.RestartPolicy; +import com.github.dockerjava.api.model.Volume; +import com.github.dockerjava.api.model.VolumesFrom; +import com.github.dockerjava.core.command.WaitContainerResultCallback; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class StartContainerCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void startContainerWithVolumes() throws DockerException { + + // see http://docs.docker.io/use/working_with_volumes/ + Volume volume1 = new Volume("/opt/webapp1"); + + Volume volume2 = new Volume("/opt/webapp2"); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox") + .withVolumes(volume1, volume2) + .withCmd("true") + .withBinds(new Bind("/src/webapp1", volume1, ro), new Bind("/src/webapp2", volume2)) + .exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getConfig().getVolumes().keySet(), contains("/opt/webapp1", "/opt/webapp2")); + + dockerClient.startContainerCmd(container.getId()).exec(); + + dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()).awaitStatusCode(); + + inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse, mountedVolumes(containsInAnyOrder(volume1, volume2))); + + final List mounts = inspectContainerResponse.getMounts(); + + assertThat(mounts, hasSize(2)); + + final InspectContainerResponse.Mount mount1 = new InspectContainerResponse.Mount() + .withRw(false).withMode("ro").withDestination(volume1).withSource("/src/webapp1"); + final InspectContainerResponse.Mount mount2 = new InspectContainerResponse.Mount() + .withRw(true).withMode("rw").withDestination(volume2).withSource("/src/webapp2"); + + assertThat(mounts, containsInAnyOrder(mount1, mount2)); + } + + @Test + public void startContainerWithVolumesFrom() throws DockerException { + + Volume volume1 = new Volume("/opt/webapp1"); + Volume volume2 = new Volume("/opt/webapp2"); + + String container1Name = UUID.randomUUID().toString(); + + CreateContainerResponse container1 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName(container1Name) + .withBinds(new Bind("/src/webapp1", volume1), new Bind("/src/webapp2", volume2)).exec(); + LOG.info("Created container1 {}", container1.toString()); + + dockerClient.startContainerCmd(container1.getId()).exec(); + LOG.info("Started container1 {}", container1.toString()); + + InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) + .exec(); + + assertThat(inspectContainerResponse1, mountedVolumes(containsInAnyOrder(volume1, volume2))); + + CreateContainerResponse container2 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withVolumesFrom(new VolumesFrom(container1Name)).exec(); + LOG.info("Created container2 {}", container2.toString()); + + dockerClient.startContainerCmd(container2.getId()).exec(); + LOG.info("Started container2 {}", container2.toString()); + + InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) + .exec(); + + assertThat(inspectContainerResponse2, mountedVolumes(containsInAnyOrder(volume1, volume2))); + } + + @Test + public void startContainerWithDns() throws DockerException { + + String aDnsServer = "8.8.8.8"; + String anotherDnsServer = "8.8.4.4"; + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") + .withDns(aDnsServer, anotherDnsServer).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDns()), + contains(aDnsServer, anotherDnsServer)); + } + + @Test + public void startContainerWithDnsSearch() throws DockerException { + + String dnsSearch = "example.com"; + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") + .withDnsSearch(dnsSearch).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + dockerClient.startContainerCmd(container.getId()).exec(); + + inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDnsSearch()), contains(dnsSearch)); + } + + @Test + public void startContainerWithPortBindings() throws DockerException { + + ExposedPort tcp22 = ExposedPort.tcp(22); + ExposedPort tcp23 = ExposedPort.tcp(23); + + Ports portBindings = new Ports(); + portBindings.bind(tcp22, Ports.binding(11022)); + portBindings.bind(tcp23, Ports.binding(11023)); + portBindings.bind(tcp23, Ports.binding(11024)); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") + .withExposedPorts(tcp22, tcp23).withPortBindings(portBindings).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + dockerClient.startContainerCmd(container.getId()).exec(); + + inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getConfig().getExposedPorts()), contains(tcp22, tcp23)); + + assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp22)[0], + is(equalTo(Ports.binding(11022)))); + + assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[0], + is(equalTo(Ports.binding(11023)))); + + assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[1], + is(equalTo(Ports.binding(11024)))); + + } + + @Test + public void startContainerWithRandomPortBindings() throws DockerException { + + ExposedPort tcp22 = ExposedPort.tcp(22); + ExposedPort tcp23 = ExposedPort.tcp(23); + + Ports portBindings = new Ports(); + portBindings.bind(tcp22, Ports.binding(null)); + portBindings.bind(tcp23, Ports.binding(null)); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withExposedPorts(tcp22, tcp23).withPortBindings(portBindings).withPublishAllPorts(true).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(Arrays.asList(inspectContainerResponse.getConfig().getExposedPorts()), contains(tcp22, tcp23)); + + assertThat(inspectContainerResponse.getNetworkSettings().getPorts().getBindings().get(tcp22)[0].getHostPort(), + is(not(equalTo(tcp22.getPort())))); + + assertThat(inspectContainerResponse.getNetworkSettings().getPorts().getBindings().get(tcp23)[0].getHostPort(), + is(not(equalTo(tcp23.getPort())))); + + } + + @Test + public void startContainerWithConflictingPortBindings() throws DockerException { + + ExposedPort tcp22 = ExposedPort.tcp(22); + ExposedPort tcp23 = ExposedPort.tcp(23); + + Ports portBindings = new Ports(); + portBindings.bind(tcp22, Ports.binding(11022)); + portBindings.bind(tcp23, Ports.binding(11022)); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") + .withExposedPorts(tcp22, tcp23).withPortBindings(portBindings).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + try { + dockerClient.startContainerCmd(container.getId()).exec(); + fail("expected InternalServerErrorException"); + } catch (InternalServerErrorException e) { + + } + + } + + @Test + public void startContainerWithLinkingDeprecated() throws DockerException { + + CreateContainerResponse container1 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName("container1").exec(); + + LOG.info("Created container1 {}", container1.toString()); + assertThat(container1.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container1.getId()).exec(); + + InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) + .exec(); + LOG.info("Container1 Inspect: {}", inspectContainerResponse1.toString()); + + assertThat(inspectContainerResponse1.getConfig(), is(notNullValue())); + assertThat(inspectContainerResponse1.getId(), not(isEmptyString())); + assertThat(inspectContainerResponse1.getId(), startsWith(container1.getId())); + assertThat(inspectContainerResponse1.getName(), equalTo("/container1")); + assertThat(inspectContainerResponse1.getImageId(), not(isEmptyString())); + assertThat(inspectContainerResponse1.getState(), is(notNullValue())); + assertThat(inspectContainerResponse1.getState().getRunning(), is(true)); + + if (!inspectContainerResponse1.getState().getRunning()) { + assertThat(inspectContainerResponse1.getState().getExitCode(), is(equalTo(0))); + } + + CreateContainerResponse container2 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName("container2").withLinks(new Link("container1", "container1Link")).exec(); + + LOG.info("Created container2 {}", container2.toString()); + assertThat(container2.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container2.getId()).exec(); + + InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) + .exec(); + LOG.info("Container2 Inspect: {}", inspectContainerResponse2.toString()); + + assertThat(inspectContainerResponse2.getConfig(), is(notNullValue())); + assertThat(inspectContainerResponse2.getId(), not(isEmptyString())); + assertThat(inspectContainerResponse2.getHostConfig(), is(notNullValue())); + assertThat(inspectContainerResponse2.getHostConfig().getLinks(), is(notNullValue())); + assertThat(inspectContainerResponse2.getHostConfig().getLinks(), equalTo(new Link[] {new Link("container1", + "container1Link")})); + assertThat(inspectContainerResponse2.getId(), startsWith(container2.getId())); + assertThat(inspectContainerResponse2.getName(), equalTo("/container2")); + assertThat(inspectContainerResponse2.getImageId(), not(isEmptyString())); + assertThat(inspectContainerResponse2.getState(), is(notNullValue())); + assertThat(inspectContainerResponse2.getState().getRunning(), is(true)); + + } + + @Test + public void startContainerWithLinking() throws DockerException { + + CreateContainerResponse container1 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName("container1").exec(); + + LOG.info("Created container1 {}", container1.toString()); + assertThat(container1.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container1.getId()).exec(); + + InspectContainerResponse inspectContainerResponse1 = dockerClient.inspectContainerCmd(container1.getId()) + .exec(); + LOG.info("Container1 Inspect: {}", inspectContainerResponse1.toString()); + + assertThat(inspectContainerResponse1.getConfig(), is(notNullValue())); + assertThat(inspectContainerResponse1.getId(), not(isEmptyString())); + assertThat(inspectContainerResponse1.getId(), startsWith(container1.getId())); + assertThat(inspectContainerResponse1.getName(), equalTo("/container1")); + assertThat(inspectContainerResponse1.getImageId(), not(isEmptyString())); + assertThat(inspectContainerResponse1.getState(), is(notNullValue())); + assertThat(inspectContainerResponse1.getState().getRunning(), is(true)); + + if (!inspectContainerResponse1.getState().getRunning()) { + assertThat(inspectContainerResponse1.getState().getExitCode(), is(equalTo(0))); + } + + CreateContainerResponse container2 = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName("container2").withLinks(new Link("container1", "container1Link")).exec(); + + LOG.info("Created container2 {}", container2.toString()); + assertThat(container2.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container2.getId()).exec(); + + InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) + .exec(); + LOG.info("Container2 Inspect: {}", inspectContainerResponse2.toString()); + + assertThat(inspectContainerResponse2.getConfig(), is(notNullValue())); + assertThat(inspectContainerResponse2.getId(), not(isEmptyString())); + assertThat(inspectContainerResponse2.getHostConfig(), is(notNullValue())); + assertThat(inspectContainerResponse2.getHostConfig().getLinks(), is(notNullValue())); + assertThat(inspectContainerResponse2.getHostConfig().getLinks(), equalTo(new Link[] {new Link("container1", + "container1Link")})); + assertThat(inspectContainerResponse2.getId(), startsWith(container2.getId())); + assertThat(inspectContainerResponse2.getName(), equalTo("/container2")); + assertThat(inspectContainerResponse2.getImageId(), not(isEmptyString())); + assertThat(inspectContainerResponse2.getState(), is(notNullValue())); + assertThat(inspectContainerResponse2.getState().getRunning(), is(true)); + + } + + @Test + public void startContainer() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd(new String[] {"top"}) + .exec(); + + LOG.info("Created container {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); + + assertThat(inspectContainerResponse.getConfig(), is(notNullValue())); + assertThat(inspectContainerResponse.getId(), not(isEmptyString())); + + assertThat(inspectContainerResponse.getId(), startsWith(container.getId())); + + assertThat(inspectContainerResponse.getImageId(), not(isEmptyString())); + assertThat(inspectContainerResponse.getState(), is(notNullValue())); + + assertThat(inspectContainerResponse.getState().getRunning(), is(true)); + + if (!inspectContainerResponse.getState().getRunning()) { + assertThat(inspectContainerResponse.getState().getExitCode(), is(equalTo(0))); + } + } + + @Test + public void testStartNonExistingContainer() throws DockerException { + try { + dockerClient.startContainerCmd("non-existing").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + } + } + + /** + * This tests support for --net option for the docker run command: --net="bridge" Set the Network mode for the container 'bridge': + * creates a new network stack for the container on the docker bridge 'none': no networking for this container 'container:': reuses + * another container network stack 'host': use the host network stack inside the container. Note: the host mode gives the container full + * access to local system services such as D-bus and is therefore considered insecure. + */ + @Test + public void startContainerWithNetworkMode() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true") + .withNetworkMode("host").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + dockerClient.startContainerCmd(container.getId()).exec(); + + inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getHostConfig().getNetworkMode(), is(equalTo("host"))); + } + + @Test + public void startContainerWithCapAddAndCapDrop() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withCapAdd(NET_ADMIN).withCapDrop(MKNOD).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getState().getRunning(), is(true)); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getCapAdd()), contains(NET_ADMIN)); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getCapDrop()), contains(MKNOD)); + } + + @Test + public void startContainerWithDevices() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withDevices(new Device("rwm", "/dev/nulo", "/dev/zero")).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getState().getRunning(), is(true)); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDevices()), contains(new Device("rwm", + "/dev/nulo", "/dev/zero"))); + } + + @Test + public void startContainerWithExtraHosts() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withExtraHosts("dockerhost:127.0.0.1").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getState().getRunning(), is(true)); + + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getExtraHosts()), + contains("dockerhost:127.0.0.1")); + } + + @Test + public void startContainerWithRestartPolicy() throws DockerException { + + RestartPolicy restartPolicy = RestartPolicy.onFailureRestart(5); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withRestartPolicy(restartPolicy).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertThat(inspectContainerResponse.getState().getRunning(), is(true)); + + assertThat(inspectContainerResponse.getHostConfig().getRestartPolicy(), is(equalTo(restartPolicy))); + } + + @Test + public void existingHostConfigIsPreservedByBlankStartCmd() throws DockerException { + + String dnsServer = "8.8.8.8"; + + // prepare a container with custom DNS + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withDns(dnsServer) + .withCmd("true").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + // start container _without_any_customization_ (important!) + dockerClient.startContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + // The DNS setting survived. + assertThat(inspectContainerResponse.getHostConfig().getDns(), is(notNullValue())); + assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getDns()), contains(dnsServer)); + } + + @Test + public void anUnconfiguredCommandSerializesToEmptyJson() throws Exception { + ObjectMapper objectMapper = new ObjectMapper(); + StartContainerCmd command = dockerClient.startContainerCmd(""); + assertThat(objectMapper.writeValueAsString(command), is("{}")); + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/StatsCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/StatsCmdExecTest.java new file mode 100644 index 000000000..2b84ae6b0 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/StatsCmdExecTest.java @@ -0,0 +1,106 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +import java.io.IOException; +import java.lang.reflect.Method; +import java.security.SecureRandom; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.model.Statistics; +import com.github.dockerjava.core.async.ResultCallbackTemplate; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class StatsCmdExecTest extends AbstractNettyDockerClientTest { + + private static int NUM_STATS = 5; + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void testStatsStreaming() throws InterruptedException, IOException { + TimeUnit.SECONDS.sleep(1); + + CountDownLatch countDownLatch = new CountDownLatch(NUM_STATS); + + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("top") + .withName(containerName).exec(); + LOG.info("Created container {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + StatsCallbackTest statsCallback = dockerClient.statsCmd(container.getId()) + .exec(new StatsCallbackTest(countDownLatch)); + + countDownLatch.await(3, TimeUnit.SECONDS); + Boolean gotStats = statsCallback.gotStats(); + + LOG.info("Stop stats collection"); + + statsCallback.close(); + + LOG.info("Stopping container"); + dockerClient.stopContainerCmd(container.getId()).exec(); + dockerClient.removeContainerCmd(container.getId()).exec(); + + LOG.info("Completed test"); + assertTrue(gotStats, "Expected true"); + + } + + private class StatsCallbackTest extends ResultCallbackTemplate { + private final CountDownLatch countDownLatch; + + private Boolean gotStats = false; + + public StatsCallbackTest(CountDownLatch countDownLatch) { + this.countDownLatch = countDownLatch; + } + + @Override + public void onNext(Statistics stats) { + LOG.info("Received stats #{}: {}", countDownLatch.getCount(), stats); + if (stats != null) { + gotStats = true; + } + countDownLatch.countDown(); + } + + public Boolean gotStats() { + return gotStats; + } + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/StopContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/StopContainerCmdExecTest.java new file mode 100644 index 000000000..b3f545a42 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/StopContainerCmdExecTest.java @@ -0,0 +1,89 @@ +package com.github.dockerjava.netty.exec; + +import static com.github.dockerjava.core.RemoteApiVersion.VERSION_1_22; +import static com.github.dockerjava.utils.TestUtils.getVersion; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +import java.lang.reflect.Method; + +import com.github.dockerjava.core.RemoteApiVersion; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class StopContainerCmdExecTest extends AbstractNettyDockerClientTest { + + public static final Logger LOG = LoggerFactory.getLogger(StopContainerCmdExecTest.class); + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void testStopContainer() throws DockerException { + final RemoteApiVersion apiVersion = getVersion(dockerClient); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + dockerClient.startContainerCmd(container.getId()).exec(); + + LOG.info("Stopping container: {}", container.getId()); + dockerClient.stopContainerCmd(container.getId()).withTimeout(2).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); + + assertThat(inspectContainerResponse.getState().getRunning(), is(equalTo(false))); + + final Integer exitCode = inspectContainerResponse.getState().getExitCode(); + if (apiVersion.equals(VERSION_1_22)) { + assertThat(exitCode, is(0)); + } else { + assertThat(exitCode, not(0)); + } + } + + @Test + public void testStopNonExistingContainer() throws DockerException { + try { + dockerClient.stopContainerCmd("non-existing").withTimeout(2).exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + + } + } + +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/TagImageCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/TagImageCmdExecTest.java new file mode 100644 index 000000000..bbab169ef --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/TagImageCmdExecTest.java @@ -0,0 +1,63 @@ +package com.github.dockerjava.netty.exec; + +import java.lang.reflect.Method; + +import org.apache.commons.lang.math.RandomUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class TagImageCmdExecTest extends AbstractNettyDockerClientTest { + + public static final Logger LOG = LoggerFactory.getLogger(TagImageCmdExecTest.class); + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void tagImage() throws Exception { + String tag = "" + RandomUtils.nextInt(Integer.MAX_VALUE); + + dockerClient.tagImageCmd("busybox:latest", "docker-java/busybox", tag).exec(); + + dockerClient.removeImageCmd("docker-java/busybox:" + tag).exec(); + } + + @Test + public void tagNonExistingImage() throws Exception { + String tag = "" + RandomUtils.nextInt(Integer.MAX_VALUE); + + try { + dockerClient.tagImageCmd("non-existing", "docker-java/busybox", tag).exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + } + } + +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/UpdateContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/UpdateContainerCmdExecTest.java new file mode 100644 index 000000000..e2907dc8a --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/UpdateContainerCmdExecTest.java @@ -0,0 +1,107 @@ +package com.github.dockerjava.netty.exec; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.HostConfig; +import com.github.dockerjava.api.model.UpdateContainerResponse; +import com.github.dockerjava.core.RemoteApiVersion; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.ITestResult; +import org.testng.SkipException; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import java.io.IOException; +import java.lang.reflect.Method; + +import static com.github.dockerjava.utils.TestUtils.getVersion; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.collection.IsCollectionWithSize.hasSize; + +/** + * @author Kanstantsin Shautsou + */ +@Test(groups = "integration") +public class UpdateContainerCmdExecTest extends AbstractNettyDockerClientTest { + public static final Logger LOG = LoggerFactory.getLogger(UpdateContainerCmdExecTest.class); + private static final String BUSYBOX_IMAGE = "busybox"; + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void updateContainer() throws DockerException, IOException { + final RemoteApiVersion apiVersion = getVersion(dockerClient); + + if (!apiVersion.isGreaterOrEqual(RemoteApiVersion.VERSION_1_22)) { + throw new SkipException("API version should be >= 1.22"); + } + + CreateContainerResponse response = dockerClient.createContainerCmd(BUSYBOX_IMAGE) + .withCmd("sleep", "9999") + .exec(); + String containerId = response.getId(); + dockerClient.startContainerCmd(containerId).exec(); + + InspectContainerResponse inspectBefore = dockerClient.inspectContainerCmd(containerId).exec(); + final HostConfig beforeHostConfig = inspectBefore.getHostConfig(); + + final UpdateContainerResponse updateResponse = dockerClient.updateContainerCmd(containerId) + .withBlkioWeight(300) + .withCpuShares(512) + .withCpuPeriod(100000) + .withCpuQuota(50000) +// .withCpusetCpus("0") // depends on env + .withCpusetMems("0") + .withMemory(314572800L) + .withMemorySwap(514288000L) + .withMemoryReservation(209715200L) +// .withKernelMemory(52428800) Can not update kernel memory to a running container, please stop it first. + .exec(); + + // docker toolbox 1.10.1 + assertThat(updateResponse.getWarnings(), hasSize(1)); + assertThat(updateResponse.getWarnings().get(0), + is("Your kernel does not support Block I/O weight. Weight discarded.")); + + InspectContainerResponse inspectAfter = dockerClient.inspectContainerCmd(containerId).exec(); + final HostConfig afterHostConfig = inspectAfter.getHostConfig(); + + assertThat(afterHostConfig.getMemory(), + is(314572800L)); + +// assertThat(afterHostConfig.getBlkioWeight(), is(300)); + assertThat(afterHostConfig.getCpuShares(), is(512)); + assertThat(afterHostConfig.getCpuPeriod(), is(100000)); + assertThat(afterHostConfig.getCpuQuota(), is(50000)); + assertThat(afterHostConfig.getCpusetMems(), is("0")); + + assertThat(afterHostConfig.getMemoryReservation(), is(209715200L)); + assertThat(afterHostConfig.getMemorySwap(), is(514288000L)); + } + +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/VersionCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/VersionCmdExecTest.java new file mode 100644 index 000000000..7709fa56d --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/VersionCmdExecTest.java @@ -0,0 +1,52 @@ +package com.github.dockerjava.netty.exec; + +import java.lang.reflect.Method; + +import org.apache.commons.lang.StringUtils; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.Version; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class VersionCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void version() throws DockerException { + Version version = dockerClient.versionCmd().exec(); + LOG.info(version.toString()); + + assertTrue(version.getGoVersion().length() > 0); + assertTrue(version.getVersion().length() > 0); + + assertEquals(StringUtils.split(version.getVersion(), ".").length, 3); + + } + +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/WaitContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/WaitContainerCmdExecTest.java new file mode 100644 index 000000000..527d5f995 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/WaitContainerCmdExecTest.java @@ -0,0 +1,110 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +import java.lang.reflect.Method; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.model.WaitResponse; +import com.github.dockerjava.core.command.WaitContainerResultCallback; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class WaitContainerCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void testWaitContainer() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("true").exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(new WaitContainerResultCallback()) + .awaitStatusCode(); + LOG.info("Container exit code: {}", exitCode); + + assertThat(exitCode, equalTo(0)); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); + + assertThat(inspectContainerResponse.getState().getRunning(), is(equalTo(false))); + assertThat(inspectContainerResponse.getState().getExitCode(), is(equalTo(exitCode))); + } + + @Test(expectedExceptions = NotFoundException.class) + public void testWaitNonExistingContainer() throws DockerException { + + WaitContainerResultCallback callback = new WaitContainerResultCallback() { + public void onNext(WaitResponse waitResponse) { + fail("expected NotFoundException"); + }; + }; + + dockerClient.waitContainerCmd("non-existing").exec(callback).awaitStatusCode(); + } + + @Test + public void testWaitContainerAbort() throws Exception { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + WaitContainerResultCallback callback = dockerClient.waitContainerCmd(container.getId()).exec( + new WaitContainerResultCallback()); + + Thread.sleep(5000); + + System.err.println("closing callback"); + + callback.close(); + + dockerClient.killContainerCmd(container.getId()).exec(); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + LOG.info("Container Inspect: {}", inspectContainerResponse.toString()); + + assertThat(inspectContainerResponse.getState().getRunning(), is(equalTo(false))); + } +}