forked from mirrors/gecko-dev
		
	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
		
			
				
	
	
		
			89 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			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()
 |