8654: Add missing test_submit
authorPeter Amstutz <peter.amstutz@curoverse.com>
Wed, 30 Mar 2016 18:58:30 +0000 (14:58 -0400)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Wed, 30 Mar 2016 18:58:30 +0000 (14:58 -0400)
sdk/cwl/tests/inp/blorp.txt [new file with mode: 0644]
sdk/cwl/tests/submit_test_job.json [new file with mode: 0644]
sdk/cwl/tests/test_submit.py [new file with mode: 0644]
sdk/cwl/tests/tool/blub.txt [new file with mode: 0644]
sdk/cwl/tests/tool/submit_tool.cwl [new file with mode: 0644]
sdk/cwl/tests/wf/submit_wf.cwl [new file with mode: 0644]

diff --git a/sdk/cwl/tests/inp/blorp.txt b/sdk/cwl/tests/inp/blorp.txt
new file mode 100644 (file)
index 0000000..09fc24d
--- /dev/null
@@ -0,0 +1 @@
+blopper blubber
diff --git a/sdk/cwl/tests/submit_test_job.json b/sdk/cwl/tests/submit_test_job.json
new file mode 100644 (file)
index 0000000..e453f42
--- /dev/null
@@ -0,0 +1,6 @@
+{
+    "x": {
+        "class": "File",
+        "path": "inp/blorp.txt"
+    }
+}
diff --git a/sdk/cwl/tests/test_submit.py b/sdk/cwl/tests/test_submit.py
new file mode 100644 (file)
index 0000000..d383a48
--- /dev/null
@@ -0,0 +1,58 @@
+import unittest
+import mock
+import arvados_cwl
+import sys
+import arvados
+import arvados.keep
+import arvados.collection
+import hashlib
+
+class TestSubmit(unittest.TestCase):
+    @mock.patch("arvados.commands.keepdocker.list_images_in_arv")
+    @mock.patch("arvados.collection.KeepClient")
+    @mock.patch("arvados.events.subscribe")
+    def test_submit(self, events, keep, keepdocker):
+        api = mock.MagicMock()
+        def putstub(p, **kwargs):
+            return "%s+%i" % (hashlib.md5(p).hexdigest(), len(p))
+        keep().put.side_effect = putstub
+        keepdocker.return_value = True
+        api.users().current().execute.return_value = {"uuid": "zzzzz-tpzed-zzzzzzzzzzzzzzz"}
+        api.collections().list().execute.return_value = {"items": []}
+        api.collections().create().execute.side_effect = ({"uuid": "zzzzz-4zz18-zzzzzzzzzzzzzz1",
+                                                           "portable_data_hash": "99999999999999999999999999999991+99"},
+                                                          {"uuid": "zzzzz-4zz18-zzzzzzzzzzzzzz2",
+                                                           "portable_data_hash": "99999999999999999999999999999992+99"})
+        api.jobs().create().execute.return_value = {"uuid": "zzzzz-8i9sb-zzzzzzzzzzzzzzz", "state": "Queued"}
+
+        arvados_cwl.main(["--debug", "--submit", "--no-wait", "tests/wf/submit_wf.cwl", "tests/submit_test_job.json"],
+                         sys.stdout, sys.stderr, api_client=api)
+
+        api.collections().create.assert_has_calls([
+            mock.call(),
+            mock.call(body={'manifest_text': './tool b0fa9cffda3d37ba401bc338bb0b54a6+257 0:16:blub.txt 16:241:submit_tool.cwl\n./wf 888e237b758adf86ca66c36f7bd88a24+175 0:175:submit_wf.cwl\n',
+                                                                   'owner_uuid': 'zzzzz-tpzed-zzzzzzzzzzzzzzz',
+                                                                   'name': 'submit_wf.cwl'
+                                                               }, ensure_unique_name=True),
+                                                   mock.call().execute(),
+                                                   mock.call(body={'manifest_text': '. 979af1245a12a1fed634d4222473bfdc+16 0:16:blorp.txt\n',
+                                                                  'owner_uuid': 'zzzzz-tpzed-zzzzzzzzzzzzzzz',
+                                                                  'name': 'submit_test_job.json'
+                                                               }, ensure_unique_name=True),
+                                                   mock.call().execute()])
+        api.jobs().create.assert_called_with(body={
+            'runtime_constraints': {
+                'docker_image': 'arvados/jobs'
+            },
+            'script_parameters': {
+                'x': {
+                    'path': '99999999999999999999999999999992+99/blorp.txt',
+                    'class': 'File'
+                },
+                'cwl:tool': '99999999999999999999999999999991+99/wf/submit_wf.cwl'
+            },
+            'repository': 'arvados',
+            'script_version': 'master',
+            'script': 'cwl-runner'
+        },
+                                             find_or_create=True)
diff --git a/sdk/cwl/tests/tool/blub.txt b/sdk/cwl/tests/tool/blub.txt
new file mode 100644 (file)
index 0000000..f12927b
--- /dev/null
@@ -0,0 +1 @@
+blibber blubber
diff --git a/sdk/cwl/tests/tool/submit_tool.cwl b/sdk/cwl/tests/tool/submit_tool.cwl
new file mode 100644 (file)
index 0000000..4bdb235
--- /dev/null
@@ -0,0 +1,14 @@
+class: CommandLineTool
+requirements:
+  - class: DockerRequirement
+    dockerPull: debian:8
+inputs:
+  - id: x
+    type: File
+    default:
+      class: File
+      path: blub.txt
+    inputBinding:
+      position: 1
+outputs: []
+baseCommand: cat
diff --git a/sdk/cwl/tests/wf/submit_wf.cwl b/sdk/cwl/tests/wf/submit_wf.cwl
new file mode 100644 (file)
index 0000000..104203b
--- /dev/null
@@ -0,0 +1,11 @@
+class: Workflow
+inputs:
+  - id: x
+    type: File
+outputs: []
+steps:
+  - id: step1
+    inputs:
+      - { id: x, source: "#x" }
+    outputs: []
+    run: ../tool/submit_tool.cwl