Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 # Use of this source code is governed by a BSD-style license that can be | |
| 3 # found in the LICENSE file. | |
| 4 | |
| 5 import mock | |
| 6 import unittest | |
| 7 | |
| 8 from infra.tools.builder_alerts import gatekeeper_extras | |
| 9 | |
| 10 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.
| |
| 11 def patch(self, target, new): | |
| 12 patcher = mock.patch(target, new) | |
| 13 patcher.start() | |
| 14 self.addCleanup(patcher.stop) | |
| 15 | |
| 16 def test_excluded_builders(self): | |
| 17 self.assertEqual(gatekeeper_extras.excluded_builders([{}]), set()) | |
| 18 self.assertEqual(gatekeeper_extras.excluded_builders([{'*': {}}]), set()) | |
| 19 self.assertEqual( | |
| 20 gatekeeper_extras.excluded_builders( | |
| 21 [{'*': { | |
| 22 'excluded_builders': set(['test_builder1', 'test_builder2']) | |
| 23 }}]), | |
| 24 set(['test_builder1', 'test_builder2'])) | |
| 25 | |
| 26 def test_apply_gatekeeper_rules(self): | |
| 27 self.patch('infra.tools.builder_alerts.gatekeeper_extras.excluded_builders', | |
| 28 lambda config: ['Ignored']) | |
| 29 self.patch('infra.tools.builder_alerts.gatekeeper_extras.would_close_tree', | |
| 30 lambda config, builder, step: True) | |
| 31 self.patch('infra.tools.builder_alerts.gatekeeper_extras.tree_for_master', | |
| 32 lambda master_url, trees_config: 'test-tree') | |
| 33 | |
| 34 gatekeeper_cfg = {'http://build.chromium.org/p/chromium': {'key': 'value'}} | |
| 35 gatekeeper_trees_cfg = {} | |
| 36 alerts = [ | |
| 37 {'master_url': 'http://build.chromium.org/p/project.without.config', | |
| 38 'builder_name': 'Linux', | |
| 39 'step_name': 'test_xyz'}, | |
| 40 {'master_url': 'http://build.chromium.org/p/chromium', | |
| 41 'builder_name': 'Ignored', | |
| 42 'step_name': 'bot_update'}, | |
| 43 {'master_url': 'http://build.chromium.org/p/chromium', | |
| 44 'builder_name': 'Win', | |
| 45 'step_name': 'bot_update'} | |
| 46 ] | |
| 47 | |
| 48 filtered_alerts = gatekeeper_extras.apply_gatekeeper_rules( | |
| 49 alerts, gatekeeper_cfg, gatekeeper_trees_cfg) | |
| 50 | |
| 51 self.assertEqual(len(filtered_alerts), 2) | |
| 52 self.assertIn({'master_url': 'http://build.chromium.org/p/chromium', | |
| 53 'builder_name': 'Win', | |
| 54 'step_name': 'bot_update', | |
| 55 'would_close_tree': True, | |
| 56 'tree': 'test-tree'}, filtered_alerts) | |
| 57 self.assertIn( | |
| 58 {'master_url': 'http://build.chromium.org/p/project.without.config', | |
| 59 'builder_name': 'Linux', | |
| 60 'step_name': 'test_xyz'}, | |
| 61 filtered_alerts) | |
| 62 | |
| 63 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.
| |
| 64 master_name_from_url = mock.patch( | |
| 65 'infra.tools.builder_alerts.buildbot.master_name_from_url', | |
| 66 lambda url: url.split('/')[-1]) | |
| 67 master_name_from_url.start() | |
| 68 self.addCleanup(master_name_from_url.stop) | |
| 69 | |
| 70 gatekeeper_trees = { | |
| 71 "blink": { | |
| 72 "build-db": "blink_build_db.json", | |
| 73 "masters": [ | |
| 74 "https://build.chromium.org/p/chromium.webkit" | |
| 75 ], | |
| 76 "open-tree": True, | |
| 77 "password-file": ".blink_status_password", | |
| 78 "revision-properties": "got_revision_cp,got_webkit_revision_cp", | |
| 79 "set-status": True, | |
| 80 "status-url": "https://blink-status.appspot.com", | |
| 81 "track-revisions": True | |
| 82 }, | |
| 83 "chromium": { | |
| 84 "build-db": "waterfall_build_db.json", | |
| 85 "masters": [ | |
| 86 "https://build.chromium.org/p/chromium", | |
| 87 "https://build.chromium.org/p/chromium.chrome", | |
| 88 "https://build.chromium.org/p/chromium.chromiumos", | |
| 89 "https://build.chromium.org/p/chromium.gpu", | |
| 90 "https://build.chromium.org/p/chromium.linux", | |
| 91 "https://build.chromium.org/p/chromium.mac", | |
| 92 "https://build.chromium.org/p/chromium.memory", | |
| 93 "https://build.chromium.org/p/chromium.win" | |
| 94 ], | |
| 95 "open-tree": True, | |
| 96 "password-file": ".status_password", | |
| 97 "revision-properties": "got_revision_cp", | |
| 98 "set-status": True, | |
| 99 "status-url": "https://chromium-status.appspot.com", | |
| 100 "track-revisions": True | |
| 101 }, | |
| 102 "non-closers": { | |
| 103 "masters": [ | |
| 104 "https://build.chromium.org/p/chromium.lkgr", | |
| 105 "https://build.chromium.org/p/chromium.perf", | |
| 106 "https://build.chromium.org/p/client.libvpx" | |
| 107 ] | |
| 108 } | |
| 109 } | |
| 110 | |
| 111 self.assertEqual('chromium', gatekeeper_extras.tree_for_master( | |
| 112 'https://build.chromium.org/p/chromium.gpu', gatekeeper_trees)) | |
| 113 self.assertEqual('blink', gatekeeper_extras.tree_for_master( | |
| 114 'https://build.chromium.org/p/chromium.webkit', gatekeeper_trees)) | |
| 115 self.assertEqual('non-closers', gatekeeper_extras.tree_for_master( | |
| 116 'https://build.chromium.org/p/chromium.lkgr', gatekeeper_trees)) | |
| 117 self.assertEqual('foo.bar', gatekeeper_extras.tree_for_master( | |
| 118 'https://build.chromium.org/p/foo.bar', gatekeeper_trees)) | |
| 119 | |
| 120 def test_fetch_master_urls(self): | |
| 121 class MockArgs: | |
| 122 def __init__(self, master_filter): | |
| 123 self.master_filter = master_filter | |
| 124 | |
| 125 gatekeeper = {'test_master1': {}, 'test_master2': {}, 'filtered_master': {}} | |
| 126 self.assertEqual( | |
| 127 set(gatekeeper_extras.fetch_master_urls(gatekeeper, | |
| 128 MockArgs('filtered'))), | |
| 129 set(['test_master1', 'test_master2'])) | |
| 130 self.assertEqual( | |
| 131 set(gatekeeper_extras.fetch_master_urls(gatekeeper, MockArgs(None))), | |
| 132 set(['test_master1', 'test_master2', 'filtered_master'])) | |
| 133 | |
| 134 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.
| |
| 135 self.assertFalse(gatekeeper_extras.would_close_tree( | |
| 136 [{'*': {'close_tree': False}}], None, 'test_step')) | |
| 137 self.assertFalse(gatekeeper_extras.would_close_tree( | |
| 138 [{'test_builder': {'excluded_steps': ['test_step']}}], | |
| 139 'test_builder', 'test_step')) | |
| 140 self.assertFalse(gatekeeper_extras.would_close_tree( | |
| 141 [{'test_builder': {'closing_steps': set(['other_step'])}}], | |
| 142 'test_builder', 'test_step')) | |
| 143 self.assertFalse(gatekeeper_extras.would_close_tree( | |
| 144 [{'test_builder': {}}], 'test_builder', 'test_step')) | |
| 145 self.assertTrue(gatekeeper_extras.would_close_tree( | |
| 146 [{'test_builder': {'closing_steps': set(['test_step'])}}], | |
| 147 'test_builder', 'test_step')) | |
| 148 self.assertTrue(gatekeeper_extras.would_close_tree( | |
| 149 [{'test_builder': {'closing_steps': set(['*'])}}], | |
| 150 'test_builder', 'test_step')) | |
| 151 | |
| 152 | |
| 153 if __name__ == '__main__': | |
| 154 unittest.main() | |
| OLD | NEW |