Merge branch '21678-installer-diagnostics-internal'. Closes #21678
[arvados.git] / sdk / cwl / tests / test_copy_deps.py
index 2b78db8b0b5d7cdb8ddea9453681eaa3f63e6a3d..8ad735fddc6659dbc855003a9a4a0c04a32d6cbc 100644 (file)
@@ -3,21 +3,53 @@
 # SPDX-License-Identifier: Apache-2.0
 
 import arvados
+import arvados.collection
 import subprocess
 
 api = arvados.api()
 
+workflow_content = """# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+cwlVersion: v1.2
+class: CommandLineTool
+baseCommand: echo
+inputs:
+  message:
+    type: File
+    inputBinding:
+      position: 1
+    default:
+      class: File
+      location: keep:d7514270f356df848477718d58308cc4+94/b
+
+outputs: []
+"""
+
+expect_file = "19070-copy-deps.cwl"
+
+def check_workflow_content(uuid):
+    c = arvados.collection.Collection(uuid)
+    try:
+        with c.open(expect_file) as f:
+            content = f.read()
+        match = (content == workflow_content)
+        return match
+    except:
+        return False
+
 def check_contents(group, wf_uuid):
     contents = api.groups().contents(uuid=group["uuid"]).execute()
-    if len(contents["items"]) != 3:
-        raise Exception("Expected 3 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"]:
         if c["kind"] == "arvados#workflow" and c["uuid"] == wf_uuid:
             found = True
     if not found:
-        raise Exception("Couldn't find workflow")
+        raise Exception("Couldn't find workflow in "+group["uuid"])
 
     found = False
     for c in contents["items"]:
@@ -33,8 +65,15 @@ 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 "+expect_file)
+
 
-def test_create():
+def check_create():
     group = api.groups().create(body={"group": {"name": "test-19070-project-1", "group_class": "project"}}, ensure_unique_name=True).execute()
     try:
         contents = api.groups().contents(uuid=group["uuid"]).execute()
@@ -42,14 +81,16 @@ def test_create():
             raise Exception("Expected 0 items")
 
         # Create workflow, by default should also copy dependencies
-        wf_uuid = subprocess.check_output(["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()
         check_contents(group, wf_uuid)
     finally:
         api.groups().delete(uuid=group["uuid"]).execute()
 
 
-def test_update():
+def check_update():
     group = api.groups().create(body={"group": {"name": "test-19070-project-2", "group_class": "project"}}, ensure_unique_name=True).execute()
     try:
         contents = api.groups().contents(uuid=group["uuid"]).execute()
@@ -57,12 +98,14 @@ def test_update():
             raise Exception("Expected 0 items")
 
         # Create workflow, but with --no-copy-deps it shouldn't copy anything
-        wf_uuid = subprocess.check_output(["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"]:
@@ -71,8 +114,17 @@ 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 "+expect_file)
+
         # Updating by default will copy missing items
-        wf_uuid = subprocess.check_output(["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()
         check_contents(group, wf_uuid)
 
@@ -80,7 +132,7 @@ def test_update():
         api.groups().delete(uuid=group["uuid"]).execute()
 
 
-def test_execute():
+def check_execute():
     group = api.groups().create(body={"group": {"name": "test-19070-project-3", "group_class": "project"}}, ensure_unique_name=True).execute()
     try:
         contents = api.groups().contents(uuid=group["uuid"]).execute()
@@ -88,7 +140,9 @@ def test_execute():
             raise Exception("Expected 0 items")
 
         # Execute workflow, shouldn't copy anything.
-        wf_uuid = subprocess.check_output(["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()
 
         contents = api.groups().contents(uuid=group["uuid"]).execute()
@@ -115,7 +169,9 @@ def test_execute():
             raise Exception("Didn't expect to find jobs image dependency")
 
         # Execute workflow with --copy-deps
-        wf_uuid = subprocess.check_output(["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()
 
         contents = api.groups().contents(uuid=group["uuid"]).execute()
@@ -137,6 +193,6 @@ def test_execute():
         api.groups().delete(uuid=group["uuid"]).execute()
 
 if __name__ == '__main__':
-    test_create()
-    test_update()
-    test_execute()
+    check_create()
+    check_update()
+    check_execute()