diff options
Diffstat (limited to 'taskcluster/taskgraph/test/test_target_tasks.py')
-rw-r--r-- | taskcluster/taskgraph/test/test_target_tasks.py | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/taskcluster/taskgraph/test/test_target_tasks.py b/taskcluster/taskgraph/test/test_target_tasks.py new file mode 100644 index 000000000..035ccefd8 --- /dev/null +++ b/taskcluster/taskgraph/test/test_target_tasks.py @@ -0,0 +1,81 @@ +# 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 .. import target_tasks +from .. import try_option_syntax +from ..graph import Graph +from ..taskgraph import TaskGraph +from .util import TestTask +from mozunit import main + + +class FakeTryOptionSyntax(object): + + def __init__(self, message, task_graph): + self.trigger_tests = 0 + self.notifications = None + + def task_matches(self, attributes): + return 'at-at' in attributes + + +class TestTargetTasks(unittest.TestCase): + + def default_matches(self, run_on_projects, project): + method = target_tasks.get_method('default') + graph = TaskGraph(tasks={ + 'a': TestTask(kind='build', label='a', + attributes={'run_on_projects': run_on_projects}), + }, graph=Graph(nodes={'a'}, edges=set())) + parameters = {'project': project} + return 'a' in method(graph, parameters) + + def test_default_all(self): + """run_on_projects=[all] includes release, integration, and other projects""" + self.assertTrue(self.default_matches(['all'], 'mozilla-central')) + self.assertTrue(self.default_matches(['all'], 'mozilla-inbound')) + self.assertTrue(self.default_matches(['all'], 'mozilla-aurora')) + self.assertTrue(self.default_matches(['all'], 'baobab')) + + def test_default_integration(self): + """run_on_projects=[integration] includes integration projects""" + self.assertFalse(self.default_matches(['integration'], 'mozilla-central')) + self.assertTrue(self.default_matches(['integration'], 'mozilla-inbound')) + self.assertFalse(self.default_matches(['integration'], 'baobab')) + + def test_default_relesae(self): + """run_on_projects=[release] includes release projects""" + self.assertTrue(self.default_matches(['release'], 'mozilla-central')) + self.assertFalse(self.default_matches(['release'], 'mozilla-inbound')) + self.assertFalse(self.default_matches(['release'], 'baobab')) + + def test_default_nothing(self): + """run_on_projects=[] includes nothing""" + self.assertFalse(self.default_matches([], 'mozilla-central')) + self.assertFalse(self.default_matches([], 'mozilla-inbound')) + self.assertFalse(self.default_matches([], 'baobab')) + + def test_try_option_syntax(self): + tasks = { + 'a': TestTask(kind=None, label='a'), + 'b': TestTask(kind=None, label='b', attributes={'at-at': 'yep'}), + } + graph = Graph(nodes=set('ab'), edges=set()) + tg = TaskGraph(tasks, graph) + params = {'message': 'try me'} + + orig_TryOptionSyntax = try_option_syntax.TryOptionSyntax + try: + try_option_syntax.TryOptionSyntax = FakeTryOptionSyntax + method = target_tasks.get_method('try_option_syntax') + self.assertEqual(method(tg, params), ['b']) + finally: + try_option_syntax.TryOptionSyntax = orig_TryOptionSyntax + +if __name__ == '__main__': + main() |