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 |