mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-20 16:55:40 +00:00
a56878376d
Differential Revision: https://phabricator.services.mozilla.com/D19791 --HG-- extra : moz-landing-system : lando
103 lines
3.3 KiB
Python
103 lines
3.3 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
|
|
|
|
from taskgraph.graph import Graph
|
|
from taskgraph.task import Task
|
|
from taskgraph.taskgraph import TaskGraph
|
|
from mozunit import main
|
|
|
|
|
|
class TestTaskGraph(unittest.TestCase):
|
|
|
|
maxDiff = None
|
|
|
|
def test_taskgraph_to_json(self):
|
|
tasks = {
|
|
'a': Task(kind='test', label='a',
|
|
attributes={'attr': 'a-task'},
|
|
task={'taskdef': True}),
|
|
'b': Task(kind='test', label='b',
|
|
attributes={},
|
|
task={'task': 'def'},
|
|
optimization={'seta': None},
|
|
# note that this dep is ignored, superseded by that
|
|
# from the taskgraph's edges
|
|
dependencies={'first': 'a'}),
|
|
}
|
|
graph = Graph(nodes=set('ab'), edges={('a', 'b', 'edgelabel')})
|
|
taskgraph = TaskGraph(tasks, graph)
|
|
|
|
res = taskgraph.to_json()
|
|
|
|
self.assertEqual(res, {
|
|
'a': {
|
|
'kind': 'test',
|
|
'label': 'a',
|
|
'attributes': {'attr': 'a-task', 'kind': 'test'},
|
|
'task': {'taskdef': True},
|
|
'dependencies': {'edgelabel': 'b'},
|
|
'soft_dependencies': [],
|
|
'optimization': None,
|
|
},
|
|
'b': {
|
|
'kind': 'test',
|
|
'label': 'b',
|
|
'attributes': {'kind': 'test'},
|
|
'task': {'task': 'def'},
|
|
'dependencies': {},
|
|
'soft_dependencies': [],
|
|
'optimization': {'seta': None},
|
|
}
|
|
})
|
|
|
|
def test_round_trip(self):
|
|
graph = TaskGraph(tasks={
|
|
'a': Task(
|
|
kind='fancy',
|
|
label='a',
|
|
attributes={},
|
|
dependencies={'prereq': 'b'}, # must match edges, below
|
|
optimization={'seta': None},
|
|
task={'task': 'def'}),
|
|
'b': Task(
|
|
kind='pre',
|
|
label='b',
|
|
attributes={},
|
|
dependencies={},
|
|
optimization={'seta': None},
|
|
task={'task': 'def2'}),
|
|
}, graph=Graph(nodes={'a', 'b'}, edges={('a', 'b', 'prereq')}))
|
|
|
|
tasks, new_graph = TaskGraph.from_json(graph.to_json())
|
|
self.assertEqual(graph, new_graph)
|
|
|
|
simple_graph = TaskGraph(tasks={
|
|
'a': Task(
|
|
kind='fancy',
|
|
label='a',
|
|
attributes={},
|
|
dependencies={'prereq': 'b'}, # must match edges, below
|
|
optimization={'seta': None},
|
|
task={'task': 'def'}),
|
|
'b': Task(
|
|
kind='pre',
|
|
label='b',
|
|
attributes={},
|
|
dependencies={},
|
|
optimization={'seta': None},
|
|
task={'task': 'def2'}),
|
|
}, graph=Graph(nodes={'a', 'b'}, edges={('a', 'b', 'prereq')}))
|
|
|
|
def test_contains(self):
|
|
assert 'a' in self.simple_graph
|
|
assert 'c' not in self.simple_graph
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|