Chromium Code Reviews| Index: infra/tools/builder_alerts/test/gatekeeper_extras_test.py |
| diff --git a/infra/tools/builder_alerts/test/gatekeeper_extras_test.py b/infra/tools/builder_alerts/test/gatekeeper_extras_test.py |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..5889be8bf62d7db46f4c0bec99e17468d3229fd4 |
| --- /dev/null |
| +++ b/infra/tools/builder_alerts/test/gatekeeper_extras_test.py |
| @@ -0,0 +1,154 @@ |
| +# Copyright 2014 The Chromium Authors. All rights reserved. |
| +# Use of this source code is governed by a BSD-style license that can be |
| +# found in the LICENSE file. |
| + |
| +import mock |
| +import unittest |
| + |
| +from infra.tools.builder_alerts import gatekeeper_extras |
| + |
| +class GatekeeperExtrasTest(unittest.TestCase): |
|
tandrii(chromium)
2014/09/04 14:21:06
nit: PEP8 two lines before top-level classes?
Sergiy Byelozyorov
2014/09/05 12:59:07
Done.
|
| + def patch(self, target, new): |
| + patcher = mock.patch(target, new) |
| + patcher.start() |
| + self.addCleanup(patcher.stop) |
| + |
| + def test_excluded_builders(self): |
| + self.assertEqual(gatekeeper_extras.excluded_builders([{}]), set()) |
| + self.assertEqual(gatekeeper_extras.excluded_builders([{'*': {}}]), set()) |
| + self.assertEqual( |
| + gatekeeper_extras.excluded_builders( |
| + [{'*': { |
| + 'excluded_builders': set(['test_builder1', 'test_builder2']) |
| + }}]), |
| + set(['test_builder1', 'test_builder2'])) |
| + |
| + def test_apply_gatekeeper_rules(self): |
| + self.patch('infra.tools.builder_alerts.gatekeeper_extras.excluded_builders', |
| + lambda config: ['Ignored']) |
| + self.patch('infra.tools.builder_alerts.gatekeeper_extras.would_close_tree', |
| + lambda config, builder, step: True) |
| + self.patch('infra.tools.builder_alerts.gatekeeper_extras.tree_for_master', |
| + lambda master_url, trees_config: 'test-tree') |
| + |
| + gatekeeper_cfg = {'http://build.chromium.org/p/chromium': {'key': 'value'}} |
| + gatekeeper_trees_cfg = {} |
| + alerts = [ |
| + {'master_url': 'http://build.chromium.org/p/project.without.config', |
| + 'builder_name': 'Linux', |
| + 'step_name': 'test_xyz'}, |
| + {'master_url': 'http://build.chromium.org/p/chromium', |
| + 'builder_name': 'Ignored', |
| + 'step_name': 'bot_update'}, |
| + {'master_url': 'http://build.chromium.org/p/chromium', |
| + 'builder_name': 'Win', |
| + 'step_name': 'bot_update'} |
| + ] |
| + |
| + filtered_alerts = gatekeeper_extras.apply_gatekeeper_rules( |
| + alerts, gatekeeper_cfg, gatekeeper_trees_cfg) |
| + |
| + self.assertEqual(len(filtered_alerts), 2) |
| + self.assertIn({'master_url': 'http://build.chromium.org/p/chromium', |
| + 'builder_name': 'Win', |
| + 'step_name': 'bot_update', |
| + 'would_close_tree': True, |
| + 'tree': 'test-tree'}, filtered_alerts) |
| + self.assertIn( |
| + {'master_url': 'http://build.chromium.org/p/project.without.config', |
| + 'builder_name': 'Linux', |
| + 'step_name': 'test_xyz'}, |
| + filtered_alerts) |
| + |
| + def test_tree_for_master(self): |
|
agable
2014/09/04 14:22:31
I think this test would be better served by breaki
Sergiy Byelozyorov
2014/09/05 12:59:07
Done.
|
| + master_name_from_url = mock.patch( |
| + 'infra.tools.builder_alerts.buildbot.master_name_from_url', |
| + lambda url: url.split('/')[-1]) |
| + master_name_from_url.start() |
| + self.addCleanup(master_name_from_url.stop) |
| + |
| + gatekeeper_trees = { |
| + "blink": { |
| + "build-db": "blink_build_db.json", |
| + "masters": [ |
| + "https://build.chromium.org/p/chromium.webkit" |
| + ], |
| + "open-tree": True, |
| + "password-file": ".blink_status_password", |
| + "revision-properties": "got_revision_cp,got_webkit_revision_cp", |
| + "set-status": True, |
| + "status-url": "https://blink-status.appspot.com", |
| + "track-revisions": True |
| + }, |
| + "chromium": { |
| + "build-db": "waterfall_build_db.json", |
| + "masters": [ |
| + "https://build.chromium.org/p/chromium", |
| + "https://build.chromium.org/p/chromium.chrome", |
| + "https://build.chromium.org/p/chromium.chromiumos", |
| + "https://build.chromium.org/p/chromium.gpu", |
| + "https://build.chromium.org/p/chromium.linux", |
| + "https://build.chromium.org/p/chromium.mac", |
| + "https://build.chromium.org/p/chromium.memory", |
| + "https://build.chromium.org/p/chromium.win" |
| + ], |
| + "open-tree": True, |
| + "password-file": ".status_password", |
| + "revision-properties": "got_revision_cp", |
| + "set-status": True, |
| + "status-url": "https://chromium-status.appspot.com", |
| + "track-revisions": True |
| + }, |
| + "non-closers": { |
| + "masters": [ |
| + "https://build.chromium.org/p/chromium.lkgr", |
| + "https://build.chromium.org/p/chromium.perf", |
| + "https://build.chromium.org/p/client.libvpx" |
| + ] |
| + } |
| + } |
| + |
| + self.assertEqual('chromium', gatekeeper_extras.tree_for_master( |
| + 'https://build.chromium.org/p/chromium.gpu', gatekeeper_trees)) |
| + self.assertEqual('blink', gatekeeper_extras.tree_for_master( |
| + 'https://build.chromium.org/p/chromium.webkit', gatekeeper_trees)) |
| + self.assertEqual('non-closers', gatekeeper_extras.tree_for_master( |
| + 'https://build.chromium.org/p/chromium.lkgr', gatekeeper_trees)) |
| + self.assertEqual('foo.bar', gatekeeper_extras.tree_for_master( |
| + 'https://build.chromium.org/p/foo.bar', gatekeeper_trees)) |
| + |
| + def test_fetch_master_urls(self): |
| + class MockArgs: |
| + def __init__(self, master_filter): |
| + self.master_filter = master_filter |
| + |
| + gatekeeper = {'test_master1': {}, 'test_master2': {}, 'filtered_master': {}} |
| + self.assertEqual( |
| + set(gatekeeper_extras.fetch_master_urls(gatekeeper, |
| + MockArgs('filtered'))), |
| + set(['test_master1', 'test_master2'])) |
| + self.assertEqual( |
| + set(gatekeeper_extras.fetch_master_urls(gatekeeper, MockArgs(None))), |
| + set(['test_master1', 'test_master2', 'filtered_master'])) |
| + |
| + def test_would_close_tree(self): |
|
agable
2014/09/04 14:22:31
This should definitely be broken into multiple tes
Sergiy Byelozyorov
2014/09/05 12:59:07
Done.
|
| + self.assertFalse(gatekeeper_extras.would_close_tree( |
| + [{'*': {'close_tree': False}}], None, 'test_step')) |
| + self.assertFalse(gatekeeper_extras.would_close_tree( |
| + [{'test_builder': {'excluded_steps': ['test_step']}}], |
| + 'test_builder', 'test_step')) |
| + self.assertFalse(gatekeeper_extras.would_close_tree( |
| + [{'test_builder': {'closing_steps': set(['other_step'])}}], |
| + 'test_builder', 'test_step')) |
| + self.assertFalse(gatekeeper_extras.would_close_tree( |
| + [{'test_builder': {}}], 'test_builder', 'test_step')) |
| + self.assertTrue(gatekeeper_extras.would_close_tree( |
| + [{'test_builder': {'closing_steps': set(['test_step'])}}], |
| + 'test_builder', 'test_step')) |
| + self.assertTrue(gatekeeper_extras.would_close_tree( |
| + [{'test_builder': {'closing_steps': set(['*'])}}], |
| + 'test_builder', 'test_step')) |
| + |
| + |
| +if __name__ == '__main__': |
| + unittest.main() |