19385: Finally passing schemadef test.
[arvados.git] / sdk / cwl / tests / test_copy_deps.py
index 853a7d360953df486df7d13cde5db04b978f1f07..54d90580f906f836fe9b31765decd23a0104fa7c 100644 (file)
@@ -3,14 +3,64 @@
 # SPDX-License-Identifier: Apache-2.0
 
 import arvados
+import arvados.collection
 import subprocess
+import json
 
 api = arvados.api()
 
+workflow_content = """{
+    "$graph": [
+        {
+            "baseCommand": "echo",
+            "class": "CommandLineTool",
+            "cwlVersion": "v1.2",
+            "hints": [
+                {
+                    "class": "http://arvados.org/cwl#WorkflowRunnerResources"
+                }
+            ],
+            "id": "#main",
+            "inputs": [
+                {
+                    "default": {
+                        "basename": "b",
+                        "class": "File",
+                        "location": "keep:d7514270f356df848477718d58308cc4+94/b",
+                        "nameext": "",
+                        "nameroot": "b",
+                        "size": 0
+                    },
+                    "id": "#main/message",
+                    "inputBinding": {
+                        "position": 1
+                    },
+                    "type": "File"
+                }
+            ],
+            "outputs": []
+        }
+    ],
+    "cwlVersion": "v1.2"
+}"""
+
+def check_workflow_content(uuid):
+    c = arvados.collection.Collection(uuid)
+    try:
+        j = json.load(c.open("workflow.json"))
+    except IOError:
+        return False
+    # The value of "acrContainerImage" is tied to the specific version
+    # of arvados-cwl-runner so we can't just compare PDH of the whole
+    # workflow collection, it changes with every version.
+    del j["$graph"][0]["hints"][0]["acrContainerImage"]
+    print
+    return json.dumps(j, sort_keys=True, indent=4, separators=(',',': ')) == workflow_content
+
 def check_contents(group, wf_uuid):
     contents = api.groups().contents(uuid=group["uuid"]).execute()
-    if len(contents["items"]) != 3:
-        raise Exception("Expected 3 items in "+group["uuid"]+" was "+len(contents["items"]))
+    if len(contents["items"]) != 4:
+        raise Exception("Expected 4 items in "+group["uuid"]+" was "+str(len(contents["items"])))
 
     found = False
     for c in contents["items"]:
@@ -33,6 +83,13 @@ def check_contents(group, wf_uuid):
     if not found:
         raise Exception("Couldn't find jobs image dependency")
 
+    found = False
+    for c in contents["items"]:
+        if c["kind"] == "arvados#collection" and check_workflow_content(c["portable_data_hash"]):
+            found = True
+    if not found:
+        raise Exception("Couldn't find collection containing expected workflow.json")
+
 
 def test_create():
     group = api.groups().create(body={"group": {"name": "test-19070-project-1", "group_class": "project"}}, ensure_unique_name=True).execute()
@@ -42,7 +99,7 @@ def test_create():
             raise Exception("Expected 0 items")
 
         # Create workflow, by default should also copy dependencies
-        cmd = ["arvados-cwl-runner", "--create-workflow", "--project-uuid", group["uuid"], "19070-copy-deps.cwl"]
+        cmd = ["arvados-cwl-runner", "--disable-git", "--create-workflow", "--project-uuid", group["uuid"], "19070-copy-deps.cwl"]
         print(" ".join(cmd))
         wf_uuid = subprocess.check_output(cmd)
         wf_uuid = wf_uuid.decode("utf-8").strip()
@@ -59,14 +116,14 @@ def test_update():
             raise Exception("Expected 0 items")
 
         # Create workflow, but with --no-copy-deps it shouldn't copy anything
-        cmd = ["arvados-cwl-runner", "--no-copy-deps", "--create-workflow", "--project-uuid", group["uuid"], "19070-copy-deps.cwl"]
+        cmd = ["arvados-cwl-runner", "--disable-git", "--no-copy-deps", "--create-workflow", "--project-uuid", group["uuid"], "19070-copy-deps.cwl"]
         print(" ".join(cmd))
         wf_uuid = subprocess.check_output(cmd)
         wf_uuid = wf_uuid.decode("utf-8").strip()
 
         contents = api.groups().contents(uuid=group["uuid"]).execute()
-        if len(contents["items"]) != 1:
-            raise Exception("Expected 1 items")
+        if len(contents["items"]) != 2:
+            raise Exception("Expected 2 items")
 
         found = False
         for c in contents["items"]:
@@ -75,8 +132,15 @@ def test_update():
         if not found:
             raise Exception("Couldn't find workflow")
 
+        found = False
+        for c in contents["items"]:
+            if c["kind"] == "arvados#collection" and check_workflow_content(c["portable_data_hash"]):
+                found = True
+        if not found:
+            raise Exception("Couldn't find collection containing expected workflow.json")
+
         # Updating by default will copy missing items
-        cmd = ["arvados-cwl-runner", "--update-workflow", wf_uuid, "19070-copy-deps.cwl"]
+        cmd = ["arvados-cwl-runner", "--disable-git", "--update-workflow", wf_uuid, "19070-copy-deps.cwl"]
         print(" ".join(cmd))
         wf_uuid = subprocess.check_output(cmd)
         wf_uuid = wf_uuid.decode("utf-8").strip()
@@ -94,7 +158,7 @@ def test_execute():
             raise Exception("Expected 0 items")
 
         # Execute workflow, shouldn't copy anything.
-        cmd = ["arvados-cwl-runner", "--project-uuid", group["uuid"], "19070-copy-deps.cwl"]
+        cmd = ["arvados-cwl-runner", "--disable-git", "--project-uuid", group["uuid"], "19070-copy-deps.cwl"]
         print(" ".join(cmd))
         wf_uuid = subprocess.check_output(cmd)
         wf_uuid = wf_uuid.decode("utf-8").strip()
@@ -123,7 +187,7 @@ def test_execute():
             raise Exception("Didn't expect to find jobs image dependency")
 
         # Execute workflow with --copy-deps
-        cmd = ["arvados-cwl-runner", "--project-uuid", group["uuid"], "--copy-deps", "19070-copy-deps.cwl"]
+        cmd = ["arvados-cwl-runner", "--disable-git", "--project-uuid", group["uuid"], "--copy-deps", "19070-copy-deps.cwl"]
         print(" ".join(cmd))
         wf_uuid = subprocess.check_output(cmd)
         wf_uuid = wf_uuid.decode("utf-8").strip()