From 3aef2d0fce14e4ffefcd7ace620b9f05252f982d Mon Sep 17 00:00:00 2001 From: gtejasvarma Date: Thu, 17 Dec 2015 11:37:53 -0800 Subject: [PATCH 001/912] adding RestartCount to InspectContainerResponse --- .../dockerjava/api/command/InspectContainerResponse.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java b/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java index b98e6d70db..a6e3969854 100644 --- a/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java +++ b/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java @@ -66,6 +66,9 @@ public class InspectContainerResponse { @JsonProperty("Name") private String name; + @JsonProperty("RestartCount") + private int restartCount;; + @JsonProperty("NetworkSettings") private NetworkSettings networkSettings; @@ -160,6 +163,10 @@ public String getName() { return name; } + public int getRestartCount() { + return restartCount; + } + public String getDriver() { return driver; } From 6845dc30222fa1982aad55fa53a062ae189e1e2a Mon Sep 17 00:00:00 2001 From: gtejasvarma Date: Mon, 21 Dec 2015 13:48:00 -0800 Subject: [PATCH 002/912] changing to Object type from native type --- .../dockerjava/api/command/InspectContainerResponse.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java b/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java index a6e3969854..d8d3a50660 100644 --- a/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java +++ b/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java @@ -67,7 +67,7 @@ public class InspectContainerResponse { private String name; @JsonProperty("RestartCount") - private int restartCount;; + private Integer restartCount; @JsonProperty("NetworkSettings") private NetworkSettings networkSettings; @@ -163,7 +163,7 @@ public String getName() { return name; } - public int getRestartCount() { + public Integer getRestartCount() { return restartCount; } From d4e01e30002df2dad89a700f04a2e0d53117eb64 Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Fri, 15 Jan 2016 21:39:38 +0100 Subject: [PATCH 003/912] Add inspect container RestartCount test --- .../api/command/InspectContainerResponse.java | 3 + .../command/InspectContainerCmdImplTest.java | 90 +++++++++++++++++++ .../exec/InspectContainerCmdExecTest.java | 15 ++++ 3 files changed, 108 insertions(+) create mode 100644 src/test/java/com/github/dockerjava/core/command/InspectContainerCmdImplTest.java diff --git a/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java b/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java index d8d3a50660..59438dba24 100644 --- a/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java +++ b/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java @@ -66,6 +66,9 @@ public class InspectContainerResponse { @JsonProperty("Name") private String name; + /** + * @since {@link RemoteApiVersion#VERSION_1_17} + */ @JsonProperty("RestartCount") private Integer restartCount; 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 0000000000..cf555a28a9 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/InspectContainerCmdImplTest.java @@ -0,0 +1,90 @@ +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 + public void inspectNonExistingContainer() throws DockerException { + + try { + dockerClient.inspectContainerCmd("non-existing").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + } + } + + @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)); + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java index 63bafe7d2b..31116ef22b 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java @@ -1,6 +1,7 @@ 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; @@ -72,4 +73,18 @@ public void inspectNonExistingContainer() throws DockerException { } } + @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)); + } } From b86392aea1358f3b0341f297c38cd59865c17d79 Mon Sep 17 00:00:00 2001 From: marcuslinke Date: Fri, 15 Jan 2016 21:41:05 +0100 Subject: [PATCH 004/912] Update CHANGELOG.md --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 380ba2c384..6b0b383270 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,9 +8,9 @@ Notes * The upcoming release will contain multiple API breaking changes therefore the major version switch. It will support a subset of v.1.21 of the docker remote API. It also includes an experimental netty based implementation of `DockerCmdExecFactory` that probably will replace the current jersey/httpclient based one in a later release. All changes - * [#410] (https://github.com/docker-java/docker-java/pull/410) Support for build-args of docker build -* [#408] (https://github.com/docker-java/docker-java/pull/408) Support for volume API +* [#408] (https://github.com/docker-java/docker-java/pull/408) Support for volume API +* [#406] (https://github.com/docker-java/docker-java/pull/406) Added RestartCount to InspectContainerResponse * [#396] (https://github.com/docker-java/docker-java/pull/396) Disable evaluation of http.proxy... variables when using unix socket connection * [#393] (https://github.com/docker-java/docker-java/pull/393) Support ONBUILD instruction in Dockerfiles * [#392] (https://github.com/docker-java/docker-java/pull/392) Introduce InspectContainerResponse.Mounts From f6d225d2c2e65aa058da5b94c2350cbe5d5f96c9 Mon Sep 17 00:00:00 2001 From: Andrew Keely Date: Fri, 8 Jan 2016 22:58:51 -0500 Subject: [PATCH 005/912] Implement Network API --- .../github/dockerjava/api/DockerClient.java | 18 ++ .../api/command/ConnectToNetworkCmd.java | 27 ++ .../api/command/CreateNetworkCmd.java | 42 +++ .../api/command/CreateNetworkResponse.java | 36 +++ .../api/command/DisconnectFromNetworkCmd.java | 27 ++ .../api/command/DockerCmdExecFactory.java | 12 + .../api/command/InspectContainerResponse.java | 54 +--- .../api/command/InspectExecResponse.java | 31 ++ .../api/command/InspectNetworkCmd.java | 31 ++ .../api/command/ListNetworksCmd.java | 25 ++ .../api/command/RemoveNetworkCmd.java | 30 ++ .../github/dockerjava/api/model/Network.java | 154 ++++++++++ .../dockerjava/api/model/NetworkFilters.java | 15 + .../dockerjava/api/model/NetworkSettings.java | 272 ++++++++++++++++++ .../dockerjava/api/model/PortBinding.java | 1 - .../github/dockerjava/api/model/Ports.java | 1 - .../dockerjava/core/DockerClientImpl.java | 42 +++ .../core/command/ConnectToNetworkCmdImpl.java | 39 +++ .../core/command/CreateNetworkCmdImpl.java | 71 +++++ .../command/DisconnectFromNetworkCmdImpl.java | 40 +++ .../core/command/InpectNetworkCmdImpl.java | 24 ++ .../core/command/ListNetworksCmdImpl.java | 27 ++ .../core/command/RemoveNetworkCmdImpl.java | 26 ++ .../jaxrs/ConnectToNetworkCmdExec.java | 32 +++ .../jaxrs/CreateNetworkCmdExec.java | 31 ++ .../jaxrs/DisconnectFromNetworkCmdExec.java | 32 +++ .../jaxrs/DockerCmdExecFactoryImpl.java | 91 ++++-- .../jaxrs/InspectNetworkCmdExec.java | 28 ++ .../dockerjava/jaxrs/ListNetworksCmdExec.java | 43 +++ .../jaxrs/RemoveNetworkCmdExec.java | 30 ++ .../netty/DockerCmdExecFactoryImpl.java | 96 +++++-- .../netty/exec/ConnectToNetworkCmdExec.java | 29 ++ .../netty/exec/CreateNetworkCmdExec.java | 30 ++ .../exec/DisconnectFromNetworkCmdExec.java | 29 ++ .../netty/exec/InspectNetworkCmdExec.java | 29 ++ .../netty/exec/ListNetworksCmdExec.java | 37 +++ .../netty/exec/RemoveNetworkCmdExec.java | 29 ++ .../client/AbstractDockerClientTest.java | 23 ++ .../core/TestDockerCmdExecFactory.java | 97 ++++--- .../command/ConnectToNetworkCmdImplTest.java | 59 ++++ .../command/CreateNetworkCmdImplTest.java | 52 ++++ .../DisconnectFromNetworkCmdImplTest.java | 59 ++++ .../command/InspectContainerCmdImplTest.java | 15 + .../core/command/InspectExecCmdImplTest.java | 30 +- .../command/InspectNetworkCmdImplTest.java | 57 ++++ .../core/command/ListNetworksCmdImplTest.java | 55 ++++ .../command/RemoveNetworkCmdImplTest.java | 76 +++++ .../netty/exec/CreateNetworkCmdExecTest.java | 52 ++++ .../exec/InspectContainerCmdExecTest.java | 15 + .../netty/exec/InspectExecCmdExecTest.java | 22 ++ .../netty/exec/InspectNetworkCmdExecTest.java | 57 ++++ .../netty/exec/ListNetworksCmdExecTest.java | 55 ++++ .../netty/exec/RemoveNetworkCmdExecTest.java | 76 +++++ 53 files changed, 2252 insertions(+), 159 deletions(-) create mode 100644 src/main/java/com/github/dockerjava/api/command/ConnectToNetworkCmd.java create mode 100644 src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java create mode 100644 src/main/java/com/github/dockerjava/api/command/CreateNetworkResponse.java create mode 100644 src/main/java/com/github/dockerjava/api/command/DisconnectFromNetworkCmd.java create mode 100644 src/main/java/com/github/dockerjava/api/command/InspectNetworkCmd.java create mode 100644 src/main/java/com/github/dockerjava/api/command/ListNetworksCmd.java create mode 100644 src/main/java/com/github/dockerjava/api/command/RemoveNetworkCmd.java create mode 100644 src/main/java/com/github/dockerjava/api/model/Network.java create mode 100644 src/main/java/com/github/dockerjava/api/model/NetworkFilters.java create mode 100644 src/main/java/com/github/dockerjava/api/model/NetworkSettings.java create mode 100644 src/main/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImpl.java create mode 100644 src/main/java/com/github/dockerjava/core/command/CreateNetworkCmdImpl.java create mode 100644 src/main/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImpl.java create mode 100644 src/main/java/com/github/dockerjava/core/command/InpectNetworkCmdImpl.java create mode 100644 src/main/java/com/github/dockerjava/core/command/ListNetworksCmdImpl.java create mode 100644 src/main/java/com/github/dockerjava/core/command/RemoveNetworkCmdImpl.java create mode 100644 src/main/java/com/github/dockerjava/jaxrs/ConnectToNetworkCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/jaxrs/CreateNetworkCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/jaxrs/DisconnectFromNetworkCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/jaxrs/InspectNetworkCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/jaxrs/ListNetworksCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/jaxrs/RemoveNetworkCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/netty/exec/ConnectToNetworkCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/netty/exec/DisconnectFromNetworkCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/netty/exec/ListNetworksCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExec.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/CreateNetworkCmdImplTest.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/InspectNetworkCmdImplTest.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/RemoveNetworkCmdImplTest.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/InspectNetworkCmdExecTest.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/RemoveNetworkCmdExecTest.java diff --git a/src/main/java/com/github/dockerjava/api/DockerClient.java b/src/main/java/com/github/dockerjava/api/DockerClient.java index a3a3a9aa04..5db2967ffc 100644 --- a/src/main/java/com/github/dockerjava/api/DockerClient.java +++ b/src/main/java/com/github/dockerjava/api/DockerClient.java @@ -11,13 +11,16 @@ import com.github.dockerjava.api.command.AuthCmd; import com.github.dockerjava.api.command.BuildImageCmd; import com.github.dockerjava.api.command.CommitCmd; +import com.github.dockerjava.api.command.ConnectToNetworkCmd; import com.github.dockerjava.api.command.ContainerDiffCmd; import com.github.dockerjava.api.command.CopyArchiveFromContainerCmd; import com.github.dockerjava.api.command.CopyArchiveToContainerCmd; import com.github.dockerjava.api.command.CopyFileFromContainerCmd; import com.github.dockerjava.api.command.CreateContainerCmd; import com.github.dockerjava.api.command.CreateImageCmd; +import com.github.dockerjava.api.command.CreateNetworkCmd; import com.github.dockerjava.api.command.CreateVolumeCmd; +import com.github.dockerjava.api.command.DisconnectFromNetworkCmd; import com.github.dockerjava.api.command.EventsCmd; import com.github.dockerjava.api.command.ExecCreateCmd; import com.github.dockerjava.api.command.ExecStartCmd; @@ -25,10 +28,12 @@ import com.github.dockerjava.api.command.InspectContainerCmd; import com.github.dockerjava.api.command.InspectExecCmd; import com.github.dockerjava.api.command.InspectImageCmd; +import com.github.dockerjava.api.command.InspectNetworkCmd; import com.github.dockerjava.api.command.InspectVolumeCmd; import com.github.dockerjava.api.command.KillContainerCmd; import com.github.dockerjava.api.command.ListContainersCmd; import com.github.dockerjava.api.command.ListImagesCmd; +import com.github.dockerjava.api.command.ListNetworksCmd; import com.github.dockerjava.api.command.ListVolumesCmd; import com.github.dockerjava.api.command.LogContainerCmd; import com.github.dockerjava.api.command.PauseContainerCmd; @@ -37,6 +42,7 @@ import com.github.dockerjava.api.command.PushImageCmd; import com.github.dockerjava.api.command.RemoveContainerCmd; import com.github.dockerjava.api.command.RemoveImageCmd; +import com.github.dockerjava.api.command.RemoveNetworkCmd; import com.github.dockerjava.api.command.RemoveVolumeCmd; import com.github.dockerjava.api.command.RestartContainerCmd; import com.github.dockerjava.api.command.SaveImageCmd; @@ -200,6 +206,18 @@ public interface DockerClient extends Closeable { public ListVolumesCmd listVolumesCmd(); + public ListNetworksCmd listNetworksCmd(); + + public InspectNetworkCmd inspectNetworkCmd(); + + public CreateNetworkCmd createNetworkCmd(); + + public RemoveNetworkCmd removeNetworkCmd(@Nonnull String networkId); + + public ConnectToNetworkCmd connectToNetworkCmd(); + + public DisconnectFromNetworkCmd disconnectFromNetworkCmd(); + @Override public void close() throws IOException; diff --git a/src/main/java/com/github/dockerjava/api/command/ConnectToNetworkCmd.java b/src/main/java/com/github/dockerjava/api/command/ConnectToNetworkCmd.java new file mode 100644 index 0000000000..cf76e2ec3e --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/command/ConnectToNetworkCmd.java @@ -0,0 +1,27 @@ +package com.github.dockerjava.api.command; + +import com.github.dockerjava.core.RemoteApiVersion; + +import javax.annotation.CheckForNull; +import javax.annotation.Nonnull; + +/** + * Connects a container to a network. + * + * @since {@link RemoteApiVersion#VERSION_1_21} + */ +public interface ConnectToNetworkCmd extends SyncDockerCmd { + + @CheckForNull + public String getNetworkId(); + + @CheckForNull + public String getContainerId(); + + public ConnectToNetworkCmd withNetworkId(@Nonnull String networkId); + + public ConnectToNetworkCmd withContainerId(@Nonnull String containerId); + + public static interface Exec extends DockerCmdSyncExec { + } +} diff --git a/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java b/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java new file mode 100644 index 0000000000..2e3cd92a0d --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java @@ -0,0 +1,42 @@ +package com.github.dockerjava.api.command; + +import java.util.Map; + +import javax.annotation.CheckForNull; +import javax.annotation.Nonnull; + +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.api.model.Network.Ipam; +import com.github.dockerjava.core.RemoteApiVersion; + +/** + * Create a network. + * + * @since {@link RemoteApiVersion#VERSION_1_21} + */ +public interface CreateNetworkCmd extends SyncDockerCmd { + + @CheckForNull + public String getName(); + + @CheckForNull + public String getDriver(); + + @CheckForNull + public Network.Ipam getIpam(); + + /** The new network's name. Required. */ + public CreateNetworkCmd withName(@Nonnull String name); + + /** Optional custom IP scheme for the network. */ + public CreateNetworkCmd withIpamConfig(Ipam.Config config); + + /** Name of the network driver to use. Defaults to bridge. */ + public CreateNetworkCmd withDriver(String driver); + + /** Driver specific options */ + public CreateNetworkCmd withOptions(Map options); + + public static interface Exec extends DockerCmdSyncExec { + } +} diff --git a/src/main/java/com/github/dockerjava/api/command/CreateNetworkResponse.java b/src/main/java/com/github/dockerjava/api/command/CreateNetworkResponse.java new file mode 100644 index 0000000000..ec48274761 --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/command/CreateNetworkResponse.java @@ -0,0 +1,36 @@ +package com.github.dockerjava.api.command; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import org.apache.commons.lang.builder.ToStringBuilder; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class CreateNetworkResponse { + + @JsonProperty("Id") + private String id; + + @JsonProperty("Warnings") + private String[] warnings; + + public String getId() { + return id; + } + + public String[] getWarnings() { + return warnings; + } + + public void setId(String id) { + this.id = id; + } + + public void setWarnings(String[] warnings) { + this.warnings = warnings; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } +} diff --git a/src/main/java/com/github/dockerjava/api/command/DisconnectFromNetworkCmd.java b/src/main/java/com/github/dockerjava/api/command/DisconnectFromNetworkCmd.java new file mode 100644 index 0000000000..a2452416bc --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/command/DisconnectFromNetworkCmd.java @@ -0,0 +1,27 @@ +package com.github.dockerjava.api.command; + +import com.github.dockerjava.core.RemoteApiVersion; + +import javax.annotation.CheckForNull; +import javax.annotation.Nonnull; + +/** + * Disconnects a container from a network. + * + * @since {@link RemoteApiVersion#VERSION_1_21} + */ +public interface DisconnectFromNetworkCmd extends SyncDockerCmd { + + @CheckForNull + public String getNetworkId(); + + @CheckForNull + public String getContainerId(); + + public DisconnectFromNetworkCmd withNetworkId(@Nonnull String networkId); + + public DisconnectFromNetworkCmd withContainerId(@Nonnull String containerId); + + public static interface Exec extends DockerCmdSyncExec { + } +} diff --git a/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java b/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java index 98de728e8d..fb1715e384 100644 --- a/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java +++ b/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java @@ -93,6 +93,18 @@ public interface DockerCmdExecFactory extends Closeable { public ListVolumesCmd.Exec createListVolumesCmdExec(); + public ListNetworksCmd.Exec createListNetworksCmdExec(); + + public InspectNetworkCmd.Exec createInspectNetworkCmdExec(); + + public CreateNetworkCmd.Exec createCreateNetworkCmdExec(); + + public RemoveNetworkCmd.Exec createRemoveNetworkCmdExec(); + + public ConnectToNetworkCmd.Exec createConnectToNetworkCmdExec(); + + public DisconnectFromNetworkCmd.Exec createDisconnectFromNetworkCmdExec(); + @Override public void close() throws IOException; diff --git a/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java b/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java index 59438dba24..85f2812f01 100644 --- a/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java +++ b/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java @@ -1,7 +1,6 @@ package com.github.dockerjava.api.command; import java.util.List; -import java.util.Map; import javax.annotation.CheckForNull; @@ -14,7 +13,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.github.dockerjava.api.model.ContainerConfig; import com.github.dockerjava.api.model.HostConfig; -import com.github.dockerjava.api.model.Ports; +import com.github.dockerjava.api.model.NetworkSettings; import com.github.dockerjava.api.model.Volume; import com.github.dockerjava.api.model.VolumeBind; import com.github.dockerjava.api.model.VolumeBinds; @@ -203,56 +202,7 @@ public String toString() { return ToStringBuilder.reflectionToString(this); } - @JsonIgnoreProperties(ignoreUnknown = true) - public class NetworkSettings { - - @JsonProperty("IPAddress") - private String ipAddress; - - @JsonProperty("IPPrefixLen") - private Integer ipPrefixLen; - - @JsonProperty("Gateway") - private String gateway; - - @JsonProperty("Bridge") - private String bridge; - - @JsonProperty("PortMapping") - private Map> portMapping; - - @JsonProperty("Ports") - private Ports ports; - - public String getIpAddress() { - return ipAddress; - } - - public Integer getIpPrefixLen() { - return ipPrefixLen; - } - - public String getGateway() { - return gateway; - } - public String getBridge() { - return bridge; - } - - public Map> getPortMapping() { - return portMapping; - } - - public Ports getPorts() { - return ports; - } - - @Override - public String toString() { - return ToStringBuilder.reflectionToString(this); - } - } @JsonIgnoreProperties(ignoreUnknown = true) public class ContainerState { @@ -514,7 +464,5 @@ public String getMode() { public Boolean getRW() { return rw; } - } - } diff --git a/src/main/java/com/github/dockerjava/api/command/InspectExecResponse.java b/src/main/java/com/github/dockerjava/api/command/InspectExecResponse.java index b1cb09b206..63f111dce8 100644 --- a/src/main/java/com/github/dockerjava/api/command/InspectExecResponse.java +++ b/src/main/java/com/github/dockerjava/api/command/InspectExecResponse.java @@ -6,6 +6,8 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import com.github.dockerjava.api.model.NetworkSettings; +import com.github.dockerjava.core.RemoteApiVersion; @JsonIgnoreProperties(ignoreUnknown = true) public class InspectExecResponse { @@ -27,6 +29,12 @@ public class InspectExecResponse { @JsonProperty("ExitCode") private Integer exitCode; + @JsonProperty("ProcessConfig") + private ProcessConfig processConfig; + + @JsonProperty("Container") + private Container container; + public String getId() { return id; } @@ -51,6 +59,14 @@ public Integer getExitCode() { return exitCode; } + public ProcessConfig getProcessConfig() { + return processConfig; + } + + public Container getContainer() { + return container; + } + @Override public String toString() { return ToStringBuilder.reflectionToString(this); @@ -58,6 +74,7 @@ public String toString() { @JsonIgnoreProperties(ignoreUnknown = true) public class ProcessConfig { + @JsonProperty("arguments") private List arguments; @@ -98,4 +115,18 @@ public String toString() { return ToStringBuilder.reflectionToString(this); } } + + @JsonIgnoreProperties(ignoreUnknown = true) + public class Container { + + @JsonProperty("NetworkSettings") + private NetworkSettings networkSettings; + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public NetworkSettings getNetworkSettings() { + return networkSettings; + } + } } diff --git a/src/main/java/com/github/dockerjava/api/command/InspectNetworkCmd.java b/src/main/java/com/github/dockerjava/api/command/InspectNetworkCmd.java new file mode 100644 index 0000000000..18394879a3 --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/command/InspectNetworkCmd.java @@ -0,0 +1,31 @@ +package com.github.dockerjava.api.command; + +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.core.RemoteApiVersion; + +import javax.annotation.CheckForNull; +import javax.annotation.Nonnull; + +/** + * Inspect a network. + * + * @since {@link RemoteApiVersion#VERSION_1_21} + */ +public interface InspectNetworkCmd extends SyncDockerCmd { + + @CheckForNull + public String getNetworkId(); + + public InspectNetworkCmd withNetworkId(@Nonnull String networkId); + + /** + * @throws NotFoundException + * No such network + */ + @Override + public Network exec() throws NotFoundException; + + public static interface Exec extends DockerCmdSyncExec { + } +} diff --git a/src/main/java/com/github/dockerjava/api/command/ListNetworksCmd.java b/src/main/java/com/github/dockerjava/api/command/ListNetworksCmd.java new file mode 100644 index 0000000000..2b5b299962 --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/command/ListNetworksCmd.java @@ -0,0 +1,25 @@ +package com.github.dockerjava.api.command; + +import com.github.dockerjava.api.model.Filters; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.core.RemoteApiVersion; + +import javax.annotation.CheckForNull; + +import java.util.List; + +/** + * List networks. + * + * @since {@link RemoteApiVersion#VERSION_1_21} + */ +public interface ListNetworksCmd extends SyncDockerCmd> { + + @CheckForNull + public Filters getFilters(); + + ListNetworksCmd withFilters(Filters filters); + + public static interface Exec extends DockerCmdSyncExec> { + } +} diff --git a/src/main/java/com/github/dockerjava/api/command/RemoveNetworkCmd.java b/src/main/java/com/github/dockerjava/api/command/RemoveNetworkCmd.java new file mode 100644 index 0000000000..3dcb428e23 --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/command/RemoveNetworkCmd.java @@ -0,0 +1,30 @@ +package com.github.dockerjava.api.command; + +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.core.RemoteApiVersion; + +import javax.annotation.CheckForNull; +import javax.annotation.Nonnull; + +/** + * Remove a network. + * + * @since {@link RemoteApiVersion#VERSION_1_21} + */ +public interface RemoveNetworkCmd extends SyncDockerCmd { + + @CheckForNull + public String getNetworkId(); + + public RemoveNetworkCmd withNetworkId(@Nonnull String networkId); + + /** + * @throws NotFoundException + * No such network + */ + @Override + public Void exec() throws NotFoundException; + + public static interface Exec extends DockerCmdSyncExec { + } +} diff --git a/src/main/java/com/github/dockerjava/api/model/Network.java b/src/main/java/com/github/dockerjava/api/model/Network.java new file mode 100644 index 0000000000..d62d830197 --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/model/Network.java @@ -0,0 +1,154 @@ +package com.github.dockerjava.api.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import org.apache.commons.lang.builder.ToStringBuilder; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class Network { + + @JsonProperty("Id") + private String id; + + @JsonProperty("Name") + private String name; + + @JsonProperty("Scope") + private String scope; + + @JsonProperty("Driver") + private String driver; + + @JsonProperty("IPAM") + private Ipam ipam; + + @JsonProperty("Containers") + private Map containers; + + @JsonProperty("Options") + private Map options; + + public String getId() { + return id; + } + + public String getName() { + return name; + } + + public String getScope() { + return scope; + } + + public String getDriver() { + return driver; + } + + public Ipam getIpam() { + return ipam; + } + + public Map getContainers() { + return containers; + } + + public Map getOptions() { + return options; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static class ContainerNetworkConfig { + + @JsonProperty("EndpointID") + private String endpointId; + + @JsonProperty("MacAddress") + private String macAddress; + + @JsonProperty("IPv4Address") + private String ipv4Address; + + @JsonProperty("IPv6Address") + private String ipv6Address; + + public String getEndpointId() { + return endpointId; + } + + public String getMacAddress() { + return macAddress; + } + + public String getIpv4Address() { + return ipv4Address; + } + + public String getIpv6Address() { + return ipv6Address; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Ipam { + + @JsonProperty("Driver") + private String driver; + + @JsonProperty("Config") + List config = new ArrayList<>(); + + public String getDriver() { + return driver; + } + + public List getConfig() { + return config; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Config { + + @JsonProperty("Subnet") + private String subnet; + + @JsonProperty("IPRange") + private String ipRange; + + @JsonProperty("Gateway") + private String gateway; + + public String getSubnet() { + return subnet; + } + + public String getIpRange() { + return ipRange; + } + + public String getGateway() { + return gateway; + } + } + } +} diff --git a/src/main/java/com/github/dockerjava/api/model/NetworkFilters.java b/src/main/java/com/github/dockerjava/api/model/NetworkFilters.java new file mode 100644 index 0000000000..f3c8376430 --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/model/NetworkFilters.java @@ -0,0 +1,15 @@ +package com.github.dockerjava.api.model; + +/** + * Created by andrewk on 1/5/16. + */ +public class NetworkFilters extends Filters { + + public Filters withNames(String... names) { + return withFilter("name", names); + } + + public Filters withIds(String... ids) { + return withFilter("id", ids); + } +} diff --git a/src/main/java/com/github/dockerjava/api/model/NetworkSettings.java b/src/main/java/com/github/dockerjava/api/model/NetworkSettings.java new file mode 100644 index 0000000000..64c954ec9c --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/model/NetworkSettings.java @@ -0,0 +1,272 @@ +/* + * Created on 16.01.2016 + */ +package com.github.dockerjava.api.model; + +import java.util.Map; + +import org.apache.commons.lang.builder.ToStringBuilder; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.github.dockerjava.core.RemoteApiVersion; + +/** + * + * @author Marcus Linke + * + */ +@JsonIgnoreProperties(ignoreUnknown = true) +public class NetworkSettings { + + @JsonProperty("Bridge") + private String bridge; + + @JsonProperty("SandboxID") + private String sandboxId; + + @JsonProperty("HairpinMode") + private Boolean hairpinMode; + + @JsonProperty("LinkLocalIPv6Address") + private String linkLocalIPv6Address; + + @JsonProperty("LinkLocalIPv6PrefixLen") + private Integer linkLocalIPv6PrefixLen; + + @JsonProperty("Ports") + private Ports ports; + + @JsonProperty("SandboxKey") + private String sandboxKey; + + @JsonProperty("SecondaryIPAddresses") + private Object secondaryIPAddresses; + + @JsonProperty("SecondaryIPv6Addresses") + private Object secondaryIPv6Addresses; + + @JsonProperty("EndpointID") + private String endpointID; + + @JsonProperty("Gateway") + private String gateway; + + @JsonProperty("PortMapping") + private Map> portMapping; + + @JsonProperty("GlobalIPv6Address") + private String globalIPv6Address; + + @JsonProperty("GlobalIPv6PrefixLen") + private Integer globalIPv6PrefixLen; + + @JsonProperty("IPAddress") + private String ipAddress; + + @JsonProperty("IPPrefixLen") + private Integer ipPrefixLen; + + @JsonProperty("IPv6Gateway") + private String ipV6Gateway; + + @JsonProperty("MacAddress") + private String macAddress; + + @JsonProperty("Networks") + private Map networks; + + /** + * @deprecated since {@link RemoteApiVersion#VERSION_1_21} + */ + public String getIpAddress() { + return ipAddress; + } + + /** + * @deprecated since {@link RemoteApiVersion#VERSION_1_21} + */ + public Integer getIpPrefixLen() { + return ipPrefixLen; + } + + /** + * @deprecated since {@link RemoteApiVersion#VERSION_1_21} + */ + public String getGateway() { + return gateway; + } + + public String getBridge() { + return bridge; + } + + /** + * @deprecated since {@link RemoteApiVersion#VERSION_1_21} + */ + public Map> getPortMapping() { + return portMapping; + } + + /** + * @deprecated since {@link RemoteApiVersion#VERSION_1_21} + */ + public String getMacAddress() { + return macAddress; + } + + public Ports getPorts() { + return ports; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public String getEndpointID() { + return endpointID; + } + + public String getIpV6Gateway() { + return ipV6Gateway; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public Map getNetworks() { + return networks; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public String getSandboxId() { + return sandboxId; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public String getSandboxKey() { + return sandboxKey; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public Object getSecondaryIPAddresses() { + return secondaryIPAddresses; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public Object getSecondaryIPv6Addresses() { + return secondaryIPv6Addresses; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public Boolean getHairpinMode() { + return hairpinMode; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public String getLinkLocalIPv6Address() { + return linkLocalIPv6Address; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public Integer getLinkLocalIPv6PrefixLen() { + return linkLocalIPv6PrefixLen; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public String getGlobalIPv6Address() { + return globalIPv6Address; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public Integer getGlobalIPv6PrefixLen() { + return globalIPv6PrefixLen; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Network { + + @JsonProperty("EndpointID") + private String endpointId; + + @JsonProperty("Gateway") + private String gateway; + + @JsonProperty("IPAddress") + private String ipAddress; + + @JsonProperty("IPPrefixLen") + private Integer ipPrefixLen; + + @JsonProperty("IPv6Gateway") + private String ipV6Gateway; + + @JsonProperty("GlobalIPv6Address") + private String globalIPv6Address; + + @JsonProperty("GlobalIPv6PrefixLen") + private Integer globalIPv6PrefixLen; + + @JsonProperty("MacAddress") + private String macAddress; + + public String getEndpointId() { + return endpointId; + } + + public String getGateway() { + return gateway; + } + + public String getIpAddress() { + return ipAddress; + } + + public Integer getIpPrefixLen() { + return ipPrefixLen; + } + + public String getIpV6Gateway() { + return ipV6Gateway; + } + + public String getGlobalIPv6Address() { + return globalIPv6Address; + } + + public Integer getGlobalIPv6PrefixLen() { + return globalIPv6PrefixLen; + } + + public String getMacAddress() { + return macAddress; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + } +} diff --git a/src/main/java/com/github/dockerjava/api/model/PortBinding.java b/src/main/java/com/github/dockerjava/api/model/PortBinding.java index 355e83aa33..99e04f1bc7 100644 --- a/src/main/java/com/github/dockerjava/api/model/PortBinding.java +++ b/src/main/java/com/github/dockerjava/api/model/PortBinding.java @@ -4,7 +4,6 @@ import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; -import com.github.dockerjava.api.command.InspectContainerResponse.NetworkSettings; import com.github.dockerjava.api.model.Ports.Binding; /** diff --git a/src/main/java/com/github/dockerjava/api/model/Ports.java b/src/main/java/com/github/dockerjava/api/model/Ports.java index a5f13977b3..0ff5762e6d 100644 --- a/src/main/java/com/github/dockerjava/api/model/Ports.java +++ b/src/main/java/com/github/dockerjava/api/model/Ports.java @@ -23,7 +23,6 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.node.NullNode; -import com.github.dockerjava.api.command.InspectContainerResponse.NetworkSettings; /** * A container for port bindings, made available as a {@link Map} via its {@link #getBindings()} method. diff --git a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java index 05726f7359..ede1356135 100644 --- a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java +++ b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java @@ -12,13 +12,16 @@ import com.github.dockerjava.api.command.AuthCmd; import com.github.dockerjava.api.command.BuildImageCmd; import com.github.dockerjava.api.command.CommitCmd; +import com.github.dockerjava.api.command.ConnectToNetworkCmd; import com.github.dockerjava.api.command.ContainerDiffCmd; import com.github.dockerjava.api.command.CopyArchiveFromContainerCmd; import com.github.dockerjava.api.command.CopyArchiveToContainerCmd; import com.github.dockerjava.api.command.CopyFileFromContainerCmd; import com.github.dockerjava.api.command.CreateContainerCmd; import com.github.dockerjava.api.command.CreateImageCmd; +import com.github.dockerjava.api.command.CreateNetworkCmd; import com.github.dockerjava.api.command.CreateVolumeCmd; +import com.github.dockerjava.api.command.DisconnectFromNetworkCmd; import com.github.dockerjava.api.command.DockerCmdExecFactory; import com.github.dockerjava.api.command.EventsCmd; import com.github.dockerjava.api.command.ExecCreateCmd; @@ -27,10 +30,12 @@ import com.github.dockerjava.api.command.InspectContainerCmd; import com.github.dockerjava.api.command.InspectExecCmd; import com.github.dockerjava.api.command.InspectImageCmd; +import com.github.dockerjava.api.command.InspectNetworkCmd; import com.github.dockerjava.api.command.InspectVolumeCmd; import com.github.dockerjava.api.command.KillContainerCmd; import com.github.dockerjava.api.command.ListContainersCmd; import com.github.dockerjava.api.command.ListImagesCmd; +import com.github.dockerjava.api.command.ListNetworksCmd; import com.github.dockerjava.api.command.ListVolumesCmd; import com.github.dockerjava.api.command.LogContainerCmd; import com.github.dockerjava.api.command.PauseContainerCmd; @@ -39,6 +44,7 @@ import com.github.dockerjava.api.command.PushImageCmd; import com.github.dockerjava.api.command.RemoveContainerCmd; import com.github.dockerjava.api.command.RemoveImageCmd; +import com.github.dockerjava.api.command.RemoveNetworkCmd; import com.github.dockerjava.api.command.RemoveVolumeCmd; import com.github.dockerjava.api.command.RestartContainerCmd; import com.github.dockerjava.api.command.SaveImageCmd; @@ -57,17 +63,21 @@ import com.github.dockerjava.core.command.AuthCmdImpl; import com.github.dockerjava.core.command.BuildImageCmdImpl; import com.github.dockerjava.core.command.CommitCmdImpl; +import com.github.dockerjava.core.command.ConnectToNetworkCmdImpl; import com.github.dockerjava.core.command.ContainerDiffCmdImpl; import com.github.dockerjava.core.command.CopyArchiveFromContainerCmdImpl; import com.github.dockerjava.core.command.CopyArchiveToContainerCmdImpl; import com.github.dockerjava.core.command.CopyFileFromContainerCmdImpl; import com.github.dockerjava.core.command.CreateContainerCmdImpl; import com.github.dockerjava.core.command.CreateImageCmdImpl; +import com.github.dockerjava.core.command.CreateNetworkCmdImpl; import com.github.dockerjava.core.command.CreateVolumeCmdImpl; +import com.github.dockerjava.core.command.DisconnectFromNetworkCmdImpl; import com.github.dockerjava.core.command.EventsCmdImpl; import com.github.dockerjava.core.command.ExecCreateCmdImpl; import com.github.dockerjava.core.command.ExecStartCmdImpl; import com.github.dockerjava.core.command.InfoCmdImpl; +import com.github.dockerjava.core.command.InpectNetworkCmdImpl; import com.github.dockerjava.core.command.InspectContainerCmdImpl; import com.github.dockerjava.core.command.InspectExecCmdImpl; import com.github.dockerjava.core.command.InspectImageCmdImpl; @@ -75,6 +85,7 @@ import com.github.dockerjava.core.command.KillContainerCmdImpl; import com.github.dockerjava.core.command.ListContainersCmdImpl; import com.github.dockerjava.core.command.ListImagesCmdImpl; +import com.github.dockerjava.core.command.ListNetworksCmdImpl; import com.github.dockerjava.core.command.ListVolumesCmdImpl; import com.github.dockerjava.core.command.LogContainerCmdImpl; import com.github.dockerjava.core.command.PauseContainerCmdImpl; @@ -83,6 +94,7 @@ import com.github.dockerjava.core.command.PushImageCmdImpl; import com.github.dockerjava.core.command.RemoveContainerCmdImpl; import com.github.dockerjava.core.command.RemoveImageCmdImpl; +import com.github.dockerjava.core.command.RemoveNetworkCmdImpl; import com.github.dockerjava.core.command.RemoveVolumeCmdImpl; import com.github.dockerjava.core.command.RestartContainerCmdImpl; import com.github.dockerjava.core.command.SaveImageCmdImpl; @@ -417,6 +429,36 @@ public ListVolumesCmd listVolumesCmd() { return new ListVolumesCmdImpl(getDockerCmdExecFactory().createListVolumesCmdExec()); } + @Override + public ListNetworksCmd listNetworksCmd() { + return new ListNetworksCmdImpl(getDockerCmdExecFactory().createListNetworksCmdExec()); + } + + @Override + public InspectNetworkCmd inspectNetworkCmd() { + return new InpectNetworkCmdImpl(getDockerCmdExecFactory().createInspectNetworkCmdExec()); + } + + @Override + public CreateNetworkCmd createNetworkCmd() { + return new CreateNetworkCmdImpl(getDockerCmdExecFactory().createCreateNetworkCmdExec()); + } + + @Override + public RemoveNetworkCmd removeNetworkCmd(String networkId) { + return new RemoveNetworkCmdImpl(getDockerCmdExecFactory().createRemoveNetworkCmdExec(), networkId); + } + + @Override + public ConnectToNetworkCmd connectToNetworkCmd() { + return new ConnectToNetworkCmdImpl(getDockerCmdExecFactory().createConnectToNetworkCmdExec()); + } + + @Override + public DisconnectFromNetworkCmd disconnectFromNetworkCmd() { + return new DisconnectFromNetworkCmdImpl(getDockerCmdExecFactory().createDisconnectFromNetworkCmdExec()); + } + @Override public void close() throws IOException { getDockerCmdExecFactory().close(); diff --git a/src/main/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImpl.java new file mode 100644 index 0000000000..cfb6cce145 --- /dev/null +++ b/src/main/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImpl.java @@ -0,0 +1,39 @@ +package com.github.dockerjava.core.command; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.github.dockerjava.api.command.ConnectToNetworkCmd; +import com.github.dockerjava.api.command.DockerCmdSyncExec; + +public class ConnectToNetworkCmdImpl extends AbstrDockerCmd implements ConnectToNetworkCmd { + + @JsonIgnore + private String networkId; + + @JsonProperty("Container") + private String containerId; + + public ConnectToNetworkCmdImpl(DockerCmdSyncExec execution) { + super(execution); + } + + @Override + public String getNetworkId() { + return networkId; + } + + @Override + public String getContainerId() { + return containerId; + } + + @Override public ConnectToNetworkCmd withNetworkId(String networkId) { + this.networkId = networkId; + return this; + } + + @Override public ConnectToNetworkCmd withContainerId(String containerId) { + this.containerId = containerId; + return this; + } +} diff --git a/src/main/java/com/github/dockerjava/core/command/CreateNetworkCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/CreateNetworkCmdImpl.java new file mode 100644 index 0000000000..fba16dfb9c --- /dev/null +++ b/src/main/java/com/github/dockerjava/core/command/CreateNetworkCmdImpl.java @@ -0,0 +1,71 @@ +package com.github.dockerjava.core.command; + + +import java.util.HashMap; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.github.dockerjava.api.command.CreateNetworkCmd; +import com.github.dockerjava.api.command.CreateNetworkResponse; +import com.github.dockerjava.api.command.DockerCmdSyncExec; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.api.model.Network.Ipam; + +public class CreateNetworkCmdImpl extends AbstrDockerCmd + implements CreateNetworkCmd { + + @JsonProperty("Name") + private String name; + + @JsonProperty("Driver") + private String driver; + + @JsonProperty("IPAM") + private Network.Ipam ipam; + + @JsonProperty("Options") + private Map options = new HashMap<>(); + + public CreateNetworkCmdImpl(DockerCmdSyncExec execution) { + super(execution); + } + + @Override + public String getName() { + return name; + } + + @Override + public String getDriver() { + return driver; + } + + @Override + public Network.Ipam getIpam() { + return ipam; + } + + @Override + public CreateNetworkCmd withName(String name) { + this.name = name; + return this; + } + + @Override + public CreateNetworkCmd withDriver(String driver) { + this.driver = driver; + return this; + } + + @Override + public CreateNetworkCmd withIpamConfig(Ipam.Config config) { + this.ipam.getConfig().add(config); + return this; + } + + @Override + public CreateNetworkCmd withOptions(Map options) { + this.options = options; + return this; + } +} diff --git a/src/main/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImpl.java new file mode 100644 index 0000000000..a89201ad26 --- /dev/null +++ b/src/main/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImpl.java @@ -0,0 +1,40 @@ +package com.github.dockerjava.core.command; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.github.dockerjava.api.command.DisconnectFromNetworkCmd; +import com.github.dockerjava.api.command.DockerCmdSyncExec; + +public class DisconnectFromNetworkCmdImpl extends AbstrDockerCmd + implements DisconnectFromNetworkCmd { + + @JsonIgnore + private String networkId; + + @JsonProperty("Container") + private String containerId; + + public DisconnectFromNetworkCmdImpl(DockerCmdSyncExec execution) { + super(execution); + } + + @Override + public String getNetworkId() { + return networkId; + } + + @Override + public String getContainerId() { + return containerId; + } + + @Override public DisconnectFromNetworkCmd withNetworkId(String networkId) { + this.networkId = networkId; + return this; + } + + @Override public DisconnectFromNetworkCmd withContainerId(String containerId) { + this.containerId = containerId; + return this; + } +} diff --git a/src/main/java/com/github/dockerjava/core/command/InpectNetworkCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/InpectNetworkCmdImpl.java new file mode 100644 index 0000000000..0a0c564c5d --- /dev/null +++ b/src/main/java/com/github/dockerjava/core/command/InpectNetworkCmdImpl.java @@ -0,0 +1,24 @@ +package com.github.dockerjava.core.command; + +import com.github.dockerjava.api.command.DockerCmdSyncExec; +import com.github.dockerjava.api.command.InspectNetworkCmd; +import com.github.dockerjava.api.model.Network; + +public class InpectNetworkCmdImpl extends AbstrDockerCmd implements InspectNetworkCmd { + + private String networkId; + + public InpectNetworkCmdImpl(DockerCmdSyncExec exec) { + super(exec); + } + + @Override public String getNetworkId() { + return networkId; + } + + @Override public InspectNetworkCmd withNetworkId(String networkId) { + + this.networkId = networkId; + return this; + } +} diff --git a/src/main/java/com/github/dockerjava/core/command/ListNetworksCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/ListNetworksCmdImpl.java new file mode 100644 index 0000000000..2303e7c9c9 --- /dev/null +++ b/src/main/java/com/github/dockerjava/core/command/ListNetworksCmdImpl.java @@ -0,0 +1,27 @@ +package com.github.dockerjava.core.command; + +import com.github.dockerjava.api.command.ListNetworksCmd; +import com.github.dockerjava.api.model.Filters; +import com.github.dockerjava.api.model.Network; + +import java.util.List; + +public class ListNetworksCmdImpl extends AbstrDockerCmd> implements + ListNetworksCmd { + + private Filters filters; + + public ListNetworksCmdImpl(ListNetworksCmd.Exec exec) { + super(exec); + } + + @Override public Filters getFilters() { + return filters; + } + + @Override public ListNetworksCmd withFilters(Filters filters) { + + this.filters = filters; + return this; + } +} diff --git a/src/main/java/com/github/dockerjava/core/command/RemoveNetworkCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/RemoveNetworkCmdImpl.java new file mode 100644 index 0000000000..ced7279f97 --- /dev/null +++ b/src/main/java/com/github/dockerjava/core/command/RemoveNetworkCmdImpl.java @@ -0,0 +1,26 @@ +package com.github.dockerjava.core.command; + +import com.github.dockerjava.api.command.DockerCmdSyncExec; +import com.github.dockerjava.api.command.RemoveNetworkCmd; + +public class RemoveNetworkCmdImpl extends AbstrDockerCmd implements RemoveNetworkCmd { + + private String networkId; + + public RemoveNetworkCmdImpl(DockerCmdSyncExec execution, String networkId) { + super(execution); + withNetworkId(networkId); + } + + @Override + public String getNetworkId() { + + return networkId; + } + + @Override + public RemoveNetworkCmd withNetworkId(String networkId) { + this.networkId = networkId; + return this; + } +} diff --git a/src/main/java/com/github/dockerjava/jaxrs/ConnectToNetworkCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/ConnectToNetworkCmdExec.java new file mode 100644 index 0000000000..dfc730e039 --- /dev/null +++ b/src/main/java/com/github/dockerjava/jaxrs/ConnectToNetworkCmdExec.java @@ -0,0 +1,32 @@ +package com.github.dockerjava.jaxrs; + +import com.github.dockerjava.api.command.ConnectToNetworkCmd; +import com.github.dockerjava.core.DockerClientConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.MediaType; + +import static javax.ws.rs.client.Entity.entity; + +public class ConnectToNetworkCmdExec extends AbstrSyncDockerCmdExec + implements ConnectToNetworkCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(ConnectToNetworkCmdExec.class); + + public ConnectToNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected Void execute(ConnectToNetworkCmd command) { + + WebTarget webTarget = getBaseResource().path("/networks/" + command.getNetworkId() + "/connect"); + + LOGGER.trace("POST: {}", webTarget); + webTarget.request().post(entity(command, MediaType.APPLICATION_JSON)); + + return null; + } +} diff --git a/src/main/java/com/github/dockerjava/jaxrs/CreateNetworkCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/CreateNetworkCmdExec.java new file mode 100644 index 0000000000..14f22b5022 --- /dev/null +++ b/src/main/java/com/github/dockerjava/jaxrs/CreateNetworkCmdExec.java @@ -0,0 +1,31 @@ +package com.github.dockerjava.jaxrs; + +import com.github.dockerjava.api.command.CreateNetworkCmd; +import com.github.dockerjava.api.command.CreateNetworkResponse; +import com.github.dockerjava.core.DockerClientConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.MediaType; + +import static javax.ws.rs.client.Entity.entity; + +public class CreateNetworkCmdExec extends AbstrSyncDockerCmdExec implements + CreateNetworkCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(CreateNetworkCmdExec.class); + + public CreateNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected CreateNetworkResponse execute(CreateNetworkCmd command) { + WebTarget webResource = getBaseResource().path("/networks/create"); + + LOGGER.trace("POST: {}", webResource); + return webResource.request().accept(MediaType.APPLICATION_JSON) + .post(entity(command, MediaType.APPLICATION_JSON), CreateNetworkResponse.class); + } +} diff --git a/src/main/java/com/github/dockerjava/jaxrs/DisconnectFromNetworkCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/DisconnectFromNetworkCmdExec.java new file mode 100644 index 0000000000..4f6f545768 --- /dev/null +++ b/src/main/java/com/github/dockerjava/jaxrs/DisconnectFromNetworkCmdExec.java @@ -0,0 +1,32 @@ +package com.github.dockerjava.jaxrs; + +import com.github.dockerjava.api.command.DisconnectFromNetworkCmd; +import com.github.dockerjava.core.DockerClientConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.MediaType; + +import static javax.ws.rs.client.Entity.entity; + +public class DisconnectFromNetworkCmdExec extends AbstrSyncDockerCmdExec + implements DisconnectFromNetworkCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(DisconnectFromNetworkCmdExec.class); + + public DisconnectFromNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected Void execute(DisconnectFromNetworkCmd command) { + + WebTarget webTarget = getBaseResource().path("/networks/" + command.getNetworkId() + "/disconnect"); + + LOGGER.trace("POST: {}", webTarget); + webTarget.request().post(entity(command, MediaType.APPLICATION_JSON)); + + return null; + } +} diff --git a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java index 30bc5e34f4..bbd71ba38d 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java +++ b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java @@ -2,44 +2,21 @@ import static com.google.common.base.Preconditions.checkNotNull; -import java.io.IOException; -import java.net.InetSocketAddress; -import java.net.Proxy; -import java.net.ProxySelector; -import java.net.URI; -import java.util.List; - -import javax.net.ssl.SSLContext; -import javax.ws.rs.client.Client; -import javax.ws.rs.client.ClientBuilder; -import javax.ws.rs.client.ClientRequestFilter; -import javax.ws.rs.client.ClientResponseFilter; -import javax.ws.rs.client.WebTarget; - -import org.apache.http.config.RegistryBuilder; -import org.apache.http.conn.socket.ConnectionSocketFactory; -import org.apache.http.conn.socket.PlainConnectionSocketFactory; -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; -import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; -import org.glassfish.jersey.CommonProperties; -import org.glassfish.jersey.apache.connector.ApacheClientProperties; -import org.glassfish.jersey.client.ClientConfig; -import org.glassfish.jersey.client.ClientProperties; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; import com.github.dockerjava.api.command.AttachContainerCmd; import com.github.dockerjava.api.command.AuthCmd; import com.github.dockerjava.api.command.BuildImageCmd; import com.github.dockerjava.api.command.CommitCmd; +import com.github.dockerjava.api.command.ConnectToNetworkCmd; import com.github.dockerjava.api.command.ContainerDiffCmd; import com.github.dockerjava.api.command.CopyArchiveFromContainerCmd; import com.github.dockerjava.api.command.CopyArchiveToContainerCmd; import com.github.dockerjava.api.command.CopyFileFromContainerCmd; import com.github.dockerjava.api.command.CreateContainerCmd; import com.github.dockerjava.api.command.CreateImageCmd; +import com.github.dockerjava.api.command.CreateNetworkCmd; import com.github.dockerjava.api.command.CreateVolumeCmd; +import com.github.dockerjava.api.command.DisconnectFromNetworkCmd; import com.github.dockerjava.api.command.DockerCmdExecFactory; import com.github.dockerjava.api.command.EventsCmd; import com.github.dockerjava.api.command.ExecCreateCmd; @@ -48,10 +25,12 @@ import com.github.dockerjava.api.command.InspectContainerCmd; import com.github.dockerjava.api.command.InspectExecCmd; import com.github.dockerjava.api.command.InspectImageCmd; +import com.github.dockerjava.api.command.InspectNetworkCmd; import com.github.dockerjava.api.command.InspectVolumeCmd; import com.github.dockerjava.api.command.KillContainerCmd; import com.github.dockerjava.api.command.ListContainersCmd; import com.github.dockerjava.api.command.ListImagesCmd; +import com.github.dockerjava.api.command.ListNetworksCmd; import com.github.dockerjava.api.command.ListVolumesCmd; import com.github.dockerjava.api.command.LogContainerCmd; import com.github.dockerjava.api.command.PauseContainerCmd; @@ -60,6 +39,7 @@ import com.github.dockerjava.api.command.PushImageCmd; import com.github.dockerjava.api.command.RemoveContainerCmd; import com.github.dockerjava.api.command.RemoveImageCmd; +import com.github.dockerjava.api.command.RemoveNetworkCmd; import com.github.dockerjava.api.command.RemoveVolumeCmd; import com.github.dockerjava.api.command.RestartContainerCmd; import com.github.dockerjava.api.command.SaveImageCmd; @@ -78,6 +58,30 @@ import com.github.dockerjava.jaxrs.filter.JsonClientFilter; import com.github.dockerjava.jaxrs.filter.ResponseStatusExceptionFilter; import com.github.dockerjava.jaxrs.filter.SelectiveLoggingFilter; +import org.apache.http.config.RegistryBuilder; +import org.apache.http.conn.socket.ConnectionSocketFactory; +import org.apache.http.conn.socket.PlainConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.glassfish.jersey.CommonProperties; +import org.glassfish.jersey.apache.connector.ApacheClientProperties; +import org.glassfish.jersey.client.ClientConfig; +import org.glassfish.jersey.client.ClientProperties; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.net.ssl.SSLContext; +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.ClientRequestFilter; +import javax.ws.rs.client.ClientResponseFilter; +import javax.ws.rs.client.WebTarget; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.Proxy; +import java.net.ProxySelector; +import java.net.URI; +import java.util.List; //import org.glassfish.jersey.apache.connector.ApacheConnectorProvider; // see https://github.com/docker-java/docker-java/issues/196 @@ -445,6 +449,41 @@ public ListVolumesCmd.Exec createListVolumesCmdExec() { return new ListVolumesCmdExec(getBaseResource(), getDockerClientConfig()); } + @Override + public ListNetworksCmd.Exec createListNetworksCmdExec() { + return new ListNetworksCmdExec(getBaseResource(), getDockerClientConfig()); + } + + @Override + public InspectNetworkCmd.Exec createInspectNetworkCmdExec() { + + return new InspectNetworkCmdExec(getBaseResource(), getDockerClientConfig()); + } + + @Override + public CreateNetworkCmd.Exec createCreateNetworkCmdExec() { + + return new CreateNetworkCmdExec(getBaseResource(), getDockerClientConfig()); + } + + @Override + public RemoveNetworkCmd.Exec createRemoveNetworkCmdExec() { + + return new RemoveNetworkCmdExec(getBaseResource(), getDockerClientConfig()); + } + + @Override + public ConnectToNetworkCmd.Exec createConnectToNetworkCmdExec() { + + return new ConnectToNetworkCmdExec(getBaseResource(), getDockerClientConfig()); + } + + @Override + public DisconnectFromNetworkCmd.Exec createDisconnectFromNetworkCmdExec() { + + return new DisconnectFromNetworkCmdExec(getBaseResource(), getDockerClientConfig()); + } + @Override public void close() throws IOException { checkNotNull(client, "Factory not initialized. You probably forgot to call init()!"); diff --git a/src/main/java/com/github/dockerjava/jaxrs/InspectNetworkCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/InspectNetworkCmdExec.java new file mode 100644 index 0000000000..c5e6b4d0a7 --- /dev/null +++ b/src/main/java/com/github/dockerjava/jaxrs/InspectNetworkCmdExec.java @@ -0,0 +1,28 @@ +package com.github.dockerjava.jaxrs; + +import com.github.dockerjava.api.command.InspectNetworkCmd; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.core.DockerClientConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.MediaType; + +public class InspectNetworkCmdExec extends AbstrSyncDockerCmdExec implements InspectNetworkCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(ListNetworksCmdExec.class); + + public InspectNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override protected Network execute(InspectNetworkCmd command) { + + WebTarget webResource = getBaseResource().path("/networks/{id}").resolveTemplate("id", + command.getNetworkId()); + + LOGGER.debug("GET: {}", webResource); + return webResource.request().accept(MediaType.APPLICATION_JSON).get(Network.class); + } +} diff --git a/src/main/java/com/github/dockerjava/jaxrs/ListNetworksCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/ListNetworksCmdExec.java new file mode 100644 index 0000000000..80438d4335 --- /dev/null +++ b/src/main/java/com/github/dockerjava/jaxrs/ListNetworksCmdExec.java @@ -0,0 +1,43 @@ +package com.github.dockerjava.jaxrs; + +import com.github.dockerjava.api.command.ListNetworksCmd; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.core.DockerClientConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.GenericType; +import javax.ws.rs.core.MediaType; +import java.util.List; + +import static com.google.common.net.UrlEscapers.urlPathSegmentEscaper; + +public class ListNetworksCmdExec extends AbstrSyncDockerCmdExec> implements + ListNetworksCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(ListNetworksCmdExec.class); + + public ListNetworksCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected List execute(ListNetworksCmd command) { + WebTarget webTarget = getBaseResource().path("/networks"); + + if (command.getFilters() != null) { + webTarget = webTarget + .queryParam("filters", urlPathSegmentEscaper().escape(command.getFilters().toString())); + } + + LOGGER.trace("GET: {}", webTarget); + List networks = webTarget.request().accept(MediaType.APPLICATION_JSON) + .get(new GenericType>() { + }); + LOGGER.trace("Response: {}", networks); + + return networks; + } + +} diff --git a/src/main/java/com/github/dockerjava/jaxrs/RemoveNetworkCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/RemoveNetworkCmdExec.java new file mode 100644 index 0000000000..84f115d4c7 --- /dev/null +++ b/src/main/java/com/github/dockerjava/jaxrs/RemoveNetworkCmdExec.java @@ -0,0 +1,30 @@ +package com.github.dockerjava.jaxrs; + +import com.github.dockerjava.api.command.RemoveNetworkCmd; +import com.github.dockerjava.core.DockerClientConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.MediaType; + +public class RemoveNetworkCmdExec extends AbstrSyncDockerCmdExec + implements RemoveNetworkCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(RemoveNetworkCmdExec.class); + + public RemoveNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected Void execute(RemoveNetworkCmd command) { + + WebTarget webTarget = getBaseResource().path("/networks/" + command.getNetworkId()); + + LOGGER.trace("DELETE: {}", webTarget); + webTarget.request().accept(MediaType.APPLICATION_JSON).delete().close(); + + return null; + } +} diff --git a/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java b/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java index 9ddd51288b..ee3b501010 100644 --- a/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java +++ b/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java @@ -1,44 +1,19 @@ package com.github.dockerjava.netty; -import static com.google.common.base.Preconditions.checkNotNull; -import io.netty.bootstrap.Bootstrap; -import io.netty.channel.Channel; -import io.netty.channel.ChannelInitializer; -import io.netty.channel.EventLoopGroup; -import io.netty.channel.epoll.EpollDomainSocketChannel; -import io.netty.channel.epoll.EpollEventLoopGroup; -import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.channel.socket.SocketChannel; -import io.netty.channel.socket.nio.NioSocketChannel; -import io.netty.channel.unix.DomainSocketAddress; -import io.netty.channel.unix.UnixChannel; -import io.netty.handler.codec.http.HttpClientCodec; -import io.netty.handler.logging.LoggingHandler; -import io.netty.handler.ssl.SslHandler; - -import java.io.IOException; -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.net.SocketAddress; -import java.security.Security; - -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLEngine; -import javax.net.ssl.SSLParameters; - -import org.bouncycastle.jce.provider.BouncyCastleProvider; - import com.github.dockerjava.api.command.AttachContainerCmd; import com.github.dockerjava.api.command.AuthCmd; import com.github.dockerjava.api.command.BuildImageCmd; import com.github.dockerjava.api.command.CommitCmd; +import com.github.dockerjava.api.command.ConnectToNetworkCmd; import com.github.dockerjava.api.command.ContainerDiffCmd; import com.github.dockerjava.api.command.CopyArchiveFromContainerCmd; import com.github.dockerjava.api.command.CopyArchiveToContainerCmd; import com.github.dockerjava.api.command.CopyFileFromContainerCmd; import com.github.dockerjava.api.command.CreateContainerCmd; import com.github.dockerjava.api.command.CreateImageCmd; +import com.github.dockerjava.api.command.CreateNetworkCmd; import com.github.dockerjava.api.command.CreateVolumeCmd; +import com.github.dockerjava.api.command.DisconnectFromNetworkCmd; import com.github.dockerjava.api.command.DockerCmdExecFactory; import com.github.dockerjava.api.command.EventsCmd; import com.github.dockerjava.api.command.ExecCreateCmd; @@ -47,10 +22,12 @@ import com.github.dockerjava.api.command.InspectContainerCmd; import com.github.dockerjava.api.command.InspectExecCmd; import com.github.dockerjava.api.command.InspectImageCmd; +import com.github.dockerjava.api.command.InspectNetworkCmd; import com.github.dockerjava.api.command.InspectVolumeCmd; import com.github.dockerjava.api.command.KillContainerCmd; import com.github.dockerjava.api.command.ListContainersCmd; import com.github.dockerjava.api.command.ListImagesCmd; +import com.github.dockerjava.api.command.ListNetworksCmd; import com.github.dockerjava.api.command.ListVolumesCmd; import com.github.dockerjava.api.command.LogContainerCmd; import com.github.dockerjava.api.command.PauseContainerCmd; @@ -59,6 +36,7 @@ import com.github.dockerjava.api.command.PushImageCmd; import com.github.dockerjava.api.command.RemoveContainerCmd; import com.github.dockerjava.api.command.RemoveImageCmd; +import com.github.dockerjava.api.command.RemoveNetworkCmd; import com.github.dockerjava.api.command.RemoveVolumeCmd; import com.github.dockerjava.api.command.RestartContainerCmd; import com.github.dockerjava.api.command.SaveImageCmd; @@ -77,13 +55,16 @@ import com.github.dockerjava.netty.exec.AuthCmdExec; import com.github.dockerjava.netty.exec.BuildImageCmdExec; import com.github.dockerjava.netty.exec.CommitCmdExec; +import com.github.dockerjava.netty.exec.ConnectToNetworkCmdExec; import com.github.dockerjava.netty.exec.ContainerDiffCmdExec; import com.github.dockerjava.netty.exec.CopyArchiveFromContainerCmdExec; import com.github.dockerjava.netty.exec.CopyArchiveToContainerCmdExec; import com.github.dockerjava.netty.exec.CopyFileFromContainerCmdExec; import com.github.dockerjava.netty.exec.CreateContainerCmdExec; import com.github.dockerjava.netty.exec.CreateImageCmdExec; +import com.github.dockerjava.netty.exec.CreateNetworkCmdExec; import com.github.dockerjava.netty.exec.CreateVolumeCmdExec; +import com.github.dockerjava.netty.exec.DisconnectFromNetworkCmdExec; import com.github.dockerjava.netty.exec.EventsCmdExec; import com.github.dockerjava.netty.exec.ExecCreateCmdExec; import com.github.dockerjava.netty.exec.ExecStartCmdExec; @@ -91,10 +72,12 @@ import com.github.dockerjava.netty.exec.InspectContainerCmdExec; import com.github.dockerjava.netty.exec.InspectExecCmdExec; import com.github.dockerjava.netty.exec.InspectImageCmdExec; +import com.github.dockerjava.netty.exec.InspectNetworkCmdExec; import com.github.dockerjava.netty.exec.InspectVolumeCmdExec; import com.github.dockerjava.netty.exec.KillContainerCmdExec; import com.github.dockerjava.netty.exec.ListContainersCmdExec; import com.github.dockerjava.netty.exec.ListImagesCmdExec; +import com.github.dockerjava.netty.exec.ListNetworksCmdExec; import com.github.dockerjava.netty.exec.ListVolumesCmdExec; import com.github.dockerjava.netty.exec.LogContainerCmdExec; import com.github.dockerjava.netty.exec.PauseContainerCmdExec; @@ -103,6 +86,7 @@ import com.github.dockerjava.netty.exec.PushImageCmdExec; import com.github.dockerjava.netty.exec.RemoveContainerCmdExec; import com.github.dockerjava.netty.exec.RemoveImageCmdExec; +import com.github.dockerjava.netty.exec.RemoveNetworkCmdExec; import com.github.dockerjava.netty.exec.RemoveVolumeCmdExec; import com.github.dockerjava.netty.exec.RestartContainerCmdExec; import com.github.dockerjava.netty.exec.SaveImageCmdExec; @@ -115,6 +99,32 @@ import com.github.dockerjava.netty.exec.UnpauseContainerCmdExec; import com.github.dockerjava.netty.exec.VersionCmdExec; import com.github.dockerjava.netty.exec.WaitContainerCmdExec; +import io.netty.bootstrap.Bootstrap; +import io.netty.channel.Channel; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.epoll.EpollDomainSocketChannel; +import io.netty.channel.epoll.EpollEventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.SocketChannel; +import io.netty.channel.socket.nio.NioSocketChannel; +import io.netty.channel.unix.DomainSocketAddress; +import io.netty.channel.unix.UnixChannel; +import io.netty.handler.codec.http.HttpClientCodec; +import io.netty.handler.logging.LoggingHandler; +import io.netty.handler.ssl.SslHandler; +import org.bouncycastle.jce.provider.BouncyCastleProvider; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLEngine; +import javax.net.ssl.SSLParameters; +import java.io.IOException; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.security.Security; + +import static com.google.common.base.Preconditions.checkNotNull; /** * Experimental implementation of {@link DockerCmdExecFactory} that supports http connection hijacking that is needed to @@ -505,6 +515,36 @@ public ListVolumesCmd.Exec createListVolumesCmdExec() { return new ListVolumesCmdExec(getBaseResource(), getDockerClientConfig()); } + @Override + public ListNetworksCmd.Exec createListNetworksCmdExec() { + return new ListNetworksCmdExec(getBaseResource(), getDockerClientConfig()); + } + + @Override + public InspectNetworkCmd.Exec createInspectNetworkCmdExec() { + return new InspectNetworkCmdExec(getBaseResource(), getDockerClientConfig()); + } + + @Override + public CreateNetworkCmd.Exec createCreateNetworkCmdExec() { + return new CreateNetworkCmdExec(getBaseResource(), getDockerClientConfig()); + } + + @Override + public RemoveNetworkCmd.Exec createRemoveNetworkCmdExec() { + return new RemoveNetworkCmdExec(getBaseResource(), getDockerClientConfig()); + } + + @Override + public ConnectToNetworkCmd.Exec createConnectToNetworkCmdExec() { + return new ConnectToNetworkCmdExec(getBaseResource(), getDockerClientConfig()); + } + + @Override + public DisconnectFromNetworkCmd.Exec createDisconnectFromNetworkCmdExec() { + return new DisconnectFromNetworkCmdExec(getBaseResource(), getDockerClientConfig()); + } + @Override public void close() throws IOException { checkNotNull(eventLoopGroup, "Factory not initialized. You probably forgot to call init()!"); diff --git a/src/main/java/com/github/dockerjava/netty/exec/ConnectToNetworkCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/ConnectToNetworkCmdExec.java new file mode 100644 index 0000000000..b1090f4c34 --- /dev/null +++ b/src/main/java/com/github/dockerjava/netty/exec/ConnectToNetworkCmdExec.java @@ -0,0 +1,29 @@ +package com.github.dockerjava.netty.exec; + +import com.github.dockerjava.api.command.ConnectToNetworkCmd; +import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.netty.WebTarget; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +public class ConnectToNetworkCmdExec extends AbstrSyncDockerCmdExec + implements ConnectToNetworkCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(ConnectToNetworkCmdExec.class); + + public ConnectToNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected Void execute(ConnectToNetworkCmd command) { + + WebTarget webTarget = getBaseResource().path("/networks/" + command.getNetworkId() + "/connect"); + + LOGGER.trace("POST: {}", webTarget); + webTarget.request().post(command); + + return null; + } +} diff --git a/src/main/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExec.java new file mode 100644 index 0000000000..cfc825e801 --- /dev/null +++ b/src/main/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExec.java @@ -0,0 +1,30 @@ +package com.github.dockerjava.netty.exec; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.github.dockerjava.api.command.CreateNetworkCmd; +import com.github.dockerjava.api.command.CreateNetworkResponse; +import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.netty.MediaType; +import com.github.dockerjava.netty.WebTarget; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class CreateNetworkCmdExec extends AbstrSyncDockerCmdExec implements + CreateNetworkCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(CreateNetworkCmdExec.class); + + public CreateNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected CreateNetworkResponse execute(CreateNetworkCmd command) { + WebTarget webResource = getBaseResource().path("/networks/create"); + + LOGGER.trace("POST: {}", webResource); + return webResource.request().accept(MediaType.APPLICATION_JSON) + .post(command, new TypeReference() { + }); + } +} diff --git a/src/main/java/com/github/dockerjava/netty/exec/DisconnectFromNetworkCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/DisconnectFromNetworkCmdExec.java new file mode 100644 index 0000000000..8b814bddcb --- /dev/null +++ b/src/main/java/com/github/dockerjava/netty/exec/DisconnectFromNetworkCmdExec.java @@ -0,0 +1,29 @@ +package com.github.dockerjava.netty.exec; + +import com.github.dockerjava.api.command.DisconnectFromNetworkCmd; +import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.netty.WebTarget; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +public class DisconnectFromNetworkCmdExec extends AbstrSyncDockerCmdExec + implements DisconnectFromNetworkCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(DisconnectFromNetworkCmdExec.class); + + public DisconnectFromNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected Void execute(DisconnectFromNetworkCmd command) { + + WebTarget webTarget = getBaseResource().path("/networks/" + command.getNetworkId() + "/disconnect"); + + LOGGER.trace("POST: {}", webTarget); + webTarget.request().post(command); + + return null; + } +} diff --git a/src/main/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExec.java new file mode 100644 index 0000000000..51777972fc --- /dev/null +++ b/src/main/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExec.java @@ -0,0 +1,29 @@ +package com.github.dockerjava.netty.exec; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.github.dockerjava.api.command.InspectNetworkCmd; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.netty.MediaType; +import com.github.dockerjava.netty.WebTarget; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class InspectNetworkCmdExec extends AbstrSyncDockerCmdExec implements + InspectNetworkCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(InspectNetworkCmdExec.class); + + public InspectNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected Network execute(InspectNetworkCmd command) { + WebTarget webResource = getBaseResource().path("/networks/{id}").resolveTemplate("id", command.getNetworkId()); + + LOGGER.trace("GET: {}", webResource); + return webResource.request().accept(MediaType.APPLICATION_JSON).get(new TypeReference() { + }); + } +} diff --git a/src/main/java/com/github/dockerjava/netty/exec/ListNetworksCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/ListNetworksCmdExec.java new file mode 100644 index 0000000000..8f370642f8 --- /dev/null +++ b/src/main/java/com/github/dockerjava/netty/exec/ListNetworksCmdExec.java @@ -0,0 +1,37 @@ +package com.github.dockerjava.netty.exec; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.github.dockerjava.api.command.ListNetworksCmd; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.netty.MediaType; +import com.github.dockerjava.netty.WebTarget; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +import static com.google.common.net.UrlEscapers.urlPathSegmentEscaper; + +public class ListNetworksCmdExec extends AbstrSyncDockerCmdExec> implements + ListNetworksCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(ListNetworksCmdExec.class); + + public ListNetworksCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected List execute(ListNetworksCmd command) { + WebTarget webTarget = getBaseResource().path("/networks"); + + if (command.getFilters() != null) + webTarget = webTarget.queryParam("filters", urlPathSegmentEscaper().escape(command.getFilters().toString())); + + LOGGER.trace("GET: {}", webTarget); + + return webTarget.request().accept(MediaType.APPLICATION_JSON).get(new TypeReference>() { + }); + } +} diff --git a/src/main/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExec.java new file mode 100644 index 0000000000..deb52100d7 --- /dev/null +++ b/src/main/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExec.java @@ -0,0 +1,29 @@ +package com.github.dockerjava.netty.exec; + +import com.github.dockerjava.api.command.RemoveNetworkCmd; +import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.netty.MediaType; +import com.github.dockerjava.netty.WebTarget; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class RemoveNetworkCmdExec extends AbstrSyncDockerCmdExec implements + RemoveNetworkCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(RemoveNetworkCmdExec.class); + + public RemoveNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected Void execute(RemoveNetworkCmd command) { + WebTarget webTarget = getBaseResource().path("/networks/" + command.getNetworkId()); + + LOGGER.trace("DELETE: {}", webTarget); + webTarget.request().accept(MediaType.APPLICATION_JSON).delete(); + + return null; + } + +} diff --git a/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java b/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java index 8751e07e51..37e2916e60 100644 --- a/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java +++ b/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java @@ -12,6 +12,7 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.io.LineIterator; +import org.apache.commons.lang.StringUtils; import org.hamcrest.FeatureMatcher; import org.hamcrest.Matcher; import org.slf4j.Logger; @@ -24,6 +25,7 @@ import com.github.dockerjava.api.command.InspectContainerResponse.Mount; import com.github.dockerjava.api.exception.DockerException; import com.github.dockerjava.api.model.Frame; +import com.github.dockerjava.api.model.Network; import com.github.dockerjava.api.model.Volume; import com.github.dockerjava.core.DockerClientBuilder; import com.github.dockerjava.core.DockerClientConfig; @@ -118,6 +120,15 @@ public void afterMethod(ITestResult result) { } } + for (String networkId : dockerCmdExecFactory.getNetworkIds()) { + LOG.info("Cleaning up temporary network with {}", networkId); + try { + dockerClient.removeNetworkCmd(networkId).exec(); + } catch (DockerException ignore) { + // ignore.printStackTrace(); + } + } + LOG.info("################################## END OF {} ##################################\n", result.getName()); } @@ -232,4 +243,16 @@ protected String buildImage(File baseDir) throws Exception { .awaitImageId(); } + protected Network findNetwork(List networks, String name) { + + for (Network network : networks) { + if (StringUtils.equals(network.getName(), name)) { + return network; + } + } + + fail("No network found."); + return null; + } + } diff --git a/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java b/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java index 8128bb9159..50860789b3 100644 --- a/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java +++ b/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java @@ -6,52 +6,8 @@ import java.util.List; import com.github.dockerjava.api.async.ResultCallback; -import com.github.dockerjava.api.command.AttachContainerCmd; +import com.github.dockerjava.api.command.*; import com.github.dockerjava.api.command.AuthCmd.Exec; -import com.github.dockerjava.api.command.BuildImageCmd; -import com.github.dockerjava.api.command.CommitCmd; -import com.github.dockerjava.api.command.ContainerDiffCmd; -import com.github.dockerjava.api.command.CopyArchiveFromContainerCmd; -import com.github.dockerjava.api.command.CopyArchiveToContainerCmd; -import com.github.dockerjava.api.command.CopyFileFromContainerCmd; -import com.github.dockerjava.api.command.CreateContainerCmd; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.CreateImageCmd; -import com.github.dockerjava.api.command.CreateImageResponse; -import com.github.dockerjava.api.command.CreateVolumeCmd; -import com.github.dockerjava.api.command.CreateVolumeResponse; -import com.github.dockerjava.api.command.DockerCmdExecFactory; -import com.github.dockerjava.api.command.EventsCmd; -import com.github.dockerjava.api.command.ExecCreateCmd; -import com.github.dockerjava.api.command.ExecStartCmd; -import com.github.dockerjava.api.command.InfoCmd; -import com.github.dockerjava.api.command.InspectContainerCmd; -import com.github.dockerjava.api.command.InspectExecCmd; -import com.github.dockerjava.api.command.InspectImageCmd; -import com.github.dockerjava.api.command.InspectVolumeCmd; -import com.github.dockerjava.api.command.KillContainerCmd; -import com.github.dockerjava.api.command.ListContainersCmd; -import com.github.dockerjava.api.command.ListImagesCmd; -import com.github.dockerjava.api.command.ListVolumesCmd; -import com.github.dockerjava.api.command.LogContainerCmd; -import com.github.dockerjava.api.command.PauseContainerCmd; -import com.github.dockerjava.api.command.PingCmd; -import com.github.dockerjava.api.command.PullImageCmd; -import com.github.dockerjava.api.command.PushImageCmd; -import com.github.dockerjava.api.command.RemoveContainerCmd; -import com.github.dockerjava.api.command.RemoveImageCmd; -import com.github.dockerjava.api.command.RemoveVolumeCmd; -import com.github.dockerjava.api.command.RestartContainerCmd; -import com.github.dockerjava.api.command.SaveImageCmd; -import com.github.dockerjava.api.command.SearchImagesCmd; -import com.github.dockerjava.api.command.StartContainerCmd; -import com.github.dockerjava.api.command.StatsCmd; -import com.github.dockerjava.api.command.StopContainerCmd; -import com.github.dockerjava.api.command.TagImageCmd; -import com.github.dockerjava.api.command.TopContainerCmd; -import com.github.dockerjava.api.command.UnpauseContainerCmd; -import com.github.dockerjava.api.command.VersionCmd; -import com.github.dockerjava.api.command.WaitContainerCmd; import com.github.dockerjava.api.model.BuildResponseItem; /** @@ -68,6 +24,8 @@ public class TestDockerCmdExecFactory implements DockerCmdExecFactory { private List volumeNames = new ArrayList(); + private List networkIds = new ArrayList<>(); + private DockerCmdExecFactory delegate; public TestDockerCmdExecFactory(DockerCmdExecFactory delegate) { @@ -349,6 +307,51 @@ public ListVolumesCmd.Exec createListVolumesCmdExec() { return delegate.createListVolumesCmdExec(); } + @Override + public ListNetworksCmd.Exec createListNetworksCmdExec() { + return delegate.createListNetworksCmdExec(); + } + + @Override + public InspectNetworkCmd.Exec createInspectNetworkCmdExec() { + return delegate.createInspectNetworkCmdExec(); + } + + @Override + public CreateNetworkCmd.Exec createCreateNetworkCmdExec() { + + return new CreateNetworkCmd.Exec() { + @Override + public CreateNetworkResponse exec(CreateNetworkCmd command) { + CreateNetworkResponse result = delegate.createCreateNetworkCmdExec().exec(command); + networkIds.add(result.getId()); + return result; + } + }; + } + + @Override + public RemoveNetworkCmd.Exec createRemoveNetworkCmdExec() { + return new RemoveNetworkCmd.Exec() { + @Override + public Void exec(RemoveNetworkCmd command) { + delegate.createRemoveNetworkCmdExec().exec(command); + networkIds.remove(command.getNetworkId()); + return null; + } + }; + } + + @Override + public ConnectToNetworkCmd.Exec createConnectToNetworkCmdExec() { + return delegate.createConnectToNetworkCmdExec(); + } + + @Override + public DisconnectFromNetworkCmd.Exec createDisconnectFromNetworkCmdExec() { + return delegate.createDisconnectFromNetworkCmdExec(); + } + public List getContainerNames() { return new ArrayList(containerNames); } @@ -360,4 +363,8 @@ public List getImageNames() { public List getVolumeNames() { return new ArrayList(volumeNames); } + + public List getNetworkIds() { + return new ArrayList<>(networkIds); + } } 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 0000000000..ad051e0bd6 --- /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/CreateNetworkCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/CreateNetworkCmdImplTest.java new file mode 100644 index 0000000000..eefeb535f7 --- /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/DisconnectFromNetworkCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImplTest.java new file mode 100644 index 0000000000..7f94c5a0f3 --- /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/InspectContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/InspectContainerCmdImplTest.java index cf555a28a9..e11ff68390 100644 --- a/src/test/java/com/github/dockerjava/core/command/InspectContainerCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/InspectContainerCmdImplTest.java @@ -87,4 +87,19 @@ public void inspectContainerRestartCount() throws DockerException { 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 index 4f88b63172..4e87d5abff 100644 --- a/src/test/java/com/github/dockerjava/core/command/InspectExecCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/InspectExecCmdImplTest.java @@ -6,7 +6,6 @@ import static org.hamcrest.Matchers.not; import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Method; import java.security.SecureRandom; @@ -47,10 +46,10 @@ public void afterMethod(ITestResult result) { } @Test(groups = "ignoreInCircleCi") - public void inspectExecTest() throws IOException { + public void inspectExec() throws IOException { String containerName = "generated_" + new SecureRandom().nextInt(); - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("top") + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") .withName(containerName).exec(); LOG.info("Created container {}", container.toString()); assertThat(container.getId(), not(isEmptyString())); @@ -70,9 +69,8 @@ public void inspectExecTest() throws IOException { dockerClient.execStartCmd(container.getId()) .withExecId(checkFileCmdCreateResponse.getId()).exec(new ExecStartResultCallback(System.out, System.err)); - InspectExecResponse first = dockerClient.inspectExecCmd(checkFileCmdCreateResponse.getId()).exec(); - assertThat(first.getExitCode(), is(1)); + assertThat(first.getExitCode(), is(0)); // Create the file dockerClient.execStartCmd(container.getId()) @@ -93,4 +91,26 @@ public void inspectExecTest() throws IOException { assertEquals(containerInfo.getId(), container.getId()); JSONTestHelper.testRoundTrip(containerInfo); } + + @Test(groups = "ignoreInCircleCi") + public void inspectExecNetworkSettings() throws IOException { + 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(); + assertThat(inspectExecResponse.getExitCode(), is(0)); + + assertNotNull(inspectExecResponse.getContainer().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 0000000000..9d992eb15f --- /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/ListNetworksCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ListNetworksCmdImplTest.java new file mode 100644 index 0000000000..192adb4bc6 --- /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/RemoveNetworkCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/RemoveNetworkCmdImplTest.java new file mode 100644 index 0000000000..e1e4e45fe7 --- /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/netty/exec/CreateNetworkCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExecTest.java new file mode 100644 index 0000000000..fa99628261 --- /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/InspectContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java index 31116ef22b..f63dda273c 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java @@ -87,4 +87,19 @@ public void inspectContainerRestartCount() throws DockerException { 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(); + + assertNotNull(inspectContainerResponse.getNetworkSettings().getNetworks().get("bridge")); + } } diff --git a/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java index fc3bb089b7..efeba6e990 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java @@ -97,4 +97,26 @@ public void inspectExecTest() throws IOException { assertEquals(containerInfo.getId(), container.getId()); JSONTestHelper.testRoundTrip(containerInfo); } + + @Test(groups = "ignoreInCircleCi") + public void inspectExecNetworkSettings() throws IOException { + 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(); + assertThat(inspectExecResponse.getExitCode(), is(0)); + + assertNotNull(inspectExecResponse.getContainer().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 0000000000..7cbab660b9 --- /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/ListNetworksCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ListNetworksCmdExecTest.java new file mode 100644 index 0000000000..8a5d975f01 --- /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/RemoveNetworkCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExecTest.java new file mode 100644 index 0000000000..9fda49f21e --- /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) { + } + } + +} From aabf07b17e03742f9cbb1cd186df87ed1b9fb30b Mon Sep 17 00:00:00 2001 From: marcuslinke Date: Mon, 18 Jan 2016 21:01:58 +0100 Subject: [PATCH 006/912] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b0b383270..c6d7b55509 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ Notes * The upcoming release will contain multiple API breaking changes therefore the major version switch. It will support a subset of v.1.21 of the docker remote API. It also includes an experimental netty based implementation of `DockerCmdExecFactory` that probably will replace the current jersey/httpclient based one in a later release. All changes +* [#425] (https://github.com/docker-java/docker-java/pull/425) Implement Network API * [#410] (https://github.com/docker-java/docker-java/pull/410) Support for build-args of docker build * [#408] (https://github.com/docker-java/docker-java/pull/408) Support for volume API * [#406] (https://github.com/docker-java/docker-java/pull/406) Added RestartCount to InspectContainerResponse From acfe65de6f4ef1392a9bc561a01d88268ef9869b Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Mon, 18 Jan 2016 21:53:13 +0100 Subject: [PATCH 007/912] Refactored filters API --- .../dockerjava/api/command/EventsCmd.java | 49 ++++++++++++--- .../api/command/ListContainersCmd.java | 62 ++++++++++++++----- .../dockerjava/api/command/ListImagesCmd.java | 32 +++++++--- .../api/command/ListNetworksCmd.java | 8 ++- .../api/command/ListVolumesCmd.java | 13 ++-- .../dockerjava/api/model/EventFilters.java | 37 ----------- .../dockerjava/api/model/NetworkFilters.java | 15 ----- .../api/model/PullResponseItem.java | 1 - .../core/command/EventsCmdImpl.java | 45 +++++++++++--- .../core/command/ListContainersCmdImpl.java | 49 +++++++++------ .../core/command/ListImagesCmdImpl.java | 56 +++++++++++++---- .../core/command/ListNetworksCmdImpl.java | 23 ++++--- .../core/command/ListVolumesCmdImpl.java | 16 +++-- .../util/FiltersBuilder.java} | 39 ++++-------- .../dockerjava/core/util/FiltersEncoder.java | 30 +++++++++ .../dockerjava/jaxrs/EventsCmdExec.java | 5 +- .../jaxrs/ListContainersCmdExec.java | 3 +- .../dockerjava/jaxrs/ListImagesCmdExec.java | 10 ++- .../dockerjava/jaxrs/ListNetworksCmdExec.java | 7 ++- .../dockerjava/jaxrs/ListVolumesCmdExec.java | 5 +- .../dockerjava/netty/exec/EventsCmdExec.java | 5 +- .../netty/exec/ListContainersCmdExec.java | 3 +- .../netty/exec/ListImagesCmdExec.java | 5 +- .../netty/exec/ListNetworksCmdExec.java | 6 +- .../netty/exec/ListVolumesCmdExec.java | 5 +- .../dockerjava/api/model/FiltersTest.java | 58 ----------------- .../core/command/EventsCmdImplTest.java | 3 +- .../command/ListContainersCmdImplTest.java | 5 +- .../core/command/ListImagesCmdImplTest.java | 7 +-- .../core/util/FiltersBuilderTest.java | 61 ++++++++++++++++++ .../netty/exec/EventsCmdExecTest.java | 3 +- .../netty/exec/ListContainersCmdExecTest.java | 6 +- .../netty/exec/ListImagesCmdExecTest.java | 8 +-- 33 files changed, 412 insertions(+), 268 deletions(-) delete mode 100644 src/main/java/com/github/dockerjava/api/model/EventFilters.java delete mode 100644 src/main/java/com/github/dockerjava/api/model/NetworkFilters.java rename src/main/java/com/github/dockerjava/{api/model/Filters.java => core/util/FiltersBuilder.java} (66%) create mode 100644 src/main/java/com/github/dockerjava/core/util/FiltersEncoder.java delete mode 100644 src/test/java/com/github/dockerjava/api/model/FiltersTest.java create mode 100644 src/test/java/com/github/dockerjava/core/util/FiltersBuilderTest.java diff --git a/src/main/java/com/github/dockerjava/api/command/EventsCmd.java b/src/main/java/com/github/dockerjava/api/command/EventsCmd.java index 4020a8e72b..8c03270df7 100644 --- a/src/main/java/com/github/dockerjava/api/command/EventsCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/EventsCmd.java @@ -1,22 +1,19 @@ package com.github.dockerjava.api.command; +import java.util.List; +import java.util.Map; + import javax.annotation.CheckForNull; import com.github.dockerjava.api.model.Event; -import com.github.dockerjava.api.model.Filters; /** * Get events - * - * @param since - * - Show all events created since timestamp - * @param until - * - Stream events until this timestamp */ public interface EventsCmd extends AsyncDockerCmd { @CheckForNull - public Filters getFilters(); + public Map> getFilters(); @CheckForNull public String getSince(); @@ -24,10 +21,46 @@ public interface EventsCmd extends AsyncDockerCmd { @CheckForNull public String getUntil(); - public EventsCmd withFilters(Filters filters); + /** + * @param container + * - container to filter + */ + public EventsCmd withContainerFilter(String... container); + + /** + * @param event + * - event to filter (pull | create | attach | start | stop | kill) + */ + public EventsCmd withEventFilter(String... event); + + /** + * @param image + * - image to filter + */ + public EventsCmd withImageFilter(String... image); + + /** + * @param label + * - label to filter + */ + public EventsCmd withLabelFilter(String... label); + + /** + * @param labels + * - labels to filter (map of names and values) + */ + public EventsCmd withLabelFilter(Map labels); + /** + * @param since + * - Show all events created since timestamp + */ public EventsCmd withSince(String since); + /** + * @param until + * - Show all events created until timestamp + */ public EventsCmd withUntil(String until); public static interface Exec extends DockerCmdAsyncExec { diff --git a/src/main/java/com/github/dockerjava/api/command/ListContainersCmd.java b/src/main/java/com/github/dockerjava/api/command/ListContainersCmd.java index 87faec0b3c..842f242cc4 100644 --- a/src/main/java/com/github/dockerjava/api/command/ListContainersCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/ListContainersCmd.java @@ -1,26 +1,15 @@ package com.github.dockerjava.api.command; import java.util.List; +import java.util.Map; import javax.annotation.CheckForNull; import com.github.dockerjava.api.model.Container; -import com.github.dockerjava.api.model.Filters; /** * List containers * - * @param showAll - * - true or false, Show all containers. Only running containers are shown by default. - * @param showSize - * - true or false, Show the containers sizes. This is false by default. - * @param limit - * - Show `limit` last created containers, include non-running ones. There is no limit by default. - * @param sinceId - * - Show only containers created since Id, include non-running ones. - * @param beforeId - * - Show only containers created before Id, include non-running ones. - * */ public interface ListContainersCmd extends SyncDockerCmd> { @@ -28,7 +17,7 @@ public interface ListContainersCmd extends SyncDockerCmd> { public String getBeforeId(); @CheckForNull - public Filters getFilters(); + public Map> getFilters(); @CheckForNull public Integer getLimit(); @@ -42,16 +31,59 @@ public interface ListContainersCmd extends SyncDockerCmd> { @CheckForNull public Boolean hasShowSizeEnabled(); + /** + * @param beforeId + * - Show only containers created before Id, include non-running ones. + */ public ListContainersCmd withBefore(String before); - public ListContainersCmd withFilters(Filters filters); - + /** + * @param exitcode + * - Show only containers that exited with the passed exitcode. + */ + public ListContainersCmd withExitcodeFilter(Integer exitcode); + + /** + * @param exitcode + * - Show only containers with the passed status (created|restarting|running|paused|exited). + */ + public ListContainersCmd withStatusFilter(String status); + + /** + * @param labels + * - Show only containers with the passed labels. + */ + public ListContainersCmd withLabelFilter(String... labels); + + /** + * @param labels + * - Show only containers with the passed labels. Labels is a {@link Map} that contains label keys and + * values + */ + public ListContainersCmd withLabelFilter(Map labels); + + /** + * @param limit + * - Show `limit` last created containers, include non-running ones. There is no limit by default. + */ public ListContainersCmd withLimit(Integer limit); + /** + * @param showAll + * - Show all containers. Only running containers are shown by default. + */ public ListContainersCmd withShowAll(Boolean showAll); + /** + * @param showSize + * - Show the containers sizes. This is false by default. + */ public ListContainersCmd withShowSize(Boolean showSize); + /** + * @param sinceId + * - Show only containers created since Id, include non-running ones. + */ public ListContainersCmd withSince(String since); public static interface Exec extends DockerCmdSyncExec> { diff --git a/src/main/java/com/github/dockerjava/api/command/ListImagesCmd.java b/src/main/java/com/github/dockerjava/api/command/ListImagesCmd.java index 3ef40f48f0..7dee8c918e 100644 --- a/src/main/java/com/github/dockerjava/api/command/ListImagesCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/ListImagesCmd.java @@ -1,6 +1,7 @@ package com.github.dockerjava.api.command; import java.util.List; +import java.util.Map; import javax.annotation.CheckForNull; @@ -8,23 +9,40 @@ /** * List images - * - * @param showAll - * - Show all images (by default filter out the intermediate images used to build) - * @param filters - * - a json encoded value of the filters (a map[string][]string) to process on the images list. */ public interface ListImagesCmd extends SyncDockerCmd> { @CheckForNull - public String getFilters(); + public Map> getFilters(); + + public String getImageNameFilter(); @CheckForNull public Boolean hasShowAllEnabled(); + /** + * Show all images (by default filter out the intermediate images used to build) + */ public ListImagesCmd withShowAll(Boolean showAll); - public ListImagesCmd withFilters(String filters); + public ListImagesCmd withImageNameFilter(String imageName); + + /** + * Filter dangling images + */ + public ListImagesCmd withDanglingFilter(Boolean dangling); + + /** + * @param labels + * - string array in the form ["key"] or ["key=value"] or a mix of both + */ + public ListImagesCmd withLabelFilter(String... label); + + /** + * @param labels + * - {@link Map} of labels that contains label keys and values + */ + public ListImagesCmd withLabelFilter(Map labels); public static interface Exec extends DockerCmdSyncExec> { } diff --git a/src/main/java/com/github/dockerjava/api/command/ListNetworksCmd.java b/src/main/java/com/github/dockerjava/api/command/ListNetworksCmd.java index 2b5b299962..dd3c89c7ba 100644 --- a/src/main/java/com/github/dockerjava/api/command/ListNetworksCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/ListNetworksCmd.java @@ -1,12 +1,12 @@ package com.github.dockerjava.api.command; -import com.github.dockerjava.api.model.Filters; import com.github.dockerjava.api.model.Network; import com.github.dockerjava.core.RemoteApiVersion; import javax.annotation.CheckForNull; import java.util.List; +import java.util.Map; /** * List networks. @@ -16,9 +16,11 @@ public interface ListNetworksCmd extends SyncDockerCmd> { @CheckForNull - public Filters getFilters(); + public Map> getFilters(); - ListNetworksCmd withFilters(Filters filters); + ListNetworksCmd withNameFilter(String... networkName); + + ListNetworksCmd withIdFilter(String... networkId); public static interface Exec extends DockerCmdSyncExec> { } diff --git a/src/main/java/com/github/dockerjava/api/command/ListVolumesCmd.java b/src/main/java/com/github/dockerjava/api/command/ListVolumesCmd.java index f900f19674..a049aa20f1 100644 --- a/src/main/java/com/github/dockerjava/api/command/ListVolumesCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/ListVolumesCmd.java @@ -1,24 +1,25 @@ package com.github.dockerjava.api.command; +import java.util.List; +import java.util.Map; + import javax.annotation.CheckForNull; /** * List volumes. * - * * @author Marcus Linke */ public interface ListVolumesCmd extends SyncDockerCmd { @CheckForNull - public String getFilters(); + public Map> getFilters(); /** - * @param filters - * - JSON encoded value of the filters (a map[string][]string) to process on the volumes list. There is - * one available filter: dangling=true + * @param dangling + * - Show dangling volumes filter */ - public ListVolumesCmd withFilters(String filters); + public ListVolumesCmd withDanglingFilter(Boolean dangling); public static interface Exec extends DockerCmdSyncExec { } diff --git a/src/main/java/com/github/dockerjava/api/model/EventFilters.java b/src/main/java/com/github/dockerjava/api/model/EventFilters.java deleted file mode 100644 index 08cb7ad113..0000000000 --- a/src/main/java/com/github/dockerjava/api/model/EventFilters.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.github.dockerjava.api.model; - -import java.util.List; - -/** - * Representation of a Docker event filter. - * - * @author Carlos Sanchez - * - */ -public class EventFilters extends Filters { - - /** - * Default constructor for the deserialization. - */ - public EventFilters() { - } - - /** - * Constructor. - * - * @param event - * event to filter - */ - public EventFilters(String... event) { - super(); - withEvent(event); - } - - public Filters withEvent(String... event) { - return withFilter("event", event); - } - - public List getEvent() { - return getFilter("event"); - } -} diff --git a/src/main/java/com/github/dockerjava/api/model/NetworkFilters.java b/src/main/java/com/github/dockerjava/api/model/NetworkFilters.java deleted file mode 100644 index f3c8376430..0000000000 --- a/src/main/java/com/github/dockerjava/api/model/NetworkFilters.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.github.dockerjava.api.model; - -/** - * Created by andrewk on 1/5/16. - */ -public class NetworkFilters extends Filters { - - public Filters withNames(String... names) { - return withFilter("name", names); - } - - public Filters withIds(String... ids) { - return withFilter("id", ids); - } -} diff --git a/src/main/java/com/github/dockerjava/api/model/PullResponseItem.java b/src/main/java/com/github/dockerjava/api/model/PullResponseItem.java index c18d12bd02..3ab77bee0b 100644 --- a/src/main/java/com/github/dockerjava/api/model/PullResponseItem.java +++ b/src/main/java/com/github/dockerjava/api/model/PullResponseItem.java @@ -33,5 +33,4 @@ public boolean isPullSuccessIndicated() { return (getStatus().contains(DOWNLOAD_COMPLETE) || getStatus().contains(IMAGE_UP_TO_DATE) || getStatus().contains(DOWNLOADED_NEWER_IMAGE) || getStatus().contains(LEGACY_REGISTRY)); } - } diff --git a/src/main/java/com/github/dockerjava/core/command/EventsCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/EventsCmdImpl.java index 9bd34e57d5..230f6dd5a8 100644 --- a/src/main/java/com/github/dockerjava/core/command/EventsCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/EventsCmdImpl.java @@ -2,9 +2,12 @@ import static com.google.common.base.Preconditions.checkNotNull; +import java.util.List; +import java.util.Map; + import com.github.dockerjava.api.command.EventsCmd; import com.github.dockerjava.api.model.Event; -import com.github.dockerjava.api.model.Filters; +import com.github.dockerjava.core.util.FiltersBuilder; /** * Stream docker events @@ -15,7 +18,7 @@ public class EventsCmdImpl extends AbstrAsyncDockerCmd impleme private String until; - private Filters filters; + private FiltersBuilder filters = new FiltersBuilder(); public EventsCmdImpl(EventsCmd.Exec exec) { super(exec); @@ -34,9 +37,37 @@ public EventsCmd withUntil(String until) { } @Override - public EventsCmd withFilters(Filters filters) { - checkNotNull(filters, "filters have not been specified"); - this.filters = filters; + public EventsCmd withContainerFilter(String... container) { + checkNotNull(container, "container have not been specified"); + this.filters.withContainers(container); + return this; + } + + @Override + public EventsCmd withImageFilter(String... image) { + checkNotNull(image, "image have not been specified"); + this.filters.withImages(image); + return this; + } + + @Override + public EventsCmd withEventFilter(String... event) { + checkNotNull(event, "event have not been specified"); + this.filters.withFilter("event", event); + return this; + } + + @Override + public EventsCmd withLabelFilter(String... label) { + checkNotNull(label, "label have not been specified"); + this.filters.withLabels(label); + return this; + } + + @Override + public EventsCmd withLabelFilter(Map labels) { + checkNotNull(labels, "labels have not been specified"); + this.filters.withLabels(labels); return this; } @@ -51,8 +82,8 @@ public String getUntil() { } @Override - public Filters getFilters() { - return filters; + public Map> getFilters() { + return filters.build(); } } diff --git a/src/main/java/com/github/dockerjava/core/command/ListContainersCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/ListContainersCmdImpl.java index b7a70603df..8e8e194da0 100644 --- a/src/main/java/com/github/dockerjava/core/command/ListContainersCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/ListContainersCmdImpl.java @@ -4,25 +4,14 @@ import static com.google.common.base.Preconditions.checkNotNull; import java.util.List; +import java.util.Map; import com.github.dockerjava.api.command.ListContainersCmd; import com.github.dockerjava.api.model.Container; -import com.github.dockerjava.api.model.Filters; +import com.github.dockerjava.core.util.FiltersBuilder; /** - * List containers - * - * @param showAll - * - true or false, Show all containers. Only running containers are shown by default. - * @param showSize - * - true or false, Show the containers sizes. This is false by default. - * @param limit - * - Show `limit` last created containers, include non-running ones. There is no limit by default. - * @param sinceId - * - Show only containers created since Id, include non-running ones. - * @param beforeId - * - Show only containers created before Id, include non-running ones. - * + * List containers. */ public class ListContainersCmdImpl extends AbstrDockerCmd> implements ListContainersCmd { @@ -33,7 +22,7 @@ public class ListContainersCmdImpl extends AbstrDockerCmd> getFilters() { + return filters.build(); } @Override @@ -104,10 +93,30 @@ public ListContainersCmd withBefore(String before) { } @Override - public ListContainersCmd withFilters(Filters filters) { - checkNotNull(filters, "filters was not specified"); - this.filters = filters; + public ListContainersCmd withLabelFilter(String... labels) { + checkNotNull(labels, "labels was not specified"); + this.filters.withLabels(labels); return this; } + @Override + public ListContainersCmd withLabelFilter(Map labels) { + checkNotNull(labels, "labels was not specified"); + this.filters.withLabels(labels); + return this; + } + + @Override + public ListContainersCmd withExitcodeFilter(Integer exitcode) { + checkNotNull(exitcode, "exitcode was not specified"); + this.filters.withFilter("exitcode", exitcode.toString()); + return this; + } + + @Override + public ListContainersCmd withStatusFilter(String status) { + checkNotNull(status, "status was not specified"); + this.filters.withFilter("status", status); + return this; + } } diff --git a/src/main/java/com/github/dockerjava/core/command/ListImagesCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/ListImagesCmdImpl.java index 69879b6733..d726ca7cee 100644 --- a/src/main/java/com/github/dockerjava/core/command/ListImagesCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/ListImagesCmdImpl.java @@ -3,31 +3,33 @@ import static com.google.common.base.Preconditions.checkNotNull; import java.util.List; +import java.util.Map; + +import org.apache.commons.lang.builder.ReflectionToStringBuilder; +import org.apache.commons.lang.builder.ToStringStyle; import com.github.dockerjava.api.command.ListImagesCmd; import com.github.dockerjava.api.model.Image; +import com.github.dockerjava.core.util.FiltersBuilder; /** * List images - * - * @param showAll - * - Show all images (by default filter out the intermediate images used to build) - * @param filters - * - a json encoded value of the filters (a map[string][]string) to process on the images list. */ public class ListImagesCmdImpl extends AbstrDockerCmd> implements ListImagesCmd { - private String filters; + private String imageNameFilter; + + private Boolean showAll = false; - private Boolean showAll = false; + private FiltersBuilder filters = new FiltersBuilder(); public ListImagesCmdImpl(ListImagesCmd.Exec exec) { super(exec); } @Override - public String getFilters() { - return filters; + public Map> getFilters() { + return filters.build(); } @Override @@ -42,10 +44,40 @@ public ListImagesCmd withShowAll(Boolean showAll) { } @Override - public ListImagesCmd withFilters(String filter) { - checkNotNull(filter, "filters have not been specified"); - this.filters = filter; + public ListImagesCmd withDanglingFilter(Boolean dangling) { + checkNotNull(dangling, "dangling have not been specified"); + filters.withFilter("dangling", dangling.toString()); + return this; + } + + @Override + public ListImagesCmd withLabelFilter(String... labels) { + checkNotNull(labels, "labels have not been specified"); + filters.withLabels(labels); + return this; + } + + @Override + public ListImagesCmd withLabelFilter(Map labels) { + checkNotNull(labels, "labels have not been specified"); + filters.withLabels(labels); return this; } + @Override + public ListImagesCmd withImageNameFilter(String imageNameFilter) { + checkNotNull(imageNameFilter, "image name filter not specified"); + this.imageNameFilter = imageNameFilter; + return this; + } + + @Override + public String getImageNameFilter() { + return this.imageNameFilter; + } + + @Override + public String toString() { + return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE); + } } diff --git a/src/main/java/com/github/dockerjava/core/command/ListNetworksCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/ListNetworksCmdImpl.java index 2303e7c9c9..44a9d2cfb8 100644 --- a/src/main/java/com/github/dockerjava/core/command/ListNetworksCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/ListNetworksCmdImpl.java @@ -1,27 +1,34 @@ package com.github.dockerjava.core.command; import com.github.dockerjava.api.command.ListNetworksCmd; -import com.github.dockerjava.api.model.Filters; import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.core.util.FiltersBuilder; import java.util.List; +import java.util.Map; -public class ListNetworksCmdImpl extends AbstrDockerCmd> implements - ListNetworksCmd { +public class ListNetworksCmdImpl extends AbstrDockerCmd> implements ListNetworksCmd { - private Filters filters; + private FiltersBuilder filtersBuilder = new FiltersBuilder(); public ListNetworksCmdImpl(ListNetworksCmd.Exec exec) { super(exec); } - @Override public Filters getFilters() { - return filters; + @Override + public Map> getFilters() { + return filtersBuilder.build(); } - @Override public ListNetworksCmd withFilters(Filters filters) { + @Override + public ListNetworksCmd withIdFilter(String... networkId) { + this.filtersBuilder.withFilter("id", networkId); + return this; + } - this.filters = filters; + @Override + public ListNetworksCmd withNameFilter(String... networkName) { + this.filtersBuilder.withFilter("name", networkName); return this; } } diff --git a/src/main/java/com/github/dockerjava/core/command/ListVolumesCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/ListVolumesCmdImpl.java index af1ca3fae3..d9efe7b179 100644 --- a/src/main/java/com/github/dockerjava/core/command/ListVolumesCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/ListVolumesCmdImpl.java @@ -2,8 +2,12 @@ import static com.google.common.base.Preconditions.checkNotNull; +import java.util.List; +import java.util.Map; + import com.github.dockerjava.api.command.ListVolumesCmd; import com.github.dockerjava.api.command.ListVolumesResponse; +import com.github.dockerjava.core.util.FiltersBuilder; /** * @@ -12,21 +16,21 @@ */ public class ListVolumesCmdImpl extends AbstrDockerCmd implements ListVolumesCmd { - private String filters; + private FiltersBuilder filters = new FiltersBuilder(); public ListVolumesCmdImpl(ListVolumesCmd.Exec exec) { super(exec); } @Override - public String getFilters() { - return filters; + public Map> getFilters() { + return filters.build(); } @Override - public ListVolumesCmd withFilters(String filter) { - checkNotNull(filter, "filters have not been specified"); - this.filters = filter; + public ListVolumesCmd withDanglingFilter(Boolean dangling) { + checkNotNull(dangling, "dangling have not been specified"); + this.filters.withFilter("dangling", dangling.toString()); return this; } } diff --git a/src/main/java/com/github/dockerjava/api/model/Filters.java b/src/main/java/com/github/dockerjava/core/util/FiltersBuilder.java similarity index 66% rename from src/main/java/com/github/dockerjava/api/model/Filters.java rename to src/main/java/com/github/dockerjava/core/util/FiltersBuilder.java index b24dd69db0..d6cd0d9f79 100644 --- a/src/main/java/com/github/dockerjava/api/model/Filters.java +++ b/src/main/java/com/github/dockerjava/core/util/FiltersBuilder.java @@ -1,4 +1,4 @@ -package com.github.dockerjava.api.model; +package com.github.dockerjava.core.util; import java.util.ArrayList; import java.util.Arrays; @@ -7,29 +7,20 @@ import java.util.Map; import java.util.Map.Entry; -import javax.ws.rs.core.MediaType; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider; - /** * Representation of Docker filters. * * @author Carlos Sanchez * */ -public class Filters { - - private static ObjectMapper OBJECT_MAPPER = new JacksonJaxbJsonProvider().locateMapper(Map.class, - MediaType.APPLICATION_JSON_TYPE); +public class FiltersBuilder { private Map> filters = new HashMap>(); - public Filters() { + public FiltersBuilder() { } - public Filters withFilter(String key, String... value) { + public FiltersBuilder withFilter(String key, String... value) { filters.put(key, Arrays.asList(value)); return this; } @@ -38,7 +29,7 @@ public List getFilter(String key) { return filters.get(key); } - public Filters withImages(String... image) { + public FiltersBuilder withImages(String... image) { withFilter("image", image); return this; } @@ -47,7 +38,7 @@ public List getImage() { return getFilter("image"); } - public Filters withContainers(String... container) { + public FiltersBuilder withContainers(String... container) { withFilter("container", container); return this; } @@ -61,9 +52,8 @@ public List getContainer() { * * @param labels * string array in the form ["key"] or ["key=value"] or a mix of both - * @return */ - public Filters withLabels(String... labels) { + public FiltersBuilder withLabels(String... labels) { withFilter("label", labels); return this; } @@ -73,9 +63,8 @@ public Filters withLabels(String... labels) { * * @param labels * {@link Map} of labels that contains label keys and values - * @return */ - public Filters withLabels(Map labels) { + public FiltersBuilder withLabels(Map labels) { withFilter("label", labelsMapToList(labels).toArray(new String[labels.size()])); return this; } @@ -99,7 +88,7 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) return false; - Filters filters1 = (Filters) o; + FiltersBuilder filters1 = (FiltersBuilder) o; return filters.equals(filters1.filters); @@ -110,13 +99,7 @@ public int hashCode() { return filters.hashCode(); } - @Override - public String toString() { - try { - return OBJECT_MAPPER.writeValueAsString(filters); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } + public Map> build() { + return filters; } - } diff --git a/src/main/java/com/github/dockerjava/core/util/FiltersEncoder.java b/src/main/java/com/github/dockerjava/core/util/FiltersEncoder.java new file mode 100644 index 0000000000..75f9d48c28 --- /dev/null +++ b/src/main/java/com/github/dockerjava/core/util/FiltersEncoder.java @@ -0,0 +1,30 @@ +package com.github.dockerjava.core.util; + +import java.util.List; +import java.util.Map; + +import javax.ws.rs.core.MediaType; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider; + +/** + * JSON Encoder for docker filters. + * + * @author Carlos Sanchez + * + */ +public class FiltersEncoder { + + private static ObjectMapper OBJECT_MAPPER = new JacksonJaxbJsonProvider().locateMapper(Map.class, + MediaType.APPLICATION_JSON_TYPE); + + public static String jsonEncode(Map> filters) { + try { + return OBJECT_MAPPER.writeValueAsString(filters); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/com/github/dockerjava/jaxrs/EventsCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/EventsCmdExec.java index 395fde4e01..3d4c8dc171 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/EventsCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/EventsCmdExec.java @@ -12,6 +12,7 @@ import com.github.dockerjava.api.model.Event; import com.github.dockerjava.core.DockerClientConfig; import com.github.dockerjava.core.async.JsonStreamProcessor; +import com.github.dockerjava.core.util.FiltersEncoder; import com.github.dockerjava.jaxrs.async.AbstractCallbackNotifier; import com.github.dockerjava.jaxrs.async.GETCallbackNotifier; @@ -28,9 +29,9 @@ protected AbstractCallbackNotifier callbackNotifier(EventsCmd command, Re WebTarget webTarget = getBaseResource().path("/events").queryParam("since", command.getSince()) .queryParam("until", command.getUntil()); - if (command.getFilters() != null) { + if (command.getFilters() != null && !command.getFilters().isEmpty()) { webTarget = webTarget - .queryParam("filters", urlPathSegmentEscaper().escape(command.getFilters().toString())); + .queryParam("filters", urlPathSegmentEscaper().escape(FiltersEncoder.jsonEncode(command.getFilters()))); } LOGGER.trace("GET: {}", webTarget); diff --git a/src/main/java/com/github/dockerjava/jaxrs/ListContainersCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/ListContainersCmdExec.java index 4031bfa0dc..fd882b673f 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/ListContainersCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/ListContainersCmdExec.java @@ -14,6 +14,7 @@ import com.github.dockerjava.api.command.ListContainersCmd; import com.github.dockerjava.api.model.Container; import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.core.util.FiltersEncoder; public class ListContainersCmdExec extends AbstrSyncDockerCmdExec> implements ListContainersCmd.Exec { @@ -38,7 +39,7 @@ protected List execute(ListContainersCmd command) { if (command.getFilters() != null) { webTarget = webTarget - .queryParam("filters", urlPathSegmentEscaper().escape(command.getFilters().toString())); + .queryParam("filters", urlPathSegmentEscaper().escape(FiltersEncoder.jsonEncode(command.getFilters()))); } LOGGER.trace("GET: {}", webTarget); diff --git a/src/main/java/com/github/dockerjava/jaxrs/ListImagesCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/ListImagesCmdExec.java index 9734dfb427..1e7acfc333 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/ListImagesCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/ListImagesCmdExec.java @@ -14,6 +14,7 @@ import com.github.dockerjava.api.command.ListImagesCmd; import com.github.dockerjava.api.model.Image; import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.core.util.FiltersEncoder; public class ListImagesCmdExec extends AbstrSyncDockerCmdExec> implements ListImagesCmd.Exec { @@ -29,8 +30,13 @@ protected List execute(ListImagesCmd command) { webTarget = booleanQueryParam(webTarget, "all", command.hasShowAllEnabled()); - if (command.getFilters() != null) - webTarget = webTarget.queryParam("filters", urlPathSegmentEscaper().escape(command.getFilters())); + if (command.getFilters() != null && !command.getFilters().isEmpty()) { + webTarget = webTarget.queryParam("filters", urlPathSegmentEscaper().escape(FiltersEncoder.jsonEncode(command.getFilters()))); + } + + if (command.getImageNameFilter() != null) { + webTarget = webTarget.queryParam("filter", urlPathSegmentEscaper().escape(command.getImageNameFilter())); + } LOGGER.trace("GET: {}", webTarget); diff --git a/src/main/java/com/github/dockerjava/jaxrs/ListNetworksCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/ListNetworksCmdExec.java index 80438d4335..9137e28d2c 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/ListNetworksCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/ListNetworksCmdExec.java @@ -3,12 +3,15 @@ import com.github.dockerjava.api.command.ListNetworksCmd; import com.github.dockerjava.api.model.Network; import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.core.util.FiltersEncoder; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.GenericType; import javax.ws.rs.core.MediaType; + import java.util.List; import static com.google.common.net.UrlEscapers.urlPathSegmentEscaper; @@ -26,9 +29,9 @@ public ListNetworksCmdExec(WebTarget baseResource, DockerClientConfig dockerClie protected List execute(ListNetworksCmd command) { WebTarget webTarget = getBaseResource().path("/networks"); - if (command.getFilters() != null) { + if (command.getFilters() != null && !command.getFilters().isEmpty()) { webTarget = webTarget - .queryParam("filters", urlPathSegmentEscaper().escape(command.getFilters().toString())); + .queryParam("filters", urlPathSegmentEscaper().escape(FiltersEncoder.jsonEncode(command.getFilters()))); } LOGGER.trace("GET: {}", webTarget); diff --git a/src/main/java/com/github/dockerjava/jaxrs/ListVolumesCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/ListVolumesCmdExec.java index 2550db31b8..dd877a89aa 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/ListVolumesCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/ListVolumesCmdExec.java @@ -11,6 +11,7 @@ import com.github.dockerjava.api.command.ListVolumesCmd; import com.github.dockerjava.api.command.ListVolumesResponse; import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.core.util.FiltersEncoder; public class ListVolumesCmdExec extends AbstrSyncDockerCmdExec implements ListVolumesCmd.Exec { @@ -24,8 +25,8 @@ public ListVolumesCmdExec(WebTarget baseResource, DockerClientConfig dockerClien protected ListVolumesResponse execute(ListVolumesCmd command) { WebTarget webTarget = getBaseResource().path("/volumes"); - if (command.getFilters() != null) - webTarget = webTarget.queryParam("filters", urlPathSegmentEscaper().escape(command.getFilters())); + if (command.getFilters() != null && !command.getFilters().isEmpty()) + webTarget = webTarget.queryParam("filters", urlPathSegmentEscaper().escape(FiltersEncoder.jsonEncode(command.getFilters()))); LOGGER.trace("GET: {}", webTarget); diff --git a/src/main/java/com/github/dockerjava/netty/exec/EventsCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/EventsCmdExec.java index be1ac0956a..f07230c072 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/EventsCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/EventsCmdExec.java @@ -10,6 +10,7 @@ import com.github.dockerjava.api.command.EventsCmd; import com.github.dockerjava.api.model.Event; import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.core.util.FiltersEncoder; import com.github.dockerjava.netty.WebTarget; public class EventsCmdExec extends AbstrAsyncDockerCmdExec implements EventsCmd.Exec { @@ -26,9 +27,9 @@ protected Void execute0(EventsCmd command, ResultCallback resultCallback) WebTarget webTarget = getBaseResource().path("/events").queryParam("since", command.getSince()) .queryParam("until", command.getUntil()); - if (command.getFilters() != null) { + if (command.getFilters() != null && !command.getFilters().isEmpty()) { webTarget = webTarget - .queryParam("filters", urlPathSegmentEscaper().escape(command.getFilters().toString())); + .queryParam("filters", urlPathSegmentEscaper().escape(FiltersEncoder.jsonEncode(command.getFilters()))); } LOGGER.trace("GET: {}", webTarget); diff --git a/src/main/java/com/github/dockerjava/netty/exec/ListContainersCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/ListContainersCmdExec.java index b45e76cbdf..219aebc4b6 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/ListContainersCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/ListContainersCmdExec.java @@ -11,6 +11,7 @@ import com.github.dockerjava.api.command.ListContainersCmd; import com.github.dockerjava.api.model.Container; import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.core.util.FiltersEncoder; import com.github.dockerjava.netty.MediaType; import com.github.dockerjava.netty.WebTarget; @@ -37,7 +38,7 @@ protected List execute(ListContainersCmd command) { if (command.getFilters() != null) { webTarget = webTarget - .queryParam("filters", urlPathSegmentEscaper().escape(command.getFilters().toString())); + .queryParam("filters", urlPathSegmentEscaper().escape(FiltersEncoder.jsonEncode(command.getFilters()))); } LOGGER.trace("GET: {}", webTarget); diff --git a/src/main/java/com/github/dockerjava/netty/exec/ListImagesCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/ListImagesCmdExec.java index 4ca65a0613..0d1b819628 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/ListImagesCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/ListImagesCmdExec.java @@ -11,6 +11,7 @@ import com.github.dockerjava.api.command.ListImagesCmd; import com.github.dockerjava.api.model.Image; import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.core.util.FiltersEncoder; import com.github.dockerjava.netty.MediaType; import com.github.dockerjava.netty.WebTarget; @@ -28,8 +29,8 @@ protected List execute(ListImagesCmd command) { webTarget = booleanQueryParam(webTarget, "all", command.hasShowAllEnabled()); - if (command.getFilters() != null) { - webTarget = webTarget.queryParam("filters", urlPathSegmentEscaper().escape(command.getFilters())); + if (command.getFilters() != null && !command.getFilters().isEmpty()) { + webTarget = webTarget.queryParam("filters", urlPathSegmentEscaper().escape(FiltersEncoder.jsonEncode(command.getFilters()))); } LOGGER.trace("GET: {}", webTarget); diff --git a/src/main/java/com/github/dockerjava/netty/exec/ListNetworksCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/ListNetworksCmdExec.java index 8f370642f8..e0c945d6db 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/ListNetworksCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/ListNetworksCmdExec.java @@ -4,8 +4,10 @@ import com.github.dockerjava.api.command.ListNetworksCmd; import com.github.dockerjava.api.model.Network; import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.core.util.FiltersEncoder; import com.github.dockerjava.netty.MediaType; import com.github.dockerjava.netty.WebTarget; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,8 +28,8 @@ public ListNetworksCmdExec(WebTarget baseResource, DockerClientConfig dockerClie protected List execute(ListNetworksCmd command) { WebTarget webTarget = getBaseResource().path("/networks"); - if (command.getFilters() != null) - webTarget = webTarget.queryParam("filters", urlPathSegmentEscaper().escape(command.getFilters().toString())); + if (command.getFilters() != null && !command.getFilters().isEmpty()) + webTarget = webTarget.queryParam("filters", urlPathSegmentEscaper().escape(FiltersEncoder.jsonEncode(command.getFilters()))); LOGGER.trace("GET: {}", webTarget); diff --git a/src/main/java/com/github/dockerjava/netty/exec/ListVolumesCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/ListVolumesCmdExec.java index 2086e4d2df..98d073ff58 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/ListVolumesCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/ListVolumesCmdExec.java @@ -9,6 +9,7 @@ import com.github.dockerjava.api.command.ListVolumesCmd; import com.github.dockerjava.api.command.ListVolumesResponse; import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.core.util.FiltersEncoder; import com.github.dockerjava.netty.MediaType; import com.github.dockerjava.netty.WebTarget; @@ -25,8 +26,8 @@ public ListVolumesCmdExec(WebTarget baseResource, DockerClientConfig dockerClien protected ListVolumesResponse execute(ListVolumesCmd command) { WebTarget webTarget = getBaseResource().path("/volumes"); - if (command.getFilters() != null) - webTarget = webTarget.queryParam("filters", urlPathSegmentEscaper().escape(command.getFilters())); + if (command.getFilters() != null && !command.getFilters().isEmpty()) + webTarget = webTarget.queryParam("filters", urlPathSegmentEscaper().escape(FiltersEncoder.jsonEncode(command.getFilters()))); LOGGER.trace("GET: {}", webTarget); diff --git a/src/test/java/com/github/dockerjava/api/model/FiltersTest.java b/src/test/java/com/github/dockerjava/api/model/FiltersTest.java deleted file mode 100644 index 8016ec49f6..0000000000 --- a/src/test/java/com/github/dockerjava/api/model/FiltersTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.github.dockerjava.api.model; - -import com.google.common.collect.Maps; -import org.testng.annotations.Test; - -import java.util.Map; - -import static org.testng.Assert.*; - -/** - * @author Vincent Latombe - */ -public class FiltersTest { - - @Test - public void newFiltersShouldBeEquals() { - assertEquals(new Filters(), new Filters()); - } - - @Test - public void newFiltersShouldHaveEqualHashcode() { - assertEquals(new Filters().hashCode(), new Filters().hashCode()); - } - - @Test - public void filtersWithEqualContentShouldBeEquals() { - assertEquals(new Filters().withContainers("foo"), new Filters().withContainers("foo")); - assertEquals(new Filters().withLabels("alpha=val"), new Filters().withLabels("alpha=val")); - } - - @Test - public void filtersWithEqualContentShouldHaveEqualHashcode() { - assertEquals(new Filters().withContainers("foo").hashCode(), new Filters().withContainers("foo").hashCode()); - assertEquals(new Filters().withLabels("alpha=val").hashCode(), new Filters().withLabels("alpha=val").hashCode()); - } - - @Test - public void withLabelsMapShouldBeEqualsToVarargs() { - Map map = Maps.newHashMap(); - map.put("alpha", "val"); - assertEquals(new Filters().withLabels("alpha=val"), new Filters().withLabels(map)); - - map = Maps.newHashMap(); - map.put("alpha", "val"); - map.put("beta", "val1"); - assertEquals(new Filters().withLabels("alpha=val", "beta=val1"), new Filters().withLabels(map)); - } - - @Test - public void filtersWithDifferentContentShouldntBeEquals() { - assertNotEquals(new Filters().withContainers("foo"), new Filters().withContainers("bar")); - } - - @Test - public void filtersWithDifferentContentShouldntHaveEqualHashcode() { - assertNotEquals(new Filters().withContainers("foo").hashCode(), new Filters().withContainers("bar").hashCode()); - } -} diff --git a/src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java index ead5291070..939f95087b 100644 --- a/src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java @@ -15,7 +15,6 @@ import com.github.dockerjava.api.command.CreateContainerResponse; import com.github.dockerjava.api.model.Event; -import com.github.dockerjava.api.model.EventFilters; import com.github.dockerjava.client.AbstractDockerClientTest; @Test(groups = "integration") @@ -112,7 +111,7 @@ public void testEventStreamingWithFilter() throws Exception { TimeUnit.SECONDS.sleep(1); CountDownLatch countDownLatch = new CountDownLatch(1); - EventsTestCallback eventCallback = dockerClient.eventsCmd().withFilters(new EventFilters().withEvent("start")) + EventsTestCallback eventCallback = dockerClient.eventsCmd().withEventFilter("start") .exec(new EventsTestCallback(countDownLatch)); generateEvents(); diff --git a/src/test/java/com/github/dockerjava/core/command/ListContainersCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ListContainersCmdImplTest.java index e41b7736fd..529c2f89b9 100644 --- a/src/test/java/com/github/dockerjava/core/command/ListContainersCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/ListContainersCmdImplTest.java @@ -26,7 +26,6 @@ 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.api.model.Filters; import com.github.dockerjava.client.AbstractDockerClientTest; import com.google.common.collect.ImmutableMap; @@ -152,14 +151,14 @@ public void testListContainersWithLabelsFilter() throws Exception { // list with filter by label dockerClient.createContainerCmd(testImage).withCmd("echo").withLabels(labels).exec(); filteredContainers = dockerClient.listContainersCmd().withShowAll(true) - .withFilters(new Filters().withLabels(labels)).exec(); + .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) - .withFilters(new Filters().withLabels("test")).exec(); + .withLabelFilter("test").exec(); assertThat(filteredContainers.size(), is(equalTo(1))); container3 = filteredContainers.get(0); assertThat(container3.getCommand(), not(isEmptyString())); diff --git a/src/test/java/com/github/dockerjava/core/command/ListImagesCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ListImagesCmdImplTest.java index 6f1ae7a68e..1b811867a5 100644 --- a/src/test/java/com/github/dockerjava/core/command/ListImagesCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/ListImagesCmdImplTest.java @@ -65,9 +65,9 @@ public void listImages() throws DockerException { } @Test(groups = "ignoreInCircleCi") - public void listDanglingImages() throws DockerException { + public void listImagesWithDanglingFilter() throws DockerException { String imageId = createDanglingImage(); - List images = dockerClient.listImagesCmd().withFilters("{\"dangling\":[\"true\"]}").withShowAll(true) + List images = dockerClient.listImagesCmd().withDanglingFilter(true).withShowAll(true) .exec(); assertThat(images, notNullValue()); LOG.info("Images List: {}", images); @@ -86,7 +86,7 @@ private boolean isImageInFilteredList(List images, String expectedImageId } private String createDanglingImage() { - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "5").exec(); + 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(); @@ -95,7 +95,6 @@ private String createDanglingImage() { String imageId = dockerClient.commitCmd(container.getId()).exec(); dockerClient.stopContainerCmd(container.getId()).exec(); - dockerClient.killContainerCmd(container.getId()).exec(); dockerClient.removeContainerCmd(container.getId()).exec(); return imageId; } diff --git a/src/test/java/com/github/dockerjava/core/util/FiltersBuilderTest.java b/src/test/java/com/github/dockerjava/core/util/FiltersBuilderTest.java new file mode 100644 index 0000000000..125fd0785a --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/util/FiltersBuilderTest.java @@ -0,0 +1,61 @@ +package com.github.dockerjava.core.util; + +import com.github.dockerjava.core.util. +FiltersBuilder; +import com.google.common.collect.Maps; + +import org.testng.annotations.Test; + +import java.util.Map; + +import static org.testng.Assert.*; + +/** + * @author Vincent Latombe + */ +public class FiltersBuilderTest { + + @Test + public void newFiltersShouldBeEquals() { + assertEquals(new FiltersBuilder(), new FiltersBuilder()); + } + + @Test + public void newFiltersShouldHaveEqualHashcode() { + assertEquals(new FiltersBuilder().hashCode(), new FiltersBuilder().hashCode()); + } + + @Test + public void filtersWithEqualContentShouldBeEquals() { + assertEquals(new FiltersBuilder().withContainers("foo"), new FiltersBuilder().withContainers("foo")); + assertEquals(new FiltersBuilder().withLabels("alpha=val"), new FiltersBuilder().withLabels("alpha=val")); + } + + @Test + public void filtersWithEqualContentShouldHaveEqualHashcode() { + assertEquals(new FiltersBuilder().withContainers("foo").hashCode(), new FiltersBuilder().withContainers("foo").hashCode()); + assertEquals(new FiltersBuilder().withLabels("alpha=val").hashCode(), new FiltersBuilder().withLabels("alpha=val").hashCode()); + } + + @Test + public void withLabelsMapShouldBeEqualsToVarargs() { + Map map = Maps.newHashMap(); + map.put("alpha", "val"); + assertEquals(new FiltersBuilder().withLabels("alpha=val"), new FiltersBuilder().withLabels(map)); + + map = Maps.newHashMap(); + map.put("alpha", "val"); + map.put("beta", "val1"); + assertEquals(new FiltersBuilder().withLabels("alpha=val", "beta=val1"), new FiltersBuilder().withLabels(map)); + } + + @Test + public void filtersWithDifferentContentShouldntBeEquals() { + assertNotEquals(new FiltersBuilder().withContainers("foo"), new FiltersBuilder().withContainers("bar")); + } + + @Test + public void filtersWithDifferentContentShouldntHaveEqualHashcode() { + assertNotEquals(new FiltersBuilder().withContainers("foo").hashCode(), new FiltersBuilder().withContainers("bar").hashCode()); + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/EventsCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/EventsCmdExecTest.java index 06119b2035..a634e2562a 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/EventsCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/EventsCmdExecTest.java @@ -15,7 +15,6 @@ import com.github.dockerjava.api.command.CreateContainerResponse; import com.github.dockerjava.api.model.Event; -import com.github.dockerjava.api.model.EventFilters; import com.github.dockerjava.core.command.EventsResultCallback; import com.github.dockerjava.core.command.PullImageResultCallback; import com.github.dockerjava.netty.AbstractNettyDockerClientTest; @@ -114,7 +113,7 @@ public void testEventStreamingWithFilter() throws Exception { TimeUnit.SECONDS.sleep(1); CountDownLatch countDownLatch = new CountDownLatch(1); - EventsTestCallback eventCallback = dockerClient.eventsCmd().withFilters(new EventFilters().withEvent("start")) + EventsTestCallback eventCallback = dockerClient.eventsCmd().withEventFilter("start") .exec(new EventsTestCallback(countDownLatch)); generateEvents(); diff --git a/src/test/java/com/github/dockerjava/netty/exec/ListContainersCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ListContainersCmdExecTest.java index c36bead2e4..673784281e 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/ListContainersCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/ListContainersCmdExecTest.java @@ -26,8 +26,8 @@ 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.api.model.Filters; 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; @@ -153,14 +153,14 @@ public void testListContainersWithLabelsFilter() throws Exception { // list with filter by label dockerClient.createContainerCmd(testImage).withCmd("echo").withLabels(labels).exec(); filteredContainers = dockerClient.listContainersCmd().withShowAll(true) - .withFilters(new Filters().withLabels(labels)).exec(); + .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) - .withFilters(new Filters().withLabels("test")).exec(); + .withLabelFilter("test").exec(); assertThat(filteredContainers.size(), is(equalTo(1))); container3 = filteredContainers.get(0); assertThat(container3.getCommand(), not(isEmptyString())); diff --git a/src/test/java/com/github/dockerjava/netty/exec/ListImagesCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ListImagesCmdExecTest.java index f6348c7d98..c83fa7ef9a 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/ListImagesCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/ListImagesCmdExecTest.java @@ -65,10 +65,9 @@ public void listImages() throws DockerException { } @Test(groups = "ignoreInCircleCi") - public void listDanglingImages() throws DockerException { + public void listImagesWithDanglingFilter() throws DockerException { String imageId = createDanglingImage(); - List images = dockerClient.listImagesCmd().withFilters("{\"dangling\":[\"true\"]}").withShowAll(true) - .exec(); + List images = dockerClient.listImagesCmd().withDanglingFilter(true).withShowAll(true).exec(); assertThat(images, notNullValue()); LOG.info("Images List: {}", images); assertThat(images.size(), is(greaterThan(0))); @@ -86,7 +85,7 @@ private boolean isImageInFilteredList(List images, String expectedImageId } private String createDanglingImage() { - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "5").exec(); + 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(); @@ -95,7 +94,6 @@ private String createDanglingImage() { String imageId = dockerClient.commitCmd(container.getId()).exec(); dockerClient.stopContainerCmd(container.getId()).exec(); - dockerClient.killContainerCmd(container.getId()).exec(); dockerClient.removeContainerCmd(container.getId()).exec(); return imageId; } From 6e2a702911b11b1224c1ac907da2260a65617736 Mon Sep 17 00:00:00 2001 From: marcuslinke Date: Mon, 18 Jan 2016 22:00:07 +0100 Subject: [PATCH 008/912] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6d7b55509..56914c46b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ Notes * The upcoming release will contain multiple API breaking changes therefore the major version switch. It will support a subset of v.1.21 of the docker remote API. It also includes an experimental netty based implementation of `DockerCmdExecFactory` that probably will replace the current jersey/httpclient based one in a later release. All changes +* [#426] (https://github.com/docker-java/docker-java/pull/426) Refactored filters API * [#425] (https://github.com/docker-java/docker-java/pull/425) Implement Network API * [#410] (https://github.com/docker-java/docker-java/pull/410) Support for build-args of docker build * [#408] (https://github.com/docker-java/docker-java/pull/408) Support for volume API From 1f943a3df92eb87e24f0dd0ffdc2c5898ffb6f8d Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Wed, 20 Jan 2016 23:34:54 +0100 Subject: [PATCH 009/912] Enable all tests again --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 308432bd07..c6a93bc7ad 100644 --- a/pom.xml +++ b/pom.xml @@ -49,7 +49,7 @@ 1.7 2.11 - 2.6.4 + 2.1.2 4.3.1 1.5 1.8 @@ -391,7 +391,7 @@ integration - ignoreInCircleCi + **/*Test.java From 6b2253571fae133e7c923dd3b4ec0d9c4ed66abf Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Wed, 20 Jan 2016 23:37:18 +0100 Subject: [PATCH 010/912] Catch NotFoundException --- .../com/github/dockerjava/client/AbstractDockerClientTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java b/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java index 37e2916e60..074c19ad9e 100644 --- a/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java +++ b/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java @@ -24,6 +24,7 @@ import com.github.dockerjava.api.command.InspectContainerResponse; import com.github.dockerjava.api.command.InspectContainerResponse.Mount; import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; import com.github.dockerjava.api.model.Frame; import com.github.dockerjava.api.model.Network; import com.github.dockerjava.api.model.Volume; @@ -57,7 +58,7 @@ public void beforeTest() throws Exception { try { dockerClient.inspectImageCmd("busybox").exec(); - } catch (Exception e) { + } catch (NotFoundException e) { LOG.info("Pulling image 'busybox'"); // need to block until image is pulled completely dockerClient.pullImageCmd("busybox").withTag("latest").exec(new PullImageResultCallback()).awaitSuccess(); From 9d2b823b5925aff5885dd2c3242a86564f154c04 Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Wed, 20 Jan 2016 23:39:41 +0100 Subject: [PATCH 011/912] Fix removeImage test: Don't kill already stopped container --- .../github/dockerjava/core/command/RemoveImageCmdImplTest.java | 1 - .../com/github/dockerjava/netty/exec/RemoveImageCmdExecTest.java | 1 - 2 files changed, 2 deletions(-) diff --git a/src/test/java/com/github/dockerjava/core/command/RemoveImageCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/RemoveImageCmdImplTest.java index a4d670e31a..90be81c7f9 100644 --- a/src/test/java/com/github/dockerjava/core/command/RemoveImageCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/RemoveImageCmdImplTest.java @@ -63,7 +63,6 @@ public void removeImage() throws DockerException, InterruptedException { String imageId = dockerClient.commitCmd(container.getId()).exec(); dockerClient.stopContainerCmd(container.getId()).exec(); - dockerClient.killContainerCmd(container.getId()).exec(); dockerClient.removeContainerCmd(container.getId()).exec(); LOG.info("Removing image: {}", imageId); diff --git a/src/test/java/com/github/dockerjava/netty/exec/RemoveImageCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/RemoveImageCmdExecTest.java index 62ff486ea2..e2f69ac1e9 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/RemoveImageCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/RemoveImageCmdExecTest.java @@ -63,7 +63,6 @@ public void removeImage() throws DockerException, InterruptedException { String imageId = dockerClient.commitCmd(container.getId()).exec(); dockerClient.stopContainerCmd(container.getId()).exec(); - dockerClient.killContainerCmd(container.getId()).exec(); dockerClient.removeContainerCmd(container.getId()).exec(); LOG.info("Removing image: {}", imageId); From 70e9680f3b1df10c1f14e0119bf03621cb279d3f Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Wed, 20 Jan 2016 23:41:20 +0100 Subject: [PATCH 012/912] Fix inspectContainer test --- .../dockerjava/netty/exec/InspectContainerCmdExecTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java index f63dda273c..a07e23143c 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java @@ -100,6 +100,6 @@ public void inspectContainerNetworkSettings() throws DockerException { InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); - assertNotNull(inspectContainerResponse.getNetworkSettings().getNetworks().get("bridge")); + assertFalse(inspectContainerResponse.getNetworkSettings().getHairpinMode()); } } From c931fb7558ab9e0a512fa9bdd54a603c3649bb1e Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Wed, 20 Jan 2016 23:42:46 +0100 Subject: [PATCH 013/912] Fix issue #424 --- .../core/command/ExecStartCmdImpl.java | 12 ++++- .../core/command/ExecStartResultCallback.java | 2 + .../dockerjava/jaxrs/ExecStartCmdExec.java | 3 +- .../handler/FramedResponseStreamHandler.java | 12 +++-- .../core/command/ExecStartCmdImplTest.java | 2 +- .../core/command/InspectExecCmdImplTest.java | 42 ++++++++-------- .../netty/exec/ExecStartCmdExecTest.java | 7 ++- .../netty/exec/InspectExecCmdExecTest.java | 50 +++++++++---------- 8 files changed, 72 insertions(+), 58 deletions(-) diff --git a/src/main/java/com/github/dockerjava/core/command/ExecStartCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/ExecStartCmdImpl.java index f774607307..836c9158e9 100644 --- a/src/main/java/com/github/dockerjava/core/command/ExecStartCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/ExecStartCmdImpl.java @@ -5,17 +5,27 @@ import java.io.InputStream; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; import com.github.dockerjava.api.async.ResultCallback; import com.github.dockerjava.api.command.ExecStartCmd; import com.github.dockerjava.api.exception.NotFoundException; import com.github.dockerjava.api.model.Frame; +@JsonInclude(Include.NON_NULL) public class ExecStartCmdImpl extends AbstrAsyncDockerCmd implements ExecStartCmd { + @JsonIgnore private String execId; - private Boolean detach, tty; + @JsonProperty("Detach") + private Boolean detach; + + @JsonProperty("Tty") + private Boolean tty; + @JsonIgnore private InputStream stdin; public ExecStartCmdImpl(ExecStartCmd.Exec exec, String execId) { diff --git a/src/main/java/com/github/dockerjava/core/command/ExecStartResultCallback.java b/src/main/java/com/github/dockerjava/core/command/ExecStartResultCallback.java index ebf1d08a17..5f4c337298 100644 --- a/src/main/java/com/github/dockerjava/core/command/ExecStartResultCallback.java +++ b/src/main/java/com/github/dockerjava/core/command/ExecStartResultCallback.java @@ -35,7 +35,9 @@ public void onNext(Frame frame) { try { switch (frame.getStreamType()) { case STDOUT: + case RAW: if (stdout != null) { + System.err.println(new String(frame.getPayload())); stdout.write(frame.getPayload()); stdout.flush(); } diff --git a/src/main/java/com/github/dockerjava/jaxrs/ExecStartCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/ExecStartCmdExec.java index f737f6e282..dc7cf6598c 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/ExecStartCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/ExecStartCmdExec.java @@ -1,5 +1,6 @@ package com.github.dockerjava.jaxrs; +import static javax.ws.rs.client.Entity.entity; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; @@ -30,6 +31,6 @@ protected AbstractCallbackNotifier callbackNotifier(ExecStartCmd command, LOGGER.trace("POST: {}", webTarget); return new POSTCallbackNotifier(new FrameStreamProcessor(), resultCallback, webTarget.request().accept( - MediaType.APPLICATION_JSON), null); + MediaType.APPLICATION_JSON), entity(command, MediaType.APPLICATION_JSON)); } } diff --git a/src/main/java/com/github/dockerjava/netty/handler/FramedResponseStreamHandler.java b/src/main/java/com/github/dockerjava/netty/handler/FramedResponseStreamHandler.java index 87878f0da5..945833cddf 100644 --- a/src/main/java/com/github/dockerjava/netty/handler/FramedResponseStreamHandler.java +++ b/src/main/java/com/github/dockerjava/netty/handler/FramedResponseStreamHandler.java @@ -1,5 +1,7 @@ package com.github.dockerjava.netty.handler; +import java.util.Arrays; + import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; @@ -74,14 +76,14 @@ private Frame decode() { headerCnt += headerCount; - if (headerCnt < HEADER_SIZE) { - return null; - } - streamType = streamType(header[0]); if (streamType.equals(StreamType.RAW)) { - return new Frame(streamType, header); + return new Frame(streamType, Arrays.copyOf(header, headerCount)); + } + + if (headerCnt < HEADER_SIZE) { + return null; } } diff --git a/src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java index 6d15cf03b5..d7b689a9ea 100644 --- a/src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java @@ -55,7 +55,7 @@ public void execStart() throws Exception { ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) .withAttachStdout(true).withCmd("touch", "/execStartTest.log").exec(); dockerClient.execStartCmd(execCreateCmdResponse.getId()).exec( - new ExecStartResultCallback(System.out, System.err)); + new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); InputStream response = dockerClient.copyArchiveFromContainerCmd(container.getId(), "/execStartTest.log").exec(); Boolean bytesAvailable = response.available() > 0; diff --git a/src/test/java/com/github/dockerjava/core/command/InspectExecCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/InspectExecCmdImplTest.java index 4e87d5abff..51c2e3c29f 100644 --- a/src/test/java/com/github/dockerjava/core/command/InspectExecCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/InspectExecCmdImplTest.java @@ -46,7 +46,7 @@ public void afterMethod(ITestResult result) { } @Test(groups = "ignoreInCircleCi") - public void inspectExec() throws IOException { + public void inspectExec() throws Exception { String containerName = "generated_" + new SecureRandom().nextInt(); CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") @@ -56,34 +56,34 @@ public void inspectExec() throws IOException { dockerClient.startContainerCmd(container.getId()).exec(); - ExecCreateCmdResponse touchFileCmdCreateResponse = dockerClient.execCreateCmd(container.getId()) - .withAttachStdout(true).withAttachStderr(true).withCmd("touch", "/marker").exec(); - LOG.info("Created exec {}", touchFileCmdCreateResponse.toString()); - assertThat(touchFileCmdCreateResponse.getId(), not(isEmptyString())); - ExecCreateCmdResponse checkFileCmdCreateResponse = dockerClient.execCreateCmd(container.getId()) - .withAttachStdout(true).withAttachStderr(true).withCmd("test", "-e", "/marker").exec(); - LOG.info("Created exec {}", checkFileCmdCreateResponse.toString()); - assertThat(checkFileCmdCreateResponse.getId(), not(isEmptyString())); - // Check that file does not exist - dockerClient.execStartCmd(container.getId()) - .withExecId(checkFileCmdCreateResponse.getId()).exec(new ExecStartResultCallback(System.out, System.err)); - - InspectExecResponse first = dockerClient.inspectExecCmd(checkFileCmdCreateResponse.getId()).exec(); - assertThat(first.getExitCode(), is(0)); + 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()).exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); + InspectExecResponse first = dockerClient.inspectExecCmd(checkFileExec1.getId()).exec(); + 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(container.getId()) - .withExecId(touchFileCmdCreateResponse.getId()).exec(new ExecStartResultCallback(System.out, System.err)); - - InspectExecResponse second = dockerClient.inspectExecCmd(touchFileCmdCreateResponse.getId()).exec(); + .withExecId(touchFileExec.getId()).exec(new ExecStartResultCallback(System.out, System.err)); + InspectExecResponse second = dockerClient.inspectExecCmd(touchFileExec.getId()).exec(); 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(container.getId()) - .withExecId(checkFileCmdCreateResponse.getId()).exec(new ExecStartResultCallback(System.out, System.err)); - - InspectExecResponse third = dockerClient.inspectExecCmd(checkFileCmdCreateResponse.getId()).exec(); + .withExecId(checkFileExec2.getId()).exec(new ExecStartResultCallback(System.out, System.err)); + InspectExecResponse third = dockerClient.inspectExecCmd(checkFileExec2.getId()).exec(); assertThat(third.getExitCode(), is(0)); // Get container info and check its roundtrip to ensure the consistency diff --git a/src/test/java/com/github/dockerjava/netty/exec/ExecStartCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ExecStartCmdExecTest.java index b9d81db9db..1e5af11dad 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/ExecStartCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/ExecStartCmdExecTest.java @@ -61,7 +61,10 @@ public void execStart() throws Exception { dockerClient.execStartCmd(execCreateCmdResponse.getId()).exec( new ExecStartResultCallback(System.out, System.err)); - InputStream response = dockerClient.copyFileFromContainerCmd(container.getId(), "/execStartTest.log").exec(); + LOG.info("Wait for 5 seconds"); + Thread.sleep(5000); + + InputStream response = dockerClient.copyArchiveFromContainerCmd(container.getId(), "/execStartTest.log").exec(); Boolean bytesAvailable = response.available() > 0; assertTrue(bytesAvailable, "The file was not copied from the container."); @@ -88,7 +91,7 @@ public void execStartAttached() throws Exception { dockerClient.execStartCmd(execCreateCmdResponse.getId()).withDetach(false).withTty(true) .exec(new ExecStartResultCallback(System.out, System.err)); - InputStream response = dockerClient.copyFileFromContainerCmd(container.getId(), "/execStartTest.log").exec(); + InputStream response = dockerClient.copyArchiveFromContainerCmd(container.getId(), "/execStartTest.log").exec(); Boolean bytesAvailable = response.available() > 0; assertTrue(bytesAvailable, "The file was not copied from the container."); diff --git a/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java index efeba6e990..1849b2fe3e 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java @@ -48,48 +48,44 @@ public void afterMethod(ITestResult result) { } @Test(groups = "ignoreInCircleCi") - public void inspectExecTest() throws IOException { + public void inspectExec() throws Exception { String containerName = "generated_" + new SecureRandom().nextInt(); - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("top") + 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 touchFileCmdCreateResponse = dockerClient.execCreateCmd(container.getId()) - .withAttachStdout(true).withAttachStderr(true).withCmd("touch", "/marker").withTty(true).exec(); - LOG.info("Created exec {}", touchFileCmdCreateResponse.toString()); - assertThat(touchFileCmdCreateResponse.getId(), not(isEmptyString())); - ExecCreateCmdResponse checkFileCmdCreateResponse = dockerClient.execCreateCmd(container.getId()) - .withAttachStdout(true).withAttachStderr(true).withCmd("test", "-e", "/marker").exec(); - LOG.info("Created exec {}", checkFileCmdCreateResponse.toString()); - assertThat(checkFileCmdCreateResponse.getId(), not(isEmptyString())); - // Check that file does not exist - dockerClient.execStartCmd(container.getId()).withDetach(false).withTty(true) - .withExecId(checkFileCmdCreateResponse.getId()) - .exec(new ExecStartResultCallback(System.out, System.err)); - - InspectExecResponse first = dockerClient.inspectExecCmd(checkFileCmdCreateResponse.getId()).exec(); - assertEquals(first.isRunning(), new Boolean(false)); + ExecCreateCmdResponse checkFileExec1 = dockerClient.execCreateCmd(container.getId()) + .withAttachStdout(false).withAttachStderr(false).withCmd("test", "-e", "/marker").exec(); + LOG.info("Created exec {}", checkFileExec1.toString()); + assertThat(checkFileExec1.getId(), not(isEmptyString())); + dockerClient.execStartCmd(checkFileExec1.getId()).exec(new ExecStartResultCallback(System.out, System.err)); + InspectExecResponse first = dockerClient.inspectExecCmd(checkFileExec1.getId()).exec(); assertThat(first.getExitCode(), is(1)); // Create the file - dockerClient.execStartCmd(container.getId()).withDetach(false).withTty(true) - .withExecId(touchFileCmdCreateResponse.getId()) - .exec(new ExecStartResultCallback(System.out, System.err)); - - InspectExecResponse second = dockerClient.inspectExecCmd(touchFileCmdCreateResponse.getId()).exec(); - assertEquals(first.isRunning(), new Boolean(false)); + 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(container.getId()) + .withExecId(touchFileExec.getId()).exec(new ExecStartResultCallback(System.out, System.err)); + InspectExecResponse second = dockerClient.inspectExecCmd(touchFileExec.getId()).exec(); assertThat(second.getExitCode(), is(0)); - // Check that file does exist now - dockerClient.execStartCmd(container.getId()).withExecId(checkFileCmdCreateResponse.getId()) - .exec(new ExecStartResultCallback(System.out, System.err)); - InspectExecResponse third = dockerClient.inspectExecCmd(checkFileCmdCreateResponse.getId()).exec(); + // 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(container.getId()) + .withExecId(checkFileExec2.getId()).exec(new ExecStartResultCallback(System.out, System.err)); + InspectExecResponse third = dockerClient.inspectExecCmd(checkFileExec2.getId()).exec(); assertThat(third.getExitCode(), is(0)); // Get container info and check its roundtrip to ensure the consistency From af2a37a095d618f622b4275ef7eec35f7b8df789 Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Wed, 20 Jan 2016 23:41:20 +0100 Subject: [PATCH 014/912] Remove debug println --- .../github/dockerjava/core/command/ExecStartResultCallback.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/github/dockerjava/core/command/ExecStartResultCallback.java b/src/main/java/com/github/dockerjava/core/command/ExecStartResultCallback.java index 5f4c337298..23f549c492 100644 --- a/src/main/java/com/github/dockerjava/core/command/ExecStartResultCallback.java +++ b/src/main/java/com/github/dockerjava/core/command/ExecStartResultCallback.java @@ -37,7 +37,6 @@ public void onNext(Frame frame) { case STDOUT: case RAW: if (stdout != null) { - System.err.println(new String(frame.getPayload())); stdout.write(frame.getPayload()); stdout.flush(); } From bb6bbd63d42007dce69295d668a9bf2e25522ff4 Mon Sep 17 00:00:00 2001 From: marcuslinke Date: Thu, 21 Jan 2016 22:34:01 +0100 Subject: [PATCH 015/912] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56914c46b6..2f0141068c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ Notes * The upcoming release will contain multiple API breaking changes therefore the major version switch. It will support a subset of v.1.21 of the docker remote API. It also includes an experimental netty based implementation of `DockerCmdExecFactory` that probably will replace the current jersey/httpclient based one in a later release. All changes +* [#430] (https://github.com/docker-java/docker-java/pull/430) Fix ExecStartCmd failure * [#426] (https://github.com/docker-java/docker-java/pull/426) Refactored filters API * [#425] (https://github.com/docker-java/docker-java/pull/425) Implement Network API * [#410] (https://github.com/docker-java/docker-java/pull/410) Support for build-args of docker build From 9b3ed93add255b7da3e123f5a8710fa54c9ca651 Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Fri, 22 Jan 2016 19:30:35 +0100 Subject: [PATCH 016/912] Revert downgrade of jackson --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c6a93bc7ad..43a73c8898 100644 --- a/pom.xml +++ b/pom.xml @@ -49,7 +49,7 @@ 1.7 2.11 - 2.1.2 + 2.6.4 4.3.1 1.5 1.8 From 822cb327d21370a059ef7cc1aa50341d273aa0df Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Sat, 23 Jan 2016 19:24:36 +0100 Subject: [PATCH 017/912] Fix issue #434 --- .../dockerjava/api/async/ResultCallback.java | 4 +-- .../core/async/ResultCallbackTemplate.java | 24 +++++++++++++ .../core/command/ExecStartResultCallback.java | 2 +- .../dockerjava/netty/InvocationBuilder.java | 36 ++++++------------- .../netty/handler/HttpResponseHandler.java | 15 ++++++-- .../core/command/ExecStartCmdImplTest.java | 2 +- .../core/command/InspectExecCmdImplTest.java | 31 ++++++++-------- .../netty/exec/ExecStartCmdExecTest.java | 13 +++---- .../netty/exec/InspectExecCmdExecTest.java | 31 ++++++++-------- 9 files changed, 90 insertions(+), 68 deletions(-) diff --git a/src/main/java/com/github/dockerjava/api/async/ResultCallback.java b/src/main/java/com/github/dockerjava/api/async/ResultCallback.java index 2016e19809..0bb052a0b8 100644 --- a/src/main/java/com/github/dockerjava/api/async/ResultCallback.java +++ b/src/main/java/com/github/dockerjava/api/async/ResultCallback.java @@ -7,8 +7,8 @@ */ public interface ResultCallback extends Closeable { /** - * Called when the async processing starts. The passed {@link Closeable} can be used to close/interrupt the - * processing + * Called when the async processing starts respectively when the response arrives from the server. The passed + * {@link Closeable} can be used to close/interrupt the processing. */ void onStart(Closeable closeable); diff --git a/src/main/java/com/github/dockerjava/core/async/ResultCallbackTemplate.java b/src/main/java/com/github/dockerjava/core/async/ResultCallbackTemplate.java index 3a62ae46a2..5e63f2b5f7 100644 --- a/src/main/java/com/github/dockerjava/core/async/ResultCallbackTemplate.java +++ b/src/main/java/com/github/dockerjava/core/async/ResultCallbackTemplate.java @@ -27,6 +27,8 @@ public abstract class ResultCallbackTemplate void get(TypeReference typeReference, ResultCallback resultCall Channel channel = getChannel(); - initCallback(channel, resultCallback); - JsonResponseCallbackHandler jsonResponseHandler = new JsonResponseCallbackHandler(typeReference, resultCallback); @@ -215,7 +214,7 @@ public InputStream post(final Object entity) { return callback.awaitResult(); } - public void post(final Object entity, final InputStream stdin, ResultCallback resultCallback) { + public void post(final Object entity, final InputStream stdin, final ResultCallback resultCallback) { HttpRequestProvider requestProvider = httpPostRequestProvider(entity); @@ -223,6 +222,14 @@ public void post(final Object entity, final InputStream stdin, ResultCallback>() { + @Override + public void operationComplete(Future future) throws Exception { + resultCallback.onComplete(); + } + }); + HttpResponseHandler responseHandler = new HttpResponseHandler(requestProvider, resultCallback); HttpConnectionHijackHandler hijackHandler = new HttpConnectionHijackHandler(responseHandler); @@ -284,8 +291,6 @@ public void post(final Object entity, TypeReference typeReference, final Channel channel = getChannel(); - initCallback(channel, resultCallback); - JsonResponseCallbackHandler jsonResponseHandler = new JsonResponseCallbackHandler(typeReference, resultCallback); @@ -300,21 +305,6 @@ public void post(final Object entity, TypeReference typeReference, final return; } - private void initCallback(final Channel channel, final ResultCallback resultCallback) { - Closeable closeable = new Closeable() { - @Override - public void close() throws IOException { - try { - channel.close().sync(); - } catch (InterruptedException e) { - resultCallback.onError(e); - } - } - }; - - resultCallback.onStart(closeable); - } - private HttpRequest prepareDeleteRequest(String uri) { FullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.DELETE, uri); @@ -406,8 +396,6 @@ public void post(TypeReference typeReference, ResultCallback resultCal Channel channel = getChannel(); - initCallback(channel, resultCallback); - JsonResponseCallbackHandler jsonResponseHandler = new JsonResponseCallbackHandler(typeReference, resultCallback); @@ -442,8 +430,6 @@ public InputStream get() { ResponseCallback resultCallback = new ResponseCallback(); - initCallback(channel, resultCallback); - HttpResponseHandler responseHandler = new HttpResponseHandler(requestProvider, resultCallback); HttpResponseStreamHandler streamHandler = new HttpResponseStreamHandler(resultCallback); diff --git a/src/main/java/com/github/dockerjava/netty/handler/HttpResponseHandler.java b/src/main/java/com/github/dockerjava/netty/handler/HttpResponseHandler.java index 2f11ccf380..cbe8686d9b 100644 --- a/src/main/java/com/github/dockerjava/netty/handler/HttpResponseHandler.java +++ b/src/main/java/com/github/dockerjava/netty/handler/HttpResponseHandler.java @@ -11,6 +11,7 @@ import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.codec.http.LastHttpContent; +import java.io.Closeable; import java.nio.charset.Charset; import com.github.dockerjava.api.async.ResultCallback; @@ -24,8 +25,8 @@ import com.github.dockerjava.api.exception.UnauthorizedException; /** - * Handler that is responsible to handle an incoming {@link HttpResponse}. It evaluates the status code and - * triggers the appropriate lifecycle methods at the passed {@link ResultCallback}. + * Handler that is responsible to handle an incoming {@link HttpResponse}. It evaluates the status code and triggers the + * appropriate lifecycle methods at the passed {@link ResultCallback}. * * @author Marcus Linke */ @@ -46,10 +47,18 @@ public HttpResponseHandler(HttpRequestProvider requestProvider, ResultCallback 0; diff --git a/src/test/java/com/github/dockerjava/core/command/InspectExecCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/InspectExecCmdImplTest.java index 51c2e3c29f..f40ee7e693 100644 --- a/src/test/java/com/github/dockerjava/core/command/InspectExecCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/InspectExecCmdImplTest.java @@ -57,33 +57,36 @@ public void inspectExec() throws Exception { 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(); + 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()).exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); + 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(); + 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(container.getId()) - .withExecId(touchFileExec.getId()).exec(new ExecStartResultCallback(System.out, System.err)); + 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(); + 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(container.getId()) - .withExecId(checkFileExec2.getId()).exec(new ExecStartResultCallback(System.out, System.err)); + 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 @@ -103,8 +106,8 @@ public void inspectExecNetworkSettings() throws IOException { dockerClient.startContainerCmd(container.getId()).exec(); - ExecCreateCmdResponse exec = dockerClient.execCreateCmd(container.getId()) - .withAttachStdout(true).withAttachStderr(true).withCmd("/bin/bash").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())); diff --git a/src/test/java/com/github/dockerjava/netty/exec/ExecStartCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ExecStartCmdExecTest.java index 1e5af11dad..e4ceedac77 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/ExecStartCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/ExecStartCmdExecTest.java @@ -58,11 +58,8 @@ public void execStart() throws Exception { ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) .withAttachStdout(true).withCmd("touch", "/execStartTest.log").exec(); - dockerClient.execStartCmd(execCreateCmdResponse.getId()).exec( - new ExecStartResultCallback(System.out, System.err)); - - LOG.info("Wait for 5 seconds"); - Thread.sleep(5000); + dockerClient.execStartCmd(execCreateCmdResponse.getId()).withDetach(false) + .exec(new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); InputStream response = dockerClient.copyArchiveFromContainerCmd(container.getId(), "/execStartTest.log").exec(); @@ -88,8 +85,8 @@ public void execStartAttached() throws Exception { 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)); + 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; @@ -141,7 +138,7 @@ public void execStartNotAttachedStdin() throws Exception { ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()) .withAttachStdout(true).withAttachStdin(false).withCmd("/bin/sh").exec(); - dockerClient.execStartCmd(execCreateCmdResponse.getId()).withDetach(false).withTty(true).withStdIn(stdin) + dockerClient.execStartCmd(execCreateCmdResponse.getId()).withDetach(false).withStdIn(stdin) .exec(new ExecStartResultCallback(stdout, System.err)).awaitCompletion(5, TimeUnit.SECONDS); assertEquals(stdout.toString(), ""); diff --git a/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java index 1849b2fe3e..ecf5ed5684 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java @@ -59,33 +59,36 @@ public void inspectExec() throws Exception { dockerClient.startContainerCmd(container.getId()).exec(); // Check that file does not exist - ExecCreateCmdResponse checkFileExec1 = dockerClient.execCreateCmd(container.getId()) - .withAttachStdout(false).withAttachStderr(false).withCmd("test", "-e", "/marker").exec(); + 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()).exec(new ExecStartResultCallback(System.out, System.err)); + 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(); + 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(container.getId()) - .withExecId(touchFileExec.getId()).exec(new ExecStartResultCallback(System.out, System.err)); + 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(); + 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(container.getId()) - .withExecId(checkFileExec2.getId()).exec(new ExecStartResultCallback(System.out, System.err)); + 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 @@ -105,8 +108,8 @@ public void inspectExecNetworkSettings() throws IOException { dockerClient.startContainerCmd(container.getId()).exec(); - ExecCreateCmdResponse exec = dockerClient.execCreateCmd(container.getId()) - .withAttachStdout(true).withAttachStderr(true).withCmd("/bin/bash").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())); From 0115561927dd420ba6e6109132a3b56e8e48edbe Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Sun, 24 Jan 2016 19:03:41 +0100 Subject: [PATCH 018/912] Fix tests --- .../dockerjava/core/command/LogContainerCmdImplTest.java | 3 ++- .../github/dockerjava/netty/exec/LogContainerCmdExecTest.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/github/dockerjava/core/command/LogContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/LogContainerCmdImplTest.java index 0a9a397183..817179eb24 100644 --- a/src/test/java/com/github/dockerjava/core/command/LogContainerCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/LogContainerCmdImplTest.java @@ -4,6 +4,7 @@ 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; @@ -164,7 +165,7 @@ public void asyncLogContainerWithSince() throws Exception { loggingCallback.awaitCompletion(); - assertFalse(loggingCallback.toString().contains(snippet)); + assertThat(loggingCallback.toString(), containsString(snippet)); } } diff --git a/src/test/java/com/github/dockerjava/netty/exec/LogContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/LogContainerCmdExecTest.java index b3bb6ed582..3109947558 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/LogContainerCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/LogContainerCmdExecTest.java @@ -4,6 +4,7 @@ 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; @@ -165,7 +166,7 @@ public void asyncLogContainerWithSince() throws Exception { loggingCallback.awaitCompletion(); - assertFalse(loggingCallback.toString().contains(snippet)); + assertThat(loggingCallback.toString(), containsString(snippet)); } } From d3c7df8df5b4d9565299445257526a4ade0ae610 Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Mon, 25 Jan 2016 22:24:59 +0100 Subject: [PATCH 019/912] Test binds in inspect container response --- .../core/command/CreateContainerCmdImplTest.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java index e89d098612..ce2771652a 100644 --- a/src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java @@ -140,18 +140,20 @@ public void createContainerWithVolumesFrom() throws DockerException { 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(new Bind("/src/webapp1", volume1), new Bind("/src/webapp2", volume2)).exec(); + .withBinds(bind1, bind2).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(Arrays.asList(inspectContainerResponse1.getHostConfig().getBinds()), containsInAnyOrder(bind1, bind2)); + assertThat(inspectContainerResponse1, mountedVolumes(containsInAnyOrder(volume1, volume2))); // create a second container with volumes from first container From edd90c389b632e4ed01ba12456654a5a81bdfee1 Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Mon, 25 Jan 2016 22:46:26 +0100 Subject: [PATCH 020/912] netty: Test binds in inspect container response --- .../netty/exec/CreateContainerCmdExecTest.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/github/dockerjava/netty/exec/CreateContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/CreateContainerCmdExecTest.java index 0a11c8ce42..9a37ef01af 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/CreateContainerCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/CreateContainerCmdExecTest.java @@ -142,18 +142,20 @@ public void createContainerWithVolumesFrom() throws DockerException { 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(new Bind("/src/webapp1", volume1), new Bind("/src/webapp2", volume2)).exec(); + .withBinds(bind1, bind2).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(Arrays.asList(inspectContainerResponse1.getHostConfig().getBinds()), containsInAnyOrder(bind1, bind2)); + assertThat(inspectContainerResponse1, mountedVolumes(containsInAnyOrder(volume1, volume2))); // create a second container with volumes from first container From f2954e037ef6be098b1ef838480d61421ed34ceb Mon Sep 17 00:00:00 2001 From: Marcus Thiesen Date: Wed, 27 Jan 2016 10:58:00 +0100 Subject: [PATCH 021/912] Make API Version transitions easier IMHO there is no reason to be that strict about the JSON models, because it leads to things like e.g. Issue #437 . Be more lenient with changes in the data. --- .../com/github/dockerjava/api/model/BuildResponseItem.java | 2 +- .../com/github/dockerjava/api/model/PullResponseItem.java | 2 +- .../com/github/dockerjava/api/model/PushResponseItem.java | 2 +- .../java/com/github/dockerjava/api/model/ResponseItem.java | 6 +++--- .../java/com/github/dockerjava/api/model/WaitResponse.java | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/github/dockerjava/api/model/BuildResponseItem.java b/src/main/java/com/github/dockerjava/api/model/BuildResponseItem.java index 2649889102..a53a1df9af 100644 --- a/src/main/java/com/github/dockerjava/api/model/BuildResponseItem.java +++ b/src/main/java/com/github/dockerjava/api/model/BuildResponseItem.java @@ -6,7 +6,7 @@ /** * Represents a build response stream item */ -@JsonIgnoreProperties(ignoreUnknown = false) +@JsonIgnoreProperties(ignoreUnknown = true) public class BuildResponseItem extends ResponseItem { private static final long serialVersionUID = -1252904184236343612L; diff --git a/src/main/java/com/github/dockerjava/api/model/PullResponseItem.java b/src/main/java/com/github/dockerjava/api/model/PullResponseItem.java index 3ab77bee0b..90b3ee3367 100644 --- a/src/main/java/com/github/dockerjava/api/model/PullResponseItem.java +++ b/src/main/java/com/github/dockerjava/api/model/PullResponseItem.java @@ -6,7 +6,7 @@ /** * Represents a pull response stream item */ -@JsonIgnoreProperties(ignoreUnknown = false) +@JsonIgnoreProperties(ignoreUnknown = true) public class PullResponseItem extends ResponseItem { private static final long serialVersionUID = -2575482839766823293L; diff --git a/src/main/java/com/github/dockerjava/api/model/PushResponseItem.java b/src/main/java/com/github/dockerjava/api/model/PushResponseItem.java index 059398d4e5..829fbbbad3 100644 --- a/src/main/java/com/github/dockerjava/api/model/PushResponseItem.java +++ b/src/main/java/com/github/dockerjava/api/model/PushResponseItem.java @@ -5,7 +5,7 @@ /** * Represents a push response stream item */ -@JsonIgnoreProperties(ignoreUnknown = false) +@JsonIgnoreProperties(ignoreUnknown = true) public class PushResponseItem extends ResponseItem { private static final long serialVersionUID = 8256977108011295857L; diff --git a/src/main/java/com/github/dockerjava/api/model/ResponseItem.java b/src/main/java/com/github/dockerjava/api/model/ResponseItem.java index 1bf71fa340..586a49d63d 100644 --- a/src/main/java/com/github/dockerjava/api/model/ResponseItem.java +++ b/src/main/java/com/github/dockerjava/api/model/ResponseItem.java @@ -14,7 +14,7 @@ /** * Represents a pull response stream item */ -@JsonIgnoreProperties(ignoreUnknown = false) +@JsonIgnoreProperties(ignoreUnknown = true) public class ResponseItem implements Serializable { private static final long serialVersionUID = -5187169652557467828L; @@ -105,7 +105,7 @@ public boolean isErrorIndicated() { return getError() != null || getErrorDetail() != null; } - @JsonIgnoreProperties(ignoreUnknown = false) + @JsonIgnoreProperties(ignoreUnknown = true) public static class ProgressDetail implements Serializable { private static final long serialVersionUID = -1954994695645715264L; @@ -139,7 +139,7 @@ public String toString() { } } - @JsonIgnoreProperties(ignoreUnknown = false) + @JsonIgnoreProperties(ignoreUnknown = true) public static class ErrorDetail implements Serializable { private static final long serialVersionUID = -9136704865403084083L; diff --git a/src/main/java/com/github/dockerjava/api/model/WaitResponse.java b/src/main/java/com/github/dockerjava/api/model/WaitResponse.java index ca6d61eb97..a2ab16f6f6 100644 --- a/src/main/java/com/github/dockerjava/api/model/WaitResponse.java +++ b/src/main/java/com/github/dockerjava/api/model/WaitResponse.java @@ -6,7 +6,7 @@ /** * Represents a wait container command response */ -@JsonIgnoreProperties(ignoreUnknown = false) +@JsonIgnoreProperties(ignoreUnknown = true) public class WaitResponse { @JsonProperty("StatusCode") From d0cde8e79f20d6c21b526222e62f709c3f86e55f Mon Sep 17 00:00:00 2001 From: Kanstantsin Shautsou Date: Sun, 31 Jan 2016 16:11:36 +0300 Subject: [PATCH 022/912] Checkstyle: not tabs. --- .../api/command/ExecCreateCmdResponse.java | 4 ++-- .../core/command/ListImagesCmdImpl.java | 4 ++-- .../dockerjava/jaxrs/ListImagesCmdExec.java | 4 ++-- .../github/dockerjava/netty/MediaType.java | 20 +++++++++---------- .../netty/handler/JsonRequestHandler.java | 14 ++++++------- .../checkstyle/checkstyle-config.xml | 8 ++++++++ 6 files changed, 31 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/github/dockerjava/api/command/ExecCreateCmdResponse.java b/src/main/java/com/github/dockerjava/api/command/ExecCreateCmdResponse.java index 08751f3e20..9c13912fce 100644 --- a/src/main/java/com/github/dockerjava/api/command/ExecCreateCmdResponse.java +++ b/src/main/java/com/github/dockerjava/api/command/ExecCreateCmdResponse.java @@ -15,9 +15,9 @@ public class ExecCreateCmdResponse { public String getId() { return id; } - + @Override public String toString() { - return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE); + return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE); } } diff --git a/src/main/java/com/github/dockerjava/core/command/ListImagesCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/ListImagesCmdImpl.java index d726ca7cee..1033b43ecc 100644 --- a/src/main/java/com/github/dockerjava/core/command/ListImagesCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/ListImagesCmdImpl.java @@ -17,9 +17,9 @@ */ public class ListImagesCmdImpl extends AbstrDockerCmd> implements ListImagesCmd { - private String imageNameFilter; + private String imageNameFilter; - private Boolean showAll = false; + private Boolean showAll = false; private FiltersBuilder filters = new FiltersBuilder(); diff --git a/src/main/java/com/github/dockerjava/jaxrs/ListImagesCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/ListImagesCmdExec.java index 1e7acfc333..3d63201514 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/ListImagesCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/ListImagesCmdExec.java @@ -31,11 +31,11 @@ protected List execute(ListImagesCmd command) { webTarget = booleanQueryParam(webTarget, "all", command.hasShowAllEnabled()); if (command.getFilters() != null && !command.getFilters().isEmpty()) { - webTarget = webTarget.queryParam("filters", urlPathSegmentEscaper().escape(FiltersEncoder.jsonEncode(command.getFilters()))); + webTarget = webTarget.queryParam("filters", urlPathSegmentEscaper().escape(FiltersEncoder.jsonEncode(command.getFilters()))); } if (command.getImageNameFilter() != null) { - webTarget = webTarget.queryParam("filter", urlPathSegmentEscaper().escape(command.getImageNameFilter())); + webTarget = webTarget.queryParam("filter", urlPathSegmentEscaper().escape(command.getImageNameFilter())); } LOGGER.trace("GET: {}", webTarget); diff --git a/src/main/java/com/github/dockerjava/netty/MediaType.java b/src/main/java/com/github/dockerjava/netty/MediaType.java index a7738604ae..50732aeb8a 100644 --- a/src/main/java/com/github/dockerjava/netty/MediaType.java +++ b/src/main/java/com/github/dockerjava/netty/MediaType.java @@ -8,17 +8,17 @@ */ public enum MediaType { - APPLICATION_JSON("application/json"), - APPLICATION_OCTET_STREAM("application/octet-stream"), - APPLICATION_X_TAR("application/x-tar"); + APPLICATION_JSON("application/json"), + APPLICATION_OCTET_STREAM("application/octet-stream"), + APPLICATION_X_TAR("application/x-tar"); - private String mediaType; + private String mediaType; - private MediaType(String mediaType) { - this.mediaType = mediaType; - } + private MediaType(String mediaType) { + this.mediaType = mediaType; + } - public String getMediaType() { - return mediaType; - } + public String getMediaType() { + return mediaType; + } } diff --git a/src/main/java/com/github/dockerjava/netty/handler/JsonRequestHandler.java b/src/main/java/com/github/dockerjava/netty/handler/JsonRequestHandler.java index 54ffb2f967..cb6f606785 100644 --- a/src/main/java/com/github/dockerjava/netty/handler/JsonRequestHandler.java +++ b/src/main/java/com/github/dockerjava/netty/handler/JsonRequestHandler.java @@ -11,13 +11,13 @@ * * @author Marcus Linke */ -public class JsonRequestHandler extends MessageToByteEncoder{ +public class JsonRequestHandler extends MessageToByteEncoder { - private ObjectMapper mapper = new ObjectMapper(); + private ObjectMapper mapper = new ObjectMapper(); - @Override - protected void encode(ChannelHandlerContext ctx, Object msg, ByteBuf out) throws Exception { - byte[] serialized = mapper.writeValueAsBytes(msg); - out.writeBytes(serialized); - } + @Override + protected void encode(ChannelHandlerContext ctx, Object msg, ByteBuf out) throws Exception { + byte[] serialized = mapper.writeValueAsBytes(msg); + out.writeBytes(serialized); + } } diff --git a/src/test/resources/checkstyle/checkstyle-config.xml b/src/test/resources/checkstyle/checkstyle-config.xml index 9f9f7b02b0..f65ea846ff 100644 --- a/src/test/resources/checkstyle/checkstyle-config.xml +++ b/src/test/resources/checkstyle/checkstyle-config.xml @@ -18,6 +18,14 @@ + + + + + + + + From 2d110ad9ee602e08190c9859fb39334f6907250e Mon Sep 17 00:00:00 2001 From: Kanstantsin Shautsou Date: Sun, 31 Jan 2016 16:15:27 +0300 Subject: [PATCH 023/912] Checkstyle: no trailing spaces. --- .../github/dockerjava/api/model/Capability.java | 2 +- .../dockerjava/api/model/InternetProtocol.java | 14 +++++++++----- .../github/dockerjava/api/model/Repository.java | 4 ++-- .../github/dockerjava/core/GoLangFileMatch.java | 6 +++--- .../github/dockerjava/core/KeystoreSSLConfig.java | 2 +- .../java/com/github/dockerjava/core/SSLConfig.java | 2 +- .../dockerjava/core/command/PingCmdImpl.java | 1 - .../connector/ApacheConnectorClientResponse.java | 4 ++-- .../jaxrs/filter/FollowRedirectsFilter.java | 2 +- .../jaxrs/filter/SelectiveLoggingFilter.java | 3 +-- .../resources/checkstyle/checkstyle-config.xml | 7 +++++++ 11 files changed, 28 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/github/dockerjava/api/model/Capability.java b/src/main/java/com/github/dockerjava/api/model/Capability.java index b17827553c..4757937e36 100644 --- a/src/main/java/com/github/dockerjava/api/model/Capability.java +++ b/src/main/java/com/github/dockerjava/api/model/Capability.java @@ -3,7 +3,7 @@ /** * The Linux capabilities supported by Docker. The list of capabilities is defined in Docker's types.go, {@link #ALL} * was added manually. - * + * * @see http://man7.org/linux/man-pages/man7/capabilities.7.html */ diff --git a/src/main/java/com/github/dockerjava/api/model/InternetProtocol.java b/src/main/java/com/github/dockerjava/api/model/InternetProtocol.java index 65df8cf6fd..e3ef2b98c6 100644 --- a/src/main/java/com/github/dockerjava/api/model/InternetProtocol.java +++ b/src/main/java/com/github/dockerjava/api/model/InternetProtocol.java @@ -2,15 +2,19 @@ /** * The IP protocols supported by Docker. - * + * * @see #TCP * @see #UDP */ public enum InternetProtocol { - /** The Transmission Control Protocol */ + /** + * The Transmission Control Protocol + */ TCP, - /** The User Datagram Protocol */ + /** + * The User Datagram Protocol + */ UDP; /** @@ -21,7 +25,7 @@ public enum InternetProtocol { /** * Returns a string representation of this {@link InternetProtocol} suitable for inclusion in a JSON message. The * output is the lowercased name of the Protocol, e.g. tcp. - * + * * @return a string representation of this {@link InternetProtocol} */ @Override @@ -31,7 +35,7 @@ public String toString() { /** * Parses a string to an {@link InternetProtocol}. - * + * * @param serialized * the protocol, e.g. tcp or TCP * @return an {@link InternetProtocol} described by the string diff --git a/src/main/java/com/github/dockerjava/api/model/Repository.java b/src/main/java/com/github/dockerjava/api/model/Repository.java index 1c5b641ba1..3055c8980f 100644 --- a/src/main/java/com/github/dockerjava/api/model/Repository.java +++ b/src/main/java/com/github/dockerjava/api/model/Repository.java @@ -13,7 +13,7 @@ public class Repository { /** * Name may be eg. 'busybox' or '10.0.0.1:5000/fred' - * + * * @param name * Repository name */ @@ -23,7 +23,7 @@ public Repository(String name) { /** * Return the URL portion (repository). Note that this might not actually BE a repository location. - * + * * @return * @throws java.net.MalformedURLException */ diff --git a/src/main/java/com/github/dockerjava/core/GoLangFileMatch.java b/src/main/java/com/github/dockerjava/core/GoLangFileMatch.java index ef798d68d2..2f29789eac 100644 --- a/src/main/java/com/github/dockerjava/core/GoLangFileMatch.java +++ b/src/main/java/com/github/dockerjava/core/GoLangFileMatch.java @@ -26,16 +26,16 @@ * character class (must be non-empty) * c matches character c (c != '*', '?', '\\', '[') * '\\' c matches character c - * + * * character-range: * c matches character c (c != '\\', '-', ']') * '\\' c matches character c * lo '-' hi matches character c for lo <= c <= hi - * + * * Match requires pattern to match all of name, not just a substring. * The only possible returned error is ErrBadPattern, when pattern * is malformed. - * + * * On Windows, escaping is disabled. Instead, '\\' is treated as * path separator. * diff --git a/src/main/java/com/github/dockerjava/core/KeystoreSSLConfig.java b/src/main/java/com/github/dockerjava/core/KeystoreSSLConfig.java index dc9defbfb7..5e62f4d788 100644 --- a/src/main/java/com/github/dockerjava/core/KeystoreSSLConfig.java +++ b/src/main/java/com/github/dockerjava/core/KeystoreSSLConfig.java @@ -65,7 +65,7 @@ public KeystoreSSLConfig(File pfxFile, String password) throws KeyStoreException /** * Get the SSL Context out of the keystore. - * + * * @return java SSLContext * @throws KeyManagementException * @throws UnrecoverableKeyException diff --git a/src/main/java/com/github/dockerjava/core/SSLConfig.java b/src/main/java/com/github/dockerjava/core/SSLConfig.java index 6c7e5c3539..0346aa610f 100644 --- a/src/main/java/com/github/dockerjava/core/SSLConfig.java +++ b/src/main/java/com/github/dockerjava/core/SSLConfig.java @@ -14,7 +14,7 @@ public interface SSLConfig { /** * Get the SSL Context, from wherever it comes (file, keystore). - * + * * @return an SSL context. */ SSLContext getSSLContext() throws KeyManagementException, UnrecoverableKeyException, NoSuchAlgorithmException, diff --git a/src/main/java/com/github/dockerjava/core/command/PingCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/PingCmdImpl.java index c9118a0957..39c9666d70 100644 --- a/src/main/java/com/github/dockerjava/core/command/PingCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/PingCmdImpl.java @@ -4,7 +4,6 @@ /** * Ping the Docker server - * */ public class PingCmdImpl extends AbstrDockerCmd implements PingCmd { diff --git a/src/main/java/com/github/dockerjava/jaxrs/connector/ApacheConnectorClientResponse.java b/src/main/java/com/github/dockerjava/jaxrs/connector/ApacheConnectorClientResponse.java index d358f574ac..fead3575cd 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/connector/ApacheConnectorClientResponse.java +++ b/src/main/java/com/github/dockerjava/jaxrs/connector/ApacheConnectorClientResponse.java @@ -11,9 +11,9 @@ /** * Fix for https://github.com/docker-java/docker-java/issues/196 - * + * * https://java.net/jira/browse/JERSEY-2852 - * + * * @author Marcus Linke * */ diff --git a/src/main/java/com/github/dockerjava/jaxrs/filter/FollowRedirectsFilter.java b/src/main/java/com/github/dockerjava/jaxrs/filter/FollowRedirectsFilter.java index be079d4305..cb5cd06870 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/filter/FollowRedirectsFilter.java +++ b/src/main/java/com/github/dockerjava/jaxrs/filter/FollowRedirectsFilter.java @@ -12,7 +12,7 @@ * Default implementation of RedirectStrategy honors the restrictions on automatic redirection of entity enclosing * methods such as POST and PUT imposed by the HTTP specification. 302 Moved Temporarily, 301 Moved Permanently and 307 * Temporary Redirect status codes will result in an automatic redirect of HEAD and GET methods only. - * + * * {@link org.apache.http.impl.client.DefaultRedirectStrategy} * * This filter allows arbitrary redirection for other methods. diff --git a/src/main/java/com/github/dockerjava/jaxrs/filter/SelectiveLoggingFilter.java b/src/main/java/com/github/dockerjava/jaxrs/filter/SelectiveLoggingFilter.java index 847033fd56..2251d8fadf 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/filter/SelectiveLoggingFilter.java +++ b/src/main/java/com/github/dockerjava/jaxrs/filter/SelectiveLoggingFilter.java @@ -13,9 +13,8 @@ /** * A version of the logging filter that will avoid trying to log entities which can cause issues with the console. - * - * @author sfitts * + * @author sfitts */ public class SelectiveLoggingFilter extends LoggingFilter { diff --git a/src/test/resources/checkstyle/checkstyle-config.xml b/src/test/resources/checkstyle/checkstyle-config.xml index f65ea846ff..0b42e4d052 100644 --- a/src/test/resources/checkstyle/checkstyle-config.xml +++ b/src/test/resources/checkstyle/checkstyle-config.xml @@ -26,6 +26,13 @@ + + + + + + + From 3dcb1439957e51e669f8a2ed476aad612ba47e6f Mon Sep 17 00:00:00 2001 From: Kanstantsin Shautsou Date: Sun, 31 Jan 2016 16:35:38 +0300 Subject: [PATCH 024/912] Checkstyle: fix naming convention. --- .../com/github/dockerjava/api/model/Info.java | 36 +++++++++---------- .../github/dockerjava/api/model/Ports.java | 4 +-- .../dockerjava/core/DockerClientConfig.java | 6 ++-- .../github/dockerjava/core/NameParser.java | 3 +- .../dockerjava/core/util/FiltersEncoder.java | 2 +- .../jaxrs/connector/ApacheConnector.java | 10 +++--- .../jaxrs/filter/LoggingFilter.java | 10 +++--- .../github/dockerjava/netty/WebTarget.java | 2 +- .../dockerjava/api/model/BindingTest.java | 8 ++--- .../api/model/Ports_addBindingsTest.java | 4 +-- .../command/CreateContainerCmdImplTest.java | 12 +++---- .../command/StartContainerCmdImplTest.java | 20 +++++------ .../exec/CreateContainerCmdExecTest.java | 14 ++++---- .../netty/exec/StartContainerCmdExecTest.java | 22 ++++++------ .../checkstyle/checkstyle-config.xml | 31 ++++++++++++++++ 15 files changed, 106 insertions(+), 78 deletions(-) diff --git a/src/main/java/com/github/dockerjava/api/model/Info.java b/src/main/java/com/github/dockerjava/api/model/Info.java index d038df878e..0e4816cce0 100644 --- a/src/main/java/com/github/dockerjava/api/model/Info.java +++ b/src/main/java/com/github/dockerjava/api/model/Info.java @@ -25,7 +25,7 @@ public class Info { private Boolean debug; @JsonProperty("DockerRootDir") - private String DockerRootDir; + private String dockerRootDir; @JsonProperty("Driver") private String driver; @@ -37,16 +37,16 @@ public class Info { private String executionDriver; @JsonProperty("ID") - private String ID; + private String id; @JsonProperty("IPv4Forwarding") - private Boolean IPv4Forwarding; + private Boolean ipv4Forwarding; @JsonProperty("Images") private Integer images; @JsonProperty("IndexServerAddress") - private String IndexServerAddress; + private String indexServerAddress; @JsonProperty("InitPath") private String initPath; @@ -58,7 +58,7 @@ public class Info { private String kernelVersion; @JsonProperty("Labels") - private String[] Labels; + private String[] labels; @JsonProperty("MemoryLimit") private Boolean memoryLimit; @@ -70,19 +70,19 @@ public class Info { private String name; @JsonProperty("NCPU") - private Integer NCPU; + private Integer ncpu; @JsonProperty("NEventsListener") private Long nEventListener; @JsonProperty("NFd") - private Integer NFd; + private Integer nfd; @JsonProperty("NGoroutines") - private Integer NGoroutines; + private Integer nGoroutines; @JsonProperty("OperatingSystem") - private String OperatingSystem; + private String operatingSystem; @JsonProperty("Sockets") private String[] sockets; @@ -99,7 +99,7 @@ public Integer getContainers() { } public String getDockerRootDir() { - return DockerRootDir; + return dockerRootDir; } public String getDriver() { @@ -115,15 +115,15 @@ public Integer getImages() { } public String getID() { - return ID; + return id; } public Boolean getIPv4Forwarding() { - return IPv4Forwarding; + return ipv4Forwarding; } public String getIndexServerAddress() { - return IndexServerAddress; + return indexServerAddress; } public String getInitPath() { @@ -139,7 +139,7 @@ public String getKernelVersion() { } public String[] getLabels() { - return Labels; + return labels; } public String[] getSockets() { @@ -163,19 +163,19 @@ public String getName() { } public Integer getNCPU() { - return NCPU; + return ncpu; } public Integer getNFd() { - return NFd; + return nfd; } public Integer getNGoroutines() { - return NGoroutines; + return nGoroutines; } public String getOperatingSystem() { - return OperatingSystem; + return operatingSystem; } public Boolean getSwapLimit() { diff --git a/src/main/java/com/github/dockerjava/api/model/Ports.java b/src/main/java/com/github/dockerjava/api/model/Ports.java index 0ff5762e6d..780e5911c6 100644 --- a/src/main/java/com/github/dockerjava/api/model/Ports.java +++ b/src/main/java/com/github/dockerjava/api/model/Ports.java @@ -112,14 +112,14 @@ public Map getBindings() { /** * Creates a {@link Binding} for the given IP address and port number. */ - public static Binding Binding(String hostIp, Integer hostPort) { + public static Binding binding(String hostIp, Integer hostPort) { return new Binding(hostIp, hostPort); } /** * Creates a {@link Binding} for the given port number, leaving the IP address undefined. */ - public static Binding Binding(Integer hostPort) { + public static Binding binding(Integer hostPort) { return new Binding(hostPort); } diff --git a/src/main/java/com/github/dockerjava/core/DockerClientConfig.java b/src/main/java/com/github/dockerjava/core/DockerClientConfig.java index fa5c77e6ab..0a18689225 100644 --- a/src/main/java/com/github/dockerjava/core/DockerClientConfig.java +++ b/src/main/java/com/github/dockerjava/core/DockerClientConfig.java @@ -270,10 +270,10 @@ public AuthConfig effectiveAuthConfig(String imageName) { authConfig = authConfigFile.resolveAuthConfig(hostnameReposName.hostname); } - AuthConfig _authConfig = getAuthConfig(); + AuthConfig otherAuthConfig = getAuthConfig(); - if (_authConfig != null) - authConfig = _authConfig; + if (otherAuthConfig != null) + authConfig = otherAuthConfig; return authConfig; } diff --git a/src/main/java/com/github/dockerjava/core/NameParser.java b/src/main/java/com/github/dockerjava/core/NameParser.java index ba2948fb87..3c58eb3311 100644 --- a/src/main/java/com/github/dockerjava/core/NameParser.java +++ b/src/main/java/com/github/dockerjava/core/NameParser.java @@ -13,13 +13,14 @@ import com.github.dockerjava.core.exception.InvalidRepositoryNameException; public class NameParser { - + //CHECKSTYLE:OFF private static final int RepositoryNameTotalLengthMax = 255; private static final Pattern RepositoryNameComponentRegexp = Pattern.compile("[a-z0-9]+(?:[._-][a-z0-9]+)*"); private static final Pattern RepositoryNameComponentAnchoredRegexp = Pattern.compile("^" + RepositoryNameComponentRegexp.pattern() + "$"); + //CHECKSTYLE:ON // private static final Pattern RepositoryNameRegexp = Pattern.compile("(?:" + // RepositoryNameComponentRegexp.pattern() diff --git a/src/main/java/com/github/dockerjava/core/util/FiltersEncoder.java b/src/main/java/com/github/dockerjava/core/util/FiltersEncoder.java index 75f9d48c28..164528a8c6 100644 --- a/src/main/java/com/github/dockerjava/core/util/FiltersEncoder.java +++ b/src/main/java/com/github/dockerjava/core/util/FiltersEncoder.java @@ -17,7 +17,7 @@ */ public class FiltersEncoder { - private static ObjectMapper OBJECT_MAPPER = new JacksonJaxbJsonProvider().locateMapper(Map.class, + private static final ObjectMapper OBJECT_MAPPER = new JacksonJaxbJsonProvider().locateMapper(Map.class, MediaType.APPLICATION_JSON_TYPE); public static String jsonEncode(Map> filters) { diff --git a/src/main/java/com/github/dockerjava/jaxrs/connector/ApacheConnector.java b/src/main/java/com/github/dockerjava/jaxrs/connector/ApacheConnector.java index f7c830902c..cfbabb5136 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/connector/ApacheConnector.java +++ b/src/main/java/com/github/dockerjava/jaxrs/connector/ApacheConnector.java @@ -184,13 +184,13 @@ class ApacheConnector implements Connector { private final static Logger LOGGER = Logger.getLogger(ApacheConnector.class.getName()); - private static final VersionInfo vi; + private static final VersionInfo VERSION_INFO; - private static final String release; + private static final String RELEASE; static { - vi = VersionInfo.loadVersionInfo("org.apache.http.client", HttpClientBuilder.class.getClassLoader()); - release = (vi != null) ? vi.getRelease() : VersionInfo.UNAVAILABLE; + VERSION_INFO = VersionInfo.loadVersionInfo("org.apache.http.client", HttpClientBuilder.class.getClassLoader()); + RELEASE = (VERSION_INFO != null) ? VERSION_INFO.getRelease() : VersionInfo.UNAVAILABLE; } private final CloseableHttpClient client; @@ -507,7 +507,7 @@ public void run() { @Override public String getName() { - return "Apache HttpClient " + release; + return "Apache HttpClient " + RELEASE; } @Override diff --git a/src/main/java/com/github/dockerjava/jaxrs/filter/LoggingFilter.java b/src/main/java/com/github/dockerjava/jaxrs/filter/LoggingFilter.java index 6dbea00454..ccd6500d19 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/filter/LoggingFilter.java +++ b/src/main/java/com/github/dockerjava/jaxrs/filter/LoggingFilter.java @@ -109,7 +109,7 @@ public int compare(final Map.Entry> o1, final Map.Entry queryParams = new HashMap(); - private static String PATH_SEPARATOR = "/"; + private static final String PATH_SEPARATOR = "/"; public WebTarget(ChannelProvider channelProvider) { this.channelProvider = channelProvider; diff --git a/src/test/java/com/github/dockerjava/api/model/BindingTest.java b/src/test/java/com/github/dockerjava/api/model/BindingTest.java index 3309a8904d..23e793cf87 100644 --- a/src/test/java/com/github/dockerjava/api/model/BindingTest.java +++ b/src/test/java/com/github/dockerjava/api/model/BindingTest.java @@ -10,22 +10,22 @@ public class BindingTest { @Test public void parseIpAndPort() { - assertEquals(Binding.parse("127.0.0.1:80"), Ports.Binding("127.0.0.1", 80)); + assertEquals(Binding.parse("127.0.0.1:80"), Ports.binding("127.0.0.1", 80)); } @Test public void parsePortOnly() { - assertEquals(Binding.parse("80"), Ports.Binding(null, 80)); + assertEquals(Binding.parse("80"), Ports.binding(null, 80)); } @Test public void parseIPOnly() { - assertEquals(Binding.parse("127.0.0.1"), Ports.Binding("127.0.0.1", null)); + assertEquals(Binding.parse("127.0.0.1"), Ports.binding("127.0.0.1", null)); } @Test public void parseEmptyString() { - assertEquals(Binding.parse(""), Ports.Binding(null, null)); + assertEquals(Binding.parse(""), Ports.binding(null, null)); } @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "Error parsing Binding 'nonsense'") diff --git a/src/test/java/com/github/dockerjava/api/model/Ports_addBindingsTest.java b/src/test/java/com/github/dockerjava/api/model/Ports_addBindingsTest.java index da127b1221..05a2b3f016 100644 --- a/src/test/java/com/github/dockerjava/api/model/Ports_addBindingsTest.java +++ b/src/test/java/com/github/dockerjava/api/model/Ports_addBindingsTest.java @@ -19,9 +19,9 @@ public class Ports_addBindingsTest { private static final ExposedPort TCP_90 = ExposedPort.tcp(90); - private static final Binding BINDING_8080 = Ports.Binding(8080); + private static final Binding BINDING_8080 = Ports.binding(8080); - private static final Binding BINDING_9090 = Ports.Binding(9090); + private static final Binding BINDING_9090 = Ports.binding(9090); private Ports ports; diff --git a/src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java index ce2771652a..3f989c1141 100644 --- a/src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java @@ -363,9 +363,9 @@ public void createContainerWithPortBindings() throws DockerException { 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)); + 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(); @@ -379,13 +379,13 @@ public void createContainerWithPortBindings() throws DockerException { assertThat(Arrays.asList(inspectContainerResponse.getConfig().getExposedPorts()), contains(tcp22, tcp23)); assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp22)[0], - is(equalTo(Ports.Binding(11022)))); + is(equalTo(Ports.binding(11022)))); assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[0], - is(equalTo(Ports.Binding(11023)))); + is(equalTo(Ports.binding(11023)))); assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[1], - is(equalTo(Ports.Binding(11024)))); + is(equalTo(Ports.binding(11024)))); } diff --git a/src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java index b43eb0ff22..ce060f4bb3 100644 --- a/src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java @@ -186,9 +186,9 @@ public void startContainerWithPortBindings() throws DockerException { 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)); + 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(); @@ -206,13 +206,13 @@ public void startContainerWithPortBindings() throws DockerException { assertThat(Arrays.asList(inspectContainerResponse.getConfig().getExposedPorts()), contains(tcp22, tcp23)); assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp22)[0], - is(equalTo(Ports.Binding(11022)))); + is(equalTo(Ports.binding(11022)))); assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[0], - is(equalTo(Ports.Binding(11023)))); + is(equalTo(Ports.binding(11023)))); assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[1], - is(equalTo(Ports.Binding(11024)))); + is(equalTo(Ports.binding(11024)))); } @@ -223,8 +223,8 @@ public void startContainerWithRandomPortBindings() throws DockerException { ExposedPort tcp23 = ExposedPort.tcp(23); Ports portBindings = new Ports(); - portBindings.bind(tcp22, Ports.Binding(null)); - portBindings.bind(tcp23, Ports.Binding(null)); + 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(); @@ -254,8 +254,8 @@ public void startContainerWithConflictingPortBindings() throws DockerException { ExposedPort tcp23 = ExposedPort.tcp(23); Ports portBindings = new Ports(); - portBindings.bind(tcp22, Ports.Binding(11022)); - portBindings.bind(tcp23, Ports.Binding(11022)); + 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(); diff --git a/src/test/java/com/github/dockerjava/netty/exec/CreateContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/CreateContainerCmdExecTest.java index 9a37ef01af..a29b26d7bb 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/CreateContainerCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/CreateContainerCmdExecTest.java @@ -32,7 +32,6 @@ 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.AccessMode; import com.github.dockerjava.api.model.Bind; import com.github.dockerjava.api.model.Device; import com.github.dockerjava.api.model.ExposedPort; @@ -42,7 +41,6 @@ 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.VolumeRW; import com.github.dockerjava.api.model.VolumesFrom; import com.github.dockerjava.netty.AbstractNettyDockerClientTest; @@ -358,9 +356,9 @@ public void createContainerWithPortBindings() throws DockerException { 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)); + 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(); @@ -374,13 +372,13 @@ public void createContainerWithPortBindings() throws DockerException { assertThat(Arrays.asList(inspectContainerResponse.getConfig().getExposedPorts()), contains(tcp22, tcp23)); assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp22)[0], - is(equalTo(Ports.Binding(11022)))); + is(equalTo(Ports.binding(11022)))); assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[0], - is(equalTo(Ports.Binding(11023)))); + is(equalTo(Ports.binding(11023)))); assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[1], - is(equalTo(Ports.Binding(11024)))); + is(equalTo(Ports.binding(11024)))); } diff --git a/src/test/java/com/github/dockerjava/netty/exec/StartContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/StartContainerCmdExecTest.java index d743935eb7..8af196a607 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/StartContainerCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/StartContainerCmdExecTest.java @@ -31,7 +31,6 @@ 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.AccessMode; import com.github.dockerjava.api.model.Bind; import com.github.dockerjava.api.model.Device; import com.github.dockerjava.api.model.ExposedPort; @@ -39,7 +38,6 @@ 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.VolumeRW; import com.github.dockerjava.api.model.VolumesFrom; import com.github.dockerjava.core.command.WaitContainerResultCallback; import com.github.dockerjava.netty.AbstractNettyDockerClientTest; @@ -189,9 +187,9 @@ public void startContainerWithPortBindings() throws DockerException { 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)); + 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(); @@ -209,13 +207,13 @@ public void startContainerWithPortBindings() throws DockerException { assertThat(Arrays.asList(inspectContainerResponse.getConfig().getExposedPorts()), contains(tcp22, tcp23)); assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp22)[0], - is(equalTo(Ports.Binding(11022)))); + is(equalTo(Ports.binding(11022)))); assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[0], - is(equalTo(Ports.Binding(11023)))); + is(equalTo(Ports.binding(11023)))); assertThat(inspectContainerResponse.getHostConfig().getPortBindings().getBindings().get(tcp23)[1], - is(equalTo(Ports.Binding(11024)))); + is(equalTo(Ports.binding(11024)))); } @@ -226,8 +224,8 @@ public void startContainerWithRandomPortBindings() throws DockerException { ExposedPort tcp23 = ExposedPort.tcp(23); Ports portBindings = new Ports(); - portBindings.bind(tcp22, Ports.Binding(null)); - portBindings.bind(tcp23, Ports.Binding(null)); + 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(); @@ -257,8 +255,8 @@ public void startContainerWithConflictingPortBindings() throws DockerException { ExposedPort tcp23 = ExposedPort.tcp(23); Ports portBindings = new Ports(); - portBindings.bind(tcp22, Ports.Binding(11022)); - portBindings.bind(tcp23, Ports.Binding(11022)); + 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(); diff --git a/src/test/resources/checkstyle/checkstyle-config.xml b/src/test/resources/checkstyle/checkstyle-config.xml index 0b42e4d052..c31d642eff 100644 --- a/src/test/resources/checkstyle/checkstyle-config.xml +++ b/src/test/resources/checkstyle/checkstyle-config.xml @@ -32,8 +32,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 5bcb8f846edc81fc97b5d7d19c1c6d513c9c80e3 Mon Sep 17 00:00:00 2001 From: Kanstantsin Shautsou Date: Sun, 31 Jan 2016 16:49:45 +0300 Subject: [PATCH 025/912] Checkstyle: line length fix + other. --- .../dockerjava/api/command/AuthCmd.java | 3 +- .../checkstyle/checkstyle-config.xml | 44 ++++++++++++++++++- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/dockerjava/api/command/AuthCmd.java b/src/main/java/com/github/dockerjava/api/command/AuthCmd.java index 8402ee5337..75e5801ff5 100644 --- a/src/main/java/com/github/dockerjava/api/command/AuthCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/AuthCmd.java @@ -21,7 +21,8 @@ public interface AuthCmd extends SyncDockerCmd { /** * @return The status. Based on it's value you may mean you need to authorise your account, e.g.: - * "Account created. Please see the documentation of the registry http://localhost:5000/v1/ for instructions how to activate it." + * "Account created. Please see the documentation of the registry http://localhost:5000/v1/ + * for instructions how to activate it." * @throws UnauthorizedException * If you're not authorised (e.g. bad password). */ diff --git a/src/test/resources/checkstyle/checkstyle-config.xml b/src/test/resources/checkstyle/checkstyle-config.xml index c31d642eff..74a724eba0 100644 --- a/src/test/resources/checkstyle/checkstyle-config.xml +++ b/src/test/resources/checkstyle/checkstyle-config.xml @@ -64,10 +64,52 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From c76a187bee6bc9d3d3b322914356b8aa13007f0c Mon Sep 17 00:00:00 2001 From: Kanstantsin Shautsou Date: Sun, 31 Jan 2016 17:07:14 +0300 Subject: [PATCH 026/912] Checkstyle: whitespace checks. --- .../java/com/github/dockerjava/api/model/Ports.java | 2 +- .../github/dockerjava/core/DockerClientConfig.java | 2 +- .../github/dockerjava/core/KeystoreSSLConfig.java | 2 +- .../dockerjava/core/dockerfile/Dockerfile.java | 2 +- .../dockerjava/core/util/CertificateUtils.java | 2 +- src/test/resources/checkstyle/checkstyle-config.xml | 13 ++++++++----- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/github/dockerjava/api/model/Ports.java b/src/main/java/com/github/dockerjava/api/model/Ports.java index 780e5911c6..6132e46475 100644 --- a/src/main/java/com/github/dockerjava/api/model/Ports.java +++ b/src/main/java/com/github/dockerjava/api/model/Ports.java @@ -70,7 +70,7 @@ public void bind(ExposedPort exposedPort, Binding binding) { if (binding == null) { ports.put(exposedPort, null); } else { - ports.put(exposedPort, new Binding[] { binding }); + ports.put(exposedPort, new Binding[]{binding}); } } } diff --git a/src/main/java/com/github/dockerjava/core/DockerClientConfig.java b/src/main/java/com/github/dockerjava/core/DockerClientConfig.java index 0a18689225..8c363321cc 100644 --- a/src/main/java/com/github/dockerjava/core/DockerClientConfig.java +++ b/src/main/java/com/github/dockerjava/core/DockerClientConfig.java @@ -178,7 +178,7 @@ private static Properties overrideDockerPropertiesWithSystemProperties(Propertie Properties overriddenProperties = new Properties(); overriddenProperties.putAll(p); - for (String key : new String[] { DOCKER_IO_URL_PROPERTY, DOCKER_IO_VERSION_PROPERTY, + for (String key : new String[]{DOCKER_IO_URL_PROPERTY, DOCKER_IO_VERSION_PROPERTY, DOCKER_IO_USERNAME_PROPERTY, DOCKER_IO_PASSWORD_PROPERTY, DOCKER_IO_EMAIL_PROPERTY, DOCKER_IO_SERVER_ADDRESS_PROPERTY, DOCKER_IO_DOCKER_CERT_PATH_PROPERTY, DOCKER_IO_DOCKER_CFG_PATH_PROPERTY, }) { diff --git a/src/main/java/com/github/dockerjava/core/KeystoreSSLConfig.java b/src/main/java/com/github/dockerjava/core/KeystoreSSLConfig.java index 5e62f4d788..a552b37755 100644 --- a/src/main/java/com/github/dockerjava/core/KeystoreSSLConfig.java +++ b/src/main/java/com/github/dockerjava/core/KeystoreSSLConfig.java @@ -87,7 +87,7 @@ public SSLContext getSSLContext() throws KeyManagementException, UnrecoverableKe final KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory .getDefaultAlgorithm()); keyManagerFactory.init(keystore, keystorePassword.toCharArray()); - context.init(keyManagerFactory.getKeyManagers(), new TrustManager[] { new X509TrustManager() { + context.init(keyManagerFactory.getKeyManagers(), new TrustManager[]{new X509TrustManager() { @Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[] {}; diff --git a/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java b/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java index 077aff4bfa..d7173d4d8b 100644 --- a/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java +++ b/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java @@ -147,7 +147,7 @@ public int read() throws IOException { } @Override - public int read(byte [] buff, int offset, int len) throws IOException { + public int read(byte[] buff, int offset, int len) throws IOException { return tarInputStream.read(buff, offset, len); } diff --git a/src/main/java/com/github/dockerjava/core/util/CertificateUtils.java b/src/main/java/com/github/dockerjava/core/util/CertificateUtils.java index 19f1425932..65e6544f1d 100644 --- a/src/main/java/com/github/dockerjava/core/util/CertificateUtils.java +++ b/src/main/java/com/github/dockerjava/core/util/CertificateUtils.java @@ -31,7 +31,7 @@ private CertificateUtils() { } public static boolean verifyCertificatesExist(String dockerCertPath) { - String[] files = { "ca.pem", "cert.pem", "key.pem" }; + String[] files = {"ca.pem", "cert.pem", "key.pem"}; for (String file : files) { File path = new File(dockerCertPath, file); return path.exists(); diff --git a/src/test/resources/checkstyle/checkstyle-config.xml b/src/test/resources/checkstyle/checkstyle-config.xml index 74a724eba0..1f9e606eb6 100644 --- a/src/test/resources/checkstyle/checkstyle-config.xml +++ b/src/test/resources/checkstyle/checkstyle-config.xml @@ -98,17 +98,20 @@ - + + - - - + + + + - + + From 01f82d2c2c4ff93a7c5d0fcf22750f615f7e46eb Mon Sep 17 00:00:00 2001 From: Kanstantsin Shautsou Date: Sun, 31 Jan 2016 18:36:39 +0300 Subject: [PATCH 027/912] Checkstyle: redundant lines. Disabled for now. --- .../api/command/AsyncDockerCmd.java | 2 +- .../api/command/AttachContainerCmd.java | 30 +++++++++---------- .../checkstyle/checkstyle-config.xml | 4 +++ 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/github/dockerjava/api/command/AsyncDockerCmd.java b/src/main/java/com/github/dockerjava/api/command/AsyncDockerCmd.java index 221d3d165d..3218a84193 100644 --- a/src/main/java/com/github/dockerjava/api/command/AsyncDockerCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/AsyncDockerCmd.java @@ -13,6 +13,6 @@ */ public interface AsyncDockerCmd, A_RES_T> extends DockerCmd { - public > T exec(T resultCallback); + > T exec(T resultCallback); } diff --git a/src/main/java/com/github/dockerjava/api/command/AttachContainerCmd.java b/src/main/java/com/github/dockerjava/api/command/AttachContainerCmd.java index 6326fa13b4..84f063d7ec 100644 --- a/src/main/java/com/github/dockerjava/api/command/AttachContainerCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/AttachContainerCmd.java @@ -26,46 +26,46 @@ public interface AttachContainerCmd extends AsyncDockerCmd { @CheckForNull - public String getContainerId(); + String getContainerId(); @CheckForNull - public Boolean hasLogsEnabled(); + Boolean hasLogsEnabled(); @CheckForNull - public Boolean hasFollowStreamEnabled(); + Boolean hasFollowStreamEnabled(); @CheckForNull - public Boolean hasTimestampsEnabled(); + Boolean hasTimestampsEnabled(); @CheckForNull - public Boolean hasStdoutEnabled(); + Boolean hasStdoutEnabled(); @CheckForNull - public Boolean hasStderrEnabled(); + Boolean hasStderrEnabled(); @CheckForNull - public InputStream getStdin(); + InputStream getStdin(); - public AttachContainerCmd withContainerId(@Nonnull String containerId); + AttachContainerCmd withContainerId(@Nonnull String containerId); /** * Following the stream means the resulting {@link InputStream} returned by {@link #exec()} reads infinitely. So a * {@link InputStream#read()} MAY BLOCK FOREVER as long as no data is streamed from the docker host to * {@link DockerClient}! */ - public AttachContainerCmd withFollowStream(Boolean followStream); + AttachContainerCmd withFollowStream(Boolean followStream); - public AttachContainerCmd withTimestamps(Boolean timestamps); + AttachContainerCmd withTimestamps(Boolean timestamps); - public AttachContainerCmd withStdOut(Boolean stdout); + AttachContainerCmd withStdOut(Boolean stdout); - public AttachContainerCmd withStdErr(Boolean stderr); + AttachContainerCmd withStdErr(Boolean stderr); - public AttachContainerCmd withStdIn(InputStream stdin); + AttachContainerCmd withStdIn(InputStream stdin); - public AttachContainerCmd withLogs(Boolean logs); + AttachContainerCmd withLogs(Boolean logs); - public static interface Exec extends DockerCmdAsyncExec { + interface Exec extends DockerCmdAsyncExec { } } diff --git a/src/test/resources/checkstyle/checkstyle-config.xml b/src/test/resources/checkstyle/checkstyle-config.xml index 1f9e606eb6..0a09695132 100644 --- a/src/test/resources/checkstyle/checkstyle-config.xml +++ b/src/test/resources/checkstyle/checkstyle-config.xml @@ -113,6 +113,10 @@ + + + + From a2c6773a037fd86ae8bb5ad0f5cd5bce381d597b Mon Sep 17 00:00:00 2001 From: Kanstantsin Shautsou Date: Sun, 31 Jan 2016 18:37:12 +0300 Subject: [PATCH 028/912] Checkstyle: fixed ModifierOrder. ModifierOrder: 'static' modifier out of order with the JLS suggestions. --- .../github/dockerjava/core/async/ResultCallbackTemplate.java | 2 +- .../java/com/github/dockerjava/core/command/AbstrDockerCmd.java | 2 +- .../dockerjava/core/command/AttachContainerResultCallback.java | 2 +- .../dockerjava/core/command/BuildImageResultCallback.java | 2 +- .../github/dockerjava/core/command/EventsResultCallback.java | 2 +- .../github/dockerjava/core/command/ExecStartResultCallback.java | 2 +- .../dockerjava/core/command/LogContainerResultCallback.java | 2 +- .../github/dockerjava/core/command/PullImageResultCallback.java | 2 +- .../github/dockerjava/core/command/PushImageResultCallback.java | 2 +- .../dockerjava/core/command/WaitContainerResultCallback.java | 2 +- .../com/github/dockerjava/jaxrs/connector/ApacheConnector.java | 2 +- src/test/resources/checkstyle/checkstyle-config.xml | 2 ++ 12 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/github/dockerjava/core/async/ResultCallbackTemplate.java b/src/main/java/com/github/dockerjava/core/async/ResultCallbackTemplate.java index 5e63f2b5f7..f87c0e5253 100644 --- a/src/main/java/com/github/dockerjava/core/async/ResultCallbackTemplate.java +++ b/src/main/java/com/github/dockerjava/core/async/ResultCallbackTemplate.java @@ -25,7 +25,7 @@ public abstract class ResultCallbackTemplate, A_RES_T> implements ResultCallback { - private final static Logger LOGGER = LoggerFactory.getLogger(ResultCallbackTemplate.class); + private static final Logger LOGGER = LoggerFactory.getLogger(ResultCallbackTemplate.class); private final CountDownLatch started = new CountDownLatch(1); diff --git a/src/main/java/com/github/dockerjava/core/command/AbstrDockerCmd.java b/src/main/java/com/github/dockerjava/core/command/AbstrDockerCmd.java index 0c78775030..9e1e775c56 100644 --- a/src/main/java/com/github/dockerjava/core/command/AbstrDockerCmd.java +++ b/src/main/java/com/github/dockerjava/core/command/AbstrDockerCmd.java @@ -19,7 +19,7 @@ public abstract class AbstrDockerCmd, RES_T> implements SyncDockerCmd { - private final static Logger LOGGER = LoggerFactory.getLogger(AbstrDockerCmd.class); + private static final Logger LOGGER = LoggerFactory.getLogger(AbstrDockerCmd.class); protected DockerCmdSyncExec execution; diff --git a/src/main/java/com/github/dockerjava/core/command/AttachContainerResultCallback.java b/src/main/java/com/github/dockerjava/core/command/AttachContainerResultCallback.java index f16b20301c..bddddfd4fa 100644 --- a/src/main/java/com/github/dockerjava/core/command/AttachContainerResultCallback.java +++ b/src/main/java/com/github/dockerjava/core/command/AttachContainerResultCallback.java @@ -16,7 +16,7 @@ */ public class AttachContainerResultCallback extends ResultCallbackTemplate { - private final static Logger LOGGER = LoggerFactory.getLogger(AttachContainerResultCallback.class); + private static final Logger LOGGER = LoggerFactory.getLogger(AttachContainerResultCallback.class); @Override public void onNext(Frame item) { diff --git a/src/main/java/com/github/dockerjava/core/command/BuildImageResultCallback.java b/src/main/java/com/github/dockerjava/core/command/BuildImageResultCallback.java index 06c6b1e51a..1ca2764343 100644 --- a/src/main/java/com/github/dockerjava/core/command/BuildImageResultCallback.java +++ b/src/main/java/com/github/dockerjava/core/command/BuildImageResultCallback.java @@ -21,7 +21,7 @@ */ public class BuildImageResultCallback extends ResultCallbackTemplate { - private final static Logger LOGGER = LoggerFactory.getLogger(BuildImageResultCallback.class); + private static final Logger LOGGER = LoggerFactory.getLogger(BuildImageResultCallback.class); @CheckForNull private BuildResponseItem latestItem = null; diff --git a/src/main/java/com/github/dockerjava/core/command/EventsResultCallback.java b/src/main/java/com/github/dockerjava/core/command/EventsResultCallback.java index c731b863e4..cd6205f6d2 100644 --- a/src/main/java/com/github/dockerjava/core/command/EventsResultCallback.java +++ b/src/main/java/com/github/dockerjava/core/command/EventsResultCallback.java @@ -16,7 +16,7 @@ */ public class EventsResultCallback extends ResultCallbackTemplate { - private final static Logger LOGGER = LoggerFactory.getLogger(EventsResultCallback.class); + private static final Logger LOGGER = LoggerFactory.getLogger(EventsResultCallback.class); @Override public void onNext(Event item) { diff --git a/src/main/java/com/github/dockerjava/core/command/ExecStartResultCallback.java b/src/main/java/com/github/dockerjava/core/command/ExecStartResultCallback.java index 5f73b65eb2..62e492db90 100644 --- a/src/main/java/com/github/dockerjava/core/command/ExecStartResultCallback.java +++ b/src/main/java/com/github/dockerjava/core/command/ExecStartResultCallback.java @@ -16,7 +16,7 @@ */ public class ExecStartResultCallback extends ResultCallbackTemplate { - private final static Logger LOGGER = LoggerFactory.getLogger(ExecStartResultCallback.class); + private static final Logger LOGGER = LoggerFactory.getLogger(ExecStartResultCallback.class); private OutputStream stdout, stderr; diff --git a/src/main/java/com/github/dockerjava/core/command/LogContainerResultCallback.java b/src/main/java/com/github/dockerjava/core/command/LogContainerResultCallback.java index b7fc81cb26..677e5fb642 100644 --- a/src/main/java/com/github/dockerjava/core/command/LogContainerResultCallback.java +++ b/src/main/java/com/github/dockerjava/core/command/LogContainerResultCallback.java @@ -16,7 +16,7 @@ */ public class LogContainerResultCallback extends ResultCallbackTemplate { - private final static Logger LOGGER = LoggerFactory.getLogger(LogContainerResultCallback.class); + private static final Logger LOGGER = LoggerFactory.getLogger(LogContainerResultCallback.class); @Override public void onNext(Frame item) { diff --git a/src/main/java/com/github/dockerjava/core/command/PullImageResultCallback.java b/src/main/java/com/github/dockerjava/core/command/PullImageResultCallback.java index 27be12215d..ce274dbe84 100644 --- a/src/main/java/com/github/dockerjava/core/command/PullImageResultCallback.java +++ b/src/main/java/com/github/dockerjava/core/command/PullImageResultCallback.java @@ -19,7 +19,7 @@ */ public class PullImageResultCallback extends ResultCallbackTemplate { - private final static Logger LOGGER = LoggerFactory.getLogger(PullImageResultCallback.class); + private static final Logger LOGGER = LoggerFactory.getLogger(PullImageResultCallback.class); @CheckForNull private PullResponseItem latestItem = null; diff --git a/src/main/java/com/github/dockerjava/core/command/PushImageResultCallback.java b/src/main/java/com/github/dockerjava/core/command/PushImageResultCallback.java index 65ec93c888..55dfb56503 100644 --- a/src/main/java/com/github/dockerjava/core/command/PushImageResultCallback.java +++ b/src/main/java/com/github/dockerjava/core/command/PushImageResultCallback.java @@ -19,7 +19,7 @@ */ public class PushImageResultCallback extends ResultCallbackTemplate { - private final static Logger LOGGER = LoggerFactory.getLogger(PushImageResultCallback.class); + private static final Logger LOGGER = LoggerFactory.getLogger(PushImageResultCallback.class); @CheckForNull private PushResponseItem latestItem = null; diff --git a/src/main/java/com/github/dockerjava/core/command/WaitContainerResultCallback.java b/src/main/java/com/github/dockerjava/core/command/WaitContainerResultCallback.java index 5416d124c6..feb7916e7c 100644 --- a/src/main/java/com/github/dockerjava/core/command/WaitContainerResultCallback.java +++ b/src/main/java/com/github/dockerjava/core/command/WaitContainerResultCallback.java @@ -21,7 +21,7 @@ */ public class WaitContainerResultCallback extends ResultCallbackTemplate { - private final static Logger LOGGER = LoggerFactory.getLogger(WaitContainerResultCallback.class); + private static final Logger LOGGER = LoggerFactory.getLogger(WaitContainerResultCallback.class); @CheckForNull private WaitResponse waitResponse = null; diff --git a/src/main/java/com/github/dockerjava/jaxrs/connector/ApacheConnector.java b/src/main/java/com/github/dockerjava/jaxrs/connector/ApacheConnector.java index cfbabb5136..7994f32618 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/connector/ApacheConnector.java +++ b/src/main/java/com/github/dockerjava/jaxrs/connector/ApacheConnector.java @@ -182,7 +182,7 @@ @SuppressWarnings("deprecation") class ApacheConnector implements Connector { - private final static Logger LOGGER = Logger.getLogger(ApacheConnector.class.getName()); + private static final Logger LOGGER = Logger.getLogger(ApacheConnector.class.getName()); private static final VersionInfo VERSION_INFO; diff --git a/src/test/resources/checkstyle/checkstyle-config.xml b/src/test/resources/checkstyle/checkstyle-config.xml index 0a09695132..ee08b57c20 100644 --- a/src/test/resources/checkstyle/checkstyle-config.xml +++ b/src/test/resources/checkstyle/checkstyle-config.xml @@ -114,6 +114,8 @@ + + From 1fc561bf1245c3464deb4ad44de619b781527d0d Mon Sep 17 00:00:00 2001 From: Kanstantsin Shautsou Date: Sun, 31 Jan 2016 19:05:58 +0300 Subject: [PATCH 029/912] Checkstyle: fixed braces. --- .../github/dockerjava/api/model/AuthConfig.java | 2 ++ .../java/com/github/dockerjava/api/model/Bind.java | 3 ++- .../com/github/dockerjava/api/model/Device.java | 3 ++- .../github/dockerjava/api/model/ExposedPort.java | 3 ++- .../com/github/dockerjava/api/model/Frame.java | 2 ++ .../github/dockerjava/api/model/Identifier.java | 13 ++++++++----- .../java/com/github/dockerjava/api/model/Link.java | 3 ++- .../com/github/dockerjava/api/model/LogConfig.java | 3 ++- .../github/dockerjava/api/model/PortBinding.java | 3 ++- .../com/github/dockerjava/api/model/Ports.java | 3 ++- .../github/dockerjava/api/model/Repository.java | 3 ++- .../github/dockerjava/api/model/RestartPolicy.java | 11 ++++++++--- .../com/github/dockerjava/api/model/Ulimit.java | 2 ++ .../com/github/dockerjava/api/model/Volume.java | 3 ++- .../com/github/dockerjava/api/model/VolumeRW.java | 3 ++- .../github/dockerjava/api/model/VolumesFrom.java | 3 ++- .../com/github/dockerjava/core/AuthConfigFile.java | 2 ++ .../github/dockerjava/core/DockerClientConfig.java | 5 ++++- .../github/dockerjava/core/DockerClientImpl.java | 9 ++++++--- .../github/dockerjava/core/KeystoreSSLConfig.java | 3 ++- .../github/dockerjava/core/RemoteApiVersion.java | 2 ++ .../core/async/ResultCallbackTemplate.java | 9 +++++---- .../dockerjava/core/command/BuildImageCmdImpl.java | 9 ++++++--- .../dockerjava/core/dockerfile/Dockerfile.java | 9 ++++++--- .../dockerjava/core/util/FiltersBuilder.java | 2 ++ .../dockerjava/jaxrs/AttachContainerCmdExec.java | 3 ++- .../dockerjava/jaxrs/DockerCmdExecFactoryImpl.java | 12 ++++++++---- .../dockerjava/jaxrs/ListVolumesCmdExec.java | 3 ++- .../dockerjava/jaxrs/TopContainerCmdExec.java | 3 ++- .../jaxrs/async/AbstractCallbackNotifier.java | 3 ++- .../dockerjava/netty/exec/ListNetworksCmdExec.java | 3 ++- .../dockerjava/netty/exec/ListVolumesCmdExec.java | 3 ++- .../dockerjava/netty/exec/TopContainerCmdExec.java | 3 ++- .../netty/handler/FramedResponseStreamHandler.java | 3 ++- .../resources/checkstyle/checkstyle-config.xml | 14 ++++++++++++++ 35 files changed, 117 insertions(+), 46 deletions(-) diff --git a/src/main/java/com/github/dockerjava/api/model/AuthConfig.java b/src/main/java/com/github/dockerjava/api/model/AuthConfig.java index 0e994daf3c..0bd6cac8cf 100644 --- a/src/main/java/com/github/dockerjava/api/model/AuthConfig.java +++ b/src/main/java/com/github/dockerjava/api/model/AuthConfig.java @@ -79,6 +79,7 @@ public String toString() { return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE); } + //CHECKSTYLE:OFF @Override public int hashCode() { final int prime = 31; @@ -127,4 +128,5 @@ public boolean equals(Object obj) { return false; return true; } + //CHECKSTYLE:ON } diff --git a/src/main/java/com/github/dockerjava/api/model/Bind.java b/src/main/java/com/github/dockerjava/api/model/Bind.java index f7f6954f52..aa48639238 100644 --- a/src/main/java/com/github/dockerjava/api/model/Bind.java +++ b/src/main/java/com/github/dockerjava/api/model/Bind.java @@ -72,8 +72,9 @@ public boolean equals(Object obj) { Bind other = (Bind) obj; return new EqualsBuilder().append(path, other.getPath()).append(volume, other.getVolume()) .append(accessMode, other.getAccessMode()).isEquals(); - } else + } else { return super.equals(obj); + } } @Override diff --git a/src/main/java/com/github/dockerjava/api/model/Device.java b/src/main/java/com/github/dockerjava/api/model/Device.java index 21aef589a8..9240239b10 100644 --- a/src/main/java/com/github/dockerjava/api/model/Device.java +++ b/src/main/java/com/github/dockerjava/api/model/Device.java @@ -52,8 +52,9 @@ public boolean equals(Object obj) { return new EqualsBuilder().append(cGroupPermissions, other.getcGroupPermissions()) .append(pathInContainer, other.getPathInContainer()).append(pathOnHost, other.getPathOnHost()) .isEquals(); - } else + } else { return super.equals(obj); + } } @Override diff --git a/src/main/java/com/github/dockerjava/api/model/ExposedPort.java b/src/main/java/com/github/dockerjava/api/model/ExposedPort.java index 4dbdbe19b3..43ee922912 100644 --- a/src/main/java/com/github/dockerjava/api/model/ExposedPort.java +++ b/src/main/java/com/github/dockerjava/api/model/ExposedPort.java @@ -151,8 +151,9 @@ public boolean equals(Object obj) { if (obj instanceof ExposedPort) { ExposedPort other = (ExposedPort) obj; return new EqualsBuilder().append(protocol, other.getProtocol()).append(port, other.getPort()).isEquals(); - } else + } else { return super.equals(obj); + } } @Override diff --git a/src/main/java/com/github/dockerjava/api/model/Frame.java b/src/main/java/com/github/dockerjava/api/model/Frame.java index 1be92f9b68..e398ec2559 100644 --- a/src/main/java/com/github/dockerjava/api/model/Frame.java +++ b/src/main/java/com/github/dockerjava/api/model/Frame.java @@ -28,6 +28,7 @@ public String toString() { return String.format("%s: %s", streamType, new String(payload).trim()); } + //CHECKSTYLE:OFF @Override public boolean equals(Object o) { if (this == o) @@ -47,4 +48,5 @@ public int hashCode() { result = 31 * result + Arrays.hashCode(payload); return result; } + //CHECKSTYLE:ON } diff --git a/src/main/java/com/github/dockerjava/api/model/Identifier.java b/src/main/java/com/github/dockerjava/api/model/Identifier.java index 96daab11a2..ed5100e252 100644 --- a/src/main/java/com/github/dockerjava/api/model/Identifier.java +++ b/src/main/java/com/github/dockerjava/api/model/Identifier.java @@ -14,10 +14,11 @@ public class Identifier { public Identifier(Repository repository, String tag) { this.repository = repository; - if (tag == null) + if (tag == null) { this.tag = Optional.absent(); - else + } else { this.tag = Optional.of(tag); + } } /** @@ -33,15 +34,17 @@ public static Identifier fromCompoundString(String identifier) { String[] parts = identifier.split("/"); if (parts.length != 2) { String[] rhs = identifier.split(":"); - if (rhs.length != 2) + if (rhs.length != 2) { return new Identifier(new Repository(identifier), null); - else + } else { return new Identifier(new Repository(rhs[0]), rhs[1]); + } } String[] rhs = parts[1].split(":"); - if (rhs.length != 2) + if (rhs.length != 2) { return new Identifier(new Repository(identifier), null); + } return new Identifier(new Repository(parts[0] + "/" + rhs[0]), rhs[1]); } diff --git a/src/main/java/com/github/dockerjava/api/model/Link.java b/src/main/java/com/github/dockerjava/api/model/Link.java index 43f9de65bf..f647438a93 100644 --- a/src/main/java/com/github/dockerjava/api/model/Link.java +++ b/src/main/java/com/github/dockerjava/api/model/Link.java @@ -74,8 +74,9 @@ public boolean equals(final Object obj) { if (obj instanceof Link) { final Link other = (Link) obj; return new EqualsBuilder().append(name, other.getName()).append(alias, other.getAlias()).isEquals(); - } else + } else { return super.equals(obj); + } } @Override diff --git a/src/main/java/com/github/dockerjava/api/model/LogConfig.java b/src/main/java/com/github/dockerjava/api/model/LogConfig.java index 37bb17a8ee..669bbc554e 100644 --- a/src/main/java/com/github/dockerjava/api/model/LogConfig.java +++ b/src/main/java/com/github/dockerjava/api/model/LogConfig.java @@ -98,8 +98,9 @@ public LoggingType deserialize(JsonParser jsonParser, DeserializationContext des JsonNode node = oc.readTree(jsonParser); for (LoggingType loggingType : values()) { - if (loggingType.getType().equals(node.asText())) + if (loggingType.getType().equals(node.asText())) { return loggingType; + } } throw new IllegalArgumentException("No enum constant " + LoggingType.class + "." + node.asText()); diff --git a/src/main/java/com/github/dockerjava/api/model/PortBinding.java b/src/main/java/com/github/dockerjava/api/model/PortBinding.java index 99e04f1bc7..81f94ca063 100644 --- a/src/main/java/com/github/dockerjava/api/model/PortBinding.java +++ b/src/main/java/com/github/dockerjava/api/model/PortBinding.java @@ -64,8 +64,9 @@ public boolean equals(Object obj) { PortBinding other = (PortBinding) obj; return new EqualsBuilder().append(binding, other.getBinding()).append(exposedPort, other.getExposedPort()) .isEquals(); - } else + } else { return super.equals(obj); + } } @Override diff --git a/src/main/java/com/github/dockerjava/api/model/Ports.java b/src/main/java/com/github/dockerjava/api/model/Ports.java index 6132e46475..43ad92585d 100644 --- a/src/main/java/com/github/dockerjava/api/model/Ports.java +++ b/src/main/java/com/github/dockerjava/api/model/Ports.java @@ -249,8 +249,9 @@ public boolean equals(Object obj) { Binding other = (Binding) obj; return new EqualsBuilder().append(hostIp, other.getHostIp()).append(hostPort, other.getHostPort()) .isEquals(); - } else + } else { return super.equals(obj); + } } } diff --git a/src/main/java/com/github/dockerjava/api/model/Repository.java b/src/main/java/com/github/dockerjava/api/model/Repository.java index 3055c8980f..1e814a1b53 100644 --- a/src/main/java/com/github/dockerjava/api/model/Repository.java +++ b/src/main/java/com/github/dockerjava/api/model/Repository.java @@ -37,8 +37,9 @@ public String toString() { } public String getPath() { - if (!name.contains("/")) + if (!name.contains("/")) { return name; + } return name.substring(name.indexOf("/") + 1); } diff --git a/src/main/java/com/github/dockerjava/api/model/RestartPolicy.java b/src/main/java/com/github/dockerjava/api/model/RestartPolicy.java index 34f8e7e570..d5c8f6e8ec 100644 --- a/src/main/java/com/github/dockerjava/api/model/RestartPolicy.java +++ b/src/main/java/com/github/dockerjava/api/model/RestartPolicy.java @@ -89,10 +89,14 @@ public static RestartPolicy parse(String serialized) throws IllegalArgumentExcep try { String[] parts = serialized.split(":"); String name = parts[0]; - if ("no".equals(name)) + if ("no".equals(name)) { return noRestart(); - if ("always".equals(name)) + } + + if ("always".equals(name)) { return alwaysRestart(); + } + if ("on-failure".equals(name)) { int count = 0; if (parts.length == 2) { @@ -124,8 +128,9 @@ public boolean equals(Object obj) { RestartPolicy other = (RestartPolicy) obj; return new EqualsBuilder().append(maximumRetryCount, other.getMaximumRetryCount()) .append(name, other.getName()).isEquals(); - } else + } else { return super.equals(obj); + } } @Override diff --git a/src/main/java/com/github/dockerjava/api/model/Ulimit.java b/src/main/java/com/github/dockerjava/api/model/Ulimit.java index 209eb22fee..51602e043c 100644 --- a/src/main/java/com/github/dockerjava/api/model/Ulimit.java +++ b/src/main/java/com/github/dockerjava/api/model/Ulimit.java @@ -45,6 +45,7 @@ public Integer getHard() { return hard; } + //CHECKSTYLE:OFF @Override public boolean equals(Object obj) { if (obj instanceof Ulimit) { @@ -60,4 +61,5 @@ public boolean equals(Object obj) { public int hashCode() { return new HashCodeBuilder().append(name).append(soft).append(hard).toHashCode(); } + //CHECKSTYLE:ON } diff --git a/src/main/java/com/github/dockerjava/api/model/Volume.java b/src/main/java/com/github/dockerjava/api/model/Volume.java index 93f7e4e4fa..655a8dbfc0 100644 --- a/src/main/java/com/github/dockerjava/api/model/Volume.java +++ b/src/main/java/com/github/dockerjava/api/model/Volume.java @@ -30,8 +30,9 @@ public boolean equals(Object obj) { if (obj instanceof Volume) { Volume other = (Volume) obj; return new EqualsBuilder().append(path, other.getPath()).isEquals(); - } else + } else { return super.equals(obj); + } } @Override diff --git a/src/main/java/com/github/dockerjava/api/model/VolumeRW.java b/src/main/java/com/github/dockerjava/api/model/VolumeRW.java index bdb347bee9..3709d1b0c3 100644 --- a/src/main/java/com/github/dockerjava/api/model/VolumeRW.java +++ b/src/main/java/com/github/dockerjava/api/model/VolumeRW.java @@ -69,8 +69,9 @@ public boolean equals(Object obj) { VolumeRW other = (VolumeRW) obj; return new EqualsBuilder().append(getVolume(), other.getVolume()).append(accessMode, other.getAccessMode()) .isEquals(); - } else + } else { return super.equals(obj); + } } @Override diff --git a/src/main/java/com/github/dockerjava/api/model/VolumesFrom.java b/src/main/java/com/github/dockerjava/api/model/VolumesFrom.java index 01f80aba9d..78585ef48d 100644 --- a/src/main/java/com/github/dockerjava/api/model/VolumesFrom.java +++ b/src/main/java/com/github/dockerjava/api/model/VolumesFrom.java @@ -77,8 +77,9 @@ public boolean equals(Object obj) { VolumesFrom other = (VolumesFrom) obj; return new EqualsBuilder().append(container, other.getContainer()) .append(accessMode, other.getAccessMode()).isEquals(); - } else + } else { return super.equals(obj); + } } @Override diff --git a/src/main/java/com/github/dockerjava/core/AuthConfigFile.java b/src/main/java/com/github/dockerjava/core/AuthConfigFile.java index 78fd453ab9..7315a05afe 100644 --- a/src/main/java/com/github/dockerjava/core/AuthConfigFile.java +++ b/src/main/java/com/github/dockerjava/core/AuthConfigFile.java @@ -63,6 +63,7 @@ public AuthConfigurations getAuthConfigurations() { return authConfigurations; } + //CHECKSTYLE:OFF @Override public int hashCode() { final int prime = 31; @@ -87,6 +88,7 @@ public boolean equals(Object obj) { return false; return true; } + //CHECKSTYLE:ON @Override public String toString() { diff --git a/src/main/java/com/github/dockerjava/core/DockerClientConfig.java b/src/main/java/com/github/dockerjava/core/DockerClientConfig.java index 8c363321cc..35f54c7364 100644 --- a/src/main/java/com/github/dockerjava/core/DockerClientConfig.java +++ b/src/main/java/com/github/dockerjava/core/DockerClientConfig.java @@ -272,8 +272,9 @@ public AuthConfig effectiveAuthConfig(String imageName) { AuthConfig otherAuthConfig = getAuthConfig(); - if (otherAuthConfig != null) + if (otherAuthConfig != null) { authConfig = otherAuthConfig; + } return authConfig; } @@ -294,6 +295,7 @@ public AuthConfigurations getAuthConfigurations() { return new AuthConfigurations(); } + //CHECKSTYLE:OFF @Override public boolean equals(Object o) { if (this == o) @@ -335,6 +337,7 @@ public int hashCode() { result = 31 * result + (sslConfig != null ? sslConfig.hashCode() : 0); return result; } + //CHECKSTYLE:ON @Override public String toString() { diff --git a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java index ede1356135..ca842b3830 100644 --- a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java +++ b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java @@ -214,20 +214,23 @@ public PushImageCmd pushImageCmd(String name) { PushImageCmd cmd = new PushImageCmdImpl(getDockerCmdExecFactory().createPushImageCmdExec(), name); AuthConfig cfg = dockerClientConfig.effectiveAuthConfig(name); - if (cfg != null) + if (cfg != null) { cmd.withAuthConfig(cfg); + } return cmd; } @Override public PushImageCmd pushImageCmd(Identifier identifier) { PushImageCmd cmd = pushImageCmd(identifier.repository.name); - if (identifier.tag.isPresent()) + if (identifier.tag.isPresent()) { cmd.withTag(identifier.tag.get()); + } AuthConfig cfg = dockerClientConfig.effectiveAuthConfig(identifier.repository.name); - if (cfg != null) + if (cfg != null) { cmd.withAuthConfig(cfg); + } return cmd; } diff --git a/src/main/java/com/github/dockerjava/core/KeystoreSSLConfig.java b/src/main/java/com/github/dockerjava/core/KeystoreSSLConfig.java index a552b37755..bdc2e6e891 100644 --- a/src/main/java/com/github/dockerjava/core/KeystoreSSLConfig.java +++ b/src/main/java/com/github/dockerjava/core/KeystoreSSLConfig.java @@ -81,8 +81,9 @@ public SSLContext getSSLContext() throws KeyManagementException, UnrecoverableKe String httpProtocols = System.getProperty("https.protocols"); System.setProperty("https.protocols", "TLSv1"); - if (httpProtocols != null) + if (httpProtocols != null) { System.setProperty("https.protocols", httpProtocols); + } final KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory .getDefaultAlgorithm()); diff --git a/src/main/java/com/github/dockerjava/core/RemoteApiVersion.java b/src/main/java/com/github/dockerjava/core/RemoteApiVersion.java index 63269ce55c..80f9406b79 100644 --- a/src/main/java/com/github/dockerjava/core/RemoteApiVersion.java +++ b/src/main/java/com/github/dockerjava/core/RemoteApiVersion.java @@ -127,6 +127,7 @@ public boolean isGreaterOrEqual(final RemoteApiVersion other) { return false; } + //CHECKSTYLE:OFF @Override public boolean equals(final Object o) { if (this == o) @@ -136,6 +137,7 @@ public boolean equals(final Object o) { final RemoteApiVersion that = (RemoteApiVersion) o; return Objects.equal(major, that.major) && Objects.equal(minor, that.minor); } + //CHECKSTYLE:ON @Override public int hashCode() { diff --git a/src/main/java/com/github/dockerjava/core/async/ResultCallbackTemplate.java b/src/main/java/com/github/dockerjava/core/async/ResultCallbackTemplate.java index f87c0e5253..0e146c1e9f 100644 --- a/src/main/java/com/github/dockerjava/core/async/ResultCallbackTemplate.java +++ b/src/main/java/com/github/dockerjava/core/async/ResultCallbackTemplate.java @@ -47,11 +47,11 @@ public void onStart(Closeable stream) { @Override public void onError(Throwable throwable) { - if (closed) - return; + if (closed) return; - if (this.firstError == null) + if (this.firstError == null) { this.firstError = throwable; + } try { LOGGER.error("Error during callback", throwable); @@ -76,8 +76,9 @@ public void onComplete() { @Override public void close() throws IOException { closed = true; - if (stream != null) + if (stream != null) { stream.close(); + } completed.countDown(); } diff --git a/src/main/java/com/github/dockerjava/core/command/BuildImageCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/BuildImageCmdImpl.java index acf4fa10a8..ef57e84a4f 100644 --- a/src/main/java/com/github/dockerjava/core/command/BuildImageCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/BuildImageCmdImpl.java @@ -248,13 +248,16 @@ public BuildImageCmd withBaseDirectory(File baseDirectory) { @Override public BuildImageCmdImpl withDockerfile(File dockerfile) { checkNotNull(dockerfile); - if (!dockerfile.exists()) + if (!dockerfile.exists()) { throw new IllegalArgumentException("Dockerfile does not exist"); - if (!dockerfile.isFile()) + } + if (!dockerfile.isFile()) { throw new IllegalArgumentException("Not a directory"); + } - if (baseDirectory == null) + if (baseDirectory == null) { withBaseDirectory(dockerfile.getParentFile()); + } this.dockerFile = dockerfile; diff --git a/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java b/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java index d7173d4d8b..9a94d6b1d7 100644 --- a/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java +++ b/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java @@ -221,21 +221,24 @@ private String effectiveMatchingIgnorePattern(File file) { List matchingPattern = matchingIgnorePatterns(relativeFilename); - if (matchingPattern.isEmpty()) + if (matchingPattern.isEmpty()) { return null; + } String lastMatchingPattern = matchingPattern.get(matchingPattern.size() - 1); int lastMatchingPatternIndex = ignores.lastIndexOf(lastMatchingPattern); - if (lastMatchingPatternIndex == ignores.size() - 1) + if (lastMatchingPatternIndex == ignores.size() - 1) { return lastMatchingPattern; + } List remainingIgnorePattern = ignores.subList(lastMatchingPatternIndex + 1, ignores.size()); for (String ignorePattern : remainingIgnorePattern) { - if (ignorePattern.equals("!" + relativeFilename)) + if (ignorePattern.equals("!" + relativeFilename)) { return null; + } } return lastMatchingPattern; diff --git a/src/main/java/com/github/dockerjava/core/util/FiltersBuilder.java b/src/main/java/com/github/dockerjava/core/util/FiltersBuilder.java index d6cd0d9f79..7ad3804819 100644 --- a/src/main/java/com/github/dockerjava/core/util/FiltersBuilder.java +++ b/src/main/java/com/github/dockerjava/core/util/FiltersBuilder.java @@ -81,6 +81,7 @@ private static List labelsMapToList(Map labels) { return result; } + //CHECKSTYLE:OFF @Override public boolean equals(Object o) { if (this == o) @@ -93,6 +94,7 @@ public boolean equals(Object o) { return filters.equals(filters1.filters); } + //CHECKSTYLE:ON @Override public int hashCode() { diff --git a/src/main/java/com/github/dockerjava/jaxrs/AttachContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/AttachContainerCmdExec.java index b3670a8b91..c21c305df8 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/AttachContainerCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/AttachContainerCmdExec.java @@ -26,9 +26,10 @@ public AttachContainerCmdExec(WebTarget baseResource, DockerClientConfig dockerC protected AbstractCallbackNotifier callbackNotifier(AttachContainerCmd command, ResultCallback resultCallback) { - if (command.getStdin() != null) + if (command.getStdin() != null) { throw new UnsupportedOperationException( "Passing stdin to the container is currently not supported. Try experimental netty engine!"); + } WebTarget webTarget = getBaseResource().path("/containers/{id}/attach").resolveTemplate("id", command.getContainerId()); diff --git a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java index bbd71ba38d..79f60ec396 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java +++ b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java @@ -134,15 +134,17 @@ public void init(DockerClientConfig dockerClientConfig) { if (clientResponseFilters != null) { for (ClientResponseFilter clientResponseFilter : clientResponseFilters) { - if (clientResponseFilter != null) + if (clientResponseFilter != null) { clientConfig.register(clientResponseFilter); + } } } if (clientRequestFilters != null) { for (ClientRequestFilter clientRequestFilter : clientRequestFilters) { - if (clientRequestFilter != null) + if (clientRequestFilter != null) { clientConfig.register(clientRequestFilter); + } } } @@ -171,10 +173,12 @@ public void init(DockerClientConfig dockerClientConfig) { PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(getSchemeRegistry( originalUri, sslContext)); - if (maxTotalConnections != null) + if (maxTotalConnections != null) { connManager.setMaxTotal(maxTotalConnections); - if (maxPerRouteConnections != null) + } + if (maxPerRouteConnections != null) { connManager.setDefaultMaxPerRoute(maxPerRouteConnections); + } clientConfig.property(ApacheClientProperties.CONNECTION_MANAGER, connManager); diff --git a/src/main/java/com/github/dockerjava/jaxrs/ListVolumesCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/ListVolumesCmdExec.java index dd877a89aa..4f2165b933 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/ListVolumesCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/ListVolumesCmdExec.java @@ -25,8 +25,9 @@ public ListVolumesCmdExec(WebTarget baseResource, DockerClientConfig dockerClien protected ListVolumesResponse execute(ListVolumesCmd command) { WebTarget webTarget = getBaseResource().path("/volumes"); - if (command.getFilters() != null && !command.getFilters().isEmpty()) + if (command.getFilters() != null && !command.getFilters().isEmpty()) { webTarget = webTarget.queryParam("filters", urlPathSegmentEscaper().escape(FiltersEncoder.jsonEncode(command.getFilters()))); + } LOGGER.trace("GET: {}", webTarget); diff --git a/src/main/java/com/github/dockerjava/jaxrs/TopContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/TopContainerCmdExec.java index 48b6641a1c..22841d8bfe 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/TopContainerCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/TopContainerCmdExec.java @@ -25,8 +25,9 @@ protected TopContainerResponse execute(TopContainerCmd command) { WebTarget webResource = getBaseResource().path("/containers/{id}/top").resolveTemplate("id", command.getContainerId()); - if (!StringUtils.isEmpty(command.getPsArgs())) + if (!StringUtils.isEmpty(command.getPsArgs())) { webResource = webResource.queryParam("ps_args", command.getPsArgs()); + } LOGGER.trace("GET: {}", webResource); return webResource.request().accept(MediaType.APPLICATION_JSON).get(TopContainerResponse.class); diff --git a/src/main/java/com/github/dockerjava/jaxrs/async/AbstractCallbackNotifier.java b/src/main/java/com/github/dockerjava/jaxrs/async/AbstractCallbackNotifier.java index e94ad1f2c3..aac5a94d64 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/async/AbstractCallbackNotifier.java +++ b/src/main/java/com/github/dockerjava/jaxrs/async/AbstractCallbackNotifier.java @@ -58,8 +58,9 @@ public Void call() throws Exception { try { InputStream inputStream = new WrappedResponseInputStream(response); - if (resultCallback != null) + if (resultCallback != null) { responseStreamProcessor.processResponseStream(inputStream, resultCallback); + } return null; } catch (Exception e) { diff --git a/src/main/java/com/github/dockerjava/netty/exec/ListNetworksCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/ListNetworksCmdExec.java index e0c945d6db..11e5fe2385 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/ListNetworksCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/ListNetworksCmdExec.java @@ -28,8 +28,9 @@ public ListNetworksCmdExec(WebTarget baseResource, DockerClientConfig dockerClie protected List execute(ListNetworksCmd command) { WebTarget webTarget = getBaseResource().path("/networks"); - if (command.getFilters() != null && !command.getFilters().isEmpty()) + if (command.getFilters() != null && !command.getFilters().isEmpty()) { webTarget = webTarget.queryParam("filters", urlPathSegmentEscaper().escape(FiltersEncoder.jsonEncode(command.getFilters()))); + } LOGGER.trace("GET: {}", webTarget); diff --git a/src/main/java/com/github/dockerjava/netty/exec/ListVolumesCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/ListVolumesCmdExec.java index 98d073ff58..1db5684cbc 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/ListVolumesCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/ListVolumesCmdExec.java @@ -26,8 +26,9 @@ public ListVolumesCmdExec(WebTarget baseResource, DockerClientConfig dockerClien protected ListVolumesResponse execute(ListVolumesCmd command) { WebTarget webTarget = getBaseResource().path("/volumes"); - if (command.getFilters() != null && !command.getFilters().isEmpty()) + if (command.getFilters() != null && !command.getFilters().isEmpty()) { webTarget = webTarget.queryParam("filters", urlPathSegmentEscaper().escape(FiltersEncoder.jsonEncode(command.getFilters()))); + } LOGGER.trace("GET: {}", webTarget); diff --git a/src/main/java/com/github/dockerjava/netty/exec/TopContainerCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/TopContainerCmdExec.java index 07ec12b03a..c4ae9249dd 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/TopContainerCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/TopContainerCmdExec.java @@ -25,8 +25,9 @@ protected TopContainerResponse execute(TopContainerCmd command) { WebTarget webResource = getBaseResource().path("/containers/{id}/top").resolveTemplate("id", command.getContainerId()); - if (!StringUtils.isEmpty(command.getPsArgs())) + if (!StringUtils.isEmpty(command.getPsArgs())) { webResource = webResource.queryParam("ps_args", command.getPsArgs()); + } LOGGER.trace("GET: {}", webResource); return webResource.request().accept(MediaType.APPLICATION_JSON).get(new TypeReference() { diff --git a/src/main/java/com/github/dockerjava/netty/handler/FramedResponseStreamHandler.java b/src/main/java/com/github/dockerjava/netty/handler/FramedResponseStreamHandler.java index 945833cddf..b58292b51c 100644 --- a/src/main/java/com/github/dockerjava/netty/handler/FramedResponseStreamHandler.java +++ b/src/main/java/com/github/dockerjava/netty/handler/FramedResponseStreamHandler.java @@ -89,8 +89,9 @@ private Frame decode() { if (streamType.equals(StreamType.RAW)) { - if (payloadCnt == 0) + if (payloadCnt == 0) { payload = new byte[rawBuffer.readableBytes()]; + } int count = read(payload, payloadCnt, rawBuffer.readableBytes()); diff --git a/src/test/resources/checkstyle/checkstyle-config.xml b/src/test/resources/checkstyle/checkstyle-config.xml index ee08b57c20..a970648455 100644 --- a/src/test/resources/checkstyle/checkstyle-config.xml +++ b/src/test/resources/checkstyle/checkstyle-config.xml @@ -119,6 +119,20 @@ + + + + + + + + + + + + + + From 552b05dbafbabab2eeac7c21f596779f8d2e7367 Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Sat, 30 Jan 2016 22:35:49 +0100 Subject: [PATCH 030/912] Refactoring of DockerClientConfig to better match with docker CLI configuration options --- README.md | 62 ++-- .../api/command/DockerCmdExecFactory.java | 4 + .../dockerjava/core/DockerClientConfig.java | 317 +++++++++--------- .../dockerjava/core/DockerClientImpl.java | 14 +- .../dockerjava/jaxrs/AbstrDockerCmdExec.java | 2 +- .../jaxrs/DockerCmdExecFactoryImpl.java | 83 +++-- .../netty/DockerCmdExecFactoryImpl.java | 31 +- .../netty/exec/AbstrDockerCmdExec.java | 2 +- src/main/resources/docker-java.properties | 17 + src/main/resources/docker.io.properties | 5 - .../client/AbstractDockerClientTest.java | 6 +- .../core/DockerClientConfigTest.java | 195 +++++------ .../dockerjava/core/DockerClientImplTest.java | 7 +- .../core/TestDockerCmdExecFactory.java | 7 + .../someHomeDir/.docker/certs/dummy.txt | 0 .../resources/someHomeDir/.docker/config.json | 9 + 16 files changed, 414 insertions(+), 347 deletions(-) create mode 100644 src/main/resources/docker-java.properties delete mode 100644 src/main/resources/docker.io.properties create mode 100644 src/test/resources/someHomeDir/.docker/certs/dummy.txt create mode 100644 src/test/resources/someHomeDir/.docker/config.json diff --git a/README.md b/README.md index 26ec653ac5..9175135ae7 100644 --- a/README.md +++ b/README.md @@ -85,13 +85,15 @@ For code examples, please look at the [Wiki](https://github.com/docker-java/dock There are a couple of configuration items, all of which have sensible defaults: -* `url` The Docker URL, e.g. `https://localhost:2376` or `unix:///var/run/docker.sock` -* `version` The API version, e.g. `1.16`. -* `username` Your registry username (required to push containers). -* `password` Your registry password. -* `email` Your registry email. -* `serverAddress` Your registry's address. -* `dockerCertPath` Path to the docker certs. +* `DOCKER_HOST` The Docker Host URL, e.g. `tcp://localhost:2376` or `unix:///var/run/docker.sock` +* `DOCKER_TLS_VERIFY` enable/disable TLS verification (switch between `http` and `https` protocol) +* `DOCKER_CERT_PATH` Path to the certificates needed for TLS verification +* `DOCKER_CONFIG` Path for additional docker configuration files (like `.dockercfg`) +* `api.version` The API version, e.g. `1.21`. +* `registry.url` Your registry's address. +* `registry.username` Your registry username (required to push containers). +* `registry.password` Your registry password. +* `registry.email` Your registry email. There are three ways to configure, in descending order of precedence: @@ -99,42 +101,46 @@ There are three ways to configure, in descending order of precedence: In your application, e.g. DockerClientConfig config = DockerClientConfig.createDefaultConfigBuilder() - .withVersion("1.16") - .withUri("https://my-docker-host.tld:2376") - .withUsername("dockeruser") - .withPassword("ilovedocker") - .withEmail("dockeruser@github.com") - .withServerAddress("https://index.docker.io/v1/") - .withDockerCertPath("/home/user/.docker") + .withDockerHost("tcp://my-docker-host.tld:2376") + .withDockerTlsVerify("1") + .withDockerCertPath("/home/user/.docker/certs") + .withDockerConfig("/home/user/.docker") + .withApiVersion("1.21") + .withRegistryUrl("https://index.docker.io/v1/") + .withRegistryUsername("dockeruser") + .withRegistryPassword("ilovedocker") + .withRegistryEmail("dockeruser@github.com") .build(); DockerClient docker = DockerClientBuilder.getInstance(config).build(); #### Properties - docker.io.url=https://localhost:2376 - docker.io.version=1.16 - docker.io.username=dockeruser - docker.io.password=ilovedocker - docker.io.email=dockeruser@github.com - docker.io.serverAddress=https://index.docker.io/v1/ - docker.io.dockerCertPath=/home/user/.docker - + DOCKER_HOST=tcp://localhost:2376 + DOCKER_TLS_VERIFY=1 + DOCKER_CERT_PATH=/home/user/.docker/certs + DOCKER_CONFIG=/home/user/.docker + api.version=1.21 + registry.url=https://index.docker.io/v1/ + registry.username=dockeruser + registry.password=ilovedocker + registry.email=dockeruser@github.com ##### System Properties: - java -Ddocker.io.username=dockeruser pkg.Main + java -Dregistry.username=dockeruser pkg.Main ##### System Environment - export DOCKER_URL=http://localhost:2376 - -Note: we also auto-detect defaults. If you use `DOCKER_HOST` we use that value, and if `DOCKER_CERT_PATH` or `DOCKER_TLS_VERIFY=1` is set, we switch to SSL. + export DOCKER_URL=tcp://localhost:2376 + export DOCKER_TLS_VERIFY=1 + export DOCKER_CERT_PATH=/home/user/.docker/certs + export DOCKER_CONFIG=/home/user/.docker ##### File System -In `$HOME/.docker.io.properties` +In `$HOME/.docker-java.properties` ##### Class Path -In the class path at `/docker.io.properties` +In the class path at `/docker-java.properties` diff --git a/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java b/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java index fb1715e384..fc793558f2 100644 --- a/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java +++ b/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java @@ -3,6 +3,8 @@ import java.io.Closeable; import java.io.IOException; +import javax.net.ssl.SSLContext; + import com.github.dockerjava.core.DockerClientConfig; public interface DockerCmdExecFactory extends Closeable { @@ -105,6 +107,8 @@ public interface DockerCmdExecFactory extends Closeable { public DisconnectFromNetworkCmd.Exec createDisconnectFromNetworkCmdExec(); + public DockerCmdExecFactory withSSLContext(SSLContext sslContext); + @Override public void close() throws IOException; diff --git a/src/main/java/com/github/dockerjava/core/DockerClientConfig.java b/src/main/java/com/github/dockerjava/core/DockerClientConfig.java index fa5c77e6ab..400f417eac 100644 --- a/src/main/java/com/github/dockerjava/core/DockerClientConfig.java +++ b/src/main/java/com/github/dockerjava/core/DockerClientConfig.java @@ -8,10 +8,17 @@ import java.io.InputStream; import java.io.Serializable; import java.net.URI; -import java.util.Collections; -import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Properties; +import java.util.Set; + +import org.apache.commons.lang.BooleanUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.commons.lang.builder.ToStringStyle; import com.github.dockerjava.api.exception.DockerClientException; import com.github.dockerjava.api.model.AuthConfig; @@ -19,74 +26,108 @@ import com.github.dockerjava.core.NameParser.HostnameReposName; import com.github.dockerjava.core.NameParser.ReposTag; +/** + * Respects some of the docker CLI options. See + * https://docs.docker.com/engine/reference/commandline/cli/#environment-variables + */ public class DockerClientConfig implements Serializable { private static final long serialVersionUID = -4307357472441531489L; - private static final String DOCKER_HOST_PROPERTY = "DOCKER_HOST"; + public static final String DOCKER_HOST = "DOCKER_HOST"; - private static final String DOCKER_CERT_PATH_PROPERTY = "DOCKER_CERT_PATH"; + public static final String DOCKER_TLS_VERIFY = "DOCKER_TLS_VERIFY"; - private static final String DOCKER_VERIFY_TLS_PROPERTY = "DOCKER_TLS_VERIFY"; + public static final String DOCKER_CONFIG = "DOCKER_CONFIG"; - private static final String DOCKER_IO_URL_PROPERTY = "docker.io.url"; + public static final String DOCKER_CERT_PATH = "DOCKER_CERT_PATH"; - private static final String DOCKER_IO_VERSION_PROPERTY = "docker.io.version"; + public static final String API_VERSION = "api.version"; - private static final String DOCKER_IO_USERNAME_PROPERTY = "docker.io.username"; + public static final String REGISTRY_USERNAME = "registry.username"; - private static final String DOCKER_IO_PASSWORD_PROPERTY = "docker.io.password"; + public static final String REGISTRY_PASSWORD = "registry.password"; - private static final String DOCKER_IO_EMAIL_PROPERTY = "docker.io.email"; + public static final String REGISTRY_EMAIL = "registry.email"; - private static final String DOCKER_IO_SERVER_ADDRESS_PROPERTY = "docker.io.serverAddress"; + public static final String REGISTRY_URL = "registry.url"; - private static final String DOCKER_IO_DOCKER_CERT_PATH_PROPERTY = "docker.io.dockerCertPath"; + private static final String DOCKER_JAVA_PROPERTIES = "docker-java.properties"; - private static final String DOCKER_IO_DOCKER_CFG_PATH_PROPERTY = "docker.io.dockerCfgPath"; + private static final String DOCKER_CFG = ".dockercfg"; + + private static final Set configKeys = new HashSet(); - /** - * A map from the environment name to the interval name. - */ - // Immutable ish - private static final Map ENV_NAME_TO_IO_NAME; static { - Map m = new HashMap(); - m.put("DOCKER_URL", DOCKER_IO_URL_PROPERTY); - m.put("DOCKER_VERSION", DOCKER_IO_VERSION_PROPERTY); - m.put("DOCKER_USERNAME", DOCKER_IO_USERNAME_PROPERTY); - m.put("DOCKER_PASSWORD", DOCKER_IO_PASSWORD_PROPERTY); - m.put("DOCKER_EMAIL", DOCKER_IO_EMAIL_PROPERTY); - m.put("DOCKER_SERVER_ADDRESS", DOCKER_IO_SERVER_ADDRESS_PROPERTY); - m.put(DOCKER_CERT_PATH_PROPERTY, DOCKER_IO_DOCKER_CERT_PATH_PROPERTY); - m.put("DOCKER_CFG_PATH", DOCKER_IO_DOCKER_CFG_PATH_PROPERTY); - ENV_NAME_TO_IO_NAME = Collections.unmodifiableMap(m); + configKeys.add(DOCKER_HOST); + configKeys.add(DOCKER_TLS_VERIFY); + configKeys.add(DOCKER_CONFIG); + configKeys.add(DOCKER_CERT_PATH); + configKeys.add(API_VERSION); + configKeys.add(REGISTRY_USERNAME); + configKeys.add(REGISTRY_PASSWORD); + configKeys.add(REGISTRY_EMAIL); + configKeys.add(REGISTRY_URL); } - private static final String DOCKER_IO_PROPERTIES_PROPERTY = "docker.io.properties"; + private URI dockerHost; - private URI uri; + private final String registryUsername, registryPassword, registryEmail, registryUrl, dockerConfig, dockerCertPath; - private final String username, password, email, serverAddress, dockerCfgPath; + private boolean dockerTlsVerify; - private final RemoteApiVersion version; + private final RemoteApiVersion apiVersion; - private final SSLConfig sslConfig; + DockerClientConfig(URI dockerHost, String dockerConfig, String apiVersion, String registryUrl, + String registryUsername, String registryPassword, String registryEmail, String dockerCertPath, + boolean dockerTslVerify) { + this.dockerHost = checkDockerHostScheme(dockerHost); + this.dockerTlsVerify = dockerTslVerify; + this.dockerCertPath = checkDockerCertPath(dockerTslVerify, dockerCertPath); + this.dockerConfig = dockerConfig; + this.apiVersion = RemoteApiVersion.parseConfigWithDefault(apiVersion); + this.registryUsername = registryUsername; + this.registryPassword = registryPassword; + this.registryEmail = registryEmail; + this.registryUrl = registryUrl; + } - DockerClientConfig(URI uri, String version, String username, String password, String email, String serverAddress, - String dockerCfgPath, SSLConfig sslConfig) { - this.uri = uri; - this.version = RemoteApiVersion.parseConfigWithDefault(version); - this.username = username; - this.password = password; - this.email = email; - this.serverAddress = serverAddress; - this.dockerCfgPath = dockerCfgPath; - this.sslConfig = sslConfig; + private URI checkDockerHostScheme(URI dockerHost) { + if ("tcp".equals(dockerHost.getScheme()) || "unix".equals(dockerHost.getScheme())) { + return dockerHost; + } else { + throw new DockerClientException("Unsupported protocol scheme found: '" + dockerHost + + "'. Only 'tcp://' or 'unix://' supported."); + } + } + + private String checkDockerCertPath(boolean dockerTlsVerify, String dockerCertPath) { + if (dockerTlsVerify) { + if (StringUtils.isEmpty(dockerCertPath)) { + throw new DockerClientException( + "Enabled TLS verification (DOCKER_TLS_VERIFY=1) but certifate path (DOCKER_CERT_PATH) is not defined."); + } else { + File certPath = new File(dockerCertPath); + + if (!certPath.exists()) { + throw new DockerClientException( + "Certificate path (DOCKER_CERT_PATH) '" + dockerCertPath + "' doesn't exist."); + } + + if(certPath.isDirectory()) { + return dockerCertPath; + } else { + throw new DockerClientException( + "Certificate path (DOCKER_CERT_PATH) '" + dockerCertPath + "' doesn't point to a directory."); + } + } + } else { + return dockerCertPath; + } } private static Properties loadIncludedDockerProperties(Properties systemProperties) { - try (InputStream is = DockerClientConfig.class.getResourceAsStream("/" + DOCKER_IO_PROPERTIES_PROPERTY)) { + try (InputStream is = DockerClientConfig.class.getResourceAsStream("/" + DOCKER_JAVA_PROPERTIES)) { Properties p = new Properties(); p.load(is); replaceProperties(p, systemProperties); @@ -125,7 +166,7 @@ private static Properties overrideDockerPropertiesWithSettingsFromUserHome(Prope overriddenProperties.putAll(p); final File usersDockerPropertiesFile = new File(systemProperties.getProperty("user.home"), "." - + DOCKER_IO_PROPERTIES_PROPERTY); + + DOCKER_JAVA_PROPERTIES); if (usersDockerPropertiesFile.isFile()) { try { final FileInputStream in = new FileInputStream(usersDockerPropertiesFile); @@ -146,27 +187,20 @@ private static Properties overrideDockerPropertiesWithEnv(Properties properties, overriddenProperties.putAll(properties); // special case which is a sensible default - if (env.containsKey(DOCKER_HOST_PROPERTY)) { - overriddenProperties.setProperty(DOCKER_IO_URL_PROPERTY, - env.get(DOCKER_HOST_PROPERTY).replace("tcp", protocol(env))); + if (env.containsKey(DOCKER_HOST)) { + overriddenProperties.setProperty(DOCKER_HOST, env.get(DOCKER_HOST)); } for (Map.Entry envEntry : env.entrySet()) { String envKey = envEntry.getKey(); - if (ENV_NAME_TO_IO_NAME.containsKey(envKey)) { - overriddenProperties.setProperty(ENV_NAME_TO_IO_NAME.get(envKey), envEntry.getValue()); + if (configKeys.contains(envKey)) { + overriddenProperties.setProperty(envKey, envEntry.getValue()); } } return overriddenProperties; } - private static String protocol(Map env) { - // if this is set, we assume we need SSL - return env.containsKey(DOCKER_CERT_PATH_PROPERTY) || "1".equals(env.get(DOCKER_VERIFY_TLS_PROPERTY)) ? "https" - : "http"; - } - /** * Creates a new Properties object containing values overridden from the System properties * @@ -178,10 +212,7 @@ private static Properties overrideDockerPropertiesWithSystemProperties(Propertie Properties overriddenProperties = new Properties(); overriddenProperties.putAll(p); - for (String key : new String[] { DOCKER_IO_URL_PROPERTY, DOCKER_IO_VERSION_PROPERTY, - DOCKER_IO_USERNAME_PROPERTY, DOCKER_IO_PASSWORD_PROPERTY, DOCKER_IO_EMAIL_PROPERTY, - DOCKER_IO_SERVER_ADDRESS_PROPERTY, DOCKER_IO_DOCKER_CERT_PATH_PROPERTY, - DOCKER_IO_DOCKER_CFG_PATH_PROPERTY, }) { + for (String key : configKeys) { if (systemProperties.containsKey(key)) { overriddenProperties.setProperty(key, systemProperties.getProperty(key)); } @@ -204,50 +235,55 @@ static DockerClientConfigBuilder createDefaultConfigBuilder(Map return new DockerClientConfigBuilder().withProperties(properties); } - public URI getUri() { - return uri; + public URI getDockerHost() { + return dockerHost; } - public void setUri(URI uri) { - this.uri = uri; + public void setDockerHost(URI dockerHost) { + this.dockerHost = dockerHost; } - public RemoteApiVersion getVersion() { - return version; + public RemoteApiVersion getApiVersion() { + return apiVersion; } - public String getUsername() { - return username; + public String getRegistryUsername() { + return registryUsername; } - public String getPassword() { - return password; + public String getRegistryPassword() { + return registryPassword; } - public String getEmail() { - return email; + public String getRegistryEmail() { + return registryEmail; } - public String getServerAddress() { - return serverAddress; + public String getRegistryUrl() { + return registryUrl; } - public SSLConfig getSslConfig() { - return sslConfig; + public String getDockerConfig() { + return dockerConfig; } - public String getDockerCfgPath() { - return dockerCfgPath; + public String getDockerCertPath() { + return dockerCertPath; + } + + public boolean getDockerTlsVerify() { + return dockerTlsVerify; } private AuthConfig getAuthConfig() { AuthConfig authConfig = null; - if (getUsername() != null && getPassword() != null && getEmail() != null && getServerAddress() != null) { + if (getRegistryUsername() != null && getRegistryPassword() != null && getRegistryEmail() != null + && getRegistryUrl() != null) { authConfig = new AuthConfig(); - authConfig.setUsername(getUsername()); - authConfig.setPassword(getPassword()); - authConfig.setEmail(getEmail()); - authConfig.setServerAddress(getServerAddress()); + authConfig.setUsername(getRegistryUsername()); + authConfig.setPassword(getRegistryPassword()); + authConfig.setEmail(getRegistryEmail()); + authConfig.setServerAddress(getRegistryUrl()); } return authConfig; } @@ -255,12 +291,12 @@ private AuthConfig getAuthConfig() { public AuthConfig effectiveAuthConfig(String imageName) { AuthConfig authConfig = null; - String dockerCfgFile = getDockerCfgPath(); + File dockerCfgFile = new File(getDockerConfig() + File.separator + DOCKER_CFG); - if (dockerCfgFile != null && imageName != null) { + if (dockerCfgFile.exists() && dockerCfgFile.isFile() && imageName != null) { AuthConfigFile authConfigFile; try { - authConfigFile = AuthConfigFile.loadConfig(new File(dockerCfgFile)); + authConfigFile = AuthConfigFile.loadConfig(dockerCfgFile); } catch (IOException e) { throw new DockerClientException("Failed to parse dockerCfgFile", e); } @@ -279,11 +315,11 @@ public AuthConfig effectiveAuthConfig(String imageName) { } public AuthConfigurations getAuthConfigurations() { - String dockerCfgFile = getDockerCfgPath(); - if (dockerCfgFile != null) { + File dockerCfgFile = new File(getDockerConfig() + File.separator + DOCKER_CFG); + if (dockerCfgFile.exists() && dockerCfgFile.isFile()) { AuthConfigFile authConfigFile; try { - authConfigFile = AuthConfigFile.loadConfig(new File(dockerCfgFile)); + authConfigFile = AuthConfigFile.loadConfig(dockerCfgFile); } catch (IOException e) { throw new DockerClientException("Failed to parse dockerCfgFile", e); } @@ -303,121 +339,92 @@ public boolean equals(Object o) { DockerClientConfig that = (DockerClientConfig) o; - if (sslConfig != null ? !sslConfig.equals(that.sslConfig) : that.sslConfig != null) - return false; - if (dockerCfgPath != null ? !dockerCfgPath.equals(that.dockerCfgPath) : that.dockerCfgPath != null) - return false; - if (email != null ? !email.equals(that.email) : that.email != null) - return false; - if (password != null ? !password.equals(that.password) : that.password != null) - return false; - if (serverAddress != null ? !serverAddress.equals(that.serverAddress) : that.serverAddress != null) - return false; - if (uri != null ? !uri.equals(that.uri) : that.uri != null) - return false; - if (username != null ? !username.equals(that.username) : that.username != null) - return false; - if (version != null ? !version.equals(that.version) : that.version != null) - return false; - - return true; + return EqualsBuilder.reflectionEquals(this, that); } @Override public int hashCode() { - int result = uri != null ? uri.hashCode() : 0; - result = 31 * result + (version != null ? version.hashCode() : 0); - result = 31 * result + (username != null ? username.hashCode() : 0); - result = 31 * result + (password != null ? password.hashCode() : 0); - result = 31 * result + (email != null ? email.hashCode() : 0); - result = 31 * result + (serverAddress != null ? serverAddress.hashCode() : 0); - result = 31 * result + (dockerCfgPath != null ? dockerCfgPath.hashCode() : 0); - result = 31 * result + (sslConfig != null ? sslConfig.hashCode() : 0); - return result; + return HashCodeBuilder.reflectionHashCode(this); } @Override public String toString() { - return "DockerClientConfig{" + "uri=" + uri + ", version='" + version + '\'' + ", username='" + username + '\'' - + ", password='" + password + '\'' + ", email='" + email + '\'' + ", serverAddress='" + serverAddress - + '\'' + ", dockerCfgPath='" + dockerCfgPath + '\'' + ", sslConfig='" + sslConfig + '\'' + '}'; + return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); } public static class DockerClientConfigBuilder { - private URI uri; + private URI dockerHost; - private String version, username, password, email, serverAddress, dockerCfgPath; + private String apiVersion, registryUsername, registryPassword, registryEmail, registryUrl, dockerConfig, + dockerCertPath; - private SSLConfig sslConfig; + private boolean dockerTlsVerify; /** * This will set all fields in the builder to those contained in the Properties object. The Properties object - * should contain the following docker.io.* keys: url, version, username, password, email, dockerCertPath, and - * dockerCfgPath. If docker.io.readTimeout or docker.io.enableLoggingFilter are not contained, they will be set - * to 1000 and true, respectively. + * should contain the following docker-java configuration keys: DOCKER_HOST, DOCKER_TLS_VERIFY, api.version, + * registry.username, registry.password, registry.email, DOCKER_CERT_PATH, and DOCKER_CONFIG. */ public DockerClientConfigBuilder withProperties(Properties p) { - return withUri(p.getProperty(DOCKER_IO_URL_PROPERTY)) - .withVersion(p.getProperty(DOCKER_IO_VERSION_PROPERTY)) - .withUsername(p.getProperty(DOCKER_IO_USERNAME_PROPERTY)) - .withPassword(p.getProperty(DOCKER_IO_PASSWORD_PROPERTY)) - .withEmail(p.getProperty(DOCKER_IO_EMAIL_PROPERTY)) - .withServerAddress(p.getProperty(DOCKER_IO_SERVER_ADDRESS_PROPERTY)) - .withDockerCertPath(p.getProperty(DOCKER_IO_DOCKER_CERT_PATH_PROPERTY)) - .withDockerCfgPath(p.getProperty(DOCKER_IO_DOCKER_CFG_PATH_PROPERTY)); + return withDockerHost(p.getProperty(DOCKER_HOST)).withDockerTlsVerify(p.getProperty(DOCKER_TLS_VERIFY)) + .withDockerConfig(p.getProperty(DOCKER_CONFIG)).withDockerCertPath(p.getProperty(DOCKER_CERT_PATH)) + .withApiVersion(p.getProperty(API_VERSION)).withRegistryUsername(p.getProperty(REGISTRY_USERNAME)) + .withRegistryPassword(p.getProperty(REGISTRY_PASSWORD)) + .withRegistryEmail(p.getProperty(REGISTRY_EMAIL)).withRegistryUrl(p.getProperty(REGISTRY_URL)); } - public final DockerClientConfigBuilder withUri(String uri) { - checkNotNull(uri, "uri was not specified"); - this.uri = URI.create(uri); + /** + * configure DOCKER_HOST + */ + public final DockerClientConfigBuilder withDockerHost(String dockerHost) { + checkNotNull(dockerHost, "uri was not specified"); + this.dockerHost = URI.create(dockerHost); return this; } - public final DockerClientConfigBuilder withVersion(String version) { - this.version = version; + public final DockerClientConfigBuilder withApiVersion(String apiVersion) { + this.apiVersion = apiVersion; return this; } - public final DockerClientConfigBuilder withUsername(String username) { - this.username = username; + public final DockerClientConfigBuilder withRegistryUsername(String registryUsername) { + this.registryUsername = registryUsername; return this; } - public final DockerClientConfigBuilder withPassword(String password) { - this.password = password; + public final DockerClientConfigBuilder withRegistryPassword(String registryPassword) { + this.registryPassword = registryPassword; return this; } - public final DockerClientConfigBuilder withEmail(String email) { - this.email = email; + public final DockerClientConfigBuilder withRegistryEmail(String registryEmail) { + this.registryEmail = registryEmail; return this; } - public DockerClientConfigBuilder withServerAddress(String serverAddress) { - this.serverAddress = serverAddress; + public DockerClientConfigBuilder withRegistryUrl(String registryUrl) { + this.registryUrl = registryUrl; return this; } public final DockerClientConfigBuilder withDockerCertPath(String dockerCertPath) { - if (dockerCertPath != null) { - this.sslConfig = new LocalDirectorySSLConfig(dockerCertPath); - } + this.dockerCertPath = dockerCertPath; return this; } - public final DockerClientConfigBuilder withDockerCfgPath(String dockerCfgPath) { - this.dockerCfgPath = dockerCfgPath; + public final DockerClientConfigBuilder withDockerConfig(String dockerConfig) { + this.dockerConfig = dockerConfig; return this; } - public final DockerClientConfigBuilder withSSLConfig(SSLConfig config) { - this.sslConfig = config; + public final DockerClientConfigBuilder withDockerTlsVerify(String dockerTlsVerify) { + this.dockerTlsVerify = BooleanUtils.toBoolean(dockerTlsVerify.trim(), "1", "0"); return this; } public DockerClientConfig build() { - return new DockerClientConfig(uri, version, username, password, email, serverAddress, dockerCfgPath, - sslConfig); + return new DockerClientConfig(dockerHost, dockerConfig, apiVersion, registryUrl, registryUsername, + registryPassword, registryEmail, dockerCertPath, dockerTlsVerify); } } diff --git a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java index ede1356135..0ee71909c6 100644 --- a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java +++ b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java @@ -132,7 +132,7 @@ private DockerClientImpl(DockerClientConfig dockerClientConfig) { } private static DockerClientConfig configWithServerUrl(String serverUrl) { - return DockerClientConfig.createDefaultConfigBuilder().withUri(serverUrl).build(); + return DockerClientConfig.createDefaultConfigBuilder().withDockerHost(serverUrl).build(); } public static DockerClientImpl getInstance() { @@ -161,14 +161,14 @@ private DockerCmdExecFactory getDockerCmdExecFactory() { @Override public AuthConfig authConfig() { - checkNotNull(dockerClientConfig.getUsername(), "Configured username is null."); - checkNotNull(dockerClientConfig.getServerAddress(), "Configured serverAddress is null."); + checkNotNull(dockerClientConfig.getRegistryUsername(), "Configured username is null."); + checkNotNull(dockerClientConfig.getRegistryUrl(), "Configured serverAddress is null."); AuthConfig authConfig = new AuthConfig(); - authConfig.setUsername(dockerClientConfig.getUsername()); - authConfig.setPassword(dockerClientConfig.getPassword()); - authConfig.setEmail(dockerClientConfig.getEmail()); - authConfig.setServerAddress(dockerClientConfig.getServerAddress()); + authConfig.setUsername(dockerClientConfig.getRegistryUsername()); + authConfig.setPassword(dockerClientConfig.getRegistryPassword()); + authConfig.setEmail(dockerClientConfig.getRegistryEmail()); + authConfig.setServerAddress(dockerClientConfig.getRegistryUrl()); return authConfig; } diff --git a/src/main/java/com/github/dockerjava/jaxrs/AbstrDockerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/AbstrDockerCmdExec.java index d8c84663c3..750114b119 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/AbstrDockerCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/AbstrDockerCmdExec.java @@ -46,7 +46,7 @@ protected String registryAuth(AuthConfig authConfig) { protected String registryConfigs(AuthConfigurations authConfigs) { try { final String json; - if (dockerClientConfig.getVersion().isGreaterOrEqual(RemoteApiVersion.VERSION_1_19)) { + if (dockerClientConfig.getApiVersion().isGreaterOrEqual(RemoteApiVersion.VERSION_1_19)) { json = new ObjectMapper().writeValueAsString(authConfigs.getConfigs()); } else { json = new ObjectMapper().writeValueAsString(authConfigs); diff --git a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java index bbd71ba38d..337b3e790d 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java +++ b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java @@ -2,6 +2,33 @@ import static com.google.common.base.Preconditions.checkNotNull; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.Proxy; +import java.net.ProxySelector; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.List; + +import javax.net.ssl.SSLContext; +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.ClientRequestFilter; +import javax.ws.rs.client.ClientResponseFilter; +import javax.ws.rs.client.WebTarget; + +import org.apache.http.config.RegistryBuilder; +import org.apache.http.conn.socket.ConnectionSocketFactory; +import org.apache.http.conn.socket.PlainConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.glassfish.jersey.CommonProperties; +import org.glassfish.jersey.apache.connector.ApacheClientProperties; +import org.glassfish.jersey.client.ClientConfig; +import org.glassfish.jersey.client.ClientProperties; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; import com.github.dockerjava.api.command.AttachContainerCmd; import com.github.dockerjava.api.command.AuthCmd; @@ -54,34 +81,11 @@ import com.github.dockerjava.api.command.WaitContainerCmd; import com.github.dockerjava.api.exception.DockerClientException; import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.core.LocalDirectorySSLConfig; import com.github.dockerjava.jaxrs.connector.ApacheConnectorProvider; import com.github.dockerjava.jaxrs.filter.JsonClientFilter; import com.github.dockerjava.jaxrs.filter.ResponseStatusExceptionFilter; import com.github.dockerjava.jaxrs.filter.SelectiveLoggingFilter; -import org.apache.http.config.RegistryBuilder; -import org.apache.http.conn.socket.ConnectionSocketFactory; -import org.apache.http.conn.socket.PlainConnectionSocketFactory; -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; -import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; -import org.glassfish.jersey.CommonProperties; -import org.glassfish.jersey.apache.connector.ApacheClientProperties; -import org.glassfish.jersey.client.ClientConfig; -import org.glassfish.jersey.client.ClientProperties; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.net.ssl.SSLContext; -import javax.ws.rs.client.Client; -import javax.ws.rs.client.ClientBuilder; -import javax.ws.rs.client.ClientRequestFilter; -import javax.ws.rs.client.ClientResponseFilter; -import javax.ws.rs.client.WebTarget; -import java.io.IOException; -import java.net.InetSocketAddress; -import java.net.Proxy; -import java.net.ProxySelector; -import java.net.URI; -import java.util.List; //import org.glassfish.jersey.apache.connector.ApacheConnectorProvider; // see https://github.com/docker-java/docker-java/issues/196 @@ -108,6 +112,8 @@ public class DockerCmdExecFactoryImpl implements DockerCmdExecFactory { private DockerClientConfig dockerClientConfig; + SSLContext sslContext = null; + @Override public void init(DockerClientConfig dockerClientConfig) { checkNotNull(dockerClientConfig, "config was not specified"); @@ -146,15 +152,19 @@ public void init(DockerClientConfig dockerClientConfig) { } } - URI originalUri = dockerClientConfig.getUri(); + URI originalUri = dockerClientConfig.getDockerHost(); - SSLContext sslContext = null; String protocol = null; - if (dockerClientConfig.getSslConfig() != null) { + if (dockerClientConfig.getDockerTlsVerify()) { protocol = "https"; + try { - sslContext = dockerClientConfig.getSslConfig().getSSLContext(); + + if (sslContext == null) { + sslContext = new LocalDirectorySSLConfig(dockerClientConfig.getDockerCertPath()).getSSLContext(); + } + } catch (Exception ex) { throw new DockerClientException("Error in SSL Configuration", ex); } @@ -163,8 +173,13 @@ public void init(DockerClientConfig dockerClientConfig) { } if (originalUri.getScheme().equals("unix")) { - dockerClientConfig.setUri(UnixConnectionSocketFactory.sanitizeUri(originalUri)); + dockerClientConfig.setDockerHost(UnixConnectionSocketFactory.sanitizeUri(originalUri)); } else { + try { + originalUri = new URI(originalUri.toString().replaceFirst("tcp", protocol)); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } configureProxy(clientConfig, protocol); } @@ -190,12 +205,12 @@ public void init(DockerClientConfig dockerClientConfig) { client = clientBuilder.build(); - baseResource = client.target(dockerClientConfig.getUri()).path(dockerClientConfig.getVersion().asWebPathPart()); + baseResource = client.target(originalUri.toString()).path(dockerClientConfig.getApiVersion().asWebPathPart()); } private void configureProxy(ClientConfig clientConfig, String protocol) { - List proxies = ProxySelector.getDefault().select(dockerClientConfig.getUri()); + List proxies = ProxySelector.getDefault().select(dockerClientConfig.getDockerHost()); for (Proxy proxy : proxies) { InetSocketAddress address = (InetSocketAddress) proxy.address(); @@ -490,6 +505,12 @@ public void close() throws IOException { client.close(); } + @Override + public DockerCmdExecFactoryImpl withSSLContext(SSLContext sslContext) { + this.sslContext = sslContext; + return this; + } + public DockerCmdExecFactoryImpl withReadTimeout(Integer readTimeout) { this.readTimeout = readTimeout; return this; diff --git a/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java b/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java index ee3b501010..d26cf70c0c 100644 --- a/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java +++ b/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java @@ -51,6 +51,7 @@ import com.github.dockerjava.api.command.WaitContainerCmd; import com.github.dockerjava.core.DockerClientConfig; import com.github.dockerjava.core.DockerClientImpl; +import com.github.dockerjava.core.LocalDirectorySSLConfig; import com.github.dockerjava.netty.exec.AttachContainerCmdExec; import com.github.dockerjava.netty.exec.AuthCmdExec; import com.github.dockerjava.netty.exec.BuildImageCmdExec; @@ -99,6 +100,7 @@ import com.github.dockerjava.netty.exec.UnpauseContainerCmdExec; import com.github.dockerjava.netty.exec.VersionCmdExec; import com.github.dockerjava.netty.exec.WaitContainerCmdExec; + import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelInitializer; @@ -113,11 +115,13 @@ import io.netty.handler.codec.http.HttpClientCodec; import io.netty.handler.logging.LoggingHandler; import io.netty.handler.ssl.SslHandler; + import org.bouncycastle.jce.provider.BouncyCastleProvider; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLEngine; import javax.net.ssl.SSLParameters; + import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; @@ -157,6 +161,8 @@ public class DockerCmdExecFactoryImpl implements DockerCmdExecFactory { private NettyInitializer nettyInitializer; + private SSLContext sslContext = null; + private ChannelProvider channelProvider = new ChannelProvider() { @Override public Channel getChannel() { @@ -173,11 +179,11 @@ public void init(DockerClientConfig dockerClientConfig) { bootstrap = new Bootstrap(); - String scheme = dockerClientConfig.getUri().getScheme(); + String scheme = dockerClientConfig.getDockerHost().getScheme(); if ("unix".equals(scheme)) { nettyInitializer = new UnixDomainSocketInitializer(); - } else if (scheme.startsWith("http")) { + } else if ("tcp".equals(scheme)) { nettyInitializer = new InetSocketInitializer(); } @@ -248,8 +254,8 @@ protected void initChannel(final SocketChannel channel) throws Exception { @Override public Channel connect(Bootstrap bootstrap) throws InterruptedException { - String host = dockerClientConfig.getUri().getHost(); - int port = dockerClientConfig.getUri().getPort(); + String host = dockerClientConfig.getDockerHost().getHost(); + int port = dockerClientConfig.getDockerHost().getPort(); if (port == -1) { throw new RuntimeException("no port configured for " + host); @@ -257,7 +263,7 @@ public Channel connect(Bootstrap bootstrap) throws InterruptedException { Channel channel = bootstrap.connect(host, port).sync().channel(); - if ("https".equals(dockerClientConfig.getUri().getScheme())) { + if (dockerClientConfig.getDockerTlsVerify()) { final SslHandler ssl = initSsl(dockerClientConfig); if (ssl != null) { @@ -272,10 +278,12 @@ private SslHandler initSsl(DockerClientConfig dockerClientConfig) { SslHandler ssl = null; try { - String host = dockerClientConfig.getUri().getHost(); - int port = dockerClientConfig.getUri().getPort(); + String host = dockerClientConfig.getDockerHost().getHost(); + int port = dockerClientConfig.getDockerHost().getPort(); - SSLContext sslContext = dockerClientConfig.getSslConfig().getSSLContext(); + if(sslContext == null) { + sslContext = new LocalDirectorySSLConfig(dockerClientConfig.getDockerCertPath()).getSSLContext(); + } SSLEngine engine = sslContext.createSSLEngine(host, port); engine.setUseClientMode(true); @@ -552,6 +560,13 @@ public void close() throws IOException { eventLoopGroup.shutdownGracefully(); } + @Override + public DockerCmdExecFactory withSSLContext(SSLContext sslContext) { + this.sslContext = sslContext; + return this; + } + + private WebTarget getBaseResource() { return new WebTarget(channelProvider); } diff --git a/src/main/java/com/github/dockerjava/netty/exec/AbstrDockerCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/AbstrDockerCmdExec.java index e8b3597c99..5cf36a0a43 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/AbstrDockerCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/AbstrDockerCmdExec.java @@ -45,7 +45,7 @@ protected String registryAuth(AuthConfig authConfig) { protected String registryConfigs(AuthConfigurations authConfigs) { try { final String json; - if (dockerClientConfig.getVersion().isGreaterOrEqual(RemoteApiVersion.VERSION_1_19)) { + if (dockerClientConfig.getApiVersion().isGreaterOrEqual(RemoteApiVersion.VERSION_1_19)) { json = new ObjectMapper().writeValueAsString(authConfigs.getConfigs()); } else { json = new ObjectMapper().writeValueAsString(authConfigs); diff --git a/src/main/resources/docker-java.properties b/src/main/resources/docker-java.properties new file mode 100644 index 0000000000..ea85f6c01c --- /dev/null +++ b/src/main/resources/docker-java.properties @@ -0,0 +1,17 @@ +#docker.io.url=https://localhost:2376 +#docker.io.dockerCertPath=${user.home}/.docker +#docker.io.dockerCfgPath=${user.home}/.dockercfg +#docker.io.username=${user.name} +#docker.io.serverAddress=https://index.docker.io/v1/ +# +DOCKER_HOST=tcp://localhost:2376 +DOCKER_TLS_VERIFY=1 +DOCKER_CONFIG=${user.home}/.docker +DOCKER_CERT_PATH=${user.home}/.docker/certs + +api.version= +registry.url=https://index.docker.io/v1/ +registry.username=${user.name} +#registry.password= +#registry.email= + diff --git a/src/main/resources/docker.io.properties b/src/main/resources/docker.io.properties deleted file mode 100644 index 719500e24e..0000000000 --- a/src/main/resources/docker.io.properties +++ /dev/null @@ -1,5 +0,0 @@ -docker.io.url=https://localhost:2376 -docker.io.dockerCertPath=${user.home}/.docker -docker.io.dockerCfgPath=${user.home}/.dockercfg -docker.io.username=${user.name} -docker.io.serverAddress=https://index.docker.io/v1/ diff --git a/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java b/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java index 074c19ad9e..5f63207d16 100644 --- a/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java +++ b/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java @@ -74,12 +74,12 @@ private DockerClientConfig config() { protected DockerClientConfig config(String password) { DockerClientConfig.DockerClientConfigBuilder builder = DockerClientConfig.createDefaultConfigBuilder() - .withServerAddress("https://index.docker.io/v1/"); + .withRegistryUrl("https://index.docker.io/v1/"); if (password != null) { - builder = builder.withPassword(password); + builder = builder.withRegistryPassword(password); } - return builder.withVersion(apiVersion).build(); + return builder.withApiVersion(apiVersion).build(); } public void afterTest() { diff --git a/src/test/java/com/github/dockerjava/core/DockerClientConfigTest.java b/src/test/java/com/github/dockerjava/core/DockerClientConfigTest.java index 8bb1c3e39e..e87254b885 100644 --- a/src/test/java/com/github/dockerjava/core/DockerClientConfigTest.java +++ b/src/test/java/com/github/dockerjava/core/DockerClientConfigTest.java @@ -1,8 +1,8 @@ package com.github.dockerjava.core; -import com.github.dockerjava.api.model.AuthConfig; -import org.apache.commons.lang.SerializationUtils; -import org.testng.annotations.Test; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.testng.Assert.assertEquals; import java.net.URI; import java.util.Collections; @@ -10,113 +10,57 @@ import java.util.Map; import java.util.Properties; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.testng.Assert.assertEquals; +import org.apache.commons.lang.SerializationUtils; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerClientException; +import com.github.dockerjava.api.model.AuthConfig; public class DockerClientConfigTest { public static final DockerClientConfig EXAMPLE_CONFIG = newExampleConfig(); private static DockerClientConfig newExampleConfig() { - return new DockerClientConfig(URI.create("http://foo"), "bar", "baz", "qux", "blam", "wham", "flam", - new LocalDirectorySSLConfig("flim")); - } - @Test - public void string() throws Exception { - assertEquals( - EXAMPLE_CONFIG.toString(), - "DockerClientConfig{uri=http://foo, version='{UNKNOWN_VERSION}', username='baz', password='qux', email='blam', serverAddress='wham', dockerCfgPath='flam', sslConfig='LocalDirectorySSLConfig{dockerCertPath=flim}'}"); - } + String dockerCertPath = dockerCertPath(); - @Test - public void equals() throws Exception { - assertEquals(EXAMPLE_CONFIG, newExampleConfig()); + return new DockerClientConfig(URI.create("tcp://foo"), "dockerConfig", "apiVersion", "registryUrl", "registryUsername", "registryPassword", "registryEmail", + dockerCertPath, true); } - @Test - public void environmentDockerHost() throws Exception { - - // given docker host in env - Map env = new HashMap(); - env.put("DOCKER_HOST", "tcp://baz:8768"); - // and it looks to be SSL disabled - env.remove("DOCKER_CERT_PATH"); - - // when you build a config - DockerClientConfig config = buildConfig(env, new Properties()); - - // then the URL is that value with "http" instead of "tcp" - assertEquals(config.getUri(), URI.create("http://baz:8768")); + private static String homeDir() { + return "target/test-classes/someHomeDir"; } - @Test - public void environmentDockerHostHttpsAutoDetectByCertPath() throws Exception { - - // given docker host in env - Map env = new HashMap(System.getenv()); - env.put("DOCKER_HOST", "tcp://bar:8768"); - // and it looks to be SSL enabled - env.put("DOCKER_CERT_PATH", "any value"); - - // when you build a config - DockerClientConfig config = buildConfig(env, new Properties()); - - // then the URL is that value with "tcp" changed to "https" - assertEquals(config.getUri(), URI.create("https://bar:8768")); + private static String dockerCertPath() { + return homeDir() + "/.docker"; } @Test - public void environmentDockerHostHttpsAutoDetectByTlsVerify() throws Exception { - - // given docker host in env - Map env = new HashMap(System.getenv()); - env.put("DOCKER_HOST", "tcp://bar:8768"); - // and it looks to be SSL enabled - env.put("DOCKER_TLS_VERIFY", "1"); - - // when you build a config - DockerClientConfig config = buildConfig(env, new Properties()); - - // then the URL is that value with "tcp" changed to "https" - assertEquals(config.getUri(), URI.create("https://bar:8768")); + public void equals() throws Exception { + assertEquals(EXAMPLE_CONFIG, newExampleConfig()); } @Test - public void environmentDockerHostWithInvalidTlsVerify() throws Exception { + public void environmentDockerHost() throws Exception { // given docker host in env - Map env = new HashMap(System.getenv()); - env.put("DOCKER_HOST", "tcp://bar:8768"); + Map env = new HashMap(); + env.put(DockerClientConfig.DOCKER_HOST, "tcp://baz:8768"); // and it looks to be SSL disabled env.remove("DOCKER_CERT_PATH"); - // and it has an invalid TLS_VERIFY value - env.put("DOCKER_TLS_VERIFY", "any value different from '1'"); - // when you build a config - DockerClientConfig config = buildConfig(env, new Properties()); - // then the URL is that value with "tcp" changed to "https" - assertEquals(config.getUri(), URI.create("http://bar:8768")); - } - - @Test - public void environmentDockerHostWithInvalidTlsVerifyButWithCertPath() throws Exception { - // given docker host in env - Map env = new HashMap(System.getenv()); - env.put("DOCKER_HOST", "tcp://bar:8768"); - // and it looks to be SSL enabled - env.put("DOCKER_CERT_PATH", "any value"); - // and it has an invalid TLS_VERIFY value - env.put("DOCKER_TLS_VERIFY", "any value different from '1'"); + // given default cert path + Properties systemProperties = new Properties(); + systemProperties.setProperty("user.name", "someUserName"); + systemProperties.setProperty("user.home", homeDir()); // when you build a config - DockerClientConfig config = buildConfig(env, new Properties()); + DockerClientConfig config = buildConfig(env, systemProperties); - // then the URL is that value with "tcp" changed to "https" - assertEquals(config.getUri(), URI.create("https://bar:8768")); + assertEquals(config.getDockerHost(), URI.create("tcp://baz:8768")); } @Test @@ -124,16 +68,16 @@ public void environment() throws Exception { // given a default config in env properties Map env = new HashMap(); - env.put("DOCKER_URL", "http://foo"); - env.put("DOCKER_VERSION", "bar"); - env.put("DOCKER_USERNAME", "baz"); - env.put("DOCKER_PASSWORD", "qux"); - env.put("DOCKER_EMAIL", "blam"); - env.put("DOCKER_SERVER_ADDRESS", "wham"); - env.put("DOCKER_CERT_PATH", "flim"); - env.put("DOCKER_CFG_PATH", "flam"); - env.put("DOCKER_READ_TIMEOUT", "877"); - env.put("DOCKER_LOGGING_FILTER_ENABLED", "false"); + env.put(DockerClientConfig.DOCKER_HOST, "tcp://foo"); + env.put(DockerClientConfig.API_VERSION, "apiVersion"); + env.put(DockerClientConfig.REGISTRY_USERNAME, "registryUsername"); + env.put(DockerClientConfig.REGISTRY_PASSWORD, "registryPassword"); + env.put(DockerClientConfig.REGISTRY_EMAIL, "registryEmail"); + env.put(DockerClientConfig.REGISTRY_URL, "registryUrl"); + env.put(DockerClientConfig.DOCKER_CONFIG, "dockerConfig"); + env.put(DockerClientConfig.DOCKER_CERT_PATH, dockerCertPath()); + env.put(DockerClientConfig.DOCKER_TLS_VERIFY, "1"); + // when you build a config DockerClientConfig config = buildConfig(env, new Properties()); @@ -152,18 +96,18 @@ public void defaults() throws Exception { // given default cert path Properties systemProperties = new Properties(); systemProperties.setProperty("user.name", "someUserName"); - systemProperties.setProperty("user.home", "someHomeDir"); + systemProperties.setProperty("user.home", homeDir()); // when you build config DockerClientConfig config = buildConfig(Collections. emptyMap(), systemProperties); // then the cert path is as expected - assertEquals(config.getUri(), URI.create("https://localhost:2376")); - assertEquals(config.getUsername(), "someUserName"); - assertEquals(config.getServerAddress(), AuthConfig.DEFAULT_SERVER_ADDRESS); - assertEquals(config.getVersion(), RemoteApiVersion.unknown()); - assertEquals(config.getDockerCfgPath(), "someHomeDir/.dockercfg"); - assertEquals(((LocalDirectorySSLConfig) config.getSslConfig()).getDockerCertPath(), "someHomeDir/.docker"); + assertEquals(config.getDockerHost(), URI.create("tcp://localhost:2376")); + assertEquals(config.getRegistryUsername(), "someUserName"); + assertEquals(config.getRegistryUrl(), AuthConfig.DEFAULT_SERVER_ADDRESS); + assertEquals(config.getApiVersion(), RemoteApiVersion.unknown()); + assertEquals(config.getDockerConfig(), homeDir() + "/.docker"); + assertEquals(config.getDockerCertPath(), homeDir() + "/.docker/certs"); } @Test @@ -171,14 +115,15 @@ public void systemProperties() throws Exception { // given system properties based on the example Properties systemProperties = new Properties(); - systemProperties.setProperty("docker.io.url", "http://foo"); - systemProperties.setProperty("docker.io.version", "bar"); - systemProperties.setProperty("docker.io.username", "baz"); - systemProperties.setProperty("docker.io.password", "qux"); - systemProperties.setProperty("docker.io.email", "blam"); - systemProperties.setProperty("docker.io.serverAddress", "wham"); - systemProperties.setProperty("docker.io.dockerCertPath", "flim"); - systemProperties.setProperty("docker.io.dockerCfgPath", "flam"); + systemProperties.put(DockerClientConfig.DOCKER_HOST, "tcp://foo"); + systemProperties.put(DockerClientConfig.API_VERSION, "apiVersion"); + systemProperties.put(DockerClientConfig.REGISTRY_USERNAME, "registryUsername"); + systemProperties.put(DockerClientConfig.REGISTRY_PASSWORD, "registryPassword"); + systemProperties.put(DockerClientConfig.REGISTRY_EMAIL, "registryEmail"); + systemProperties.put(DockerClientConfig.REGISTRY_URL, "registryUrl"); + systemProperties.put(DockerClientConfig.DOCKER_CONFIG, "dockerConfig"); + systemProperties.put(DockerClientConfig.DOCKER_CERT_PATH, dockerCertPath()); + systemProperties.put(DockerClientConfig.DOCKER_TLS_VERIFY, "1"); // when you build new config DockerClientConfig config = buildConfig(Collections. emptyMap(), systemProperties); @@ -195,4 +140,40 @@ public void serializableTest() { assertThat("Deserialized object mush match source object", deserialized, equalTo(EXAMPLE_CONFIG)); } + + @Test(expectedExceptions = DockerClientException.class) + public void testTlsVerifyAndCertPathNull() throws Exception { + new DockerClientConfig(URI.create("tcp://foo"), "dockerConfig", "apiVersion", "registryUrl", "registryUsername", "registryPassword", "registryEmail", + null, true); + } + + @Test(expectedExceptions = DockerClientException.class) + public void testTlsVerifyAndCertPathEmpty() throws Exception { + new DockerClientConfig(URI.create("tcp://foo"), "dockerConfig", "apiVersion", "registryUrl", "registryUsername", "registryPassword", "registryEmail", + "", true); + } + + @Test() + public void testTlsVerifyAndCertPath() throws Exception { + new DockerClientConfig(URI.create("tcp://foo"), "dockerConfig", "apiVersion", "registryUrl", "registryUsername", "registryPassword", "registryEmail", + dockerCertPath(), true); + } + + @Test(expectedExceptions = DockerClientException.class) + public void testWrongHostScheme() throws Exception { + new DockerClientConfig(URI.create("http://foo"), "dockerConfig", "apiVersion", "registryUrl", "registryUsername", "registryPassword", "registryEmail", + null, false); + } + + @Test() + public void testTcpHostScheme() throws Exception { + new DockerClientConfig(URI.create("tcp://foo"), "dockerConfig", "apiVersion", "registryUrl", "registryUsername", "registryPassword", "registryEmail", + null, false); + } + + @Test() + public void testUnixHostScheme() throws Exception { + new DockerClientConfig(URI.create("unix://foo"), "dockerConfig", "apiVersion", "registryUrl", "registryUsername", "registryPassword", "registryEmail", + null, false); + } } diff --git a/src/test/java/com/github/dockerjava/core/DockerClientImplTest.java b/src/test/java/com/github/dockerjava/core/DockerClientImplTest.java index c5a1e841c0..62cfaa146b 100644 --- a/src/test/java/com/github/dockerjava/core/DockerClientImplTest.java +++ b/src/test/java/com/github/dockerjava/core/DockerClientImplTest.java @@ -3,6 +3,8 @@ import static org.testng.Assert.assertEquals; import static org.testng.AssertJUnit.fail; +import java.net.URI; + import org.testng.annotations.Test; public class DockerClientImplTest { @@ -10,7 +12,7 @@ public class DockerClientImplTest { @Test public void configuredInstanceAuthConfig() throws Exception { // given a config with null serverAddress - DockerClientConfig dockerClientConfig = new DockerClientConfig(null, null, "", "", "", null, null, null); + DockerClientConfig dockerClientConfig = new DockerClientConfig(URI.create("tcp://foo"), null, null, null, "", "", "", null, false); DockerClientImpl dockerClient = DockerClientImpl.getInstance(dockerClientConfig); // when we get the auth config @@ -25,6 +27,9 @@ public void configuredInstanceAuthConfig() throws Exception { @Test public void defaultInstanceAuthConfig() throws Exception { + + System.setProperty("user.home", "target/test-classes/someHomeDir"); + // given a default client DockerClientImpl dockerClient = DockerClientImpl.getInstance(); diff --git a/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java b/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java index 50860789b3..a5dfcfbc58 100644 --- a/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java +++ b/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java @@ -5,6 +5,8 @@ import java.util.ArrayList; import java.util.List; +import javax.net.ssl.SSLContext; + import com.github.dockerjava.api.async.ResultCallback; import com.github.dockerjava.api.command.*; import com.github.dockerjava.api.command.AuthCmd.Exec; @@ -367,4 +369,9 @@ public List getVolumeNames() { public List getNetworkIds() { return new ArrayList<>(networkIds); } + + @Override + public DockerCmdExecFactory withSSLContext(SSLContext sslContext) { + return delegate.withSSLContext(sslContext); + } } diff --git a/src/test/resources/someHomeDir/.docker/certs/dummy.txt b/src/test/resources/someHomeDir/.docker/certs/dummy.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/test/resources/someHomeDir/.docker/config.json b/src/test/resources/someHomeDir/.docker/config.json new file mode 100644 index 0000000000..6303940392 --- /dev/null +++ b/src/test/resources/someHomeDir/.docker/config.json @@ -0,0 +1,9 @@ +{ + "auths":{ + "https://index.docker.io/v1/":{ + "auth":"XXXX=", + "email":"foo.bar@test.com" + } + + } +} \ No newline at end of file From 7d9ed5d154d38c2ea7f6e3da2f649c6cde9fdb9b Mon Sep 17 00:00:00 2001 From: Kanstantsin Shautsou Date: Sun, 31 Jan 2016 19:13:56 +0300 Subject: [PATCH 031/912] Checkstyle: common coding problems. Some hashes probably need to be reviewed. --- .../com/github/dockerjava/api/model/Ports.java | 1 + .../com/github/dockerjava/core/NameParser.java | 1 + .../dockerjava/jaxrs/filter/LoggingFilter.java | 10 +++++----- .../netty/DockerCmdExecFactoryImpl.java | 12 ++++++------ .../resources/checkstyle/checkstyle-config.xml | 15 +++++++++++++++ 5 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/github/dockerjava/api/model/Ports.java b/src/main/java/com/github/dockerjava/api/model/Ports.java index 43ad92585d..6bbb05fa24 100644 --- a/src/main/java/com/github/dockerjava/api/model/Ports.java +++ b/src/main/java/com/github/dockerjava/api/model/Ports.java @@ -33,6 +33,7 @@ * @see HostConfig#getPortBindings() * @see NetworkSettings#getPorts() */ +@SuppressWarnings(value = "checkstyle:equalshashcode") //FIXME? @JsonDeserialize(using = Ports.Deserializer.class) @JsonSerialize(using = Ports.Serializer.class) public class Ports { diff --git a/src/main/java/com/github/dockerjava/core/NameParser.java b/src/main/java/com/github/dockerjava/core/NameParser.java index 3c58eb3311..77cc6bb06c 100644 --- a/src/main/java/com/github/dockerjava/core/NameParser.java +++ b/src/main/java/com/github/dockerjava/core/NameParser.java @@ -12,6 +12,7 @@ import com.github.dockerjava.api.model.AuthConfig; import com.github.dockerjava.core.exception.InvalidRepositoryNameException; +@SuppressWarnings(value = "checkstyle:equalshashcode") public class NameParser { //CHECKSTYLE:OFF private static final int RepositoryNameTotalLengthMax = 255; diff --git a/src/main/java/com/github/dockerjava/jaxrs/filter/LoggingFilter.java b/src/main/java/com/github/dockerjava/jaxrs/filter/LoggingFilter.java index ccd6500d19..76666fe4e5 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/filter/LoggingFilter.java +++ b/src/main/java/com/github/dockerjava/jaxrs/filter/LoggingFilter.java @@ -109,7 +109,7 @@ public int compare(final Map.Entry> o1, final Map.Entry() { @Override protected void initChannel(final UnixChannel channel) throws Exception { channel.pipeline().addLast(new HttpClientCodec()); } }); - return eventLoopGroup; + return epollEventLoopGroup; } @Override @@ -225,7 +225,7 @@ public Channel connect(Bootstrap bootstrap) throws InterruptedException { private class InetSocketInitializer implements NettyInitializer { @Override public EventLoopGroup init(Bootstrap bootstrap, final DockerClientConfig dockerClientConfig) { - EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); + EventLoopGroup nioEventLoopGroup = new NioEventLoopGroup(); InetAddress addr = InetAddress.getLoopbackAddress(); @@ -233,7 +233,7 @@ public EventLoopGroup init(Bootstrap bootstrap, final DockerClientConfig dockerC Security.addProvider(new BouncyCastleProvider()); - bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class) + bootstrap.group(nioEventLoopGroup).channel(NioSocketChannel.class) .handler(new ChannelInitializer() { @Override protected void initChannel(final SocketChannel channel) throws Exception { @@ -243,7 +243,7 @@ protected void initChannel(final SocketChannel channel) throws Exception { } }); - return eventLoopGroup; + return nioEventLoopGroup; } @Override diff --git a/src/test/resources/checkstyle/checkstyle-config.xml b/src/test/resources/checkstyle/checkstyle-config.xml index a970648455..3c353fc1a2 100644 --- a/src/test/resources/checkstyle/checkstyle-config.xml +++ b/src/test/resources/checkstyle/checkstyle-config.xml @@ -132,6 +132,21 @@ + + + + + + + + + + + + + + + From e835537d195c9cdf55058fa95542621fc7671265 Mon Sep 17 00:00:00 2001 From: Kanstantsin Shautsou Date: Sun, 31 Jan 2016 19:18:41 +0300 Subject: [PATCH 032/912] Checkstyle: class design. Utility classes should not have a public or default constructor. --- .../java/com/github/dockerjava/core/GoLangFileMatch.java | 2 ++ src/main/java/com/github/dockerjava/core/NameParser.java | 3 +++ .../com/github/dockerjava/core/util/FiltersEncoder.java | 2 ++ src/test/resources/checkstyle/checkstyle-config.xml | 7 +++++++ 4 files changed, 14 insertions(+) diff --git a/src/main/java/com/github/dockerjava/core/GoLangFileMatch.java b/src/main/java/com/github/dockerjava/core/GoLangFileMatch.java index 2f29789eac..7bed65c5be 100644 --- a/src/main/java/com/github/dockerjava/core/GoLangFileMatch.java +++ b/src/main/java/com/github/dockerjava/core/GoLangFileMatch.java @@ -44,6 +44,8 @@ * */ public class GoLangFileMatch { + private GoLangFileMatch() { + } public static final boolean IS_WINDOWS = File.separatorChar == '\\'; diff --git a/src/main/java/com/github/dockerjava/core/NameParser.java b/src/main/java/com/github/dockerjava/core/NameParser.java index 77cc6bb06c..5027422fdb 100644 --- a/src/main/java/com/github/dockerjava/core/NameParser.java +++ b/src/main/java/com/github/dockerjava/core/NameParser.java @@ -14,6 +14,9 @@ @SuppressWarnings(value = "checkstyle:equalshashcode") public class NameParser { + private NameParser() { + } + //CHECKSTYLE:OFF private static final int RepositoryNameTotalLengthMax = 255; diff --git a/src/main/java/com/github/dockerjava/core/util/FiltersEncoder.java b/src/main/java/com/github/dockerjava/core/util/FiltersEncoder.java index 164528a8c6..280daad453 100644 --- a/src/main/java/com/github/dockerjava/core/util/FiltersEncoder.java +++ b/src/main/java/com/github/dockerjava/core/util/FiltersEncoder.java @@ -16,6 +16,8 @@ * */ public class FiltersEncoder { + private FiltersEncoder() { + } private static final ObjectMapper OBJECT_MAPPER = new JacksonJaxbJsonProvider().locateMapper(Map.class, MediaType.APPLICATION_JSON_TYPE); diff --git a/src/test/resources/checkstyle/checkstyle-config.xml b/src/test/resources/checkstyle/checkstyle-config.xml index 3c353fc1a2..2906a76adc 100644 --- a/src/test/resources/checkstyle/checkstyle-config.xml +++ b/src/test/resources/checkstyle/checkstyle-config.xml @@ -148,6 +148,13 @@ + + + + + + + From b0e2853feca000af1ec95deb2f0976eb3ddf71aa Mon Sep 17 00:00:00 2001 From: Kanstantsin Shautsou Date: Sun, 31 Jan 2016 19:20:55 +0300 Subject: [PATCH 033/912] Checkstyle: other checks. --- src/test/resources/checkstyle/checkstyle-config.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/test/resources/checkstyle/checkstyle-config.xml b/src/test/resources/checkstyle/checkstyle-config.xml index 2906a76adc..02f55585fb 100644 --- a/src/test/resources/checkstyle/checkstyle-config.xml +++ b/src/test/resources/checkstyle/checkstyle-config.xml @@ -155,6 +155,16 @@ + + + + + + + + + + From d5d77ad81c355cba305d76e138d500706dcf339b Mon Sep 17 00:00:00 2001 From: Kanstantsin Shautsou Date: Sun, 31 Jan 2016 19:33:16 +0300 Subject: [PATCH 034/912] checkstyle: violations were in overlapped netty classes. --- .../java/com/github/dockerjava/netty/exec/CommitCmdExec.java | 4 ++-- .../com/github/dockerjava/netty/exec/CreateImageCmdExec.java | 2 +- src/test/resources/checkstyle/checkstyle-config.xml | 5 ++--- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/github/dockerjava/netty/exec/CommitCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/CommitCmdExec.java index b42bbdb3bb..eaba91fdba 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/CommitCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/CommitCmdExec.java @@ -27,8 +27,8 @@ protected String execute(CommitCmd command) { webTarget = booleanQueryParam(webTarget, "pause", command.hasPauseEnabled()); LOGGER.trace("POST: {}", webTarget); - ObjectNode objectNode = webTarget.request().accept(MediaType.APPLICATION_JSON). - post(command, new TypeReference() {}); + ObjectNode objectNode = webTarget.request().accept(MediaType.APPLICATION_JSON) + .post(command, new TypeReference() { }); return objectNode.get("Id").asText(); } diff --git a/src/main/java/com/github/dockerjava/netty/exec/CreateImageCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/CreateImageCmdExec.java index 3d3ddec27a..0e182e8bc9 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/CreateImageCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/CreateImageCmdExec.java @@ -26,6 +26,6 @@ protected CreateImageResponse execute(CreateImageCmd command) { LOGGER.trace("POST: {}", webResource); return webResource.request().accept(MediaType.APPLICATION_OCTET_STREAM) - .post(new TypeReference() {}, command.getImageStream()); + .post(new TypeReference() { }, command.getImageStream()); } } diff --git a/src/test/resources/checkstyle/checkstyle-config.xml b/src/test/resources/checkstyle/checkstyle-config.xml index 02f55585fb..ea30a270d0 100644 --- a/src/test/resources/checkstyle/checkstyle-config.xml +++ b/src/test/resources/checkstyle/checkstyle-config.xml @@ -98,8 +98,7 @@ - - + @@ -111,7 +110,7 @@ - + From 60a3518631cdc0a5606c0a96fcbc579fc27af526 Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Sat, 6 Feb 2016 18:30:53 +0100 Subject: [PATCH 035/912] Sync sources with eclipse code formatter and checkstyle --- etc/docker-java-formatter.xml | 587 ++++++++++++++++++ .../github/dockerjava/api/DockerClient.java | 9 +- .../dockerjava/api/async/ResultCallback.java | 4 +- .../api/command/AttachContainerCmd.java | 3 +- .../dockerjava/api/command/AuthCmd.java | 5 +- .../command/CopyArchiveToContainerCmd.java | 14 +- .../api/command/CreateContainerCmd.java | 32 +- .../api/command/CreateNetworkCmd.java | 2 +- .../api/command/CreateVolumeCmd.java | 4 +- .../api/command/InspectContainerResponse.java | 2 - .../api/command/ListContainersCmd.java | 3 +- .../api/command/LogContainerCmd.java | 7 +- .../dockerjava/api/command/StatsCmd.java | 4 +- .../dockerjava/api/model/AuthConfig.java | 4 +- .../com/github/dockerjava/api/model/Bind.java | 27 +- .../dockerjava/api/model/Capability.java | 62 +- .../github/dockerjava/api/model/Event.java | 6 +- .../dockerjava/api/model/ExposedPort.java | 22 +- .../github/dockerjava/api/model/Frame.java | 4 +- .../dockerjava/api/model/Identifier.java | 4 +- .../api/model/InternetProtocol.java | 4 +- .../com/github/dockerjava/api/model/Link.java | 27 +- .../dockerjava/api/model/LogConfig.java | 6 +- .../github/dockerjava/api/model/Network.java | 2 +- .../dockerjava/api/model/PortBinding.java | 34 +- .../github/dockerjava/api/model/Ports.java | 69 +- .../dockerjava/api/model/RestartPolicy.java | 7 +- .../github/dockerjava/api/model/Ulimit.java | 4 +- .../github/dockerjava/api/model/VolumeRW.java | 4 +- .../dockerjava/api/model/VolumesFrom.java | 24 +- .../dockerjava/core/AuthConfigFile.java | 5 +- .../dockerjava/core/DockerClientConfig.java | 17 +- .../dockerjava/core/GoLangFileMatch.java | 136 ++-- .../dockerjava/core/KeystoreSSLConfig.java | 26 +- .../github/dockerjava/core/NameParser.java | 5 +- .../dockerjava/core/RemoteApiVersion.java | 15 +- .../core/async/ResultCallbackTemplate.java | 9 +- .../core/command/ConnectToNetworkCmdImpl.java | 6 +- .../core/command/CreateNetworkCmdImpl.java | 3 +- .../command/DisconnectFromNetworkCmdImpl.java | 8 +- .../core/command/ExecStartCmdImpl.java | 1 - .../core/command/ExecStartResultCallback.java | 30 +- .../dockerjava/core/command/FrameReader.java | 17 +- .../core/command/InpectNetworkCmdImpl.java | 6 +- .../core/command/LogContainerCmdImpl.java | 4 +- .../core/dockerfile/Dockerfile.java | 4 +- .../core/util/CompressArchiveUtil.java | 4 +- .../dockerjava/core/util/FiltersBuilder.java | 5 +- .../dockerjava/jaxrs/ApacheUnixSocket.java | 10 +- .../jaxrs/ConnectToNetworkCmdExec.java | 2 +- .../jaxrs/DisconnectFromNetworkCmdExec.java | 2 +- .../jaxrs/InspectNetworkCmdExec.java | 5 +- .../jaxrs/RemoveNetworkCmdExec.java | 2 +- .../jaxrs/connector/ApacheConnector.java | 32 +- .../connector/ApacheConnectorProvider.java | 47 +- .../jaxrs/filter/FollowRedirectsFilter.java | 6 +- .../jaxrs/filter/LoggingFilter.java | 13 +- .../filter/ResponseStatusExceptionFilter.java | 40 +- .../util/WrappedResponseInputStream.java | 5 +- .../netty/DockerCmdExecFactoryImpl.java | 4 +- .../dockerjava/netty/InvocationBuilder.java | 4 +- .../github/dockerjava/netty/MediaType.java | 4 +- .../github/dockerjava/netty/WebTarget.java | 4 +- .../netty/exec/AbstrSyncDockerCmdExec.java | 1 - .../dockerjava/netty/exec/CommitCmdExec.java | 3 +- .../netty/exec/ConnectToNetworkCmdExec.java | 3 +- .../netty/exec/CreateImageCmdExec.java | 3 +- .../exec/DisconnectFromNetworkCmdExec.java | 3 +- .../dockerjava/netty/exec/InfoCmdExec.java | 3 +- .../netty/exec/LogContainerCmdExec.java | 1 - .../netty/exec/RestartContainerCmdExec.java | 1 - .../netty/exec/StopContainerCmdExec.java | 2 - .../handler/FramedResponseStreamHandler.java | 16 +- .../netty/handler/HttpResponseHandler.java | 78 +-- .../dockerjava/api/model/AuthConfigTest.java | 2 +- .../dockerjava/api/model/IdentifierTest.java | 2 +- .../api/model/Ports_addBindingsTest.java | 11 +- .../dockerjava/api/model/RepositoryTest.java | 2 +- .../model/RestartPolicy_SerializingTest.java | 4 +- .../api/model/RestartPolicy_toStringTest.java | 2 +- .../dockerjava/api/model/VolumeBindsTest.java | 2 +- .../client/AbstractDockerClientTest.java | 2 +- .../dockerjava/client/DockerClientTest.java | 4 +- .../dockerjava/core/DockerClientImplTest.java | 2 +- .../dockerjava/core/GoLangFileMatchTest.java | 108 ++-- .../core/TestDockerCmdExecFactory.java | 4 +- .../core/command/BuildImageCmdImplTest.java | 7 +- .../command/CreateContainerCmdImplTest.java | 21 +- .../core/command/FrameReaderTest.java | 2 +- .../command/StartContainerCmdImplTest.java | 19 +- .../DockerfileStatementAddTest.java | 18 +- .../core/dockerfile/DockerfileTest.java | 2 +- .../core/util/FiltersBuilderTest.java | 3 +- .../netty/exec/BuildImageCmdExecTest.java | 7 +- .../exec/CreateContainerCmdExecTest.java | 21 +- .../netty/exec/StartContainerCmdExecTest.java | 19 +- 96 files changed, 1192 insertions(+), 653 deletions(-) create mode 100644 etc/docker-java-formatter.xml diff --git a/etc/docker-java-formatter.xml b/etc/docker-java-formatter.xml new file mode 100644 index 0000000000..211b0a2230 --- /dev/null +++ b/etc/docker-java-formatter.xml @@ -0,0 +1,587 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/github/dockerjava/api/DockerClient.java b/src/main/java/com/github/dockerjava/api/DockerClient.java index 5db2967ffc..aaa3c5fcf3 100644 --- a/src/main/java/com/github/dockerjava/api/DockerClient.java +++ b/src/main/java/com/github/dockerjava/api/DockerClient.java @@ -107,12 +107,11 @@ public interface DockerClient extends Closeable { public CreateContainerCmd createContainerCmd(@Nonnull String image); /** - * Creates a new {@link StartContainerCmd} for the container with the given ID. The command can then be further - * customized by using builder methods on it like {@link StartContainerCmd#withDns(String...)}. + * Creates a new {@link StartContainerCmd} for the container with the given ID. The command can then be further customized by using + * builder methods on it like {@link StartContainerCmd#withDns(String...)}. *

- * If you customize the command, any existing configuration of the target container will get reset to its default - * before applying the new configuration. To preserve the existing configuration, use an unconfigured - * {@link StartContainerCmd}. + * If you customize the command, any existing configuration of the target container will get reset to its default before applying the + * new configuration. To preserve the existing configuration, use an unconfigured {@link StartContainerCmd}. *

* This command corresponds to the /containers/{id}/start endpoint of the Docker Remote API. */ diff --git a/src/main/java/com/github/dockerjava/api/async/ResultCallback.java b/src/main/java/com/github/dockerjava/api/async/ResultCallback.java index 0bb052a0b8..5b9fdb81cf 100644 --- a/src/main/java/com/github/dockerjava/api/async/ResultCallback.java +++ b/src/main/java/com/github/dockerjava/api/async/ResultCallback.java @@ -7,8 +7,8 @@ */ public interface ResultCallback extends Closeable { /** - * Called when the async processing starts respectively when the response arrives from the server. The passed - * {@link Closeable} can be used to close/interrupt the processing. + * Called when the async processing starts respectively when the response arrives from the server. The passed {@link Closeable} can be + * used to close/interrupt the processing. */ void onStart(Closeable closeable); diff --git a/src/main/java/com/github/dockerjava/api/command/AttachContainerCmd.java b/src/main/java/com/github/dockerjava/api/command/AttachContainerCmd.java index 84f063d7ec..ddeb21c2d5 100644 --- a/src/main/java/com/github/dockerjava/api/command/AttachContainerCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/AttachContainerCmd.java @@ -50,8 +50,7 @@ public interface AttachContainerCmd extends AsyncDockerCmd { public AuthCmd withAuthConfig(@Nonnull AuthConfig authConfig); /** - * @return The status. Based on it's value you may mean you need to authorise your account, e.g.: - * "Account created. Please see the documentation of the registry http://localhost:5000/v1/ - * for instructions how to activate it." + * @return The status. Based on it's value you may mean you need to authorise your account, e.g.: "Account created. Please see the + * documentation of the registry http://localhost:5000/v1/ for instructions how to activate it." * @throws UnauthorizedException * If you're not authorised (e.g. bad password). */ diff --git a/src/main/java/com/github/dockerjava/api/command/CopyArchiveToContainerCmd.java b/src/main/java/com/github/dockerjava/api/command/CopyArchiveToContainerCmd.java index bbfae4597c..a4dfb5c03d 100644 --- a/src/main/java/com/github/dockerjava/api/command/CopyArchiveToContainerCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/CopyArchiveToContainerCmd.java @@ -33,8 +33,7 @@ public interface CopyArchiveToContainerCmd extends SyncDockerCmd { CopyArchiveToContainerCmd withHostResource(String resource); /** - * Set the tar input stream that will be uploaded to the container. withHostResource or withTarInputStream can be - * defined but not both. + * Set the tar input stream that will be uploaded to the container. withHostResource or withTarInputStream can be defined but not both. * * @param tarInputStream * the stream to upload to the container @@ -42,8 +41,8 @@ public interface CopyArchiveToContainerCmd extends SyncDockerCmd { CopyArchiveToContainerCmd withTarInputStream(InputStream tarInputStream); /** - * If set to true then it will be an error if unpacking the given content would cause an existing directory to be - * replaced with a non-directory and vice versa + * If set to true then it will be an error if unpacking the given content would cause an existing directory to be replaced with a + * non-directory and vice versa * * @param noOverwriteDirNonDir * flag to know if non directory can be overwritten @@ -51,10 +50,9 @@ public interface CopyArchiveToContainerCmd extends SyncDockerCmd { CopyArchiveToContainerCmd withNoOverwriteDirNonDir(boolean noOverwriteDirNonDir); /** - * If this flag is set to true, all children of the local directory will be copied to the remote without the root - * directory. For ex: if I have root/titi and root/tata and the remote path is /var/data. dirChildrenOnly = true - * will create /var/data/titi and /var/data/tata dirChildrenOnly = false will create /var/data/root/titi and - * /var/data/root/tata + * If this flag is set to true, all children of the local directory will be copied to the remote without the root directory. For ex: if + * I have root/titi and root/tata and the remote path is /var/data. dirChildrenOnly = true will create /var/data/titi and /var/data/tata + * dirChildrenOnly = false will create /var/data/root/titi and /var/data/root/tata * * @param dirChildrenOnly * if root directory is ignored diff --git a/src/main/java/com/github/dockerjava/api/command/CreateContainerCmd.java b/src/main/java/com/github/dockerjava/api/command/CreateContainerCmd.java index f1c7fdd9c0..6b004c8268 100644 --- a/src/main/java/com/github/dockerjava/api/command/CreateContainerCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/CreateContainerCmd.java @@ -195,30 +195,26 @@ public interface CreateContainerCmd extends SyncDockerCmdkernel capability to the - * container. For example: adding {@link Capability#MKNOD} allows the container to create special files using the - * 'mknod' command. + * Add linux kernel capability to the container. For example: + * adding {@link Capability#MKNOD} allows the container to create special files using the 'mknod' command. */ public CreateContainerCmd withCapAdd(Capability... capAdd); /** - * Add linux kernel capability to the - * container. For example: adding {@link Capability#MKNOD} allows the container to create special files using the - * 'mknod' command. + * Add linux kernel capability to the container. For example: + * adding {@link Capability#MKNOD} allows the container to create special files using the 'mknod' command. */ public CreateContainerCmd withCapAdd(List capAdd); /** - * Drop linux kernel capability from the - * container. For example: dropping {@link Capability#CHOWN} prevents the container from changing the owner of any - * files. + * Drop linux kernel capability from the container. For example: + * dropping {@link Capability#CHOWN} prevents the container from changing the owner of any files. */ public CreateContainerCmd withCapDrop(Capability... capDrop); /** - * Drop linux kernel capability from the - * container. For example: dropping {@link Capability#CHOWN} prevents the container from changing the owner of any - * files. + * Drop linux kernel capability from the container. For example: + * dropping {@link Capability#CHOWN} prevents the container from changing the owner of any files. */ public CreateContainerCmd withCapDrop(List capDrop); @@ -334,8 +330,8 @@ public interface CreateContainerCmd extends SyncDockerCmd'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.
  • + *
  • '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.
  • * */ public CreateContainerCmd withNetworkMode(String networkMode); @@ -346,14 +342,14 @@ public interface CreateContainerCmd extends SyncDockerCmd--publish (-p) option of - * the docker run CLI command. + * Add one or more {@link PortBinding}s. This corresponds to the --publish (-p) option of the + * docker run CLI command. */ public CreateContainerCmd withPortBindings(PortBinding... portBindings); /** - * Add one or more {@link PortBinding}s. This corresponds to the --publish (-p) option of - * the docker run CLI command. + * Add one or more {@link PortBinding}s. This corresponds to the --publish (-p) option of the + * docker run CLI command. */ public CreateContainerCmd withPortBindings(List portBindings); diff --git a/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java b/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java index 2e3cd92a0d..82b4ac18c3 100644 --- a/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java @@ -34,7 +34,7 @@ public interface CreateNetworkCmd extends SyncDockerCmd { /** Name of the network driver to use. Defaults to bridge. */ public CreateNetworkCmd withDriver(String driver); - /** Driver specific options */ + /** Driver specific options */ public CreateNetworkCmd withOptions(Map options); public static interface Exec extends DockerCmdSyncExec { diff --git a/src/main/java/com/github/dockerjava/api/command/CreateVolumeCmd.java b/src/main/java/com/github/dockerjava/api/command/CreateVolumeCmd.java index 0642cf902d..801fb61228 100644 --- a/src/main/java/com/github/dockerjava/api/command/CreateVolumeCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/CreateVolumeCmd.java @@ -29,12 +29,10 @@ public interface CreateVolumeCmd extends SyncDockerCmd { /** * @param driverOpts - * - A mapping of driver options and values. These options are passed directly to the driver and are - * driver specific. + * - A mapping of driver options and values. These options are passed directly to the driver and are driver specific. */ public CreateVolumeCmd withDriverOpts(Map driverOpts); public static interface Exec extends DockerCmdSyncExec { } } - diff --git a/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java b/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java index 85f2812f01..3a49a4dd48 100644 --- a/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java +++ b/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java @@ -202,8 +202,6 @@ public String toString() { return ToStringBuilder.reflectionToString(this); } - - @JsonIgnoreProperties(ignoreUnknown = true) public class ContainerState { diff --git a/src/main/java/com/github/dockerjava/api/command/ListContainersCmd.java b/src/main/java/com/github/dockerjava/api/command/ListContainersCmd.java index 842f242cc4..4ae506a426 100644 --- a/src/main/java/com/github/dockerjava/api/command/ListContainersCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/ListContainersCmd.java @@ -57,8 +57,7 @@ public interface ListContainersCmd extends SyncDockerCmd> { /** * @param labels - * - Show only containers with the passed labels. Labels is a {@link Map} that contains label keys and - * values + * - Show only containers with the passed labels. Labels is a {@link Map} that contains label keys and values */ public ListContainersCmd withLabelFilter(Map labels); diff --git a/src/main/java/com/github/dockerjava/api/command/LogContainerCmd.java b/src/main/java/com/github/dockerjava/api/command/LogContainerCmd.java index f4b5076c5b..bb3081ce40 100644 --- a/src/main/java/com/github/dockerjava/api/command/LogContainerCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/LogContainerCmd.java @@ -23,8 +23,8 @@ * @param tail * - `all` or ``, Output specified number of lines at the end of logs * @param since - * - UNIX timestamp (integer) to filter logs. Specifying a timestamp will only output log-entries since that - * timestamp. Default: 0 (unfiltered) + * - UNIX timestamp (integer) to filter logs. Specifying a timestamp will only output log-entries since that timestamp. Default: + * 0 (unfiltered) */ public interface LogContainerCmd extends AsyncDockerCmd { @@ -53,8 +53,7 @@ public interface LogContainerCmd extends AsyncDockerCmd /** * Following the stream means the resulting {@link InputStream} returned by {@link #exec()} reads infinitely. So a - * {@link InputStream#read()} MAY BLOCK FOREVER as long as no data is streamed from the docker host to - * {@link DockerClient}! + * {@link InputStream#read()} MAY BLOCK FOREVER as long as no data is streamed from the docker host to {@link DockerClient}! */ public LogContainerCmd withFollowStream(Boolean followStream); diff --git a/src/main/java/com/github/dockerjava/api/command/StatsCmd.java b/src/main/java/com/github/dockerjava/api/command/StatsCmd.java index 653cd3bb2c..d2d7fe385e 100644 --- a/src/main/java/com/github/dockerjava/api/command/StatsCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/StatsCmd.java @@ -6,8 +6,8 @@ import com.github.dockerjava.api.model.Statistics; /** - * Get container stats. The result of {@link Statistics} is handled asynchronously because the docker remote API will - * block when a container is stopped until the container is up again. + * Get container stats. The result of {@link Statistics} is handled asynchronously because the docker remote API will block when a container + * is stopped until the container is up again. */ public interface StatsCmd extends AsyncDockerCmd { diff --git a/src/main/java/com/github/dockerjava/api/model/AuthConfig.java b/src/main/java/com/github/dockerjava/api/model/AuthConfig.java index 0bd6cac8cf..3dc3ef3480 100644 --- a/src/main/java/com/github/dockerjava/api/model/AuthConfig.java +++ b/src/main/java/com/github/dockerjava/api/model/AuthConfig.java @@ -79,7 +79,7 @@ public String toString() { return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE); } - //CHECKSTYLE:OFF + // CHECKSTYLE:OFF @Override public int hashCode() { final int prime = 31; @@ -128,5 +128,5 @@ public boolean equals(Object obj) { return false; return true; } - //CHECKSTYLE:ON + // CHECKSTYLE:ON } diff --git a/src/main/java/com/github/dockerjava/api/model/Bind.java b/src/main/java/com/github/dockerjava/api/model/Bind.java index aa48639238..bc7c8e4bb0 100644 --- a/src/main/java/com/github/dockerjava/api/model/Bind.java +++ b/src/main/java/com/github/dockerjava/api/model/Bind.java @@ -4,8 +4,8 @@ import org.apache.commons.lang.builder.HashCodeBuilder; /** - * Represents a host path being bind mounted as a {@link Volume} in a Docker container. The Bind can be in read only or - * read write access mode. + * Represents a host path being bind mounted as a {@link Volume} in a Docker container. The Bind can be in read only or read write access + * mode. */ public class Bind { @@ -50,16 +50,16 @@ public static Bind parse(String serialized) { try { String[] parts = serialized.split(":"); switch (parts.length) { - case 2: { - return new Bind(parts[0], new Volume(parts[1])); - } - case 3: { - AccessMode accessMode = AccessMode.valueOf(parts[2].toLowerCase()); - return new Bind(parts[0], new Volume(parts[1]), accessMode); - } - default: { - throw new IllegalArgumentException(); - } + case 2: { + return new Bind(parts[0], new Volume(parts[1])); + } + case 3: { + AccessMode accessMode = AccessMode.valueOf(parts[2].toLowerCase()); + return new Bind(parts[0], new Volume(parts[1]), accessMode); + } + default: { + throw new IllegalArgumentException(); + } } } catch (Exception e) { throw new IllegalArgumentException("Error parsing Bind '" + serialized + "'"); @@ -84,8 +84,7 @@ public int hashCode() { /** * Returns a string representation of this {@link Bind} suitable for inclusion in a JSON message. The format is - * <host path>:<container path>:<access mode>, like the argument in - * {@link #parse(String)}. + * <host path>:<container path>:<access mode>, like the argument in {@link #parse(String)}. * * @return a string representation of this {@link Bind} */ diff --git a/src/main/java/com/github/dockerjava/api/model/Capability.java b/src/main/java/com/github/dockerjava/api/model/Capability.java index 4757937e36..6237a65ae6 100644 --- a/src/main/java/com/github/dockerjava/api/model/Capability.java +++ b/src/main/java/com/github/dockerjava/api/model/Capability.java @@ -1,11 +1,9 @@ package com.github.dockerjava.api.model; /** - * The Linux capabilities supported by Docker. The list of capabilities is defined in Docker's types.go, {@link #ALL} - * was added manually. + * The Linux capabilities supported by Docker. The list of capabilities is defined in Docker's types.go, {@link #ALL} was added manually. * - * @see http://man7.org/linux/man-pages/man7/capabilities.7.html + * @see http://man7.org/linux/man-pages/man7/capabilities.7.html */ public enum Capability { /** @@ -33,8 +31,7 @@ public enum Capability { */ CHOWN, /** - * Bypass file read, write, and execute permission checks. (DAC is an abbreviation of - * "discretionary access control".) + * Bypass file read, write, and execute permission checks. (DAC is an abbreviation of "discretionary access control".) */ DAC_OVERRIDE, /** @@ -43,9 +40,8 @@ public enum Capability { DAC_READ_SEARCH, /** *
      - *
    • Bypass permission checks on operations that normally require the file system UID of the process to match the - * UID of the file (e.g., chmod(2), utime(2)), excluding those operations covered by the {@link #DAC_OVERRIDE} and - * {@link #DAC_READ_SEARCH}. + *
    • Bypass permission checks on operations that normally require the file system UID of the process to match the UID of the file + * (e.g., chmod(2), utime(2)), excluding those operations covered by the {@link #DAC_OVERRIDE} and {@link #DAC_READ_SEARCH}. *
    • Set extended file attributes (see chattr(1)) on arbitrary files. *
    • Set Access Control Lists (ACLs) on arbitrary files. *
    • Ignore directory sticky bit on file deletion. @@ -56,8 +52,8 @@ public enum Capability { /** *
        *
      • Don't clear set-user-ID and set-group-ID permission bits when a file is modified. - *
      • Set the set-group-ID bit for a file whose GID does not match the file system or any of the supplementary GIDs - * of the calling process. + *
      • Set the set-group-ID bit for a file whose GID does not match the file system or any of the supplementary GIDs of the calling + * process. *
      */ FSETID, @@ -70,8 +66,7 @@ public enum Capability { */ IPC_OWNER, /** - * Bypass permission checks for sending signals (see kill(2)). This includes use of the ioctl(2) KDSIGACCEPT - * operation. + * Bypass permission checks for sending signals (see kill(2)). This includes use of the ioctl(2) KDSIGACCEPT operation. */ KILL, /** @@ -105,8 +100,8 @@ public enum Capability { *
    • Clear driver statistics. *
    • Set promiscuous mode. *
    • Enabling multicasting. - *
    • Use setsockopt(2) to set the following socket options: SO_DEBUG, SO_MARK, SO_PRIORITY (for a priority outside - * the range 0 to 6), SO_RCVBUFFORCE, and SO_SNDBUFFORCE. + *
    • Use setsockopt(2) to set the following socket options: SO_DEBUG, SO_MARK, SO_PRIORITY (for a priority outside the range 0 to 6), + * SO_RCVBUFFORCE, and SO_SNDBUFFORCE. *
    */ NET_ADMIN, @@ -139,9 +134,9 @@ public enum Capability { /** * If file capabilities are not supported: *
      - *
    • grant or remove any capability in the caller's permitted capability set to or from any other process. (This - * property of CAP_SETPCAP is not available when the kernel is configured to support file capabilities, since - * CAP_SETPCAP has entirely different semantics for such kernels.) + *
    • grant or remove any capability in the caller's permitted capability set to or from any other process. (This property of + * CAP_SETPCAP is not available when the kernel is configured to support file capabilities, since CAP_SETPCAP has entirely different + * semantics for such kernels.) *
    *

    * If file capabilities are supported: @@ -161,19 +156,17 @@ public enum Capability { SETUID, /** *

      - *
    • Perform a range of system administration operations including: quotactl(2), mount(2), umount(2), swapon(2), - * swapoff(2), sethostname(2), and setdomainname(2). - *
    • Perform privileged syslog(2) operations (since Linux 2.6.37, CAP_SYSLOG should be used to permit such - * operations). + *
    • Perform a range of system administration operations including: quotactl(2), mount(2), umount(2), swapon(2), swapoff(2), + * sethostname(2), and setdomainname(2). + *
    • Perform privileged syslog(2) operations (since Linux 2.6.37, CAP_SYSLOG should be used to permit such operations). *
    • Perform VM86_REQUEST_IRQ vm86(2) command. *
    • Perform IPC_SET and IPC_RMID operations on arbitrary System V IPC objects. *
    • Perform operations on trusted and security Extended Attributes (see attr(5)). *
    • Use lookup_dcookie(2) - *
    • Use ioprio_set(2) to assign IOPRIO_CLASS_RT and (before Linux 2.6.25) IOPRIO_CLASS_IDLE I/O scheduling - * classes. + *
    • Use ioprio_set(2) to assign IOPRIO_CLASS_RT and (before Linux 2.6.25) IOPRIO_CLASS_IDLE I/O scheduling classes. *
    • Forge UID when passing socket credentials. - *
    • Exceed /proc/sys/fs/file-max, the system-wide limit on the number of open files, in system calls that open - * files (e.g., accept(2), execve(2), open(2), pipe(2)). + *
    • Exceed /proc/sys/fs/file-max, the system-wide limit on the number of open files, in system calls that open files (e.g., + * accept(2), execve(2), open(2), pipe(2)). *
    • Employ CLONE_* flags that create new namespaces with clone(2) and unshare(2). *
    • Call perf_event_open(2). *
    • Access privileged perf event information. @@ -181,8 +174,7 @@ public enum Capability { *
    • Call fanotify_init(2). *
    • Perform KEYCTL_CHOWN and KEYCTL_SETPERM keyctl(2) operations. *
    • Perform madvise(2) MADV_HWPOISON operation. - *
    • Employ the TIOCSTI ioctl(2) to insert characters into the input queue of a terminal other than the caller's - * controlling terminal. + *
    • Employ the TIOCSTI ioctl(2) to insert characters into the input queue of a terminal other than the caller's controlling terminal. *
    • Employ the obsolete nfsservctl(2) system call. *
    • Employ the obsolete bdflush(2) system call. *
    • Perform various privileged block-device ioctl(2) operations. @@ -202,8 +194,8 @@ public enum Capability { /** *
        *
      • Perform privileged syslog(2) operations. See syslog(2) for information on which operations require privilege. - *
      • View kernel addresses exposed via /proc and other interfaces when /proc/sys/kernel/kptr_restrict has the - * value 1. (See the discussion of the kptr_restrict in proc(5).) + *
      • View kernel addresses exposed via /proc and other interfaces when /proc/sys/kernel/kptr_restrict has the value 1. (See the + * discussion of the kptr_restrict in proc(5).) *
      */ SYSLOG, @@ -217,8 +209,8 @@ public enum Capability { /** *
        *
      • Raise process nice value (nice(2), setpriority(2)) and change the nice value for arbitrary processes. - *
      • Set real-time scheduling policies for calling process, and set scheduling policies and priorities for - * arbitrary processes (sched_setscheduler(2), sched_setparam(2)). + *
      • Set real-time scheduling policies for calling process, and set scheduling policies and priorities for arbitrary processes + * (sched_setscheduler(2), sched_setparam(2)). *
      • Set CPU affinity for arbitrary processes (sched_setaffinity(2)). *
      • Set I/O scheduling class and priority for arbitrary processes (ioprio_set(2)). *
      • Apply migrate_pages(2) to arbitrary processes and allow processes to be migrated to arbitrary nodes. @@ -265,10 +257,8 @@ public enum Capability { *
      • Override maximum number of consoles on console allocation. *
      • Override maximum number of keymaps. *
      • Allow more than 64hz interrupts from the real-time clock. - *
      • Raise msg_qbytes limit for a System V message queue above the limit in /proc/sys/kernel/msgmnb (see msgop(2) - * and msgctl(2)). - *
      • Override the /proc/sys/fs/pipe-size-max limit when setting the capacity of a pipe using the F_SETPIPE_SZ - * fcntl(2) command. + *
      • Raise msg_qbytes limit for a System V message queue above the limit in /proc/sys/kernel/msgmnb (see msgop(2) and msgctl(2)). + *
      • Override the /proc/sys/fs/pipe-size-max limit when setting the capacity of a pipe using the F_SETPIPE_SZ fcntl(2) command. *
      • Use F_SETPIPE_SZ to increase the capacity of a pipe above the limit specified by /proc/sys/fs/pipe-max-size. *
      • Override /proc/sys/fs/mqueue/queues_max limit when creating POSIX message queues (see mq_overview(7)). *
      • Employ prctl(2) PR_SET_MM operation. diff --git a/src/main/java/com/github/dockerjava/api/model/Event.java b/src/main/java/com/github/dockerjava/api/model/Event.java index 1ec0f433d0..202f5a350e 100644 --- a/src/main/java/com/github/dockerjava/api/model/Event.java +++ b/src/main/java/com/github/dockerjava/api/model/Event.java @@ -36,8 +36,7 @@ public Event() { * Container ID * @param status * Status string. List of statuses is available in Docker - * API v.1.16 + * href="iframe.php?url=https%3A%2F%2Fdocs.docker.com%2Freference%2Fapi%2Fdocker_remote_api_v1.16%2F%23monitor-dockers-events">Docker API v.1.16 * @param from * Image, from which the container has been created * @param time @@ -53,8 +52,7 @@ public Event(String status, String id, String from, Long time) { /** * Status of docker image or container. List of statuses is available in Docker API - * v.1.16 + * href="iframe.php?url=https%3A%2F%2Fdocs.docker.com%2Freference%2Fapi%2Fdocker_remote_api_v1.16%2F%23monitor-dockers-events">Docker API v.1.16 * * @return Status string */ diff --git a/src/main/java/com/github/dockerjava/api/model/ExposedPort.java b/src/main/java/com/github/dockerjava/api/model/ExposedPort.java index 43ee922912..25829b8aa3 100644 --- a/src/main/java/com/github/dockerjava/api/model/ExposedPort.java +++ b/src/main/java/com/github/dockerjava/api/model/ExposedPort.java @@ -24,9 +24,9 @@ import com.github.dockerjava.api.model.Ports.Binding; /** - * Represents a container port that Docker exposes to external clients. The port is defined by its {@link #getPort() - * port number} and an {@link InternetProtocol}. It can be published by Docker by - * {@link Ports#bind(ExposedPort, Binding) binding} it to a host port, represented by a {@link Binding}. + * Represents a container port that Docker exposes to external clients. The port is defined by its {@link #getPort() port number} and an + * {@link InternetProtocol}. It can be published by Docker by {@link Ports#bind(ExposedPort, Binding) binding} it to a host port, + * represented by a {@link Binding}. */ @JsonDeserialize(using = ExposedPort.Deserializer.class) @JsonSerialize(using = ExposedPort.Serializer.class) @@ -123,12 +123,12 @@ public static ExposedPort parse(String serialized) throws IllegalArgumentExcepti try { String[] parts = serialized.split("/"); switch (parts.length) { - case 1: - return new ExposedPort(Integer.valueOf(parts[0])); - case 2: - return new ExposedPort(Integer.valueOf(parts[0]), InternetProtocol.parse(parts[1])); - default: - throw new IllegalArgumentException(); + case 1: + return new ExposedPort(Integer.valueOf(parts[0])); + case 2: + return new ExposedPort(Integer.valueOf(parts[0]), InternetProtocol.parse(parts[1])); + default: + throw new IllegalArgumentException(); } } catch (Exception e) { throw new IllegalArgumentException("Error parsing ExposedPort '" + serialized + "'"); @@ -136,8 +136,8 @@ public static ExposedPort parse(String serialized) throws IllegalArgumentExcepti } /** - * Returns a string representation of this {@link ExposedPort} suitable for inclusion in a JSON message. The format - * is port/protocol, like the argument in {@link #parse(String)}. + * Returns a string representation of this {@link ExposedPort} suitable for inclusion in a JSON message. The format is + * port/protocol, like the argument in {@link #parse(String)}. * * @return a string representation of this {@link ExposedPort} */ diff --git a/src/main/java/com/github/dockerjava/api/model/Frame.java b/src/main/java/com/github/dockerjava/api/model/Frame.java index e398ec2559..0ad16e8c6c 100644 --- a/src/main/java/com/github/dockerjava/api/model/Frame.java +++ b/src/main/java/com/github/dockerjava/api/model/Frame.java @@ -28,7 +28,7 @@ public String toString() { return String.format("%s: %s", streamType, new String(payload).trim()); } - //CHECKSTYLE:OFF + // CHECKSTYLE:OFF @Override public boolean equals(Object o) { if (this == o) @@ -48,5 +48,5 @@ public int hashCode() { result = 31 * result + Arrays.hashCode(payload); return result; } - //CHECKSTYLE:ON + // CHECKSTYLE:ON } diff --git a/src/main/java/com/github/dockerjava/api/model/Identifier.java b/src/main/java/com/github/dockerjava/api/model/Identifier.java index ed5100e252..1051d857fb 100644 --- a/src/main/java/com/github/dockerjava/api/model/Identifier.java +++ b/src/main/java/com/github/dockerjava/api/model/Identifier.java @@ -22,8 +22,8 @@ public Identifier(Repository repository, String tag) { } /** - * Return an identifier that correctly splits up the repository and tag. There can be > 1 ":" fred/jim --> - * fred/jim, [] fred/jim:123 --> fred/jim, 123 fred:123/jim:123 --> fred:123/jim, 123 + * Return an identifier that correctly splits up the repository and tag. There can be > 1 ":" fred/jim --> fred/jim, [] + * fred/jim:123 --> fred/jim, 123 fred:123/jim:123 --> fred:123/jim, 123 * * * @param identifier diff --git a/src/main/java/com/github/dockerjava/api/model/InternetProtocol.java b/src/main/java/com/github/dockerjava/api/model/InternetProtocol.java index e3ef2b98c6..2bb4db2853 100644 --- a/src/main/java/com/github/dockerjava/api/model/InternetProtocol.java +++ b/src/main/java/com/github/dockerjava/api/model/InternetProtocol.java @@ -23,8 +23,8 @@ public enum InternetProtocol { public static final InternetProtocol DEFAULT = TCP; /** - * Returns a string representation of this {@link InternetProtocol} suitable for inclusion in a JSON message. The - * output is the lowercased name of the Protocol, e.g. tcp. + * Returns a string representation of this {@link InternetProtocol} suitable for inclusion in a JSON message. The output is the + * lowercased name of the Protocol, e.g. tcp. * * @return a string representation of this {@link InternetProtocol} */ diff --git a/src/main/java/com/github/dockerjava/api/model/Link.java b/src/main/java/com/github/dockerjava/api/model/Link.java index f647438a93..89647306cd 100644 --- a/src/main/java/com/github/dockerjava/api/model/Link.java +++ b/src/main/java/com/github/dockerjava/api/model/Link.java @@ -4,10 +4,9 @@ import org.apache.commons.lang.builder.HashCodeBuilder; /** - * Represents a network link between two Docker containers. The container with the name {@link #getName()} is made - * available in the target container with the aliased name {@link #getAlias()}. This involves creating an entry in - * /etc/hosts and some environment variables in the target container as well as creating a network bridge - * between both containers. + * Represents a network link between two Docker containers. The container with the name {@link #getName()} is made available in the target + * container with the aliased name {@link #getAlias()}. This involves creating an entry in /etc/hosts and some environment + * variables in the target container as well as creating a network bridge between both containers. */ public class Link { @@ -55,14 +54,14 @@ public static Link parse(final String serialized) throws IllegalArgumentExceptio try { final String[] parts = serialized.split(":"); switch (parts.length) { - case 2: { - String[] nameSplit = parts[0].split("/"); - String[] aliasSplit = parts[1].split("/"); - return new Link(nameSplit[nameSplit.length - 1], aliasSplit[aliasSplit.length - 1]); - } - default: { - throw new IllegalArgumentException(); - } + case 2: { + String[] nameSplit = parts[0].split("/"); + String[] aliasSplit = parts[1].split("/"); + return new Link(nameSplit[nameSplit.length - 1], aliasSplit[aliasSplit.length - 1]); + } + default: { + throw new IllegalArgumentException(); + } } } catch (final Exception e) { throw new IllegalArgumentException("Error parsing Link '" + serialized + "'"); @@ -85,8 +84,8 @@ public int hashCode() { } /** - * Returns a string representation of this {@link Link} suitable for inclusion in a JSON message. The format is - * name:alias, like the argument in {@link #parse(String)}. + * Returns a string representation of this {@link Link} suitable for inclusion in a JSON message. The format is name:alias, + * like the argument in {@link #parse(String)}. * * @return a string representation of this {@link Link} */ diff --git a/src/main/java/com/github/dockerjava/api/model/LogConfig.java b/src/main/java/com/github/dockerjava/api/model/LogConfig.java index 669bbc554e..cf9cdc1ee1 100644 --- a/src/main/java/com/github/dockerjava/api/model/LogConfig.java +++ b/src/main/java/com/github/dockerjava/api/model/LogConfig.java @@ -22,9 +22,9 @@ * * json-file (default) syslog journald none * - * If a driver is specified that is NOT supported,docker will default to null. If configs are supplied that are not - * supported by the type docker will ignore them. In most cases setting the config option to null will suffice. Consult - * the docker remote API for a more detailed and up-to-date explanation of the available types and their options. + * If a driver is specified that is NOT supported,docker will default to null. If configs are supplied that are not supported by the type + * docker will ignore them. In most cases setting the config option to null will suffice. Consult the docker remote API for a more detailed + * and up-to-date explanation of the available types and their options. */ public class LogConfig { diff --git a/src/main/java/com/github/dockerjava/api/model/Network.java b/src/main/java/com/github/dockerjava/api/model/Network.java index d62d830197..546904254b 100644 --- a/src/main/java/com/github/dockerjava/api/model/Network.java +++ b/src/main/java/com/github/dockerjava/api/model/Network.java @@ -149,6 +149,6 @@ public String getIpRange() { public String getGateway() { return gateway; } - } + } } } diff --git a/src/main/java/com/github/dockerjava/api/model/PortBinding.java b/src/main/java/com/github/dockerjava/api/model/PortBinding.java index 81f94ca063..e163272d77 100644 --- a/src/main/java/com/github/dockerjava/api/model/PortBinding.java +++ b/src/main/java/com/github/dockerjava/api/model/PortBinding.java @@ -7,13 +7,13 @@ import com.github.dockerjava.api.model.Ports.Binding; /** - * In a {@link PortBinding}, a network socket on the Docker host, expressed as a {@link Binding}, is bound to an - * {@link ExposedPort} of a container. A {@link PortBinding} corresponds to the --publish (-p) - * option of the docker run (and similar) CLI command for adding port bindings to a container. + * In a {@link PortBinding}, a network socket on the Docker host, expressed as a {@link Binding}, is bound to an {@link ExposedPort} of a + * container. A {@link PortBinding} corresponds to the --publish (-p) option of the docker run (and + * similar) CLI command for adding port bindings to a container. *

        - * Note: This is an abstraction used for creating new port bindings. It is not to be confused with the abstraction - * used for querying existing port bindings from a container configuration in {@link NetworkSettings#getPorts()} and - * {@link HostConfig#getPortBindings()}. In that context, a Map<ExposedPort, Binding[]> is used. + * Note: This is an abstraction used for creating new port bindings. It is not to be confused with the abstraction used for querying + * existing port bindings from a container configuration in {@link NetworkSettings#getPorts()} and {@link HostConfig#getPortBindings()}. In + * that context, a Map<ExposedPort, Binding[]> is used. */ public class PortBinding { private final Binding binding; @@ -37,17 +37,17 @@ public static PortBinding parse(String serialized) throws IllegalArgumentExcepti try { String[] parts = StringUtils.splitByWholeSeparator(serialized, ":"); switch (parts.length) { - case 3: - // 127.0.0.1:80:8080/tcp - return createFromSubstrings(parts[0] + ":" + parts[1], parts[2]); - case 2: - // 80:8080 // 127.0.0.1::8080 - return createFromSubstrings(parts[0], parts[1]); - case 1: - // 8080 - return createFromSubstrings("", parts[0]); - default: - throw new IllegalArgumentException(); + case 3: + // 127.0.0.1:80:8080/tcp + return createFromSubstrings(parts[0] + ":" + parts[1], parts[2]); + case 2: + // 80:8080 // 127.0.0.1::8080 + return createFromSubstrings(parts[0], parts[1]); + case 1: + // 8080 + return createFromSubstrings("", parts[0]); + default: + throw new IllegalArgumentException(); } } catch (Exception e) { throw new IllegalArgumentException("Error parsing PortBinding '" + serialized + "'", e); diff --git a/src/main/java/com/github/dockerjava/api/model/Ports.java b/src/main/java/com/github/dockerjava/api/model/Ports.java index 6bbb05fa24..e0250bba11 100644 --- a/src/main/java/com/github/dockerjava/api/model/Ports.java +++ b/src/main/java/com/github/dockerjava/api/model/Ports.java @@ -27,13 +27,13 @@ /** * A container for port bindings, made available as a {@link Map} via its {@link #getBindings()} method. *

        - * Note: This is an abstraction used for querying existing port bindings from a container configuration. It is not to - * be confused with the {@link PortBinding} abstraction used for adding new port bindings to a container. + * Note: This is an abstraction used for querying existing port bindings from a container configuration. It is not to be confused with + * the {@link PortBinding} abstraction used for adding new port bindings to a container. * * @see HostConfig#getPortBindings() * @see NetworkSettings#getPorts() */ -@SuppressWarnings(value = "checkstyle:equalshashcode") //FIXME? +@SuppressWarnings(value = "checkstyle:equalshashcode") @JsonDeserialize(using = Ports.Deserializer.class) @JsonSerialize(using = Ports.Serializer.class) public class Ports { @@ -41,16 +41,15 @@ public class Ports { private final Map ports = new HashMap(); /** - * Creates a {@link Ports} object with no {@link PortBinding}s. Use {@link #bind(ExposedPort, Binding)} or - * {@link #add(PortBinding...)} to add {@link PortBinding}s. + * Creates a {@link Ports} object with no {@link PortBinding}s. Use {@link #bind(ExposedPort, Binding)} or {@link #add(PortBinding...)} + * to add {@link PortBinding}s. */ public Ports() { } /** - * Creates a {@link Ports} object with an initial {@link PortBinding} for the specified {@link ExposedPort} and - * {@link Binding}. Use {@link #bind(ExposedPort, Binding)} or {@link #add(PortBinding...)} to add more - * {@link PortBinding}s. + * Creates a {@link Ports} object with an initial {@link PortBinding} for the specified {@link ExposedPort} and {@link Binding}. Use + * {@link #bind(ExposedPort, Binding)} or {@link #add(PortBinding...)} to add more {@link PortBinding}s. */ public Ports(ExposedPort exposedPort, Binding host) { bind(exposedPort, host); @@ -71,7 +70,7 @@ public void bind(ExposedPort exposedPort, Binding binding) { if (binding == null) { ports.put(exposedPort, null); } else { - ports.put(exposedPort, new Binding[]{binding}); + ports.put(exposedPort, new Binding[] {binding}); } } } @@ -91,8 +90,7 @@ public String toString() { } /** - * Returns the port bindings in the format used by the Docker remote API, i.e. the {@link Binding}s grouped by - * {@link ExposedPort}. + * Returns the port bindings in the format used by the Docker remote API, i.e. the {@link Binding}s grouped by {@link ExposedPort}. * * @return the port bindings as a {@link Map} that contains one or more {@link Binding}s per {@link ExposedPort}. */ @@ -125,9 +123,9 @@ public static Binding binding(Integer hostPort) { } /** - * A {@link Binding} represents a socket on the Docker host that is used in a {@link PortBinding}. It is - * characterized by an {@link #getHostIp() IP address} and a {@link #getHostPort() port number}. Both properties may - * be null in order to let Docker assign them dynamically/using defaults. + * A {@link Binding} represents a socket on the Docker host that is used in a {@link PortBinding}. It is characterized by an + * {@link #getHostIp() IP address} and a {@link #getHostPort() port number}. Both properties may be null in order to let + * Docker assign them dynamically/using defaults. * * @see Ports#bind(ExposedPort, Binding) * @see ExposedPort @@ -139,8 +137,7 @@ public static class Binding { private final Integer hostPort; /** - * Creates a {@link Binding} for the given {@link #getHostIp() IP address} and {@link #getHostPort() port - * number}. + * Creates a {@link Binding} for the given {@link #getHostIp() IP address} and {@link #getHostPort() port number}. * * @see Ports#bind(ExposedPort, Binding) * @see ExposedPort @@ -151,8 +148,8 @@ public Binding(String hostIp, Integer hostPort) { } /** - * Creates a {@link Binding} for the given {@link #getHostPort() port number}, leaving the {@link #getHostIp() - * IP address} undefined. + * Creates a {@link Binding} for the given {@link #getHostPort() port number}, leaving the {@link #getHostIp() IP address} + * undefined. * * @see Ports#bind(ExposedPort, Binding) * @see ExposedPort @@ -162,32 +159,30 @@ public Binding(Integer hostPort) { } /** - * Creates a {@link Binding} for the given {@link #getHostIp() IP address}, leaving the {@link #getHostPort() - * port number} undefined. + * Creates a {@link Binding} for the given {@link #getHostIp() IP address}, leaving the {@link #getHostPort() port number} + * undefined. */ public Binding(String hostIp) { this(hostIp, null); } /** - * Creates a {@link Binding} with both {@link #getHostIp() IP address} and {@link #getHostPort() port number} - * undefined. + * Creates a {@link Binding} with both {@link #getHostIp() IP address} and {@link #getHostPort() port number} undefined. */ public Binding() { this(null, null); } /** - * @return the IP address on the Docker host. May be null, in which case Docker will bind the port - * to all interfaces (0.0.0.0). + * @return the IP address on the Docker host. May be null, in which case Docker will bind the port to all interfaces ( + * 0.0.0.0). */ public String getHostIp() { return hostIp; } /** - * @return the port number on the Docker host. May be null, in which case Docker will dynamically - * assign a port. + * @return the port number on the Docker host. May be null, in which case Docker will dynamically assign a port. */ public Integer getHostPort() { return hostPort; @@ -212,15 +207,15 @@ public static Binding parse(String serialized) throws IllegalArgumentException { String[] parts = serialized.split(":"); switch (parts.length) { - case 2: { - return new Binding(parts[0], Integer.valueOf(parts[1])); - } - case 1: { - return parts[0].contains(".") ? new Binding(parts[0]) : new Binding(Integer.valueOf(parts[0])); - } - default: { - throw new IllegalArgumentException(); - } + case 2: { + return new Binding(parts[0], Integer.valueOf(parts[1])); + } + case 1: { + return parts[0].contains(".") ? new Binding(parts[0]) : new Binding(Integer.valueOf(parts[0])); + } + default: { + throw new IllegalArgumentException(); + } } } catch (Exception e) { throw new IllegalArgumentException("Error parsing Binding '" + serialized + "'"); @@ -228,8 +223,8 @@ public static Binding parse(String serialized) throws IllegalArgumentException { } /** - * Returns a string representation of this {@link Binding} suitable for inclusion in a JSON message. The format - * is [IP:]Port, like the argument in {@link #parse(String)}. + * Returns a string representation of this {@link Binding} suitable for inclusion in a JSON message. The format is + * [IP:]Port, like the argument in {@link #parse(String)}. * * @return a string representation of this {@link Binding} */ diff --git a/src/main/java/com/github/dockerjava/api/model/RestartPolicy.java b/src/main/java/com/github/dockerjava/api/model/RestartPolicy.java index d5c8f6e8ec..ac6c4a3183 100644 --- a/src/main/java/com/github/dockerjava/api/model/RestartPolicy.java +++ b/src/main/java/com/github/dockerjava/api/model/RestartPolicy.java @@ -15,8 +15,7 @@ *

        Do not restart the container if it dies. (default)
        * *
        on-failure
        - *
        Restart the container if it exits with a non-zero exit code. Can also accept an optional maximum restart count - * (e.g. on-failure:5). + *
        Restart the container if it exits with a non-zero exit code. Can also accept an optional maximum restart count (e.g. on-failure:5). *
        * *
        always
        @@ -111,8 +110,8 @@ public static RestartPolicy parse(String serialized) throws IllegalArgumentExcep } /** - * Returns a string representation of this {@link RestartPolicy}. The format is name[:count], like the - * argument in {@link #parse(String)}. + * Returns a string representation of this {@link RestartPolicy}. The format is name[:count], like the argument in + * {@link #parse(String)}. * * @return a string representation of this {@link RestartPolicy} */ diff --git a/src/main/java/com/github/dockerjava/api/model/Ulimit.java b/src/main/java/com/github/dockerjava/api/model/Ulimit.java index 51602e043c..7427fb0ccc 100644 --- a/src/main/java/com/github/dockerjava/api/model/Ulimit.java +++ b/src/main/java/com/github/dockerjava/api/model/Ulimit.java @@ -45,7 +45,7 @@ public Integer getHard() { return hard; } - //CHECKSTYLE:OFF + // CHECKSTYLE:OFF @Override public boolean equals(Object obj) { if (obj instanceof Ulimit) { @@ -61,5 +61,5 @@ public boolean equals(Object obj) { public int hashCode() { return new HashCodeBuilder().append(name).append(soft).append(hard).toHashCode(); } - //CHECKSTYLE:ON + // CHECKSTYLE:ON } diff --git a/src/main/java/com/github/dockerjava/api/model/VolumeRW.java b/src/main/java/com/github/dockerjava/api/model/VolumeRW.java index 3709d1b0c3..7c4bdfb269 100644 --- a/src/main/java/com/github/dockerjava/api/model/VolumeRW.java +++ b/src/main/java/com/github/dockerjava/api/model/VolumeRW.java @@ -53,8 +53,8 @@ public AccessMode getAccessMode() { } /** - * Returns a string representation of this {@link VolumeRW} suitable for inclusion in a JSON message. The returned - * String is simply the container path, {@link #getPath()}. + * Returns a string representation of this {@link VolumeRW} suitable for inclusion in a JSON message. The returned String is simply the + * container path, {@link #getPath()}. * * @return a string representation of this {@link VolumeRW} */ diff --git a/src/main/java/com/github/dockerjava/api/model/VolumesFrom.java b/src/main/java/com/github/dockerjava/api/model/VolumesFrom.java index 78585ef48d..f027b6d71e 100644 --- a/src/main/java/com/github/dockerjava/api/model/VolumesFrom.java +++ b/src/main/java/com/github/dockerjava/api/model/VolumesFrom.java @@ -55,16 +55,16 @@ public static VolumesFrom parse(String serialized) { try { String[] parts = serialized.split(":"); switch (parts.length) { - case 1: { - return new VolumesFrom(parts[0]); - } - case 2: { - return new VolumesFrom(parts[0], AccessMode.valueOf(parts[1])); - } - - default: { - throw new IllegalArgumentException(); - } + case 1: { + return new VolumesFrom(parts[0]); + } + case 2: { + return new VolumesFrom(parts[0], AccessMode.valueOf(parts[1])); + } + + default: { + throw new IllegalArgumentException(); + } } } catch (Exception e) { throw new IllegalArgumentException("Error parsing Bind '" + serialized + "'"); @@ -88,8 +88,8 @@ public int hashCode() { } /** - * Returns a string representation of this {@link VolumesFrom} suitable for inclusion in a JSON message. The format - * is <container>:<access mode>, like the argument in {@link #parse(String)}. + * Returns a string representation of this {@link VolumesFrom} suitable for inclusion in a JSON message. The format is + * <container>:<access mode>, like the argument in {@link #parse(String)}. * * @return a string representation of this {@link VolumesFrom} */ diff --git a/src/main/java/com/github/dockerjava/core/AuthConfigFile.java b/src/main/java/com/github/dockerjava/core/AuthConfigFile.java index 7315a05afe..1a4ef5a473 100644 --- a/src/main/java/com/github/dockerjava/core/AuthConfigFile.java +++ b/src/main/java/com/github/dockerjava/core/AuthConfigFile.java @@ -63,7 +63,7 @@ public AuthConfigurations getAuthConfigurations() { return authConfigurations; } - //CHECKSTYLE:OFF + // CHECKSTYLE:OFF @Override public int hashCode() { final int prime = 31; @@ -88,7 +88,8 @@ public boolean equals(Object obj) { return false; return true; } - //CHECKSTYLE:ON + + // CHECKSTYLE:ON @Override public String toString() { diff --git a/src/main/java/com/github/dockerjava/core/DockerClientConfig.java b/src/main/java/com/github/dockerjava/core/DockerClientConfig.java index 35f54c7364..89c4d37876 100644 --- a/src/main/java/com/github/dockerjava/core/DockerClientConfig.java +++ b/src/main/java/com/github/dockerjava/core/DockerClientConfig.java @@ -178,10 +178,11 @@ private static Properties overrideDockerPropertiesWithSystemProperties(Propertie Properties overriddenProperties = new Properties(); overriddenProperties.putAll(p); - for (String key : new String[]{DOCKER_IO_URL_PROPERTY, DOCKER_IO_VERSION_PROPERTY, + for (String key : new String[] { + DOCKER_IO_URL_PROPERTY, DOCKER_IO_VERSION_PROPERTY, DOCKER_IO_USERNAME_PROPERTY, DOCKER_IO_PASSWORD_PROPERTY, DOCKER_IO_EMAIL_PROPERTY, DOCKER_IO_SERVER_ADDRESS_PROPERTY, DOCKER_IO_DOCKER_CERT_PATH_PROPERTY, - DOCKER_IO_DOCKER_CFG_PATH_PROPERTY, }) { + DOCKER_IO_DOCKER_CFG_PATH_PROPERTY}) { if (systemProperties.containsKey(key)) { overriddenProperties.setProperty(key, systemProperties.getProperty(key)); } @@ -295,7 +296,7 @@ public AuthConfigurations getAuthConfigurations() { return new AuthConfigurations(); } - //CHECKSTYLE:OFF + // CHECKSTYLE:OFF @Override public boolean equals(Object o) { if (this == o) @@ -337,7 +338,8 @@ public int hashCode() { result = 31 * result + (sslConfig != null ? sslConfig.hashCode() : 0); return result; } - //CHECKSTYLE:ON + + // CHECKSTYLE:ON @Override public String toString() { @@ -354,10 +356,9 @@ public static class DockerClientConfigBuilder { private SSLConfig sslConfig; /** - * This will set all fields in the builder to those contained in the Properties object. The Properties object - * should contain the following docker.io.* keys: url, version, username, password, email, dockerCertPath, and - * dockerCfgPath. If docker.io.readTimeout or docker.io.enableLoggingFilter are not contained, they will be set - * to 1000 and true, respectively. + * This will set all fields in the builder to those contained in the Properties object. The Properties object should contain the + * following docker.io.* keys: url, version, username, password, email, dockerCertPath, and dockerCfgPath. If docker.io.readTimeout + * or docker.io.enableLoggingFilter are not contained, they will be set to 1000 and true, respectively. */ public DockerClientConfigBuilder withProperties(Properties p) { return withUri(p.getProperty(DOCKER_IO_URL_PROPERTY)) diff --git a/src/main/java/com/github/dockerjava/core/GoLangFileMatch.java b/src/main/java/com/github/dockerjava/core/GoLangFileMatch.java index 7bed65c5be..5dabdf4044 100644 --- a/src/main/java/com/github/dockerjava/core/GoLangFileMatch.java +++ b/src/main/java/com/github/dockerjava/core/GoLangFileMatch.java @@ -116,22 +116,22 @@ static ScanResult scanChunk(String pattern) { int i; Scan: for (i = 0; i < pattern.length(); i++) { switch (pattern.charAt(i)) { - case '\\': { - if (!IS_WINDOWS && i + 1 < pattern.length()) { - i++; - } - break; - } - case '[': - inRange = true; - break; - case ']': - inRange = false; - break; - case '*': - if (!inRange) { - break Scan; + case '\\': { + if (!IS_WINDOWS && i + 1 < pattern.length()) { + i++; + } + break; } + case '[': + inRange = true; + break; + case ']': + inRange = false; + break; + case '*': + if (!inRange) { + break Scan; + } } } return new ScanResult(star, pattern.substring(0, i), pattern.substring(i)); @@ -148,68 +148,68 @@ static String matchChunk(String chunk, String s) { return null; } switch (chunk.charAt(chunkOffset)) { - case '[': - r = s.charAt(sOffset); - sOffset++; - chunkOffset++; - // We can't end right after '[', we're expecting at least - // a closing bracket and possibly a caret. - if (chunkOffset == chunkLength) { - throw new GoLangFileMatchException(); - } - // possibly negated - boolean negated = chunk.charAt(chunkOffset) == '^'; - if (negated) { + case '[': + r = s.charAt(sOffset); + sOffset++; chunkOffset++; - } - // parse all ranges - boolean match = false; - int nrange = 0; - while (true) { - if (chunkOffset < chunkLength && chunk.charAt(chunkOffset) == ']' && nrange > 0) { + // We can't end right after '[', we're expecting at least + // a closing bracket and possibly a caret. + if (chunkOffset == chunkLength) { + throw new GoLangFileMatchException(); + } + // possibly negated + boolean negated = chunk.charAt(chunkOffset) == '^'; + if (negated) { chunkOffset++; - break; } - GetEscResult result = getEsc(chunk, chunkOffset, chunkLength); - char lo = result.lo; - char hi = lo; - chunkOffset = result.chunkOffset; - if (chunk.charAt(chunkOffset) == '-') { - result = getEsc(chunk, ++chunkOffset, chunkLength); + // parse all ranges + boolean match = false; + int nrange = 0; + while (true) { + if (chunkOffset < chunkLength && chunk.charAt(chunkOffset) == ']' && nrange > 0) { + chunkOffset++; + break; + } + GetEscResult result = getEsc(chunk, chunkOffset, chunkLength); + char lo = result.lo; + char hi = lo; chunkOffset = result.chunkOffset; - hi = result.lo; + if (chunk.charAt(chunkOffset) == '-') { + result = getEsc(chunk, ++chunkOffset, chunkLength); + chunkOffset = result.chunkOffset; + hi = result.lo; + } + if (lo <= r && r <= hi) { + match = true; + } + nrange++; } - if (lo <= r && r <= hi) { - match = true; + if (match == negated) { + return null; } - nrange++; - } - if (match == negated) { - return null; - } - break; + break; - case '?': - if (s.charAt(sOffset) == File.separatorChar) { - return null; - } - sOffset++; - chunkOffset++; - break; - case '\\': - if (!IS_WINDOWS) { + case '?': + if (s.charAt(sOffset) == File.separatorChar) { + return null; + } + sOffset++; chunkOffset++; - if (chunkOffset == chunkLength) { - throw new GoLangFileMatchException(); + break; + case '\\': + if (!IS_WINDOWS) { + chunkOffset++; + if (chunkOffset == chunkLength) { + throw new GoLangFileMatchException(); + } } - } - // fallthrough - default: - if (chunk.charAt(chunkOffset) != s.charAt(sOffset)) { - return null; - } - sOffset++; - chunkOffset++; + // fallthrough + default: + if (chunk.charAt(chunkOffset) != s.charAt(sOffset)) { + return null; + } + sOffset++; + chunkOffset++; } } return s.substring(sOffset); diff --git a/src/main/java/com/github/dockerjava/core/KeystoreSSLConfig.java b/src/main/java/com/github/dockerjava/core/KeystoreSSLConfig.java index bdc2e6e891..43946a53b9 100644 --- a/src/main/java/com/github/dockerjava/core/KeystoreSSLConfig.java +++ b/src/main/java/com/github/dockerjava/core/KeystoreSSLConfig.java @@ -88,22 +88,24 @@ public SSLContext getSSLContext() throws KeyManagementException, UnrecoverableKe final KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory .getDefaultAlgorithm()); keyManagerFactory.init(keystore, keystorePassword.toCharArray()); - context.init(keyManagerFactory.getKeyManagers(), new TrustManager[]{new X509TrustManager() { - @Override - public X509Certificate[] getAcceptedIssuers() { - return new X509Certificate[] {}; - } + context.init(keyManagerFactory.getKeyManagers(), new TrustManager[] { + new X509TrustManager() { + @Override + public X509Certificate[] getAcceptedIssuers() { + return new X509Certificate[] {}; + } - @Override - public void checkClientTrusted(final X509Certificate[] arg0, final String arg1) { + @Override + public void checkClientTrusted(final X509Certificate[] arg0, final String arg1) { - } + } - @Override - public void checkServerTrusted(final X509Certificate[] arg0, final String arg1) { + @Override + public void checkServerTrusted(final X509Certificate[] arg0, final String arg1) { - } - } }, new SecureRandom()); + } + } + }, new SecureRandom()); return context; } diff --git a/src/main/java/com/github/dockerjava/core/NameParser.java b/src/main/java/com/github/dockerjava/core/NameParser.java index 5027422fdb..1db59e3a07 100644 --- a/src/main/java/com/github/dockerjava/core/NameParser.java +++ b/src/main/java/com/github/dockerjava/core/NameParser.java @@ -17,14 +17,15 @@ public class NameParser { private NameParser() { } - //CHECKSTYLE:OFF + // CHECKSTYLE:OFF private static final int RepositoryNameTotalLengthMax = 255; private static final Pattern RepositoryNameComponentRegexp = Pattern.compile("[a-z0-9]+(?:[._-][a-z0-9]+)*"); private static final Pattern RepositoryNameComponentAnchoredRegexp = Pattern.compile("^" + RepositoryNameComponentRegexp.pattern() + "$"); - //CHECKSTYLE:ON + + // CHECKSTYLE:ON // private static final Pattern RepositoryNameRegexp = Pattern.compile("(?:" + // RepositoryNameComponentRegexp.pattern() diff --git a/src/main/java/com/github/dockerjava/core/RemoteApiVersion.java b/src/main/java/com/github/dockerjava/core/RemoteApiVersion.java index 80f9406b79..4a264ab17c 100644 --- a/src/main/java/com/github/dockerjava/core/RemoteApiVersion.java +++ b/src/main/java/com/github/dockerjava/core/RemoteApiVersion.java @@ -10,8 +10,8 @@ import com.google.common.base.Strings; /** - * Bean to encapsulate the version of the Docker Remote (REST) API + * Bean to encapsulate the version of the Docker Remote (REST) + * API *

        * Contains the minor and major version of the API as well as operations to compare API versions. * @@ -53,14 +53,12 @@ public class RemoteApiVersion implements Serializable { public static final RemoteApiVersion VERSION_1_21 = RemoteApiVersion.create(1, 21); /** - * @see Docker - * API 1.22 + * @see Docker API 1.22 */ public static final RemoteApiVersion VERSION_1_22 = RemoteApiVersion.create(1, 22); /** - * Unknown, docker doesn't reflect reality. I.e. we implemented method, but for javadoc it not clear when it was - * added. + * Unknown, docker doesn't reflect reality. I.e. we implemented method, but for javadoc it not clear when it was added. */ private static final RemoteApiVersion UNKNOWN_VERSION = new RemoteApiVersion(0, 0) { @@ -127,7 +125,7 @@ public boolean isGreaterOrEqual(final RemoteApiVersion other) { return false; } - //CHECKSTYLE:OFF + // CHECKSTYLE:OFF @Override public boolean equals(final Object o) { if (this == o) @@ -137,7 +135,8 @@ public boolean equals(final Object o) { final RemoteApiVersion that = (RemoteApiVersion) o; return Objects.equal(major, that.major) && Objects.equal(minor, that.minor); } - //CHECKSTYLE:ON + + // CHECKSTYLE:ON @Override public int hashCode() { diff --git a/src/main/java/com/github/dockerjava/core/async/ResultCallbackTemplate.java b/src/main/java/com/github/dockerjava/core/async/ResultCallbackTemplate.java index 0e146c1e9f..edbf49827d 100644 --- a/src/main/java/com/github/dockerjava/core/async/ResultCallbackTemplate.java +++ b/src/main/java/com/github/dockerjava/core/async/ResultCallbackTemplate.java @@ -103,8 +103,8 @@ public RC_T awaitCompletion(long timeout, TimeUnit timeUnit) throws InterruptedE } /** - * Blocks until {@link ResultCallback#onStart()} was called. {@link ResultCallback#onStart()} is called when the - * request was processed on the server side and the response is incoming. + * Blocks until {@link ResultCallback#onStart()} was called. {@link ResultCallback#onStart()} is called when the request was processed + * on the server side and the response is incoming. */ @SuppressWarnings("unchecked") public RC_T awaitStarted() throws InterruptedException { @@ -113,9 +113,8 @@ public RC_T awaitStarted() throws InterruptedException { } /** - * Blocks until {@link ResultCallback#onStart()} was called or the given timeout occurs. - * {@link ResultCallback#onStart()} is called when the request was processed on the server side and the response is - * incoming. + * Blocks until {@link ResultCallback#onStart()} was called or the given timeout occurs. {@link ResultCallback#onStart()} is called when + * the request was processed on the server side and the response is incoming. */ @SuppressWarnings("unchecked") public RC_T awaitStarted(long timeout, TimeUnit timeUnit) throws InterruptedException { diff --git a/src/main/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImpl.java index cfb6cce145..7014704b16 100644 --- a/src/main/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImpl.java @@ -27,12 +27,14 @@ public String getContainerId() { return containerId; } - @Override public ConnectToNetworkCmd withNetworkId(String networkId) { + @Override + public ConnectToNetworkCmd withNetworkId(String networkId) { this.networkId = networkId; return this; } - @Override public ConnectToNetworkCmd withContainerId(String containerId) { + @Override + public ConnectToNetworkCmd withContainerId(String containerId) { this.containerId = containerId; return this; } diff --git a/src/main/java/com/github/dockerjava/core/command/CreateNetworkCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/CreateNetworkCmdImpl.java index fba16dfb9c..c7d3b0abbc 100644 --- a/src/main/java/com/github/dockerjava/core/command/CreateNetworkCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/CreateNetworkCmdImpl.java @@ -1,6 +1,5 @@ package com.github.dockerjava.core.command; - import java.util.HashMap; import java.util.Map; @@ -12,7 +11,7 @@ import com.github.dockerjava.api.model.Network.Ipam; public class CreateNetworkCmdImpl extends AbstrDockerCmd - implements CreateNetworkCmd { + implements CreateNetworkCmd { @JsonProperty("Name") private String name; diff --git a/src/main/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImpl.java index a89201ad26..ae24946b63 100644 --- a/src/main/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImpl.java @@ -6,7 +6,7 @@ import com.github.dockerjava.api.command.DockerCmdSyncExec; public class DisconnectFromNetworkCmdImpl extends AbstrDockerCmd - implements DisconnectFromNetworkCmd { + implements DisconnectFromNetworkCmd { @JsonIgnore private String networkId; @@ -28,12 +28,14 @@ public String getContainerId() { return containerId; } - @Override public DisconnectFromNetworkCmd withNetworkId(String networkId) { + @Override + public DisconnectFromNetworkCmd withNetworkId(String networkId) { this.networkId = networkId; return this; } - @Override public DisconnectFromNetworkCmd withContainerId(String containerId) { + @Override + public DisconnectFromNetworkCmd withContainerId(String containerId) { this.containerId = containerId; return this; } diff --git a/src/main/java/com/github/dockerjava/core/command/ExecStartCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/ExecStartCmdImpl.java index 836c9158e9..01532090a2 100644 --- a/src/main/java/com/github/dockerjava/core/command/ExecStartCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/ExecStartCmdImpl.java @@ -61,7 +61,6 @@ public InputStream getStdin() { return stdin; } - @Override public ExecStartCmd withDetach(Boolean detach) { this.detach = detach; diff --git a/src/main/java/com/github/dockerjava/core/command/ExecStartResultCallback.java b/src/main/java/com/github/dockerjava/core/command/ExecStartResultCallback.java index 62e492db90..847d62057d 100644 --- a/src/main/java/com/github/dockerjava/core/command/ExecStartResultCallback.java +++ b/src/main/java/com/github/dockerjava/core/command/ExecStartResultCallback.java @@ -34,21 +34,21 @@ public void onNext(Frame frame) { if (frame != null) { try { switch (frame.getStreamType()) { - case STDOUT: - case RAW: - if (stdout != null) { - stdout.write(frame.getPayload()); - stdout.flush(); - } - break; - case STDERR: - if (stderr != null) { - stderr.write(frame.getPayload()); - stderr.flush(); - } - break; - default: - LOGGER.error("unknown stream type:" + frame.getStreamType()); + case STDOUT: + case RAW: + if (stdout != null) { + stdout.write(frame.getPayload()); + stdout.flush(); + } + break; + case STDERR: + if (stderr != null) { + stderr.write(frame.getPayload()); + stderr.flush(); + } + break; + default: + LOGGER.error("unknown stream type:" + frame.getStreamType()); } } catch (IOException e) { onError(e); diff --git a/src/main/java/com/github/dockerjava/core/command/FrameReader.java b/src/main/java/com/github/dockerjava/core/command/FrameReader.java index 0e885082a2..1e8ac09302 100644 --- a/src/main/java/com/github/dockerjava/core/command/FrameReader.java +++ b/src/main/java/com/github/dockerjava/core/command/FrameReader.java @@ -22,21 +22,20 @@ public class FrameReader implements AutoCloseable { private Boolean rawStreamDetected = false; - public FrameReader(InputStream inputStream) { this.inputStream = inputStream; } private static StreamType streamType(byte streamType) { switch (streamType) { - case 0: - return StreamType.STDIN; - case 1: - return StreamType.STDOUT; - case 2: - return StreamType.STDERR; - default: - return StreamType.RAW; + case 0: + return StreamType.STDIN; + case 1: + return StreamType.STDOUT; + case 2: + return StreamType.STDERR; + default: + return StreamType.RAW; } } diff --git a/src/main/java/com/github/dockerjava/core/command/InpectNetworkCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/InpectNetworkCmdImpl.java index 0a0c564c5d..7d9ef75b1e 100644 --- a/src/main/java/com/github/dockerjava/core/command/InpectNetworkCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/InpectNetworkCmdImpl.java @@ -12,11 +12,13 @@ public InpectNetworkCmdImpl(DockerCmdSyncExec exec) super(exec); } - @Override public String getNetworkId() { + @Override + public String getNetworkId() { return networkId; } - @Override public InspectNetworkCmd withNetworkId(String networkId) { + @Override + public InspectNetworkCmd withNetworkId(String networkId) { this.networkId = networkId; return this; diff --git a/src/main/java/com/github/dockerjava/core/command/LogContainerCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/LogContainerCmdImpl.java index f561a6deb9..aa267fc8fd 100644 --- a/src/main/java/com/github/dockerjava/core/command/LogContainerCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/LogContainerCmdImpl.java @@ -22,8 +22,8 @@ * @param tail * - `all` or ``, Output specified number of lines at the end of logs * @param since - * - UNIX timestamp (integer) to filter logs. Specifying a timestamp will only output log-entries since that - * timestamp. Default: 0 (unfiltered) + * - UNIX timestamp (integer) to filter logs. Specifying a timestamp will only output log-entries since that timestamp. Default: + * 0 (unfiltered) */ public class LogContainerCmdImpl extends AbstrAsyncDockerCmd implements LogContainerCmd { diff --git a/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java b/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java index 9a94d6b1d7..8c1c34e2ad 100644 --- a/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java +++ b/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java @@ -213,8 +213,8 @@ private List matchingIgnorePatterns(String fileName) { } /** - * Returns the matching ignore pattern for the given file or null if it should NOT be ignored. Exception rules - * like "!Dockerfile" will be respected. + * Returns the matching ignore pattern for the given file or null if it should NOT be ignored. Exception rules like "!Dockerfile" + * will be respected. */ private String effectiveMatchingIgnorePattern(File file) { String relativeFilename = FilePathUtil.relativize(getDockerFolder(), file); diff --git a/src/main/java/com/github/dockerjava/core/util/CompressArchiveUtil.java b/src/main/java/com/github/dockerjava/core/util/CompressArchiveUtil.java index c63489d850..5052dda403 100644 --- a/src/main/java/com/github/dockerjava/core/util/CompressArchiveUtil.java +++ b/src/main/java/com/github/dockerjava/core/util/CompressArchiveUtil.java @@ -54,8 +54,8 @@ private static TarArchiveOutputStream buildTarStream(Path outputPath, boolean gZ * @param outputPath * where to put the archived file * @param childrenOnly - * if inputPath is directory and if childrenOnly is true, the archive will contain all of its children, - * else the archive contains unique entry which is the inputPath itself + * if inputPath is directory and if childrenOnly is true, the archive will contain all of its children, else the archive + * contains unique entry which is the inputPath itself * @param gZipped * compress with gzip algorithm */ diff --git a/src/main/java/com/github/dockerjava/core/util/FiltersBuilder.java b/src/main/java/com/github/dockerjava/core/util/FiltersBuilder.java index 7ad3804819..4d71014dde 100644 --- a/src/main/java/com/github/dockerjava/core/util/FiltersBuilder.java +++ b/src/main/java/com/github/dockerjava/core/util/FiltersBuilder.java @@ -81,7 +81,7 @@ private static List labelsMapToList(Map labels) { return result; } - //CHECKSTYLE:OFF + // CHECKSTYLE:OFF @Override public boolean equals(Object o) { if (this == o) @@ -94,7 +94,8 @@ public boolean equals(Object o) { return filters.equals(filters1.filters); } - //CHECKSTYLE:ON + + // CHECKSTYLE:ON @Override public int hashCode() { diff --git a/src/main/java/com/github/dockerjava/jaxrs/ApacheUnixSocket.java b/src/main/java/com/github/dockerjava/jaxrs/ApacheUnixSocket.java index e30028f348..a1b860b287 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/ApacheUnixSocket.java +++ b/src/main/java/com/github/dockerjava/jaxrs/ApacheUnixSocket.java @@ -35,13 +35,11 @@ import org.newsclub.net.unix.AFUNIXSocket; /** - * Provides a socket that wraps an org.newsclub.net.unix.AFUNIXSocket and delays setting options until the socket is - * connected. This is necessary because the Apache HTTP client attempts to set options prior to connecting the socket, - * which doesn't work for Unix sockets since options are being set on the underlying file descriptor. Until the socket - * is connected, the file descriptor doesn't exist. + * Provides a socket that wraps an org.newsclub.net.unix.AFUNIXSocket and delays setting options until the socket is connected. This is + * necessary because the Apache HTTP client attempts to set options prior to connecting the socket, which doesn't work for Unix sockets + * since options are being set on the underlying file descriptor. Until the socket is connected, the file descriptor doesn't exist. * - * This class also noop's any calls to setReuseAddress, which is called by the Apache client but isn't supported by - * AFUnixSocket. + * This class also noop's any calls to setReuseAddress, which is called by the Apache client but isn't supported by AFUnixSocket. */ public class ApacheUnixSocket extends Socket { diff --git a/src/main/java/com/github/dockerjava/jaxrs/ConnectToNetworkCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/ConnectToNetworkCmdExec.java index dfc730e039..8a69b31fd8 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/ConnectToNetworkCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/ConnectToNetworkCmdExec.java @@ -11,7 +11,7 @@ import static javax.ws.rs.client.Entity.entity; public class ConnectToNetworkCmdExec extends AbstrSyncDockerCmdExec - implements ConnectToNetworkCmd.Exec { + implements ConnectToNetworkCmd.Exec { private static final Logger LOGGER = LoggerFactory.getLogger(ConnectToNetworkCmdExec.class); diff --git a/src/main/java/com/github/dockerjava/jaxrs/DisconnectFromNetworkCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/DisconnectFromNetworkCmdExec.java index 4f6f545768..95c3f5c226 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/DisconnectFromNetworkCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/DisconnectFromNetworkCmdExec.java @@ -11,7 +11,7 @@ import static javax.ws.rs.client.Entity.entity; public class DisconnectFromNetworkCmdExec extends AbstrSyncDockerCmdExec - implements DisconnectFromNetworkCmd.Exec { + implements DisconnectFromNetworkCmd.Exec { private static final Logger LOGGER = LoggerFactory.getLogger(DisconnectFromNetworkCmdExec.class); diff --git a/src/main/java/com/github/dockerjava/jaxrs/InspectNetworkCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/InspectNetworkCmdExec.java index c5e6b4d0a7..c9b19f881e 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/InspectNetworkCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/InspectNetworkCmdExec.java @@ -17,10 +17,11 @@ public InspectNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerCl super(baseResource, dockerClientConfig); } - @Override protected Network execute(InspectNetworkCmd command) { + @Override + protected Network execute(InspectNetworkCmd command) { WebTarget webResource = getBaseResource().path("/networks/{id}").resolveTemplate("id", - command.getNetworkId()); + command.getNetworkId()); LOGGER.debug("GET: {}", webResource); return webResource.request().accept(MediaType.APPLICATION_JSON).get(Network.class); diff --git a/src/main/java/com/github/dockerjava/jaxrs/RemoveNetworkCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/RemoveNetworkCmdExec.java index 84f115d4c7..acc2bdd276 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/RemoveNetworkCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/RemoveNetworkCmdExec.java @@ -9,7 +9,7 @@ import javax.ws.rs.core.MediaType; public class RemoveNetworkCmdExec extends AbstrSyncDockerCmdExec - implements RemoveNetworkCmd.Exec { + implements RemoveNetworkCmd.Exec { private static final Logger LOGGER = LoggerFactory.getLogger(RemoveNetworkCmdExec.class); diff --git a/src/main/java/com/github/dockerjava/jaxrs/connector/ApacheConnector.java b/src/main/java/com/github/dockerjava/jaxrs/connector/ApacheConnector.java index 7994f32618..68b47bfa8f 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/connector/ApacheConnector.java +++ b/src/main/java/com/github/dockerjava/jaxrs/connector/ApacheConnector.java @@ -142,32 +142,29 @@ *

      • {@link ApacheClientProperties#SSL_CONFIG}
      • *
      *

      - * This connector uses {@link RequestEntityProcessing#CHUNKED chunked encoding} as a default setting. This can be - * overridden by the {@link ClientProperties#REQUEST_ENTITY_PROCESSING}. By default the - * {@link ClientProperties#CHUNKED_ENCODING_SIZE} property is only supported by using default connection manager. If - * custom connection manager needs to be used then chunked encoding size can be set by providing a custom - * {@link org.apache.http.HttpClientConnection} (via custom - * {@link org.apache.http.impl.conn.ManagedHttpClientConnectionFactory}) and overriding {@code createOutputStream} - * method. + * This connector uses {@link RequestEntityProcessing#CHUNKED chunked encoding} as a default setting. This can be overridden by the + * {@link ClientProperties#REQUEST_ENTITY_PROCESSING}. By default the {@link ClientProperties#CHUNKED_ENCODING_SIZE} property is only + * supported by using default connection manager. If custom connection manager needs to be used then chunked encoding size can be set by + * providing a custom {@link org.apache.http.HttpClientConnection} (via custom + * {@link org.apache.http.impl.conn.ManagedHttpClientConnectionFactory}) and overriding {@code createOutputStream} method. *

      *

      - * Using of authorization is dependent on the chunk encoding setting. If the entity buffering is enabled, the entity is - * buffered and authorization can be performed automatically in response to a 401 by sending the request again. When - * entity buffering is disabled (chunked encoding is used) then the property - * {@link org.glassfish.jersey.apache.connector.ApacheClientProperties#PREEMPTIVE_BASIC_AUTHENTICATION} must be set to - * {@code true}. + * Using of authorization is dependent on the chunk encoding setting. If the entity buffering is enabled, the entity is buffered and + * authorization can be performed automatically in response to a 401 by sending the request again. When entity buffering is disabled + * (chunked encoding is used) then the property + * {@link org.glassfish.jersey.apache.connector.ApacheClientProperties#PREEMPTIVE_BASIC_AUTHENTICATION} must be set to {@code true}. *

      *

      * If a {@link org.glassfish.jersey.client.ClientResponse} is obtained and an entity is not read from the response then - * {@link org.glassfish.jersey.client.ClientResponse#close()} MUST be called after processing the response to release - * connection-based resources. + * {@link org.glassfish.jersey.client.ClientResponse#close()} MUST be called after processing the response to release connection-based + * resources. *

      *

      * Client operations are thread safe, the HTTP connection may be shared between different threads. *

      *

      - * If a response entity is obtained that is an instance of {@link Closeable} then the instance MUST be closed after - * processing the entity to release connection-based resources. + * If a response entity is obtained that is an instance of {@link Closeable} then the instance MUST be closed after processing the entity to + * release connection-based resources. *

      *

      * The following methods are currently supported: HEAD, GET, POST, PUT, DELETE, OPTIONS, PATCH and TRACE. @@ -404,8 +401,7 @@ public HttpClient getHttpClient() { /** * Get the {@link CookieStore}. * - * @return the {@link CookieStore} instance or {@code null} when {@value ApacheClientProperties#DISABLE_COOKIES} set - * to {@code true}. + * @return the {@link CookieStore} instance or {@code null} when {@value ApacheClientProperties#DISABLE_COOKIES} set to {@code true}. */ public CookieStore getCookieStore() { return cookieStore; diff --git a/src/main/java/com/github/dockerjava/jaxrs/connector/ApacheConnectorProvider.java b/src/main/java/com/github/dockerjava/jaxrs/connector/ApacheConnectorProvider.java index 00deefe851..eafb55c298 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/connector/ApacheConnectorProvider.java +++ b/src/main/java/com/github/dockerjava/jaxrs/connector/ApacheConnectorProvider.java @@ -51,8 +51,8 @@ import org.glassfish.jersey.client.spi.ConnectorProvider; /** - * Connector provider for Jersey {@link Connector connectors} that utilize Apache HTTP Client to send and receive HTTP - * request and responses. + * Connector provider for Jersey {@link Connector connectors} that utilize Apache HTTP Client to send and receive HTTP request and + * responses. *

      * The following connector configuration properties are supported: *

        @@ -70,30 +70,28 @@ *
      *

      *

      - * Connector instances created via this connector provider use - * {@link org.glassfish.jersey.client.RequestEntityProcessing#CHUNKED chunked encoding} as a default setting. This can - * be overridden by the {@link org.glassfish.jersey.client.ClientProperties#REQUEST_ENTITY_PROCESSING}. By default the - * {@link org.glassfish.jersey.client.ClientProperties#CHUNKED_ENCODING_SIZE} property is only supported when using the - * default {@code org.apache.http.conn.HttpClientConnectionManager} instance. If custom connection manager is used, then - * chunked encoding size can be set by providing a custom {@code org.apache.http.HttpClientConnection} (via custom - * {@code org.apache.http.impl.conn.ManagedHttpClientConnectionFactory}) and overriding it's {@code createOutputStream} - * method. + * Connector instances created via this connector provider use {@link org.glassfish.jersey.client.RequestEntityProcessing#CHUNKED chunked + * encoding} as a default setting. This can be overridden by the + * {@link org.glassfish.jersey.client.ClientProperties#REQUEST_ENTITY_PROCESSING}. By default the + * {@link org.glassfish.jersey.client.ClientProperties#CHUNKED_ENCODING_SIZE} property is only supported when using the default + * {@code org.apache.http.conn.HttpClientConnectionManager} instance. If custom connection manager is used, then chunked encoding size can + * be set by providing a custom {@code org.apache.http.HttpClientConnection} (via custom + * {@code org.apache.http.impl.conn.ManagedHttpClientConnectionFactory}) and overriding it's {@code createOutputStream} method. *

      *

      - * Use of authorization by the AHC-based connectors is dependent on the chunk encoding setting. If the entity buffering - * is enabled, the entity is buffered and authorization can be performed automatically in response to a 401 by sending - * the request again. When entity buffering is disabled (chunked encoding is used) then the property - * {@link org.glassfish.jersey.apache.connector.ApacheClientProperties#PREEMPTIVE_BASIC_AUTHENTICATION} must be set to - * {@code true}. + * Use of authorization by the AHC-based connectors is dependent on the chunk encoding setting. If the entity buffering is enabled, the + * entity is buffered and authorization can be performed automatically in response to a 401 by sending the request again. When entity + * buffering is disabled (chunked encoding is used) then the property + * {@link org.glassfish.jersey.apache.connector.ApacheClientProperties#PREEMPTIVE_BASIC_AUTHENTICATION} must be set to {@code true}. *

      *

      * If a {@link org.glassfish.jersey.client.ClientResponse} is obtained and an entity is not read from the response then - * {@link org.glassfish.jersey.client.ClientResponse#close()} MUST be called after processing the response to release - * connection-based resources. + * {@link org.glassfish.jersey.client.ClientResponse#close()} MUST be called after processing the response to release connection-based + * resources. *

      *

      - * If a response entity is obtained that is an instance of {@link java.io.Closeable} then the instance MUST be closed - * after processing the entity to release connection-based resources. + * If a response entity is obtained that is an instance of {@link java.io.Closeable} then the instance MUST be closed after processing the + * entity to release connection-based resources. *

      *

      * The following methods are currently supported: HEAD, GET, POST, PUT, DELETE, OPTIONS, PATCH and TRACE. @@ -114,17 +112,16 @@ public Connector getConnector(Client client, Configuration runtimeConfig) { } /** - * Retrieve the underlying Apache {@link HttpClient} instance from {@link org.glassfish.jersey.client.JerseyClient} - * or {@link org.glassfish.jersey.client.JerseyWebTarget} configured to use {@code ApacheConnectorProvider}. + * Retrieve the underlying Apache {@link HttpClient} instance from {@link org.glassfish.jersey.client.JerseyClient} or + * {@link org.glassfish.jersey.client.JerseyWebTarget} configured to use {@code ApacheConnectorProvider}. * * @param component - * {@code JerseyClient} or {@code JerseyWebTarget} instance that is configured to use - * {@code ApacheConnectorProvider}. + * {@code JerseyClient} or {@code JerseyWebTarget} instance that is configured to use {@code ApacheConnectorProvider}. * @return underlying Apache {@code HttpClient} instance. * * @throws java.lang.IllegalArgumentException - * in case the {@code component} is neither {@code JerseyClient} nor {@code JerseyWebTarget} instance or - * in case the component is not configured to use a {@code ApacheConnectorProvider}. + * in case the {@code component} is neither {@code JerseyClient} nor {@code JerseyWebTarget} instance or in case the + * component is not configured to use a {@code ApacheConnectorProvider}. * @since 2.8 */ public static HttpClient getHttpClient(Configurable component) { diff --git a/src/main/java/com/github/dockerjava/jaxrs/filter/FollowRedirectsFilter.java b/src/main/java/com/github/dockerjava/jaxrs/filter/FollowRedirectsFilter.java index cb5cd06870..4a7765d97d 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/filter/FollowRedirectsFilter.java +++ b/src/main/java/com/github/dockerjava/jaxrs/filter/FollowRedirectsFilter.java @@ -9,9 +9,9 @@ import javax.ws.rs.core.Response; /** - * Default implementation of RedirectStrategy honors the restrictions on automatic redirection of entity enclosing - * methods such as POST and PUT imposed by the HTTP specification. 302 Moved Temporarily, 301 Moved Permanently and 307 - * Temporary Redirect status codes will result in an automatic redirect of HEAD and GET methods only. + * Default implementation of RedirectStrategy honors the restrictions on automatic redirection of entity enclosing methods such as POST and + * PUT imposed by the HTTP specification. 302 Moved Temporarily, 301 Moved Permanently and 307 Temporary Redirect status codes will result + * in an automatic redirect of HEAD and GET methods only. * * {@link org.apache.http.impl.client.DefaultRedirectStrategy} * diff --git a/src/main/java/com/github/dockerjava/jaxrs/filter/LoggingFilter.java b/src/main/java/com/github/dockerjava/jaxrs/filter/LoggingFilter.java index 76666fe4e5..8c98483186 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/filter/LoggingFilter.java +++ b/src/main/java/com/github/dockerjava/jaxrs/filter/LoggingFilter.java @@ -116,8 +116,8 @@ public int compare(final Map.Entry> o1, final Map.Entry, RES_T> extends AbstrDockerCmdExec implements DockerCmdSyncExec { diff --git a/src/main/java/com/github/dockerjava/netty/exec/CommitCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/CommitCmdExec.java index eaba91fdba..e568345cdb 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/CommitCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/CommitCmdExec.java @@ -28,7 +28,8 @@ protected String execute(CommitCmd command) { LOGGER.trace("POST: {}", webTarget); ObjectNode objectNode = webTarget.request().accept(MediaType.APPLICATION_JSON) - .post(command, new TypeReference() { }); + .post(command, new TypeReference() { + }); return objectNode.get("Id").asText(); } diff --git a/src/main/java/com/github/dockerjava/netty/exec/ConnectToNetworkCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/ConnectToNetworkCmdExec.java index b1090f4c34..b7bff9d521 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/ConnectToNetworkCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/ConnectToNetworkCmdExec.java @@ -6,9 +6,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; - public class ConnectToNetworkCmdExec extends AbstrSyncDockerCmdExec - implements ConnectToNetworkCmd.Exec { + implements ConnectToNetworkCmd.Exec { private static final Logger LOGGER = LoggerFactory.getLogger(ConnectToNetworkCmdExec.class); diff --git a/src/main/java/com/github/dockerjava/netty/exec/CreateImageCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/CreateImageCmdExec.java index 0e182e8bc9..8fd791f53d 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/CreateImageCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/CreateImageCmdExec.java @@ -26,6 +26,7 @@ protected CreateImageResponse execute(CreateImageCmd command) { LOGGER.trace("POST: {}", webResource); return webResource.request().accept(MediaType.APPLICATION_OCTET_STREAM) - .post(new TypeReference() { }, command.getImageStream()); + .post(new TypeReference() { + }, command.getImageStream()); } } diff --git a/src/main/java/com/github/dockerjava/netty/exec/DisconnectFromNetworkCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/DisconnectFromNetworkCmdExec.java index 8b814bddcb..ef139517f4 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/DisconnectFromNetworkCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/DisconnectFromNetworkCmdExec.java @@ -6,9 +6,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; - public class DisconnectFromNetworkCmdExec extends AbstrSyncDockerCmdExec - implements DisconnectFromNetworkCmd.Exec { + implements DisconnectFromNetworkCmd.Exec { private static final Logger LOGGER = LoggerFactory.getLogger(DisconnectFromNetworkCmdExec.class); diff --git a/src/main/java/com/github/dockerjava/netty/exec/InfoCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/InfoCmdExec.java index 288765650d..8fc211322e 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/InfoCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/InfoCmdExec.java @@ -10,8 +10,7 @@ import com.github.dockerjava.netty.WebTarget; /** - * http://stackoverflow.com/questions/33296749/netty-connect-to-unix-domain- socket-failed - * http://netty.io/wiki/native-transports.html + * http://stackoverflow.com/questions/33296749/netty-connect-to-unix-domain- socket-failed http://netty.io/wiki/native-transports.html * https://github.com/netty/netty/blob/master/example/src/main/java/io/netty/ example/http/snoop/HttpSnoopClient.java * * @author Marcus Linke diff --git a/src/main/java/com/github/dockerjava/netty/exec/LogContainerCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/LogContainerCmdExec.java index 9117803620..a23bcb20d6 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/LogContainerCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/LogContainerCmdExec.java @@ -9,7 +9,6 @@ import com.github.dockerjava.core.DockerClientConfig; import com.github.dockerjava.netty.WebTarget; - public class LogContainerCmdExec extends AbstrAsyncDockerCmdExec implements LogContainerCmd.Exec { diff --git a/src/main/java/com/github/dockerjava/netty/exec/RestartContainerCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/RestartContainerCmdExec.java index 6c1f47a0bd..df97210548 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/RestartContainerCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/RestartContainerCmdExec.java @@ -8,7 +8,6 @@ import com.github.dockerjava.netty.MediaType; import com.github.dockerjava.netty.WebTarget; - public class RestartContainerCmdExec extends AbstrSyncDockerCmdExec implements RestartContainerCmd.Exec { diff --git a/src/main/java/com/github/dockerjava/netty/exec/StopContainerCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/StopContainerCmdExec.java index 3bade97e70..cd85d92c26 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/StopContainerCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/StopContainerCmdExec.java @@ -8,8 +8,6 @@ import com.github.dockerjava.netty.MediaType; import com.github.dockerjava.netty.WebTarget; - - public class StopContainerCmdExec extends AbstrSyncDockerCmdExec implements StopContainerCmd.Exec { diff --git a/src/main/java/com/github/dockerjava/netty/handler/FramedResponseStreamHandler.java b/src/main/java/com/github/dockerjava/netty/handler/FramedResponseStreamHandler.java index b58292b51c..0567050d29 100644 --- a/src/main/java/com/github/dockerjava/netty/handler/FramedResponseStreamHandler.java +++ b/src/main/java/com/github/dockerjava/netty/handler/FramedResponseStreamHandler.java @@ -138,14 +138,14 @@ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws E private static StreamType streamType(byte streamType) { switch (streamType) { - case 0: - return StreamType.STDIN; - case 1: - return StreamType.STDOUT; - case 2: - return StreamType.STDERR; - default: - return StreamType.RAW; + case 0: + return StreamType.STDIN; + case 1: + return StreamType.STDOUT; + case 2: + return StreamType.STDERR; + default: + return StreamType.RAW; } } diff --git a/src/main/java/com/github/dockerjava/netty/handler/HttpResponseHandler.java b/src/main/java/com/github/dockerjava/netty/handler/HttpResponseHandler.java index cbe8686d9b..571fa9be50 100644 --- a/src/main/java/com/github/dockerjava/netty/handler/HttpResponseHandler.java +++ b/src/main/java/com/github/dockerjava/netty/handler/HttpResponseHandler.java @@ -25,8 +25,8 @@ import com.github.dockerjava.api.exception.UnauthorizedException; /** - * Handler that is responsible to handle an incoming {@link HttpResponse}. It evaluates the status code and triggers the - * appropriate lifecycle methods at the passed {@link ResultCallback}. + * Handler that is responsible to handle an incoming {@link HttpResponse}. It evaluates the status code and triggers the appropriate + * lifecycle methods at the passed {@link ResultCallback}. * * @author Marcus Linke */ @@ -66,49 +66,49 @@ public void close() { ByteBuf byteBuf = content.content(); switch (response.status().code()) { - case 200: - case 201: - case 204: - ctx.fireChannelRead(byteBuf); - break; - default: - errorBody.writeBytes(byteBuf); + case 200: + case 201: + case 204: + ctx.fireChannelRead(byteBuf); + break; + default: + errorBody.writeBytes(byteBuf); } if (content instanceof LastHttpContent) { try { switch (response.status().code()) { - case 101: - case 200: - case 201: - case 204: - break; - case 301: - case 302: - if (response.headers().contains(HttpHeaderNames.LOCATION)) { - String location = response.headers().get(HttpHeaderNames.LOCATION); - HttpRequest redirected = requestProvider.getHttpRequest(location); - - ctx.channel().writeAndFlush(redirected); - } - break; - case 304: - throw new NotModifiedException(getBodyAsMessage(errorBody)); - case 400: - throw new BadRequestException(getBodyAsMessage(errorBody)); - case 401: - throw new UnauthorizedException(getBodyAsMessage(errorBody)); - case 404: - throw new NotFoundException(getBodyAsMessage(errorBody)); - case 406: - throw new NotAcceptableException(getBodyAsMessage(errorBody)); - case 409: - throw new ConflictException(getBodyAsMessage(errorBody)); - case 500: - throw new InternalServerErrorException(getBodyAsMessage(errorBody)); - default: - throw new DockerException(getBodyAsMessage(errorBody), response.status().code()); + case 101: + case 200: + case 201: + case 204: + break; + case 301: + case 302: + if (response.headers().contains(HttpHeaderNames.LOCATION)) { + String location = response.headers().get(HttpHeaderNames.LOCATION); + HttpRequest redirected = requestProvider.getHttpRequest(location); + + ctx.channel().writeAndFlush(redirected); + } + break; + case 304: + throw new NotModifiedException(getBodyAsMessage(errorBody)); + case 400: + throw new BadRequestException(getBodyAsMessage(errorBody)); + case 401: + throw new UnauthorizedException(getBodyAsMessage(errorBody)); + case 404: + throw new NotFoundException(getBodyAsMessage(errorBody)); + case 406: + throw new NotAcceptableException(getBodyAsMessage(errorBody)); + case 409: + throw new ConflictException(getBodyAsMessage(errorBody)); + case 500: + throw new InternalServerErrorException(getBodyAsMessage(errorBody)); + default: + throw new DockerException(getBodyAsMessage(errorBody), response.status().code()); } } catch (Throwable e) { resultCallback.onError(e); diff --git a/src/test/java/com/github/dockerjava/api/model/AuthConfigTest.java b/src/test/java/com/github/dockerjava/api/model/AuthConfigTest.java index f718b1bdbd..33066a84f2 100644 --- a/src/test/java/com/github/dockerjava/api/model/AuthConfigTest.java +++ b/src/test/java/com/github/dockerjava/api/model/AuthConfigTest.java @@ -22,4 +22,4 @@ public void setUp() throws Exception { public void defaultServerAddress() throws Exception { assertEquals(new AuthConfig().getServerAddress(), "https://index.docker.io/v1/"); } -} \ No newline at end of file +} diff --git a/src/test/java/com/github/dockerjava/api/model/IdentifierTest.java b/src/test/java/com/github/dockerjava/api/model/IdentifierTest.java index 14325bd123..e8d4703db6 100644 --- a/src/test/java/com/github/dockerjava/api/model/IdentifierTest.java +++ b/src/test/java/com/github/dockerjava/api/model/IdentifierTest.java @@ -34,4 +34,4 @@ public void testFromCompoundString() throws Exception { Identifier i6 = Identifier.fromCompoundString("10.0.0.1:5000/my-test-image:1234"); assertEquals(i6.repository.getPath(), "my-test-image"); } -} \ No newline at end of file +} diff --git a/src/test/java/com/github/dockerjava/api/model/Ports_addBindingsTest.java b/src/test/java/com/github/dockerjava/api/model/Ports_addBindingsTest.java index 05a2b3f016..a5a8697f5f 100644 --- a/src/test/java/com/github/dockerjava/api/model/Ports_addBindingsTest.java +++ b/src/test/java/com/github/dockerjava/api/model/Ports_addBindingsTest.java @@ -10,9 +10,8 @@ import com.github.dockerjava.api.model.Ports.Binding; /** - * As there may be several {@link Binding}s per {@link ExposedPort}, it makes a difference if you add - * {@link PortBinding}s for the same or different {@link ExposedPort}s to {@link Ports}. This test verifies that the Map - * in {@link Ports} is populated correctly in both cases. + * As there may be several {@link Binding}s per {@link ExposedPort}, it makes a difference if you add {@link PortBinding}s for the same or + * different {@link ExposedPort}s to {@link Ports}. This test verifies that the Map in {@link Ports} is populated correctly in both cases. */ public class Ports_addBindingsTest { private static final ExposedPort TCP_80 = ExposedPort.tcp(80); @@ -37,8 +36,8 @@ public void addTwoBindingsForDifferentExposedPorts() { Map bindings = ports.getBindings(); // two keys with one value each assertEquals(bindings.size(), 2); - assertEquals(bindings.get(TCP_80), new Binding[] { BINDING_8080 }); - assertEquals(bindings.get(TCP_90), new Binding[] { BINDING_9090 }); + assertEquals(bindings.get(TCP_80), new Binding[] {BINDING_8080}); + assertEquals(bindings.get(TCP_90), new Binding[] {BINDING_9090}); } @Test @@ -48,7 +47,7 @@ public void addTwoBindingsForSameExposedPort() { Map bindings = ports.getBindings(); // one key with two values assertEquals(bindings.size(), 1); - assertEquals(bindings.get(TCP_80), new Binding[] { BINDING_8080, BINDING_9090 }); + assertEquals(bindings.get(TCP_80), new Binding[] {BINDING_8080, BINDING_9090}); } @Test diff --git a/src/test/java/com/github/dockerjava/api/model/RepositoryTest.java b/src/test/java/com/github/dockerjava/api/model/RepositoryTest.java index 8db0273df7..c78b61a85a 100644 --- a/src/test/java/com/github/dockerjava/api/model/RepositoryTest.java +++ b/src/test/java/com/github/dockerjava/api/model/RepositoryTest.java @@ -15,4 +15,4 @@ public void testRepository() throws Exception { assertEquals(1234, repo1.getURL().getPort()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/github/dockerjava/api/model/RestartPolicy_SerializingTest.java b/src/test/java/com/github/dockerjava/api/model/RestartPolicy_SerializingTest.java index b4a9a746ac..74c97fcf6f 100644 --- a/src/test/java/com/github/dockerjava/api/model/RestartPolicy_SerializingTest.java +++ b/src/test/java/com/github/dockerjava/api/model/RestartPolicy_SerializingTest.java @@ -7,8 +7,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; /** - * Compares serialization results of various {@link RestartPolicy}s with what Docker (as of 1.3.3) actually sends when - * executing docker run --restart xxx. + * Compares serialization results of various {@link RestartPolicy}s with what Docker (as of 1.3.3) actually sends when executing + * docker run --restart xxx. */ public class RestartPolicy_SerializingTest { private final ObjectMapper objectMapper = new ObjectMapper(); diff --git a/src/test/java/com/github/dockerjava/api/model/RestartPolicy_toStringTest.java b/src/test/java/com/github/dockerjava/api/model/RestartPolicy_toStringTest.java index a2d99ce9cc..69e1e88a20 100644 --- a/src/test/java/com/github/dockerjava/api/model/RestartPolicy_toStringTest.java +++ b/src/test/java/com/github/dockerjava/api/model/RestartPolicy_toStringTest.java @@ -9,7 +9,7 @@ public class RestartPolicy_toStringTest { @DataProvider(name = "input") public Object[][] restartPolicies() { - return new Object[][] { { "no" }, { "always" }, { "on-failure" }, { "on-failure:2" } }; + return new Object[][] { {"no"}, {"always"}, {"on-failure"}, {"on-failure:2"}}; } @Test(dataProvider = "input") diff --git a/src/test/java/com/github/dockerjava/api/model/VolumeBindsTest.java b/src/test/java/com/github/dockerjava/api/model/VolumeBindsTest.java index 7a22d65872..7d35c25a32 100644 --- a/src/test/java/com/github/dockerjava/api/model/VolumeBindsTest.java +++ b/src/test/java/com/github/dockerjava/api/model/VolumeBindsTest.java @@ -28,4 +28,4 @@ public void t1() throws IOException { objectMapper.readValue(s, VolumeBinds.class); } -} \ No newline at end of file +} diff --git a/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java b/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java index 074c19ad9e..bc36acb334 100644 --- a/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java +++ b/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java @@ -229,7 +229,7 @@ public static class LogContainerTestCallback extends LogContainerResultCallback public void onNext(Frame frame) { log.append(new String(frame.getPayload())); System.err.println("LogContainerTestCallback: " + log.toString()); - //super.onNext(frame); + // super.onNext(frame); } @Override diff --git a/src/test/java/com/github/dockerjava/client/DockerClientTest.java b/src/test/java/com/github/dockerjava/client/DockerClientTest.java index 8a7d6f6a44..72a09f0e5d 100644 --- a/src/test/java/com/github/dockerjava/client/DockerClientTest.java +++ b/src/test/java/com/github/dockerjava/client/DockerClientTest.java @@ -50,11 +50,11 @@ public void afterMethod(ITestResult result) { @Test public void testRunShlex() throws DockerException { - String[] commands = new String[] { "true", + String[] commands = new String[] {"true", "echo \"The Young Descendant of Tepes & Septette for the Dead Princess\"", "echo -n 'The Young Descendant of Tepes & Septette for the Dead Princess'", "/bin/sh -c echo Hello World", "/bin/sh -c echo 'Hello World'", "echo 'Night of Nights'", - "true && echo 'Night of Nights'" }; + "true && echo 'Night of Nights'"}; for (String command : commands) { LOG.info("Running command: [{}]", command); diff --git a/src/test/java/com/github/dockerjava/core/DockerClientImplTest.java b/src/test/java/com/github/dockerjava/core/DockerClientImplTest.java index c5a1e841c0..34995ab1ae 100644 --- a/src/test/java/com/github/dockerjava/core/DockerClientImplTest.java +++ b/src/test/java/com/github/dockerjava/core/DockerClientImplTest.java @@ -33,4 +33,4 @@ public void defaultInstanceAuthConfig() throws Exception { // then we do not get an exception } -} \ No newline at end of file +} diff --git a/src/test/java/com/github/dockerjava/core/GoLangFileMatchTest.java b/src/test/java/com/github/dockerjava/core/GoLangFileMatchTest.java index 342c740eda..0fd8701946 100644 --- a/src/test/java/com/github/dockerjava/core/GoLangFileMatchTest.java +++ b/src/test/java/com/github/dockerjava/core/GoLangFileMatchTest.java @@ -41,60 +41,60 @@ public void testMatch(MatchTestCase testCase) throws IOException { @DataProvider public Object[][] getTestData() { - return new Object[][] { new Object[] { new MatchTestCase("abc", "abc", true, false) }, - new Object[] { new MatchTestCase("*", "abc", true, false) }, - new Object[] { new MatchTestCase("*c", "abc", true, false) }, - new Object[] { new MatchTestCase("a*", "a", true, false) }, - new Object[] { new MatchTestCase("a*", "abc", true, false) }, - new Object[] { new MatchTestCase("a*", "ab/c", false, false) }, - new Object[] { new MatchTestCase("a*/b", "abc/b", true, false) }, - new Object[] { new MatchTestCase("a*/b", "a/c/b", false, false) }, - new Object[] { new MatchTestCase("a*b*c*d*e*/f", "axbxcxdxe/f", true, false) }, - new Object[] { new MatchTestCase("a*b*c*d*e*/f", "axbxcxdxexxx/f", true, false) }, - new Object[] { new MatchTestCase("a*b*c*d*e*/f", "axbxcxdxe/xxx/f", false, false) }, - new Object[] { new MatchTestCase("a*b*c*d*e*/f", "axbxcxdxexxx/fff", false, false) }, - new Object[] { new MatchTestCase("a*b?c*x", "abxbbxdbxebxczzx", true, false) }, - new Object[] { new MatchTestCase("a*b?c*x", "abxbbxdbxebxczzy", false, false) }, - new Object[] { new MatchTestCase("ab[c]", "abc", true, false) }, - new Object[] { new MatchTestCase("ab[b-d]", "abc", true, false) }, - new Object[] { new MatchTestCase("ab[e-g]", "abc", false, false) }, - new Object[] { new MatchTestCase("ab[^c]", "abc", false, false) }, - new Object[] { new MatchTestCase("ab[^b-d]", "abc", false, false) }, - new Object[] { new MatchTestCase("ab[^e-g]", "abc", true, false) }, - new Object[] { new MatchTestCase("a\\*b", "a*b", true, false) }, - new Object[] { new MatchTestCase("a\\*b", "ab", false, false) }, - new Object[] { new MatchTestCase("a?b", "a☺b", true, false) }, - new Object[] { new MatchTestCase("a[^a]b", "a☺b", true, false) }, - new Object[] { new MatchTestCase("a???b", "a☺b", false, false) }, - new Object[] { new MatchTestCase("a[^a][^a][^a]b", "a☺b", false, false) }, - new Object[] { new MatchTestCase("[a-ζ]*", "α", true, false) }, - new Object[] { new MatchTestCase("*[a-ζ]", "A", false, false) }, - new Object[] { new MatchTestCase("a?b", "a/b", false, false) }, - new Object[] { new MatchTestCase("a*b", "a/b", false, false) }, - new Object[] { new MatchTestCase("[\\]a]", "]", true, false) }, - new Object[] { new MatchTestCase("[\\-]", "-", true, false) }, - new Object[] { new MatchTestCase("[x\\-]", "x", true, false) }, - new Object[] { new MatchTestCase("[x\\-]", "-", true, false) }, - new Object[] { new MatchTestCase("[x\\-]", "z", false, false) }, - new Object[] { new MatchTestCase("[\\-x]", "x", true, false) }, - new Object[] { new MatchTestCase("[\\-x]", "-", true, false) }, - new Object[] { new MatchTestCase("[\\-x]", "a", false, false) }, - new Object[] { new MatchTestCase("[]a]", "]", false, true) }, - new Object[] { new MatchTestCase("[-]", "-", false, true) }, - new Object[] { new MatchTestCase("[x-]", "x", false, true) }, - new Object[] { new MatchTestCase("[x-]", "-", false, true) }, - new Object[] { new MatchTestCase("[x-]", "z", false, true) }, - new Object[] { new MatchTestCase("[-x]", "x", false, true) }, - new Object[] { new MatchTestCase("[-x]", "-", false, true) }, - new Object[] { new MatchTestCase("[-x]", "a", false, true) }, - new Object[] { new MatchTestCase("\\", "a", false, true) }, - new Object[] { new MatchTestCase("[a-b-c]", "a", false, true) }, - new Object[] { new MatchTestCase("[", "a", false, true) }, - new Object[] { new MatchTestCase("[^", "a", false, true) }, - new Object[] { new MatchTestCase("[^bc", "a", false, true) }, - new Object[] { new MatchTestCase("a[", "a", false, false) }, - new Object[] { new MatchTestCase("a[", "ab", false, true) }, - new Object[] { new MatchTestCase("*x", "xxx", true, false) } }; + return new Object[][] {new Object[] {new MatchTestCase("abc", "abc", true, false)}, + new Object[] {new MatchTestCase("*", "abc", true, false)}, + new Object[] {new MatchTestCase("*c", "abc", true, false)}, + new Object[] {new MatchTestCase("a*", "a", true, false)}, + new Object[] {new MatchTestCase("a*", "abc", true, false)}, + new Object[] {new MatchTestCase("a*", "ab/c", false, false)}, + new Object[] {new MatchTestCase("a*/b", "abc/b", true, false)}, + new Object[] {new MatchTestCase("a*/b", "a/c/b", false, false)}, + new Object[] {new MatchTestCase("a*b*c*d*e*/f", "axbxcxdxe/f", true, false)}, + new Object[] {new MatchTestCase("a*b*c*d*e*/f", "axbxcxdxexxx/f", true, false)}, + new Object[] {new MatchTestCase("a*b*c*d*e*/f", "axbxcxdxe/xxx/f", false, false)}, + new Object[] {new MatchTestCase("a*b*c*d*e*/f", "axbxcxdxexxx/fff", false, false)}, + new Object[] {new MatchTestCase("a*b?c*x", "abxbbxdbxebxczzx", true, false)}, + new Object[] {new MatchTestCase("a*b?c*x", "abxbbxdbxebxczzy", false, false)}, + new Object[] {new MatchTestCase("ab[c]", "abc", true, false)}, + new Object[] {new MatchTestCase("ab[b-d]", "abc", true, false)}, + new Object[] {new MatchTestCase("ab[e-g]", "abc", false, false)}, + new Object[] {new MatchTestCase("ab[^c]", "abc", false, false)}, + new Object[] {new MatchTestCase("ab[^b-d]", "abc", false, false)}, + new Object[] {new MatchTestCase("ab[^e-g]", "abc", true, false)}, + new Object[] {new MatchTestCase("a\\*b", "a*b", true, false)}, + new Object[] {new MatchTestCase("a\\*b", "ab", false, false)}, + new Object[] {new MatchTestCase("a?b", "a☺b", true, false)}, + new Object[] {new MatchTestCase("a[^a]b", "a☺b", true, false)}, + new Object[] {new MatchTestCase("a???b", "a☺b", false, false)}, + new Object[] {new MatchTestCase("a[^a][^a][^a]b", "a☺b", false, false)}, + new Object[] {new MatchTestCase("[a-ζ]*", "α", true, false)}, + new Object[] {new MatchTestCase("*[a-ζ]", "A", false, false)}, + new Object[] {new MatchTestCase("a?b", "a/b", false, false)}, + new Object[] {new MatchTestCase("a*b", "a/b", false, false)}, + new Object[] {new MatchTestCase("[\\]a]", "]", true, false)}, + new Object[] {new MatchTestCase("[\\-]", "-", true, false)}, + new Object[] {new MatchTestCase("[x\\-]", "x", true, false)}, + new Object[] {new MatchTestCase("[x\\-]", "-", true, false)}, + new Object[] {new MatchTestCase("[x\\-]", "z", false, false)}, + new Object[] {new MatchTestCase("[\\-x]", "x", true, false)}, + new Object[] {new MatchTestCase("[\\-x]", "-", true, false)}, + new Object[] {new MatchTestCase("[\\-x]", "a", false, false)}, + new Object[] {new MatchTestCase("[]a]", "]", false, true)}, + new Object[] {new MatchTestCase("[-]", "-", false, true)}, + new Object[] {new MatchTestCase("[x-]", "x", false, true)}, + new Object[] {new MatchTestCase("[x-]", "-", false, true)}, + new Object[] {new MatchTestCase("[x-]", "z", false, true)}, + new Object[] {new MatchTestCase("[-x]", "x", false, true)}, + new Object[] {new MatchTestCase("[-x]", "-", false, true)}, + new Object[] {new MatchTestCase("[-x]", "a", false, true)}, + new Object[] {new MatchTestCase("\\", "a", false, true)}, + new Object[] {new MatchTestCase("[a-b-c]", "a", false, true)}, + new Object[] {new MatchTestCase("[", "a", false, true)}, + new Object[] {new MatchTestCase("[^", "a", false, true)}, + new Object[] {new MatchTestCase("[^bc", "a", false, true)}, + new Object[] {new MatchTestCase("a[", "a", false, false)}, + new Object[] {new MatchTestCase("a[", "ab", false, true)}, + new Object[] {new MatchTestCase("*x", "xxx", true, false)}}; } private final class MatchTestCase { diff --git a/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java b/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java index 50860789b3..3ac8828e8d 100644 --- a/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java +++ b/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java @@ -11,8 +11,8 @@ import com.github.dockerjava.api.model.BuildResponseItem; /** - * Special {@link DockerCmdExecFactory} implementation that collects container and image creations while test execution - * for the purpose of automatically cleanup. + * Special {@link DockerCmdExecFactory} implementation that collects container and image creations while test execution for the purpose of + * automatically cleanup. * * @author Marcus Linke */ diff --git a/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java index 9266c5ccd3..775b12b163 100644 --- a/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java @@ -174,7 +174,7 @@ private String execBuild(BuildImageCmd buildImageCmd) throws Exception { return containerLog(container.getId()); } - @Test(expectedExceptions = { DockerClientException.class }) + @Test(expectedExceptions = {DockerClientException.class}) public void testDockerfileIgnored() throws Exception { File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testDockerfileIgnored") .getFile()); @@ -190,7 +190,7 @@ public void testDockerfileNotIgnored() throws Exception { dockerClient.buildImageCmd(baseDir).withNoCache(true).exec(new BuildImageResultCallback()).awaitImageId(); } - @Test(expectedExceptions = { DockerClientException.class }) + @Test(expectedExceptions = {DockerClientException.class}) public void testInvalidDockerIgnorePattern() throws Exception { File baseDir = new File(Thread.currentThread().getContextClassLoader() .getResource("testInvalidDockerignorePattern").getFile()); @@ -309,7 +309,8 @@ public void testBuildFromPrivateRegistry() throws Exception { 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()) + String imageId = dockerClient.buildImageCmd(baseDir).withNoCache(true).withBuildArg("testArg", "abc") + .exec(new BuildImageResultCallback()) .awaitImageId(); InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); diff --git a/src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java index 3f989c1141..dba1a1a345 100644 --- a/src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java @@ -266,8 +266,8 @@ public void createContainerWithLink() throws DockerException { InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) .exec(); - assertThat(inspectContainerResponse2.getHostConfig().getLinks(), equalTo(new Link[] { new Link("container1", - "container1Link") })); + assertThat(inspectContainerResponse2.getHostConfig().getLinks(), equalTo(new Link[] {new Link("container1", + "container1Link")})); } @Test @@ -325,7 +325,7 @@ public void createContainerWithEntrypoint() throws DockerException { @Test public void createContainerWithExtraHosts() throws DockerException { - String[] extraHosts = { "dockerhost:127.0.0.1", "otherhost:10.0.0.1" }; + String[] extraHosts = {"dockerhost:127.0.0.1", "otherhost:10.0.0.1"}; CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withName("container") .withExtraHosts(extraHosts).exec(); @@ -430,8 +430,8 @@ public void createContainerWithLinking() throws DockerException { 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.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())); @@ -471,11 +471,10 @@ public void createContainerWithPidMode() throws DockerException { } /** - * 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. + * 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 { @@ -510,7 +509,7 @@ public void createContainerWithMacAddress() throws DockerException { @Test(groups = "ignoreInCircleCi") public void createContainerWithULimits() throws DockerException { - Ulimit[] ulimits = { new Ulimit("nproc", 709, 1026), new Ulimit("nofile", 1024, 4096) }; + Ulimit[] ulimits = {new Ulimit("nproc", 709, 1026), new Ulimit("nofile", 1024, 4096)}; CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withName("container") .withUlimits(ulimits).exec(); diff --git a/src/test/java/com/github/dockerjava/core/command/FrameReaderTest.java b/src/test/java/com/github/dockerjava/core/command/FrameReaderTest.java index 1d21b8e95c..38ddf1402f 100644 --- a/src/test/java/com/github/dockerjava/core/command/FrameReaderTest.java +++ b/src/test/java/com/github/dockerjava/core/command/FrameReaderTest.java @@ -58,4 +58,4 @@ private void setBytes(int... bytes) { this.bytes.add(aByte); } } -} \ No newline at end of file +} diff --git a/src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java index ce060f4bb3..0bc2c9b1a2 100644 --- a/src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java @@ -316,8 +316,8 @@ public void startContainerWithLinkingDeprecated() throws DockerException { 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.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())); @@ -369,8 +369,8 @@ public void startContainerWithLinking() throws DockerException { 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.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())); @@ -382,7 +382,7 @@ public void startContainerWithLinking() throws DockerException { @Test public void startContainer() throws DockerException { - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd(new String[] { "top" }) + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd(new String[] {"top"}) .exec(); LOG.info("Created container {}", container.toString()); @@ -418,11 +418,10 @@ public void testStartNonExistingContainer() throws DockerException { } /** - * 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. + * 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 { diff --git a/src/test/java/com/github/dockerjava/core/dockerfile/DockerfileStatementAddTest.java b/src/test/java/com/github/dockerjava/core/dockerfile/DockerfileStatementAddTest.java index b121900b4d..47d570d8ce 100644 --- a/src/test/java/com/github/dockerjava/core/dockerfile/DockerfileStatementAddTest.java +++ b/src/test/java/com/github/dockerjava/core/dockerfile/DockerfileStatementAddTest.java @@ -20,14 +20,14 @@ public class DockerfileStatementAddTest extends TestCase { @DataProvider(name = "valid scenarios") public Object[][] validScenarios() { - return new Object[][] { { "ADD src dest", contains("src"), "dest" }, - { "ADD \"src file\" \"dest\"", contains("src file"), "dest" }, - { "ADD src\"file dest", contains("src\"file"), "dest" }, - { "ADD src1 src2 dest", containsInAnyOrder("src1", "src2"), "dest" }, - { "COPY src dest", contains("src"), "dest" }, - { "COPY \"src file\" \"dest\"", contains("src file"), "dest" }, - { "COPY src\"file dest", contains("src\"file"), "dest" }, - { "COPY src1 src2 dest", containsInAnyOrder("src1", "src2"), "dest" } }; + return new Object[][] { {"ADD src dest", contains("src"), "dest"}, + {"ADD \"src file\" \"dest\"", contains("src file"), "dest"}, + {"ADD src\"file dest", contains("src\"file"), "dest"}, + {"ADD src1 src2 dest", containsInAnyOrder("src1", "src2"), "dest"}, + {"COPY src dest", contains("src"), "dest"}, + {"COPY \"src file\" \"dest\"", contains("src file"), "dest"}, + {"COPY src\"file dest", contains("src\"file"), "dest"}, + {"COPY src1 src2 dest", containsInAnyOrder("src1", "src2"), "dest"}}; } @Test(dataProvider = "valid scenarios") @@ -38,7 +38,7 @@ public void testAddOrCopyPattern(String command, Matcher matchesExpectation, Str assertThat(optionalAdd.get().destination, is(expectedDest)); } - @Test(expectedExceptions = { DockerClientException.class }) + @Test(expectedExceptions = {DockerClientException.class}) public void shouldThrowExceptionIfDestNotSpecified() { DockerfileStatement.Add.create("ADD src"); } diff --git a/src/test/java/com/github/dockerjava/core/dockerfile/DockerfileTest.java b/src/test/java/com/github/dockerjava/core/dockerfile/DockerfileTest.java index c69529d023..ba96ad2ebb 100644 --- a/src/test/java/com/github/dockerjava/core/dockerfile/DockerfileTest.java +++ b/src/test/java/com/github/dockerjava/core/dockerfile/DockerfileTest.java @@ -46,4 +46,4 @@ public void testAllItems() throws IOException { } } -} \ No newline at end of file +} diff --git a/src/test/java/com/github/dockerjava/core/util/FiltersBuilderTest.java b/src/test/java/com/github/dockerjava/core/util/FiltersBuilderTest.java index 125fd0785a..25027ae762 100644 --- a/src/test/java/com/github/dockerjava/core/util/FiltersBuilderTest.java +++ b/src/test/java/com/github/dockerjava/core/util/FiltersBuilderTest.java @@ -1,7 +1,6 @@ package com.github.dockerjava.core.util; -import com.github.dockerjava.core.util. -FiltersBuilder; +import com.github.dockerjava.core.util.FiltersBuilder; import com.google.common.collect.Maps; import org.testng.annotations.Test; diff --git a/src/test/java/com/github/dockerjava/netty/exec/BuildImageCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/BuildImageCmdExecTest.java index e4aa052502..fad4ef7b15 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/BuildImageCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/BuildImageCmdExecTest.java @@ -166,7 +166,7 @@ private String execBuild(BuildImageCmd buildImageCmd) throws Exception { return containerLog(container.getId()); } - @Test(expectedExceptions = { DockerClientException.class }) + @Test(expectedExceptions = {DockerClientException.class}) public void testDockerfileIgnored() throws Exception { File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testDockerfileIgnored") .getFile()); @@ -182,7 +182,7 @@ public void testDockerfileNotIgnored() throws Exception { dockerClient.buildImageCmd(baseDir).withNoCache(true).exec(new BuildImageResultCallback()).awaitImageId(); } - @Test(expectedExceptions = { DockerClientException.class }) + @Test(expectedExceptions = {DockerClientException.class}) public void testInvalidDockerIgnorePattern() throws Exception { File baseDir = new File(Thread.currentThread().getContextClassLoader() .getResource("testInvalidDockerignorePattern").getFile()); @@ -301,7 +301,8 @@ public void testBuildFromPrivateRegistry() throws Exception { 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()) + String imageId = dockerClient.buildImageCmd(baseDir).withNoCache(true).withBuildArg("testArg", "abc") + .exec(new BuildImageResultCallback()) .awaitImageId(); InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec(); diff --git a/src/test/java/com/github/dockerjava/netty/exec/CreateContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/CreateContainerCmdExecTest.java index a29b26d7bb..9a6d4b354a 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/CreateContainerCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/CreateContainerCmdExecTest.java @@ -259,8 +259,8 @@ public void createContainerWithLink() throws DockerException { InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container2.getId()) .exec(); - assertThat(inspectContainerResponse2.getHostConfig().getLinks(), equalTo(new Link[] { new Link("container1", - "container1Link") })); + assertThat(inspectContainerResponse2.getHostConfig().getLinks(), equalTo(new Link[] {new Link("container1", + "container1Link")})); } @Test @@ -318,7 +318,7 @@ public void createContainerWithEntrypoint() throws DockerException { @Test public void createContainerWithExtraHosts() throws DockerException { - String[] extraHosts = { "dockerhost:127.0.0.1", "otherhost:10.0.0.1" }; + String[] extraHosts = {"dockerhost:127.0.0.1", "otherhost:10.0.0.1"}; CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withName("container") .withExtraHosts(extraHosts).exec(); @@ -423,8 +423,8 @@ public void createContainerWithLinking() throws DockerException { 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.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())); @@ -464,11 +464,10 @@ public void createContainerWithPidMode() throws DockerException { } /** - * 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. + * 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 { @@ -503,7 +502,7 @@ public void createContainerWithMacAddress() throws DockerException { @Test(groups = "ignoreInCircleCi") public void createContainerWithULimits() throws DockerException { - Ulimit[] ulimits = { new Ulimit("nproc", 709, 1026), new Ulimit("nofile", 1024, 4096) }; + Ulimit[] ulimits = {new Ulimit("nproc", 709, 1026), new Ulimit("nofile", 1024, 4096)}; CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withName("container") .withUlimits(ulimits).exec(); diff --git a/src/test/java/com/github/dockerjava/netty/exec/StartContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/StartContainerCmdExecTest.java index 8af196a607..02b7cd51bc 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/StartContainerCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/StartContainerCmdExecTest.java @@ -317,8 +317,8 @@ public void startContainerWithLinkingDeprecated() throws DockerException { 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.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())); @@ -370,8 +370,8 @@ public void startContainerWithLinking() throws DockerException { 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.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())); @@ -383,7 +383,7 @@ public void startContainerWithLinking() throws DockerException { @Test public void startContainer() throws DockerException { - CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd(new String[] { "top" }) + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd(new String[] {"top"}) .exec(); LOG.info("Created container {}", container.toString()); @@ -419,11 +419,10 @@ public void testStartNonExistingContainer() throws DockerException { } /** - * 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. + * 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 { From fbef1cd41ed5e3b3202d82f88117d907e54fea85 Mon Sep 17 00:00:00 2001 From: Christopher Dancy Date: Sat, 6 Feb 2016 16:20:57 -0500 Subject: [PATCH 036/912] Return null, instead of NullPointerException, should no exposedPorts be found --- .../java/com/github/dockerjava/api/model/ContainerConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/dockerjava/api/model/ContainerConfig.java b/src/main/java/com/github/dockerjava/api/model/ContainerConfig.java index efc5e0248f..d7f4b81ee5 100644 --- a/src/main/java/com/github/dockerjava/api/model/ContainerConfig.java +++ b/src/main/java/com/github/dockerjava/api/model/ContainerConfig.java @@ -84,7 +84,7 @@ public class ContainerConfig { @JsonIgnore public ExposedPort[] getExposedPorts() { - return exposedPorts.getExposedPorts(); + return exposedPorts != null ? exposedPorts.getExposedPorts() : null; } public Boolean isNetworkDisabled() { From 835c78c250c6f59a838e5e947ea1971961c644c9 Mon Sep 17 00:00:00 2001 From: Christopher Dancy Date: Sat, 6 Feb 2016 16:49:28 -0500 Subject: [PATCH 037/912] Expose netty deps as a version and bump to latest 4.1.0.CR2 --- pom.xml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 43a73c8898..60e8fcad5f 100644 --- a/pom.xml +++ b/pom.xml @@ -64,6 +64,7 @@ 1.1.0 6.1.1 + 4.1.0.CR2 1.3 1.6 2.3.3 @@ -206,22 +207,22 @@ io.netty netty-codec-http - 4.1.0.Beta7 + ${netty.version} io.netty netty-handler - 4.1.0.Beta7 + ${netty.version} io.netty netty-handler-proxy - 4.1.0.Beta7 + ${netty.version} io.netty netty-transport-native-epoll - 4.1.0.Beta7 + ${netty.version} linux-x86_64 From 3a1527714910ff8e65edb745aac4f6d44aa83f9c Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Sun, 7 Feb 2016 19:43:44 +0100 Subject: [PATCH 038/912] Add withDockerTlsVerify(Boolean dockerTlsVerify) --- .../dockerjava/core/DockerClientConfig.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/github/dockerjava/core/DockerClientConfig.java b/src/main/java/com/github/dockerjava/core/DockerClientConfig.java index 400f417eac..12d09664cf 100644 --- a/src/main/java/com/github/dockerjava/core/DockerClientConfig.java +++ b/src/main/java/com/github/dockerjava/core/DockerClientConfig.java @@ -27,8 +27,7 @@ import com.github.dockerjava.core.NameParser.ReposTag; /** - * Respects some of the docker CLI options. See - * https://docs.docker.com/engine/reference/commandline/cli/#environment-variables + * Respects some of the docker CLI options. See https://docs.docker.com/engine/reference/commandline/cli/#environment-variables */ public class DockerClientConfig implements Serializable { @@ -114,7 +113,7 @@ private String checkDockerCertPath(boolean dockerTlsVerify, String dockerCertPat "Certificate path (DOCKER_CERT_PATH) '" + dockerCertPath + "' doesn't exist."); } - if(certPath.isDirectory()) { + if (certPath.isDirectory()) { return dockerCertPath; } else { throw new DockerClientException( @@ -361,9 +360,9 @@ public static class DockerClientConfigBuilder { private boolean dockerTlsVerify; /** - * This will set all fields in the builder to those contained in the Properties object. The Properties object - * should contain the following docker-java configuration keys: DOCKER_HOST, DOCKER_TLS_VERIFY, api.version, - * registry.username, registry.password, registry.email, DOCKER_CERT_PATH, and DOCKER_CONFIG. + * This will set all fields in the builder to those contained in the Properties object. The Properties object should contain the + * following docker-java configuration keys: DOCKER_HOST, DOCKER_TLS_VERIFY, api.version, registry.username, registry.password, + * registry.email, DOCKER_CERT_PATH, and DOCKER_CONFIG. */ public DockerClientConfigBuilder withProperties(Properties p) { return withDockerHost(p.getProperty(DOCKER_HOST)).withDockerTlsVerify(p.getProperty(DOCKER_TLS_VERIFY)) @@ -418,7 +417,13 @@ public final DockerClientConfigBuilder withDockerConfig(String dockerConfig) { } public final DockerClientConfigBuilder withDockerTlsVerify(String dockerTlsVerify) { - this.dockerTlsVerify = BooleanUtils.toBoolean(dockerTlsVerify.trim(), "1", "0"); + this.dockerTlsVerify = BooleanUtils.toBoolean(dockerTlsVerify.trim()) + || BooleanUtils.toBoolean(dockerTlsVerify.trim(), "1", "0"); + return this; + } + + public final DockerClientConfigBuilder withDockerTlsVerify(Boolean dockerTlsVerify) { + this.dockerTlsVerify = dockerTlsVerify; return this; } From 4bafd142f0633f3aa34c217f4fcdcbbbac7416a7 Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Sun, 7 Feb 2016 19:51:01 +0100 Subject: [PATCH 039/912] Fix README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9175135ae7..0b519d0f3f 100644 --- a/README.md +++ b/README.md @@ -102,7 +102,7 @@ In your application, e.g. DockerClientConfig config = DockerClientConfig.createDefaultConfigBuilder() .withDockerHost("tcp://my-docker-host.tld:2376") - .withDockerTlsVerify("1") + .withDockerTlsVerify(true) .withDockerCertPath("/home/user/.docker/certs") .withDockerConfig("/home/user/.docker") .withApiVersion("1.21") @@ -113,7 +113,7 @@ In your application, e.g. .build(); DockerClient docker = DockerClientBuilder.getInstance(config).build(); -#### Properties +#### Properties (docker-java.properties) DOCKER_HOST=tcp://localhost:2376 DOCKER_TLS_VERIFY=1 From 6e91d2606d3befd0962683830ccbe14c9c1a3002 Mon Sep 17 00:00:00 2001 From: marcuslinke Date: Sun, 7 Feb 2016 22:51:38 +0100 Subject: [PATCH 040/912] Update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f0141068c..f33c3a30f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,8 +6,10 @@ Change Log Notes * The upcoming release will contain multiple API breaking changes therefore the major version switch. It will support a subset of v.1.21 of the docker remote API. It also includes an experimental netty based implementation of `DockerCmdExecFactory` that probably will replace the current jersey/httpclient based one in a later release. +* The configuration has been changed to better match the docker CLI configuration options. The properties file was renamed from `docker.io.properties` to `docker-java.properties`. See README.md for details. All changes +* [#447] (https://github.com/docker-java/docker-java/pull/447) Refactoring of DockerClientConfig * [#430] (https://github.com/docker-java/docker-java/pull/430) Fix ExecStartCmd failure * [#426] (https://github.com/docker-java/docker-java/pull/426) Refactored filters API * [#425] (https://github.com/docker-java/docker-java/pull/425) Implement Network API From 55ad6295f523cb93ca47296a67195d498943acfb Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Sun, 7 Feb 2016 23:12:53 +0100 Subject: [PATCH 041/912] Remove code-style.epf in favor of docker-java-formatter.xml --- etc/code-style.epf | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 etc/code-style.epf diff --git a/etc/code-style.epf b/etc/code-style.epf deleted file mode 100644 index abd8a93645..0000000000 --- a/etc/code-style.epf +++ /dev/null @@ -1,23 +0,0 @@ -#Mon Jun 29 09:34:24 CEST 2015 -/instance/org.eclipse.jdt.ui/org.eclipse.jdt.ui.overrideannotation=true -/instance/org.eclipse.jdt.ui/formatter_settings_version=12 -/instance/org.eclipse.jdt.ui/org.eclipse.jdt.ui.formatterprofiles.version=12 -/instance/org.eclipse.jdt.core/org.eclipse.jdt.core.codeComplete.fieldSuffixes= -/instance/org.eclipse.jdt.ui/org.eclipse.jdt.ui.text.custom_code_templates=