forked from mirrors/gecko-dev
		
	Differential Revision: https://phabricator.services.mozilla.com/D20048 --HG-- extra : moz-landing-system : lando
		
			
				
	
	
		
			99 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
	
		
			3.6 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 os
 | 
						|
import mock
 | 
						|
 | 
						|
from taskgraph import create
 | 
						|
from taskgraph.config import GraphConfig
 | 
						|
from taskgraph.graph import Graph
 | 
						|
from taskgraph.taskgraph import TaskGraph
 | 
						|
from taskgraph.task import Task
 | 
						|
 | 
						|
from mozunit import main
 | 
						|
 | 
						|
GRAPH_CONFIG = GraphConfig({'trust-domain': 'domain'}, '/var/empty')
 | 
						|
 | 
						|
 | 
						|
class TestCreate(unittest.TestCase):
 | 
						|
 | 
						|
    def setUp(self):
 | 
						|
        self.old_task_id = os.environ.get('TASK_ID')
 | 
						|
        if 'TASK_ID' in os.environ:
 | 
						|
            del os.environ['TASK_ID']
 | 
						|
        self.created_tasks = {}
 | 
						|
        self.old_create_task = create.create_task
 | 
						|
        create.create_task = self.fake_create_task
 | 
						|
 | 
						|
    def tearDown(self):
 | 
						|
        create.create_task = self.old_create_task
 | 
						|
        if self.old_task_id:
 | 
						|
            os.environ['TASK_ID'] = self.old_task_id
 | 
						|
        elif 'TASK_ID' in os.environ:
 | 
						|
            del os.environ['TASK_ID']
 | 
						|
 | 
						|
    def fake_create_task(self, session, task_id, label, task_def):
 | 
						|
        self.created_tasks[task_id] = task_def
 | 
						|
 | 
						|
    def test_create_tasks(self):
 | 
						|
        tasks = {
 | 
						|
            'tid-a': Task(kind='test', label='a', attributes={}, task={'payload': 'hello world'}),
 | 
						|
            'tid-b': Task(kind='test', label='b', attributes={}, task={'payload': 'hello world'}),
 | 
						|
        }
 | 
						|
        label_to_taskid = {'a': 'tid-a', 'b': 'tid-b'}
 | 
						|
        graph = Graph(nodes={'tid-a', 'tid-b'}, edges={('tid-a', 'tid-b', 'edge')})
 | 
						|
        taskgraph = TaskGraph(tasks, graph)
 | 
						|
 | 
						|
        create.create_tasks(GRAPH_CONFIG, taskgraph, label_to_taskid, {'level': '4'})
 | 
						|
 | 
						|
        for tid, task in self.created_tasks.iteritems():
 | 
						|
            self.assertEqual(task['payload'], 'hello world')
 | 
						|
            self.assertEqual(task['schedulerId'], 'domain-level-4')
 | 
						|
            # make sure the dependencies exist, at least
 | 
						|
            for depid in task.get('dependencies', []):
 | 
						|
                if depid is 'decisiontask':
 | 
						|
                    # Don't look for decisiontask here
 | 
						|
                    continue
 | 
						|
                self.assertIn(depid, self.created_tasks)
 | 
						|
 | 
						|
    def test_create_task_without_dependencies(self):
 | 
						|
        "a task with no dependencies depends on the decision task"
 | 
						|
        os.environ['TASK_ID'] = 'decisiontask'
 | 
						|
        tasks = {
 | 
						|
            'tid-a': Task(kind='test', label='a', attributes={}, task={'payload': 'hello world'}),
 | 
						|
        }
 | 
						|
        label_to_taskid = {'a': 'tid-a'}
 | 
						|
        graph = Graph(nodes={'tid-a'}, edges=set())
 | 
						|
        taskgraph = TaskGraph(tasks, graph)
 | 
						|
 | 
						|
        create.create_tasks(GRAPH_CONFIG, taskgraph, label_to_taskid, {'level': '4'})
 | 
						|
 | 
						|
        for tid, task in self.created_tasks.iteritems():
 | 
						|
            self.assertEqual(task.get('dependencies'), [os.environ['TASK_ID']])
 | 
						|
 | 
						|
    @mock.patch('taskgraph.create.create_task')
 | 
						|
    def test_create_tasks_fails_if_create_fails(self, create_task):
 | 
						|
        "creat_tasks fails if a single create_task call fails"
 | 
						|
        os.environ['TASK_ID'] = 'decisiontask'
 | 
						|
        tasks = {
 | 
						|
            'tid-a': Task(kind='test', label='a', attributes={}, task={'payload': 'hello world'}),
 | 
						|
        }
 | 
						|
        label_to_taskid = {'a': 'tid-a'}
 | 
						|
        graph = Graph(nodes={'tid-a'}, edges=set())
 | 
						|
        taskgraph = TaskGraph(tasks, graph)
 | 
						|
 | 
						|
        def fail(*args):
 | 
						|
            print("UHOH")
 | 
						|
            raise RuntimeError('oh noes!')
 | 
						|
        create_task.side_effect = fail
 | 
						|
 | 
						|
        with self.assertRaises(RuntimeError):
 | 
						|
            create.create_tasks(GRAPH_CONFIG, taskgraph, label_to_taskid, {'level': '4'})
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    main()
 |