5 class TestJob(unittest.TestCase):
7 # The test passes no builder.resources
8 # Hence the default resources will apply: {'cores': 1, 'ram': 1024, 'outdirSize': 1024, 'tmpdirSize': 1024}
10 runner = mock.MagicMock()
11 runner.project_uuid = "zzzzz-8i9sb-zzzzzzzzzzzzzzz"
17 arvtool = arvados_cwl.ArvadosCommandTool(runner, tool)
18 arvtool.formatgraph = None
19 for j in arvtool.job({}, "", mock.MagicMock()):
21 runner.api.jobs().create.assert_called_with(body={
22 'owner_uuid': 'zzzzz-8i9sb-zzzzzzzzzzzzzzz',
23 'runtime_constraints': {},
24 'script_parameters': {
26 'task.env': {'TMPDIR': '$(task.tmpdir)'},
29 'crunchrunner': arvados_cwl.crunchrunner_pdh + '/crunchrunner'
31 'script_version': 'master',
32 'minimum_script_version': '9e5b98e8f5f4727856b53447191f9c06e3da2ba6',
33 'repository': 'arvados',
34 'script': 'crunchrunner',
35 'runtime_constraints': {
36 'min_cores_per_node': 1,
37 'min_ram_mb_per_node': 1024,
38 'min_scratch_mb_per_node': 2048 # tmpdirSize + outdirSize
40 }, find_or_create=True)
42 # The test passes some fields in builder.resources
43 # For the remaining fields, the defaults will apply: {'cores': 1, 'ram': 1024, 'outdirSize': 1024, 'tmpdirSize': 1024}
44 def test_resource_requirements(self):
45 runner = mock.MagicMock()
46 runner.project_uuid = "zzzzz-8i9sb-zzzzzzzzzzzzzzz"
51 "class": "ResourceRequirement",
58 arvtool = arvados_cwl.ArvadosCommandTool(runner, tool)
59 arvtool.formatgraph = None
60 for j in arvtool.job({}, "", mock.MagicMock()):
62 runner.api.jobs().create.assert_called_with(body={
63 'owner_uuid': 'zzzzz-8i9sb-zzzzzzzzzzzzzzz',
64 'runtime_constraints': {},
65 'script_parameters': {
67 'task.env': {'TMPDIR': '$(task.tmpdir)'},
70 'crunchrunner': arvados_cwl.crunchrunner_pdh + '/crunchrunner'
72 'script_version': 'master',
73 'minimum_script_version': '9e5b98e8f5f4727856b53447191f9c06e3da2ba6',
74 'repository': 'arvados',
75 'script': 'crunchrunner',
76 'runtime_constraints': {
77 'min_cores_per_node': 3,
78 'min_ram_mb_per_node': 3000,
79 'min_scratch_mb_per_node': 5024 # tmpdirSize + outdirSize
81 }, find_or_create=True)
83 @mock.patch("arvados.collection.Collection")
84 def test_done(self, col):
85 api = mock.MagicMock()
87 runner = mock.MagicMock()
89 runner.project_uuid = "zzzzz-8i9sb-zzzzzzzzzzzzzzz"
90 runner.num_retries = 0
92 col().open.return_value = []
93 api.collections().list().execute.side_effect = ({"items": []},
94 {"items": [{"manifest_text": "XYZ"}]})
96 arvjob = arvados_cwl.ArvadosJob(runner)
97 arvjob.name = "testjob"
98 arvjob.builder = mock.MagicMock()
99 arvjob.output_callback = mock.MagicMock()
100 arvjob.collect_outputs = mock.MagicMock()
104 "output": "99999999999999999999999999999993+99",
105 "log": "99999999999999999999999999999994+99",
106 "uuid": "zzzzz-8i9sb-zzzzzzzzzzzzzzz"
109 api.collections().list.assert_has_calls([
111 mock.call(filters=[['owner_uuid', '=', 'zzzzz-8i9sb-zzzzzzzzzzzzzzz'],
112 ['portable_data_hash', '=', '99999999999999999999999999999993+99'],
113 ['name', '=', 'Output 9999999 of testjob']]),
114 mock.call().execute(num_retries=0),
115 mock.call(limit=1, filters=[['portable_data_hash', '=', '99999999999999999999999999999993+99']],
116 select=['manifest_text']),
117 mock.call().execute(num_retries=0)])
119 api.collections().create.assert_called_with(
120 ensure_unique_name=True,
121 body={'portable_data_hash': '99999999999999999999999999999993+99',
122 'manifest_text': 'XYZ',
123 'owner_uuid': 'zzzzz-8i9sb-zzzzzzzzzzzzzzz',
124 'name': 'Output 9999999 of testjob'})
126 @mock.patch("arvados.collection.Collection")
127 def test_done_use_existing_collection(self, col):
128 api = mock.MagicMock()
130 runner = mock.MagicMock()
132 runner.project_uuid = "zzzzz-8i9sb-zzzzzzzzzzzzzzz"
133 runner.num_retries = 0
135 col().open.return_value = []
136 api.collections().list().execute.side_effect = ({"items": [{"uuid": "zzzzz-4zz18-zzzzzzzzzzzzzz2"}]},)
138 arvjob = arvados_cwl.ArvadosJob(runner)
139 arvjob.name = "testjob"
140 arvjob.builder = mock.MagicMock()
141 arvjob.output_callback = mock.MagicMock()
142 arvjob.collect_outputs = mock.MagicMock()
146 "output": "99999999999999999999999999999993+99",
147 "log": "99999999999999999999999999999994+99",
148 "uuid": "zzzzz-8i9sb-zzzzzzzzzzzzzzz"
151 api.collections().list.assert_has_calls([
153 mock.call(filters=[['owner_uuid', '=', 'zzzzz-8i9sb-zzzzzzzzzzzzzzz'],
154 ['portable_data_hash', '=', '99999999999999999999999999999993+99'],
155 ['name', '=', 'Output 9999999 of testjob']]),
156 mock.call().execute(num_retries=0)])
158 self.assertFalse(api.collections().create.called)