13306: Changes to arvados-cwl-runner code after running futurize --stage2
[arvados.git] / sdk / cwl / tests / test_make_output.py
1 from future import standard_library
2 standard_library.install_aliases()
3 # Copyright (C) The Arvados Authors. All rights reserved.
4 #
5 # SPDX-License-Identifier: Apache-2.0
6
7 import functools
8 import json
9 import logging
10 import mock
11 import os
12 import io
13 import unittest
14
15 import arvados
16 import arvados_cwl
17 import arvados_cwl.executor
18 from .mock_discovery import get_rootDesc
19
20 class TestMakeOutput(unittest.TestCase):
21     def setUp(self):
22         self.api = mock.MagicMock()
23         self.api._rootDesc = get_rootDesc()
24
25     @mock.patch("arvados.collection.Collection")
26     @mock.patch("arvados.collection.CollectionReader")
27     def test_make_output_collection(self, reader, col):
28         keep_client = mock.MagicMock()
29         runner = arvados_cwl.executor.ArvCwlExecutor(self.api, keep_client=keep_client)
30         runner.project_uuid = 'zzzzz-j7d0g-zzzzzzzzzzzzzzz'
31
32         final = mock.MagicMock()
33         col.return_value = final
34         readermock = mock.MagicMock()
35         reader.return_value = readermock
36
37         final_uuid = final.manifest_locator()
38         num_retries = runner.num_retries
39
40         cwlout = io.StringIO()
41         openmock = mock.MagicMock()
42         final.open.return_value = openmock
43         openmock.__enter__.return_value = cwlout
44
45         _, runner.final_output_collection = runner.make_output_collection("Test output", ["foo"], "tag0,tag1,tag2", {
46             "foo": {
47                 "class": "File",
48                 "location": "keep:99999999999999999999999999999991+99/foo.txt",
49                 "size": 3,
50                 "basename": "foo.txt"
51             },
52             "bar": {
53                 "class": "File",
54                 "location": "keep:99999999999999999999999999999992+99/bar.txt",
55                 "basename": "baz.txt",
56                 "size": 4
57             }
58         })
59
60         final.copy.assert_has_calls([mock.call('bar.txt', 'baz.txt', overwrite=False, source_collection=readermock)])
61         final.copy.assert_has_calls([mock.call('foo.txt', 'foo.txt', overwrite=False, source_collection=readermock)])
62         final.save_new.assert_has_calls([mock.call(ensure_unique_name=True, name='Test output', owner_uuid='zzzzz-j7d0g-zzzzzzzzzzzzzzz', storage_classes=['foo'])])
63         self.assertEqual("""{
64     "bar": {
65         "basename": "baz.txt",
66         "class": "File",
67         "location": "baz.txt",
68         "size": 4
69     },
70     "foo": {
71         "basename": "foo.txt",
72         "class": "File",
73         "location": "foo.txt",
74         "size": 3
75     }
76 }""", cwlout.getvalue())
77
78         self.assertIs(final, runner.final_output_collection)
79         self.assertIs(final_uuid, runner.final_output_collection.manifest_locator())
80         self.api.links().create.assert_has_calls([mock.call(body={"head_uuid": final_uuid, "link_class": "tag", "name": "tag0"}), mock.call().execute(num_retries=num_retries)])
81         self.api.links().create.assert_has_calls([mock.call(body={"head_uuid": final_uuid, "link_class": "tag", "name": "tag1"}), mock.call().execute(num_retries=num_retries)])
82         self.api.links().create.assert_has_calls([mock.call(body={"head_uuid": final_uuid, "link_class": "tag", "name": "tag2"}), mock.call().execute(num_retries=num_retries)])