From ab7aa667530a3ce1ebeab411257a5f864443c53f Mon Sep 17 00:00:00 2001 From: Andrey Klimachev Date: Fri, 9 Jan 2015 22:08:28 +0000 Subject: [PATCH 1/3] Implementing of Exec-start and Exec-create. --- .../github/dockerjava/api/DockerClient.java | 37 ++-------- .../api/command/DockerCmdExecFactory.java | 4 ++ .../dockerjava/api/command/ExecCreateCmd.java | 19 +++++ .../api/command/ExecCreateCmdResponce.java | 15 ++++ .../dockerjava/api/command/ExecStartCmd.java | 24 +++++++ .../dockerjava/core/DockerClientImpl.java | 10 +++ .../core/command/ExecCreateCmdImpl.java | 69 +++++++++++++++++++ .../core/command/ExecStartCmdImpl.java | 49 +++++++++++++ .../jaxrs/DockerCmdExecFactoryImpl.java | 15 ++-- .../dockerjava/jaxrs/ExecCreateCmdExec.java | 30 ++++++++ .../dockerjava/jaxrs/ExecStartCmdExec.java | 31 +++++++++ .../jaxrs/StartContainerCmdExec.java | 3 +- .../core/TestDockerCmdExecFactory.java | 49 ++++--------- .../command/StartContainerCmdImplTest.java | 2 +- 14 files changed, 281 insertions(+), 76 deletions(-) create mode 100644 src/main/java/com/github/dockerjava/api/command/ExecCreateCmd.java create mode 100644 src/main/java/com/github/dockerjava/api/command/ExecCreateCmdResponce.java create mode 100644 src/main/java/com/github/dockerjava/api/command/ExecStartCmd.java create mode 100644 src/main/java/com/github/dockerjava/core/command/ExecCreateCmdImpl.java create mode 100644 src/main/java/com/github/dockerjava/core/command/ExecStartCmdImpl.java create mode 100644 src/main/java/com/github/dockerjava/jaxrs/ExecCreateCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/jaxrs/ExecStartCmdExec.java diff --git a/src/main/java/com/github/dockerjava/api/DockerClient.java b/src/main/java/com/github/dockerjava/api/DockerClient.java index 4052e87b9..2c829679d 100644 --- a/src/main/java/com/github/dockerjava/api/DockerClient.java +++ b/src/main/java/com/github/dockerjava/api/DockerClient.java @@ -2,38 +2,7 @@ import java.io.*; -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.ContainerDiffCmd; -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.EventCallback; -import com.github.dockerjava.api.command.EventsCmd; -import com.github.dockerjava.api.command.InfoCmd; -import com.github.dockerjava.api.command.InspectContainerCmd; -import com.github.dockerjava.api.command.InspectImageCmd; -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.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.RestartContainerCmd; -import com.github.dockerjava.api.command.SearchImagesCmd; -import com.github.dockerjava.api.command.StartContainerCmd; -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.command.*; import com.github.dockerjava.api.model.AuthConfig; // https://godoc.org/github.com/fsouza/go-dockerclient @@ -95,6 +64,8 @@ public CreateImageCmd createImageCmd(String repository, */ public StartContainerCmd startContainerCmd(String containerId); + public ExecCreateCmd execCmd(String containerId); + public InspectContainerCmd inspectContainerCmd(String containerId); public RemoveContainerCmd removeContainerCmd(String containerId); @@ -103,6 +74,8 @@ public CreateImageCmd createImageCmd(String repository, public AttachContainerCmd attachContainerCmd(String containerId); + public ExecStartCmd execStartCmd(String containerId); + public LogContainerCmd logContainerCmd(String containerId); public CopyFileFromContainerCmd copyFileFromContainerCmd( 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 24c0a4650..df26743e1 100644 --- a/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java +++ b/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java @@ -15,6 +15,8 @@ public interface DockerCmdExecFactory extends Closeable { public PingCmd.Exec createPingCmdExec(); + public ExecCreateCmd.Exec createExecCmdExec(); + public VersionCmd.Exec createVersionCmdExec(); public PullImageCmd.Exec createPullImageCmdExec(); @@ -45,6 +47,8 @@ public interface DockerCmdExecFactory extends Closeable { public AttachContainerCmd.Exec createAttachContainerCmdExec(); + public ExecStartCmd.Exec createExecStartCmdExec(); + public LogContainerCmd.Exec createLogContainerCmdExec(); public CopyFileFromContainerCmd.Exec createCopyFileFromContainerCmdExec(); diff --git a/src/main/java/com/github/dockerjava/api/command/ExecCreateCmd.java b/src/main/java/com/github/dockerjava/api/command/ExecCreateCmd.java new file mode 100644 index 000000000..e6146b5fe --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/command/ExecCreateCmd.java @@ -0,0 +1,19 @@ +package com.github.dockerjava.api.command; + +public interface ExecCreateCmd extends DockerCmd { + + public String getContainerId(); + + public ExecCreateCmd withCmd(String... cmd); + + public ExecCreateCmd attachStdin(boolean attachStdin); + + public ExecCreateCmd attachStdout(boolean attachStdout); + + public ExecCreateCmd attachStderr(boolean attachStderr); + + public ExecCreateCmd tty(boolean tty); + + public static interface Exec extends DockerCmdExec { + } +} diff --git a/src/main/java/com/github/dockerjava/api/command/ExecCreateCmdResponce.java b/src/main/java/com/github/dockerjava/api/command/ExecCreateCmdResponce.java new file mode 100644 index 000000000..57197ca89 --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/command/ExecCreateCmdResponce.java @@ -0,0 +1,15 @@ +package com.github.dockerjava.api.command; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class ExecCreateCmdResponce { + + @JsonProperty("Id") + private String id; + + public String getId() { + return id; + } +} diff --git a/src/main/java/com/github/dockerjava/api/command/ExecStartCmd.java b/src/main/java/com/github/dockerjava/api/command/ExecStartCmd.java new file mode 100644 index 000000000..262dc0f42 --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/command/ExecStartCmd.java @@ -0,0 +1,24 @@ +package com.github.dockerjava.api.command; + +import com.github.dockerjava.api.NotFoundException; + +import java.io.InputStream; + +public interface ExecStartCmd extends DockerCmd{ + + public String getContainerId(); + + public boolean isDetach(); + + public boolean isTty(); + + public ExecStartCmd withContainerId(String containerId); + + /** + * @throws com.github.dockerjava.api.NotFoundException No such container + */ + @Override + public InputStream exec() throws NotFoundException; + + public static interface Exec extends DockerCmdExec {} +} diff --git a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java index 1a2a58c0b..ba5c08bcb 100644 --- a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java +++ b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java @@ -193,6 +193,11 @@ public InspectContainerCmd inspectContainerCmd(String containerId) { return new InspectContainerCmdImpl(getDockerCmdExecFactory().createInspectContainerCmdExec(), containerId); } + @Override + public ExecCreateCmd execCmd(String containerId) { + return new ExecCreateCmdImpl(getDockerCmdExecFactory().createExecCmdExec(), containerId); + } + @Override public RemoveContainerCmd removeContainerCmd(String containerId) { return new RemoveContainerCmdImpl(getDockerCmdExecFactory().createRemoveContainerCmdExec(), containerId); @@ -208,6 +213,11 @@ public AttachContainerCmd attachContainerCmd(String containerId) { return new AttachContainerCmdImpl(getDockerCmdExecFactory().createAttachContainerCmdExec(), containerId); } + @Override + public ExecStartCmd execStartCmd(String containerId) { + return new ExecStartCmdImpl(getDockerCmdExecFactory().createExecStartCmdExec(), containerId); + } + @Override public LogContainerCmd logContainerCmd(String containerId) { return new LogContainerCmdImpl(getDockerCmdExecFactory().createLogContainerCmdExec(), containerId); diff --git a/src/main/java/com/github/dockerjava/core/command/ExecCreateCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/ExecCreateCmdImpl.java new file mode 100644 index 000000000..315980a38 --- /dev/null +++ b/src/main/java/com/github/dockerjava/core/command/ExecCreateCmdImpl.java @@ -0,0 +1,69 @@ +package com.github.dockerjava.core.command; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.github.dockerjava.api.NotFoundException; +import com.github.dockerjava.api.command.ExecCreateCmd; +import com.github.dockerjava.api.command.ExecCreateCmdResponce; + +public class ExecCreateCmdImpl extends AbstrDockerCmd implements ExecCreateCmd { + + private String containerId; + + @JsonProperty("AttachStdin") + private boolean attachStdin; + + @JsonProperty("AttachStdout") + private boolean attachStdout; + + @JsonProperty("AttachStderr") + private boolean attachStderr; + + @JsonProperty("Tty") + private boolean tty; + + @JsonProperty("Cmd") + private String[] cmd; + + public ExecCreateCmdImpl(ExecCreateCmd.Exec exec, String containerId) { + super(exec); + this.containerId = containerId; + } + + public ExecCreateCmd attachStdin(boolean attachStdin) { + this.attachStdin = attachStdin; + return this; + } + + public ExecCreateCmd attachStdout(boolean attachStdout) { + this.attachStdout = attachStdout; + return this; + } + + public ExecCreateCmd tty(boolean tty) { + this.tty = tty; + return this; + } + + public ExecCreateCmd attachStderr(boolean attachStderr) { + this.attachStderr = attachStderr; + return this; + } + + public ExecCreateCmd withCmd(String... cmd) { + this.cmd = cmd; + return this; + } + + @Override + public String getContainerId() { + return containerId; + } + + /** + * @throws NotFoundException No such container + */ + @Override + public ExecCreateCmdResponce exec() throws NotFoundException { + return super.exec(); + } +} diff --git a/src/main/java/com/github/dockerjava/core/command/ExecStartCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/ExecStartCmdImpl.java new file mode 100644 index 000000000..edc163623 --- /dev/null +++ b/src/main/java/com/github/dockerjava/core/command/ExecStartCmdImpl.java @@ -0,0 +1,49 @@ +package com.github.dockerjava.core.command; + +import com.github.dockerjava.api.NotFoundException; +import com.github.dockerjava.api.command.ExecStartCmd; +import com.google.common.base.Preconditions; + +import java.io.InputStream; + +public class ExecStartCmdImpl extends AbstrDockerCmd implements ExecStartCmd { + + private String containerId; + + private boolean detach, tty; + + public ExecStartCmdImpl(ExecStartCmd.Exec exec, String containerId) { + super(exec); + withContainerId(containerId); + } + + @Override + public String getContainerId() { + return containerId; + } + + @Override + public boolean isDetach() { + return detach; + } + + @Override + public boolean isTty() { + return tty; + } + + @Override + public ExecStartCmdImpl withContainerId(String containerId) { + Preconditions.checkNotNull(containerId, "containerId was not specified"); + this.containerId = containerId; + return this; + } + + /** + * @throws com.github.dockerjava.api.NotFoundException No such container + */ + @Override + public InputStream exec() throws NotFoundException { + return super.exec(); + } +} diff --git a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java index 64222a972..525e4a586 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java +++ b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java @@ -3,15 +3,12 @@ import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; import com.github.dockerjava.api.DockerClientException; import com.github.dockerjava.api.command.*; -import com.github.dockerjava.core.CertificateUtils; import com.github.dockerjava.core.DockerClientConfig; import com.github.dockerjava.jaxrs.util.JsonClientFilter; import com.github.dockerjava.jaxrs.util.ResponseStatusExceptionFilter; import com.github.dockerjava.jaxrs.util.SelectiveLoggingFilter; import com.google.common.base.Preconditions; -import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.glassfish.jersey.CommonProperties; -import org.glassfish.jersey.SslConfigurator; import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.client.ClientProperties; @@ -20,8 +17,6 @@ import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; import java.io.IOException; -import java.security.KeyStore; -import java.security.Security; import java.util.logging.Logger; public class DockerCmdExecFactoryImpl implements DockerCmdExecFactory { @@ -154,6 +149,11 @@ public InspectContainerCmd.Exec createInspectContainerCmdExec() { return new InspectContainerCmdExec(getBaseResource()); } + @Override + public ExecCreateCmd.Exec createExecCmdExec() { + return new ExecCreateCmdExec(getBaseResource()); + } + @Override public RemoveContainerCmd.Exec createRemoveContainerCmdExec() { return new RemoveContainerCmdExec(getBaseResource()); @@ -169,6 +169,11 @@ public AttachContainerCmd.Exec createAttachContainerCmdExec() { return new AttachContainerCmdExec(getBaseResource()); } + @Override + public ExecStartCmd.Exec createExecStartCmdExec() { + return new ExecStartCmdExec(getBaseResource()); + } + @Override public LogContainerCmd.Exec createLogContainerCmdExec() { return new LogContainerCmdExec(getBaseResource()); diff --git a/src/main/java/com/github/dockerjava/jaxrs/ExecCreateCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/ExecCreateCmdExec.java new file mode 100644 index 000000000..a424e7ca5 --- /dev/null +++ b/src/main/java/com/github/dockerjava/jaxrs/ExecCreateCmdExec.java @@ -0,0 +1,30 @@ +package com.github.dockerjava.jaxrs; + +import com.github.dockerjava.api.command.ExecCreateCmd; +import com.github.dockerjava.api.command.ExecCreateCmdResponce; +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 ExecCreateCmdExec extends AbstrDockerCmdExec implements ExecCreateCmd.Exec { + + private static final Logger LOGGER = LoggerFactory + .getLogger(VersionCmdExec.class); + + public ExecCreateCmdExec(WebTarget baseResource) { + super(baseResource); + } + + @Override + protected ExecCreateCmdResponce execute(ExecCreateCmd command) { + WebTarget webResource = getBaseResource().path("/containers/{id}/exec").resolveTemplate("id", command.getContainerId()); + + LOGGER.trace("POST: {}", webResource); + + return webResource.request().accept(MediaType.APPLICATION_JSON).post(entity(command, MediaType.APPLICATION_JSON), ExecCreateCmdResponce.class); + } +} diff --git a/src/main/java/com/github/dockerjava/jaxrs/ExecStartCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/ExecStartCmdExec.java new file mode 100644 index 000000000..d5f7c4781 --- /dev/null +++ b/src/main/java/com/github/dockerjava/jaxrs/ExecStartCmdExec.java @@ -0,0 +1,31 @@ +package com.github.dockerjava.jaxrs; + +import com.github.dockerjava.api.command.ExecStartCmd; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.io.InputStream; + +import static javax.ws.rs.client.Entity.entity; + +public class ExecStartCmdExec extends AbstrDockerCmdExec implements ExecStartCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(ExecStartCmdExec.class); + + public ExecStartCmdExec(WebTarget baseResource) { + super(baseResource); + } + + + @Override + protected InputStream execute(ExecStartCmd command) { + WebTarget webResource = getBaseResource().path("/exec/{id}/start").resolveTemplate("id", command.getContainerId()); + + LOGGER.trace("POST: {}", webResource); + + return webResource.request().accept(MediaType.APPLICATION_JSON).post(entity(command, MediaType.APPLICATION_JSON), Response.class).readEntity(InputStream.class); + } +} diff --git a/src/main/java/com/github/dockerjava/jaxrs/StartContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/StartContainerCmdExec.java index 8a2c09a44..0e7697e4e 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/StartContainerCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/StartContainerCmdExec.java @@ -20,8 +20,7 @@ public StartContainerCmdExec(WebTarget baseResource) { @Override protected Void execute(StartContainerCmd command) { - WebTarget webResource = getBaseResource().path("/containers/{id}/start") - .resolveTemplate("id", command.getContainerId()); + WebTarget webResource = getBaseResource().path("/containers/{id}/start").resolveTemplate("id", command.getContainerId()); LOGGER.trace("POST: {}", webResource); webResource.request().accept(MediaType.APPLICATION_JSON).post(entity(command, MediaType.APPLICATION_JSON)); diff --git a/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java b/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java index 3a5857c9b..c63667a0d 100644 --- a/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java +++ b/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java @@ -6,41 +6,8 @@ import java.util.ArrayList; import java.util.List; -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.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.DockerCmdExecFactory; -import com.github.dockerjava.api.command.EventsCmd; -import com.github.dockerjava.api.command.InfoCmd; -import com.github.dockerjava.api.command.InspectContainerCmd; -import com.github.dockerjava.api.command.InspectImageCmd; -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.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.RestartContainerCmd; -import com.github.dockerjava.api.command.SearchImagesCmd; -import com.github.dockerjava.api.command.StartContainerCmd; -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.core.DockerClientConfig; /** * Special {@link DockerCmdExecFactory} implementation that collects container and image creations @@ -154,7 +121,12 @@ public PingCmd.Exec createPingCmdExec() { return delegate.createPingCmdExec(); } - @Override + @Override + public ExecCreateCmd.Exec createExecCmdExec() { + return delegate.createExecCmdExec(); + } + + @Override public VersionCmd.Exec createVersionCmdExec() { return delegate.createVersionCmdExec(); } @@ -209,7 +181,12 @@ public AttachContainerCmd.Exec createAttachContainerCmdExec() { return delegate.createAttachContainerCmdExec(); } - @Override + @Override + public ExecStartCmd.Exec createExecStartCmdExec() { + return delegate.createExecStartCmdExec(); + } + + @Override public LogContainerCmd.Exec createLogContainerCmdExec() { return delegate.createLogContainerCmdExec(); } 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 de744b59a..10b656e66 100644 --- a/src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java @@ -200,7 +200,7 @@ public void startContainerWithPortBindings() throws DockerException { dockerClient.startContainerCmd(container.getId()).withPortBindings(portBindings).exec(); inspectContainerResponse = dockerClient.inspectContainerCmd(container - .getId()).exec(); + .getId()).exec(); assertThat(Arrays.asList(inspectContainerResponse.getConfig().getExposedPorts()), contains(tcp22, tcp23)); From e8d9896a2f54fa5758fdcae7af54baf553dcef89 Mon Sep 17 00:00:00 2001 From: Andrey Klimachev Date: Sat, 10 Jan 2015 11:10:56 +0000 Subject: [PATCH 2/3] Adding tests for Exec-start and Exec-create. --- .../github/dockerjava/api/DockerClient.java | 2 +- .../dockerjava/api/command/ExecCreateCmd.java | 4 +- ...sponce.java => ExecCreateCmdResponse.java} | 2 +- .../dockerjava/api/command/ExecStartCmd.java | 2 - .../dockerjava/core/DockerClientImpl.java | 2 +- .../core/command/ExecCreateCmdImpl.java | 6 +- .../core/command/ExecStartCmdImpl.java | 12 +--- .../dockerjava/jaxrs/ExecCreateCmdExec.java | 8 +-- .../core/command/ExecCreateCmdImplTest.java | 59 ++++++++++++++++++ .../core/command/ExecStartCmdImplTest.java | 62 +++++++++++++++++++ 10 files changed, 136 insertions(+), 23 deletions(-) rename src/main/java/com/github/dockerjava/api/command/{ExecCreateCmdResponce.java => ExecCreateCmdResponse.java} (89%) create mode 100644 src/test/java/com/github/dockerjava/core/command/ExecCreateCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java diff --git a/src/main/java/com/github/dockerjava/api/DockerClient.java b/src/main/java/com/github/dockerjava/api/DockerClient.java index 2c829679d..53b212605 100644 --- a/src/main/java/com/github/dockerjava/api/DockerClient.java +++ b/src/main/java/com/github/dockerjava/api/DockerClient.java @@ -64,7 +64,7 @@ public CreateImageCmd createImageCmd(String repository, */ public StartContainerCmd startContainerCmd(String containerId); - public ExecCreateCmd execCmd(String containerId); + public ExecCreateCmd execCreateCmd(String containerId); public InspectContainerCmd inspectContainerCmd(String containerId); diff --git a/src/main/java/com/github/dockerjava/api/command/ExecCreateCmd.java b/src/main/java/com/github/dockerjava/api/command/ExecCreateCmd.java index e6146b5fe..e71fb04e3 100644 --- a/src/main/java/com/github/dockerjava/api/command/ExecCreateCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/ExecCreateCmd.java @@ -1,6 +1,6 @@ package com.github.dockerjava.api.command; -public interface ExecCreateCmd extends DockerCmd { +public interface ExecCreateCmd extends DockerCmd { public String getContainerId(); @@ -14,6 +14,6 @@ public interface ExecCreateCmd extends DockerCmd { public ExecCreateCmd tty(boolean tty); - public static interface Exec extends DockerCmdExec { + public static interface Exec extends DockerCmdExec { } } diff --git a/src/main/java/com/github/dockerjava/api/command/ExecCreateCmdResponce.java b/src/main/java/com/github/dockerjava/api/command/ExecCreateCmdResponse.java similarity index 89% rename from src/main/java/com/github/dockerjava/api/command/ExecCreateCmdResponce.java rename to src/main/java/com/github/dockerjava/api/command/ExecCreateCmdResponse.java index 57197ca89..391625cfa 100644 --- a/src/main/java/com/github/dockerjava/api/command/ExecCreateCmdResponce.java +++ b/src/main/java/com/github/dockerjava/api/command/ExecCreateCmdResponse.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @JsonIgnoreProperties(ignoreUnknown = true) -public class ExecCreateCmdResponce { +public class ExecCreateCmdResponse { @JsonProperty("Id") private String id; diff --git a/src/main/java/com/github/dockerjava/api/command/ExecStartCmd.java b/src/main/java/com/github/dockerjava/api/command/ExecStartCmd.java index 262dc0f42..8f6fff7bb 100644 --- a/src/main/java/com/github/dockerjava/api/command/ExecStartCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/ExecStartCmd.java @@ -12,8 +12,6 @@ public interface ExecStartCmd extends DockerCmd{ public boolean isTty(); - public ExecStartCmd withContainerId(String containerId); - /** * @throws com.github.dockerjava.api.NotFoundException No such container */ diff --git a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java index ba5c08bcb..1a06c2d55 100644 --- a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java +++ b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java @@ -194,7 +194,7 @@ public InspectContainerCmd inspectContainerCmd(String containerId) { } @Override - public ExecCreateCmd execCmd(String containerId) { + public ExecCreateCmd execCreateCmd(String containerId) { return new ExecCreateCmdImpl(getDockerCmdExecFactory().createExecCmdExec(), containerId); } diff --git a/src/main/java/com/github/dockerjava/core/command/ExecCreateCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/ExecCreateCmdImpl.java index 315980a38..22ff63945 100644 --- a/src/main/java/com/github/dockerjava/core/command/ExecCreateCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/ExecCreateCmdImpl.java @@ -3,9 +3,9 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.github.dockerjava.api.NotFoundException; import com.github.dockerjava.api.command.ExecCreateCmd; -import com.github.dockerjava.api.command.ExecCreateCmdResponce; +import com.github.dockerjava.api.command.ExecCreateCmdResponse; -public class ExecCreateCmdImpl extends AbstrDockerCmd implements ExecCreateCmd { +public class ExecCreateCmdImpl extends AbstrDockerCmd implements ExecCreateCmd { private String containerId; @@ -63,7 +63,7 @@ public String getContainerId() { * @throws NotFoundException No such container */ @Override - public ExecCreateCmdResponce exec() throws NotFoundException { + public ExecCreateCmdResponse exec() throws NotFoundException { return super.exec(); } } 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 edc163623..b3c37dc51 100644 --- a/src/main/java/com/github/dockerjava/core/command/ExecStartCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/ExecStartCmdImpl.java @@ -6,7 +6,7 @@ import java.io.InputStream; -public class ExecStartCmdImpl extends AbstrDockerCmd implements ExecStartCmd { +public class ExecStartCmdImpl extends AbstrDockerCmd implements ExecStartCmd { private String containerId; @@ -14,7 +14,8 @@ public class ExecStartCmdImpl extends AbstrDockerCmd public ExecStartCmdImpl(ExecStartCmd.Exec exec, String containerId) { super(exec); - withContainerId(containerId); + Preconditions.checkNotNull(containerId, "containerId was not specified"); + this.containerId = containerId; } @Override @@ -32,13 +33,6 @@ public boolean isTty() { return tty; } - @Override - public ExecStartCmdImpl withContainerId(String containerId) { - Preconditions.checkNotNull(containerId, "containerId was not specified"); - this.containerId = containerId; - return this; - } - /** * @throws com.github.dockerjava.api.NotFoundException No such container */ diff --git a/src/main/java/com/github/dockerjava/jaxrs/ExecCreateCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/ExecCreateCmdExec.java index a424e7ca5..69346efd5 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/ExecCreateCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/ExecCreateCmdExec.java @@ -1,7 +1,7 @@ package com.github.dockerjava.jaxrs; import com.github.dockerjava.api.command.ExecCreateCmd; -import com.github.dockerjava.api.command.ExecCreateCmdResponce; +import com.github.dockerjava.api.command.ExecCreateCmdResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -10,7 +10,7 @@ import static javax.ws.rs.client.Entity.entity; -public class ExecCreateCmdExec extends AbstrDockerCmdExec implements ExecCreateCmd.Exec { +public class ExecCreateCmdExec extends AbstrDockerCmdExec implements ExecCreateCmd.Exec { private static final Logger LOGGER = LoggerFactory .getLogger(VersionCmdExec.class); @@ -20,11 +20,11 @@ public ExecCreateCmdExec(WebTarget baseResource) { } @Override - protected ExecCreateCmdResponce execute(ExecCreateCmd command) { + protected ExecCreateCmdResponse execute(ExecCreateCmd command) { WebTarget webResource = getBaseResource().path("/containers/{id}/exec").resolveTemplate("id", command.getContainerId()); LOGGER.trace("POST: {}", webResource); - return webResource.request().accept(MediaType.APPLICATION_JSON).post(entity(command, MediaType.APPLICATION_JSON), ExecCreateCmdResponce.class); + return webResource.request().accept(MediaType.APPLICATION_JSON).post(entity(command, MediaType.APPLICATION_JSON), ExecCreateCmdResponse.class); } } diff --git a/src/test/java/com/github/dockerjava/core/command/ExecCreateCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ExecCreateCmdImplTest.java new file mode 100644 index 000000000..75751710d --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/ExecCreateCmdImplTest.java @@ -0,0 +1,59 @@ +package com.github.dockerjava.core.command; + +import com.github.dockerjava.api.DockerException; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.ExecCreateCmdResponse; +import com.github.dockerjava.client.AbstractDockerClientTest; +import org.testng.ITestResult; +import org.testng.annotations.*; + +import java.lang.reflect.Method; +import java.security.SecureRandom; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +@Test(groups = "integration") +public class ExecCreateCmdImplTest extends AbstractDockerClientTest { + @BeforeTest + public void beforeTest() throws DockerException { + 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 execCreateTest() { + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient + .createContainerCmd("busybox").withCmd("env") + .withName(containerName).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + dockerClient.waitContainerCmd(container.getId()).exec(); + + ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()).withCmd("touch file.log").exec(); + + assertThat(execCreateCmdResponse.getId(), not(isEmptyString())); + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java new file mode 100644 index 000000000..4b9ab8812 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java @@ -0,0 +1,62 @@ +package com.github.dockerjava.core.command; + +import com.github.dockerjava.api.DockerException; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.ExecCreateCmdResponse; +import com.github.dockerjava.client.AbstractDockerClientTest; +import org.testng.ITestResult; +import org.testng.annotations.*; + +import java.io.InputStream; +import java.lang.reflect.Method; +import java.security.SecureRandom; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +public class ExecStartCmdImplTest extends AbstractDockerClientTest { + @BeforeTest + public void beforeTest() throws DockerException { + 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 execStartTest() throws Exception { + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient + .createContainerCmd("busybox").withCmd("env") + .withName(containerName).exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + dockerClient.waitContainerCmd(container.getId()).exec(); + + ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()).withCmd("touch","file.log").exec(); + + dockerClient.execStartCmd(execCreateCmdResponse.getId()).exec(); + + InputStream response = dockerClient.copyFileFromContainerCmd(container.getId(), "file.log").exec(); + assertTrue(response.available() > 0, "The file was not copied from the container."); + } +} From 5a6c46d297bc5a0c04b70893a44dd64904548fdb Mon Sep 17 00:00:00 2001 From: Andrey Klimachev Date: Sat, 10 Jan 2015 11:56:11 +0000 Subject: [PATCH 3/3] Fixing tests for Exec-start and Exec-create. --- .../dockerjava/core/command/ExecCreateCmdImplTest.java | 6 ++---- .../dockerjava/core/command/ExecStartCmdImplTest.java | 10 ++++------ 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/test/java/com/github/dockerjava/core/command/ExecCreateCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ExecCreateCmdImplTest.java index 75751710d..338763e6c 100644 --- a/src/test/java/com/github/dockerjava/core/command/ExecCreateCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/ExecCreateCmdImplTest.java @@ -41,7 +41,7 @@ public void execCreateTest() { String containerName = "generated_" + new SecureRandom().nextInt(); CreateContainerResponse container = dockerClient - .createContainerCmd("busybox").withCmd("env") + .createContainerCmd("busybox").withCmd("top") .withName(containerName).exec(); LOG.info("Created container {}", container.toString()); @@ -50,9 +50,7 @@ public void execCreateTest() { dockerClient.startContainerCmd(container.getId()).exec(); - dockerClient.waitContainerCmd(container.getId()).exec(); - - ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()).withCmd("touch file.log").exec(); + ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()).withCmd("touch","file.log").exec(); assertThat(execCreateCmdResponse.getId(), not(isEmptyString())); } diff --git a/src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java index 4b9ab8812..044d13458 100644 --- a/src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java @@ -15,6 +15,7 @@ import static org.hamcrest.Matchers.isEmptyString; import static org.hamcrest.Matchers.not; +@Test(groups = "integration") public class ExecStartCmdImplTest extends AbstractDockerClientTest { @BeforeTest public void beforeTest() throws DockerException { @@ -41,7 +42,7 @@ public void execStartTest() throws Exception { String containerName = "generated_" + new SecureRandom().nextInt(); CreateContainerResponse container = dockerClient - .createContainerCmd("busybox").withCmd("env") + .createContainerCmd("busybox").withCmd("top") .withName(containerName).exec(); LOG.info("Created container {}", container.toString()); @@ -50,13 +51,10 @@ public void execStartTest() throws Exception { dockerClient.startContainerCmd(container.getId()).exec(); - dockerClient.waitContainerCmd(container.getId()).exec(); - - ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()).withCmd("touch","file.log").exec(); - + ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()).attachStdout(true).withCmd("touch","file.log").exec(); dockerClient.execStartCmd(execCreateCmdResponse.getId()).exec(); - InputStream response = dockerClient.copyFileFromContainerCmd(container.getId(), "file.log").exec(); + InputStream response = dockerClient.copyFileFromContainerCmd(container.getId(), "/file.log").exec(); assertTrue(response.available() > 0, "The file was not copied from the container."); } }