Merge branch 'master' into 10172-crunch2-container-output
[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
12 class TestMakeOutput(unittest.TestCase):
13     def setUp(self):
14         self.api = mock.MagicMock()
15         self.api._rootDesc = arvados.api('v1')._rootDesc
16
17     @mock.patch("arvados.collection.Collection")
18     @mock.patch("arvados.collection.CollectionReader")
19     def test_make_output_collection(self, reader, col):
20         keep_client = mock.MagicMock()
21         runner = arvados_cwl.ArvCwlRunner(self.api, keep_client=keep_client)
22         runner.project_uuid = 'zzzzz-j7d0g-zzzzzzzzzzzzzzz'
23
24         final = mock.MagicMock()
25         col.return_value = final
26         readermock = mock.MagicMock()
27         reader.return_value = readermock
28
29         cwlout = StringIO.StringIO()
30         openmock = mock.MagicMock()
31         final.open.return_value = openmock
32         openmock.__enter__.return_value = cwlout
33
34         runner.make_output_collection("Test output", {
35             "foo": {
36                 "class": "File",
37                 "location": "keep:99999999999999999999999999999991+99/foo.txt",
38                 "size": 3,
39                 "basename": "foo.txt"
40             },
41             "bar": {
42                 "class": "File",
43                 "location": "keep:99999999999999999999999999999992+99/bar.txt",
44                 "basename": "baz.txt"
45             }
46         })
47
48         final.copy.assert_has_calls([mock.call('bar.txt', 'baz.txt', overwrite=False, source_collection=readermock)])
49         final.copy.assert_has_calls([mock.call('foo.txt', 'foo.txt', overwrite=False, source_collection=readermock)])
50         final.save_new.assert_has_calls([mock.call(ensure_unique_name=True, name='Test output', owner_uuid='zzzzz-j7d0g-zzzzzzzzzzzzzzz')])
51         self.assertEqual("""{
52     "bar": {
53         "class": "File",
54         "location": "baz.txt"
55     },
56     "foo": {
57         "class": "File",
58         "location": "foo.txt"
59     }
60 }""", cwlout.getvalue())
61
62         self.assertIs(final, runner.final_output_collection)