fune/taskcluster/taskgraph/test/test_actions_util.py
Dustin J. Mitchell a3cb68d009 Bug 1536722 - combine all taskgraph artifacts, not just task-graph; r=tomprince
This also adds an optimization for the case where there is only one result
(Which is common for actions where `times` defaults to 1)

Differential Revision: https://phabricator.services.mozilla.com/D28889

--HG--
extra : moz-landing-system : lando
2019-05-01 12:58:39 +00:00

89 lines
3.1 KiB
Python

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
from __future__ import absolute_import, print_function, unicode_literals
import unittest
import json
from mock import patch
from mozunit import main, MockedOpen
from taskgraph.decision import read_artifact
from taskgraph.actions.util import (
relativize_datestamps,
combine_task_graph_files,
)
TASK_DEF = {
'created': '2017-10-10T18:33:03.460Z',
# note that this is not an even number of seconds off!
'deadline': '2017-10-11T18:33:03.461Z',
'dependencies': [],
'expires': '2018-10-10T18:33:04.461Z',
'payload': {
'artifacts': {
'public': {
'expires': '2018-10-10T18:33:03.463Z',
'path': '/builds/worker/artifacts',
'type': 'directory',
},
},
'maxRunTime': 1800,
},
}
class TestRelativize(unittest.TestCase):
def test_relativize(self):
rel = relativize_datestamps(TASK_DEF)
import pprint
pprint.pprint(rel)
assert rel['created'] == {'relative-datestamp': '0 seconds'}
assert rel['deadline'] == {'relative-datestamp': '86400 seconds'}
assert rel['expires'] == {'relative-datestamp': '31536001 seconds'}
assert rel['payload']['artifacts']['public']['expires'] == \
{'relative-datestamp': '31536000 seconds'}
class TestCombineTaskGraphFiles(unittest.TestCase):
def test_no_suffixes(self):
with MockedOpen({}):
combine_task_graph_files([])
self.assertRaises(Exception, open('artifacts/to-run.json'))
@patch('taskgraph.actions.util.rename_artifact')
def test_one_suffix(self, rename_artifact):
combine_task_graph_files(['0'])
rename_artifact.assert_any_call('task-graph-0.json', 'task-graph.json')
rename_artifact.assert_any_call('label-to-taskid-0.json', 'label-to-taskid.json')
rename_artifact.assert_any_call('to-run-0.json', 'to-run.json')
def test_several_suffixes(self):
files = {
'artifacts/task-graph-0.json': json.dumps({'taska': {}}),
'artifacts/label-to-taskid-0.json': json.dumps({'taska': 'TASKA'}),
'artifacts/to-run-0.json': json.dumps(['taska']),
'artifacts/task-graph-1.json': json.dumps({'taskb': {}}),
'artifacts/label-to-taskid-1.json': json.dumps({'taskb': 'TASKB'}),
'artifacts/to-run-1.json': json.dumps(['taskb']),
}
with MockedOpen(files):
combine_task_graph_files(['0', '1'])
self.assertEqual(read_artifact('task-graph.json'), {
'taska': {},
'taskb': {},
})
self.assertEqual(read_artifact('label-to-taskid.json'), {
'taska': 'TASKA',
'taskb': 'TASKB',
})
self.assertEqual(sorted(read_artifact('to-run.json')), [
'taska',
'taskb',
])
if __name__ == '__main__':
main()