Start container support and test case.

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/f8dc6643
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/tree/f8dc6643
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/diff/f8dc6643

Branch: refs/heads/docker
Commit: f8dc66432b386a8818598fe807dc2cadc212188c
Parents: 158a32f
Author: Nadeesh Dilanga <[email protected]>
Authored: Wed Jul 6 22:50:29 2016 -0400
Committer: Nadeesh Dilanga <[email protected]>
Committed: Wed Jul 6 22:50:29 2016 -0400

----------------------------------------------------------------------
 .../activities/docker/DockerActivity.java       | 70 ++++++++++++++------
 .../docker/test/DockerActivityTest.java         | 20 +++++-
 2 files changed, 66 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/f8dc6643/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/DockerActivity.java
----------------------------------------------------------------------
diff --git 
a/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/DockerActivity.java
 
b/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/DockerActivity.java
index 873a12a..1a42ac0 100644
--- 
a/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/DockerActivity.java
+++ 
b/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/DockerActivity.java
@@ -20,10 +20,13 @@ package org.apache.taverna.activities.docker;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ContainerNode;
 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.command.InspectImageResponse;
+import com.github.dockerjava.api.model.Container;
 import org.apache.log4j.Logger;
 import org.apache.taverna.invocation.InvocationContext;
 import org.apache.taverna.reference.ErrorDocument;
@@ -34,6 +37,7 @@ import 
org.apache.taverna.workflowmodel.processor.activity.ActivityConfiguration
 import 
org.apache.taverna.workflowmodel.processor.activity.AsynchronousActivityCallback;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -78,7 +82,7 @@ public class DockerActivity extends 
AbstractAsynchronousActivity<JsonNode> {
 
     @Override
     public void configure(JsonNode json) throws ActivityConfigurationException 
{
-      this.json = json;
+        this.json = json;
     }
 
     @Override
@@ -96,37 +100,48 @@ public class DockerActivity extends 
AbstractAsynchronousActivity<JsonNode> {
                 T2Reference responseBodyRef = null;
                 InvocationContext context = callback.getContext();
                 ReferenceService referenceService = 
context.getReferenceService();
-                String action = getRenderedParam(referenceService,context, 
map.get(ACTION));
+                String action = getRenderedParam(referenceService, context, 
map.get(ACTION));
 
                 JsonNodeFactory factory = new ObjectMapper().getNodeFactory();
-                ObjectNode outJson = factory.objectNode();
+                ContainerNode outJson = null;
 
                 RemoteClient remoteClient = new 
RemoteClient(containerConfiguration);
-                    if (CREATE_CONTAINER.equalsIgnoreCase(action)) {
 
-                        CreateContainerResponse response = 
remoteClient.createContainer();
-                        System.out.println("+++++" + response.toString());
-                        outJson.put(OUT_CONTAINER_ID, response.getId());
+                if (CREATE_CONTAINER.equalsIgnoreCase(action)) {
 
-                    } else if (INSPECT.equalsIgnoreCase(action)) {
+                    outJson = factory.objectNode();
+                    CreateContainerResponse response = 
remoteClient.createContainer();
+                    ((ObjectNode)outJson).put(OUT_CONTAINER_ID, 
response.getId());
 
-                        String imageName = getRenderedParam(referenceService, 
context, map.get(IN_IMAGE_NAME));
-                        InspectImageResponse response = 
remoteClient.inspect(imageName);
-                        outJson.put(OUT_IMAGE_ID, response.getId());
-                        outJson.put(OUT_IMAGE_AUTHOR, response.getAuthor());
-                        outJson.put(OUT_IMAGE_CONTAINER, 
response.getContainer());
+                } else if (INSPECT.equalsIgnoreCase(action)) {
 
-                    } else if (LIST_CONTAINERS.equalsIgnoreCase(action)) {
+                    outJson = factory.objectNode();
+                    String imageName = getRenderedParam(referenceService, 
context, map.get(IN_IMAGE_NAME));
+                    InspectImageResponse response = 
remoteClient.inspect(imageName);
+                    ((ObjectNode)outJson).put(OUT_IMAGE_ID, response.getId());
+                    ((ObjectNode)outJson).put(OUT_IMAGE_AUTHOR, 
response.getAuthor());
+                    ((ObjectNode)outJson).put(OUT_IMAGE_CONTAINER, 
response.getContainer());
 
-                        // TODO
+                } else if (LIST_CONTAINERS.equalsIgnoreCase(action)) {
 
-                    } else if (START_CONTAINER.equalsIgnoreCase(action)) {
-                        // TODO
-                    } else if (STOP_CONTAINER.equalsIgnoreCase(action)) {
-                        // TODO
+                    List<Container> containerList = 
remoteClient.listContainers();
+                    outJson = factory.arrayNode();
+                    for(Container container:containerList){
+                        
((ArrayNode)outJson).add(createOutputJson(container,factory.objectNode()));
                     }
-                    //TODO add any more supporting actions
-                    responseBodyRef = 
referenceService.register(outJson.toString(), 0, true, context);
+
+                } else if (START_CONTAINER.equalsIgnoreCase(action)) {
+                        //TODO
+                } else if (STOP_CONTAINER.equalsIgnoreCase(action)) {
+
+                    // TODO
+
+                } else {
+                    // Creates empty node
+                    outJson = factory.objectNode();
+                }
+
+                responseBodyRef = 
referenceService.register(outJson.toString(), 0, true, context);
 
                 outputs.put(RESPONSE_BODY_KEY, responseBodyRef);
                 callback.receiveResult(outputs, new int[0]);
@@ -135,8 +150,19 @@ public class DockerActivity extends 
AbstractAsynchronousActivity<JsonNode> {
     }
 
 
-    private String getRenderedParam(ReferenceService referenceService, 
InvocationContext context, T2Reference key){
+    private String getRenderedParam(ReferenceService referenceService, 
InvocationContext context, T2Reference key) {
         return (String) referenceService.renderIdentifier(key, String.class, 
context);
 
     }
+
+    private JsonNode createOutputJson(Container container, ObjectNode out){
+        out.put("id",container.getId());
+        out.put("command",container.getCommand());
+        out.put("created",container.getCreated());
+        out.put("image",container.getImage());
+        out.put("image-id",container.getImageId());
+        out.put("status",container.getStatus());
+        out.put("network-mode",container.getHostConfig().getNetworkMode());
+    return out;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/f8dc6643/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 8b095cf..657576a 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
@@ -52,7 +52,7 @@ public class DockerActivityTest {
     public static void main(String[] args) throws Exception {
         DockerActivityTest test = new DockerActivityTest();
         test.setup();
-        test.testCreateContainer();
+        test.testListContainers();
     }
 
     @Before
@@ -97,7 +97,7 @@ public class DockerActivityTest {
        }
 
     /**
-     * Tests a simple script (String output = input + "_returned") to ensure 
the script is invoked correctly.
+     * Creates container with a given container configuration
      * @throws Exception
      */
     @Test
@@ -130,6 +130,22 @@ public class DockerActivityTest {
 
     }
 
+    @Test
+    public void testListContainers() throws Exception {
+        DockerActivity activity = new DockerActivity(containerConfiguration);
+        activity.configure(activityConfiguration);
+
+        Map<String,Object> inputs = new HashMap<String,Object>();
+        inputs.put(DockerActivity.ACTION, DockerActivity.LIST_CONTAINERS);
+
+        Map<String, Class<?>> expectedOutputs = new HashMap<String, 
Class<?>>();
+        expectedOutputs.put(DockerActivity.RESPONSE_BODY_KEY, String.class);
+
+        Map<String,Object> outputs = 
ActivityInvoker.invokeAsyncActivity(activity, inputs, expectedOutputs);
+        System.out.println(outputs.get(DockerActivity.RESPONSE_BODY_KEY));
+        Assert.assertNotNull(outputs.get(DockerActivity.RESPONSE_BODY_KEY));
+    }
+
     private Container getContainerFromName(List<Container> list, String name){
         for(Container container:list){
            if(container.getNames()[0].endsWith(name)){

Reply via email to