Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(631)

Side by Side Diff: infra/tools/builder_alerts/test/gatekeeper_extras_test.py

Issue 508873005: Reimplemented tree_for_master, which now uses gatekeeper config files to map master URLs to the tre… (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Rebase Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698