Merge branch '8654-arv-jobs-cwl-runner' closes #8654
[arvados.git] / sdk / cwl / tests / test_submit.py
1 import unittest
2 import mock
3 import arvados_cwl
4 import sys
5 import arvados
6 import arvados.keep
7 import arvados.collection
8 import hashlib
9
10 class TestSubmit(unittest.TestCase):
11     @mock.patch("arvados.commands.keepdocker.list_images_in_arv")
12     @mock.patch("arvados.collection.KeepClient")
13     @mock.patch("arvados.events.subscribe")
14     def test_submit(self, events, keep, keepdocker):
15         api = mock.MagicMock()
16         def putstub(p, **kwargs):
17             return "%s+%i" % (hashlib.md5(p).hexdigest(), len(p))
18         keep().put.side_effect = putstub
19         keepdocker.return_value = True
20         api.users().current().execute.return_value = {"uuid": "zzzzz-tpzed-zzzzzzzzzzzzzzz"}
21         api.collections().list().execute.return_value = {"items": []}
22         api.collections().create().execute.side_effect = ({"uuid": "zzzzz-4zz18-zzzzzzzzzzzzzz1",
23                                                            "portable_data_hash": "99999999999999999999999999999991+99"},
24                                                           {"uuid": "zzzzz-4zz18-zzzzzzzzzzzzzz2",
25                                                            "portable_data_hash": "99999999999999999999999999999992+99"})
26         api.jobs().create().execute.return_value = {"uuid": "zzzzz-8i9sb-zzzzzzzzzzzzzzz", "state": "Queued"}
27
28         arvados_cwl.main(["--debug", "--submit", "--no-wait", "tests/wf/submit_wf.cwl", "tests/submit_test_job.json"],
29                          sys.stdout, sys.stderr, api_client=api)
30
31         api.collections().create.assert_has_calls([
32             mock.call(),
33             mock.call(body={'manifest_text': './tool 84ec4df683711de31b782505389a8843+429 0:16:blub.txt 16:413:submit_tool.cwl\n./wf 81d977a245a41b8e79859fbe00623fd0+344 0:344:submit_wf.cwl\n',
34                             'owner_uuid': 'zzzzz-tpzed-zzzzzzzzzzzzzzz',
35                             'name': 'submit_wf.cwl'
36                         }, ensure_unique_name=True),
37             mock.call().execute(),
38             mock.call(body={'manifest_text': '. 979af1245a12a1fed634d4222473bfdc+16 0:16:blorp.txt\n',
39                             'owner_uuid': 'zzzzz-tpzed-zzzzzzzzzzzzzzz',
40                             'name': '#'
41                         }, ensure_unique_name=True),
42             mock.call().execute()])
43
44         api.jobs().create.assert_called_with(
45             body={
46                 'runtime_constraints': {
47                     'docker_image': 'arvados/jobs'
48                 },
49             'script_parameters': {
50                 'x': {
51                     'path': '99999999999999999999999999999992+99/blorp.txt',
52                     'class': 'File'
53                 },
54                 'cwl:tool': '99999999999999999999999999999991+99/wf/submit_wf.cwl'
55             },
56             'repository': 'arvados',
57                 'script_version': 'master',
58                 'script': 'cwl-runner'
59             },
60             find_or_create=True)