8784: Fix test for latest firefox.
[arvados.git] / sdk / cwl / tests / test_make_output.py
1 import functools
2 import json
3 import logging
4 import mock
5 import os
6 import StringIO
7 import unittest
8
9 import arvados
10 import arvados_cwl
11 from .mock_discovery import get_rootDesc
12
13 class TestMakeOutput(unittest.TestCase):
14     def setUp(self):
15         self.api = mock.MagicMock()
16         self.api._rootDesc = get_rootDesc()
17
18     @mock.patch("arvados.collection.Collection")
19     @mock.patch("arvados.collection.CollectionReader")
20     def test_make_output_collection(self, reader, col):
21         keep_client = mock.MagicMock()
22         runner = arvados_cwl.ArvCwlRunner(self.api, keep_client=keep_client)
23         runner.project_uuid = 'zzzzz-j7d0g-zzzzzzzzzzzzzzz'
24
25         final = mock.MagicMock()
26         col.return_value = final
27         readermock = mock.MagicMock()
28         reader.return_value = readermock
29
30         final_uuid = final.manifest_locator()
31         num_retries = runner.num_retries
32
33         cwlout = StringIO.StringIO()
34         openmock = mock.MagicMock()
35         final.open.return_value = openmock
36         openmock.__enter__.return_value = cwlout
37
38         _, runner.final_output_collection = runner.make_output_collection("Test output", "tag0,tag1,tag2", {
39             "foo": {
40                 "class": "File",
41                 "location": "keep:99999999999999999999999999999991+99/foo.txt",
42                 "size": 3,
43                 "basename": "foo.txt"
44             },
45             "bar": {
46                 "class": "File",
47                 "location": "keep:99999999999999999999999999999992+99/bar.txt",
48                 "basename": "baz.txt",
49                 "size": 4
50             }
51         })
52
53         final.copy.assert_has_calls([mock.call('bar.txt', 'baz.txt', overwrite=False, source_collection=readermock)])
54         final.copy.assert_has_calls([mock.call('foo.txt', 'foo.txt', overwrite=False, source_collection=readermock)])
55         final.save_new.assert_has_calls([mock.call(ensure_unique_name=True, name='Test output', owner_uuid='zzzzz-j7d0g-zzzzzzzzzzzzzzz')])
56         self.assertEqual("""{
57     "bar": {
58         "class": "File",
59         "location": "baz.txt",
60         "size": 4
61     },
62     "foo": {
63         "class": "File",
64         "location": "foo.txt",
65         "size": 3
66     }
67 }""", cwlout.getvalue())
68
69         self.assertIs(final, runner.final_output_collection)
70         self.assertIs(final_uuid, runner.final_output_collection.manifest_locator())
71         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)])
72         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)])
73         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)])