Docker Read me and code review fixes.
Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/commit/a483c883 Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/tree/a483c883 Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/diff/a483c883 Branch: refs/heads/docker Commit: a483c8834cca8f4a1d3cf74c8b4f19fd8a04911a Parents: d89c61b Author: Nadeesh Dilanga <[email protected]> Authored: Wed Jul 13 22:03:03 2016 -0400 Committer: Nadeesh Dilanga <[email protected]> Committed: Wed Jul 13 22:03:03 2016 -0400 ---------------------------------------------------------------------- taverna-docker-activity/README.txt | 30 ++++++++++++++++++++ taverna-docker-activity/pom.xml | 4 +-- .../taverna/activities/docker/RemoteClient.java | 1 - .../docker/test/DockerActivityTest.java | 21 ++++++++++---- .../docker/test/TestDockerCommands.java | 16 +++++++---- 5 files changed, 58 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/a483c883/taverna-docker-activity/README.txt ---------------------------------------------------------------------- diff --git a/taverna-docker-activity/README.txt b/taverna-docker-activity/README.txt new file mode 100644 index 0000000..2053ddf --- /dev/null +++ b/taverna-docker-activity/README.txt @@ -0,0 +1,30 @@ +########################## Docker Activity Plugin ############################ + +This module implements the taverna activity plugin for Docker. The plugin capable of following functionality. + +1. Inspect Image +2. Create Container +3. Start Container +4. List Containers +5. Stop Container - TODO +6. Delete Container - TODO + +Test module src/test/java/ covers each and every capability. org.apache.taverna.activities.docker.RemoteClient +capable of executing docker commands over TCP on the actual remote docker host using the docker-java api. + +1. TestDockerCommands covers unit tests for each Docker commands that is supported by RemoteClient api. +2. DockerActivityTest written on top of RemoteClient to support different docker commands. + + + Prerequisites + +1. Copy your key store files to src/test/java/resources/cert directory. + Example: If you are in Mac Copy files in /Users/Jack/.docker/machine/certs/, where you finds following files + ca-key.pem ca.pem cert.pem key.pem + +2. Change DockerActivityTest.DOCKER_REMOTE to your docker remote host:port + +3. Change DockerActivityTest.DOCKER_REGISTRY to your docker registry (defaults to public docker registry) + +Then do mvn clean install to build the project and run the tests. +############################################################################## \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/a483c883/taverna-docker-activity/pom.xml ---------------------------------------------------------------------- diff --git a/taverna-docker-activity/pom.xml b/taverna-docker-activity/pom.xml index 97b646e..54e30df 100644 --- a/taverna-docker-activity/pom.xml +++ b/taverna-docker-activity/pom.xml @@ -112,7 +112,7 @@ <groupId>org.apache.taverna.engine</groupId> <artifactId>taverna-activity-test-utils</artifactId> <version>${taverna.engine.version}</version> - <!--<scope>test</scope>--> + <scope>test</scope> <exclusions> <exclusion> <!-- declare the exclusion here --> <groupId>com.fasterxml.jackson.jaxrs</groupId> @@ -124,7 +124,7 @@ <groupId>org.apache.taverna.engine</groupId> <artifactId>taverna-workflowmodel-impl</artifactId> <version>${taverna.engine.version}</version> - <!--<scope>test</scope>--> + <scope>test</scope> <exclusions> <exclusion> <!-- declare the exclusion here --> <groupId>com.fasterxml.jackson.jaxrs</groupId> http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/a483c883/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/RemoteClient.java ---------------------------------------------------------------------- diff --git a/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/RemoteClient.java b/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/RemoteClient.java index aeabc58..43712c2 100644 --- a/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/RemoteClient.java +++ b/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/RemoteClient.java @@ -45,7 +45,6 @@ public class RemoteClient { private static Logger LOG = Logger.getLogger(RemoteClient.class); - public RemoteClient(DockerContainerConfiguration containerConfig) { this.containerConfig = containerConfig; init(containerConfig.getDockerRemoteConfig()); http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/a483c883/taverna-docker-activity/src/test/java/org/apache/taverna/activities/docker/test/DockerActivityTest.java ---------------------------------------------------------------------- diff --git a/taverna-docker-activity/src/test/java/org/apache/taverna/activities/docker/test/DockerActivityTest.java b/taverna-docker-activity/src/test/java/org/apache/taverna/activities/docker/test/DockerActivityTest.java index 89af8bd..b14b8f6 100755 --- a/taverna-docker-activity/src/test/java/org/apache/taverna/activities/docker/test/DockerActivityTest.java +++ b/taverna-docker-activity/src/test/java/org/apache/taverna/activities/docker/test/DockerActivityTest.java @@ -22,7 +22,6 @@ package org.apache.taverna.activities.docker.test; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.JsonNodeFactory; import com.fasterxml.jackson.databind.node.ObjectNode; -import com.github.dockerjava.api.command.CreateContainerResponse; import com.github.dockerjava.api.model.Container; import org.apache.taverna.activities.docker.DockerActivity; import org.apache.taverna.activities.docker.DockerContainerConfigurationImpl; @@ -30,6 +29,7 @@ import org.apache.taverna.activities.docker.DockerRemoteConfig; import org.apache.taverna.activities.docker.RemoteClient; import org.apache.taverna.activities.testutils.ActivityInvoker; import org.junit.Assert; +import org.junit.Assume; import org.junit.Before; import org.junit.Test; @@ -47,29 +47,38 @@ public class DockerActivityTest { private ObjectNode activityConfiguration; private DockerContainerConfigurationImpl containerConfiguration; - + + public static final String CERT_PATH = "src/test/resources/cert"; + + public static final String DOCKER_REMOTE = "tcp://192.168.99.100:2376"; + + public static final String DOCKER_REGISTRY = "https://registry-1.docker.io/v2"; + + @Before public void setup() throws Exception { - activityConfiguration = JsonNodeFactory.instance.objectNode(); + Assume.assumeTrue(new File(DockerActivityTest.CERT_PATH).list().length > 0); + activityConfiguration = JsonNodeFactory.instance.objectNode(); containerConfiguration = new DockerContainerConfigurationImpl(new TestConfigurationManager()); containerConfiguration.getInternalPropertyMap().put(DockerContainerConfigurationImpl.CMD,"python,app.py"); containerConfiguration.getInternalPropertyMap().put(DockerContainerConfigurationImpl.EXPOSED_PORTS, "5000"); containerConfiguration.getInternalPropertyMap().put(DockerContainerConfigurationImpl.BINDINGS, "32772"); DockerRemoteConfig remoteConfig = new DockerRemoteConfig(); - remoteConfig.setDockerHost("tcp://192.168.99.100:2376"); + remoteConfig.setDockerHost(DOCKER_REMOTE); remoteConfig.setApiVersion("1.21"); remoteConfig.setDockerTlsVerify(true); // You need to copy your valid certificate file to resources directory in this test module as follows. - remoteConfig.setDockerCertPath(new File("src/test/resources/cert").getAbsolutePath()); - remoteConfig.setRegistryUrl("https://registry-1.docker.io/v2"); + remoteConfig.setDockerCertPath(new File(CERT_PATH).getAbsolutePath()); + remoteConfig.setRegistryUrl(DOCKER_REGISTRY); containerConfiguration.setDockerRemoteConfig(remoteConfig); } + /** * Tests a simple script (String output = input + "_returned") to ensure the script is invoked correctly. * @throws Exception http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/a483c883/taverna-docker-activity/src/test/java/org/apache/taverna/activities/docker/test/TestDockerCommands.java ---------------------------------------------------------------------- diff --git a/taverna-docker-activity/src/test/java/org/apache/taverna/activities/docker/test/TestDockerCommands.java b/taverna-docker-activity/src/test/java/org/apache/taverna/activities/docker/test/TestDockerCommands.java index 0644545..8e7b47f 100644 --- a/taverna-docker-activity/src/test/java/org/apache/taverna/activities/docker/test/TestDockerCommands.java +++ b/taverna-docker-activity/src/test/java/org/apache/taverna/activities/docker/test/TestDockerCommands.java @@ -21,10 +21,13 @@ package org.apache.taverna.activities.docker.test; import com.github.dockerjava.api.command.InspectImageResponse; import com.github.dockerjava.api.model.Container; +import org.apache.taverna.activities.docker.DockerActivity; import org.apache.taverna.activities.docker.DockerContainerConfigurationImpl; import org.apache.taverna.activities.docker.DockerRemoteConfig; import org.apache.taverna.activities.docker.RemoteClient; import org.junit.Assert; +import org.junit.Assume; +import org.junit.Before; import org.junit.Test; import java.io.File; @@ -36,24 +39,27 @@ public class TestDockerCommands { private static final String IMAGE_NAME = "training/webapp"; - private static final String CONTAINER_NAME = "test-container"; + private static final String CONTAINER_NAME = "test-container-0"; private static final String DOCKER_LOGIN_SUCCESS = "Login Succeeded"; - public TestDockerCommands() { + @Before + public void setup(){ + Assume.assumeTrue(new File(DockerActivityTest.CERT_PATH).list().length > 0); + DockerContainerConfigurationImpl containerConfiguration = new DockerContainerConfigurationImpl(new TestConfigurationManager()); containerConfiguration.getInternalPropertyMap().put(DockerContainerConfigurationImpl.NAME,CONTAINER_NAME); containerConfiguration.getInternalPropertyMap().put(DockerContainerConfigurationImpl.IMAGE,IMAGE_NAME); containerConfiguration.getInternalPropertyMap().put(DockerContainerConfigurationImpl.CMD,"env"); DockerRemoteConfig remoteConfig = new DockerRemoteConfig(); - remoteConfig.setDockerHost("tcp://192.168.99.100:2376"); + remoteConfig.setDockerHost(DockerActivityTest.DOCKER_REMOTE); remoteConfig.setApiVersion("1.21"); remoteConfig.setDockerTlsVerify(true); // You need to copy your valid certificate file to resources directory in this test module as follows. - remoteConfig.setDockerCertPath(new File("src/test/resources/cert").getAbsolutePath()); - remoteConfig.setRegistryUrl("https://registry-1.docker.io/v2"); + remoteConfig.setDockerCertPath(new File(DockerActivityTest.CERT_PATH).getAbsolutePath()); + remoteConfig.setRegistryUrl(DockerActivityTest.DOCKER_REGISTRY); containerConfiguration.setDockerRemoteConfig(remoteConfig); remoteClient = new RemoteClient(containerConfiguration); }
