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

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: Dummy 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
« no previous file with comments | « infra/tools/builder_alerts/gatekeeper_extras.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
11 class GatekeeperExtrasTest(unittest.TestCase):
12 def test_excluded_builders(self):
13 self.assertEqual(gatekeeper_extras.excluded_builders([{}]), set())
14 self.assertEqual(gatekeeper_extras.excluded_builders([{'*': {}}]), set())
15 self.assertEqual(
16 gatekeeper_extras.excluded_builders(
17 [{'*': {
18 'excluded_builders': set(['test_builder1', 'test_builder2'])
19 }}]),
20 set(['test_builder1', 'test_builder2']))
21
22 @mock.patch('infra.tools.builder_alerts.gatekeeper_extras.excluded_builders',
23 lambda config: ['Ignored'])
24 @mock.patch('infra.tools.builder_alerts.gatekeeper_extras.would_close_tree',
25 lambda config, builder, step: True)
26 @mock.patch('infra.tools.builder_alerts.gatekeeper_extras.tree_for_master',
27 lambda master_url, trees_config: 'test-tree')
28 def test_apply_gatekeeper_rules(self):
29 gatekeeper_cfg = {'http://build.chromium.org/p/chromium': {'key': 'value'}}
30 gatekeeper_trees_cfg = {}
31 alerts = [
32 {'master_url': 'http://build.chromium.org/p/project.without.config',
33 'builder_name': 'Linux',
34 'step_name': 'test_xyz'},
35 {'master_url': 'http://build.chromium.org/p/chromium',
36 'builder_name': 'Ignored',
37 'step_name': 'bot_update'},
38 {'master_url': 'http://build.chromium.org/p/chromium',
39 'builder_name': 'Win',
40 'step_name': 'bot_update'}
41 ]
42
43 filtered_alerts = gatekeeper_extras.apply_gatekeeper_rules(
44 alerts, gatekeeper_cfg, gatekeeper_trees_cfg)
45
46 self.assertEqual(len(filtered_alerts), 2)
47 self.assertIn({'master_url': 'http://build.chromium.org/p/chromium',
48 'builder_name': 'Win',
49 'step_name': 'bot_update',
50 'would_close_tree': True,
51 'tree': 'test-tree'}, filtered_alerts)
52 self.assertIn(
53 {'master_url': 'http://build.chromium.org/p/project.without.config',
54 'builder_name': 'Linux',
55 'step_name': 'test_xyz'},
56 filtered_alerts)
57
58 def test_tree_for_master_returns_tree_name(self):
59 gatekeeper_trees = {
60 "blink": { "masters": [
61 "https://build.chromium.org/p/chromium.webkit"
62 ]},
63 "chromium": { "masters": [
64 "https://build.chromium.org/p/chromium.linux",
65 "https://build.chromium.org/p/chromium.gpu",
66 ]},
67 "non-closers": { "masters": [
68 "https://build.chromium.org/p/chromium.lkgr",
69 ]}
70 }
71
72 self.assertEqual('chromium', gatekeeper_extras.tree_for_master(
73 'https://build.chromium.org/p/chromium.gpu', gatekeeper_trees))
74 self.assertEqual('blink', gatekeeper_extras.tree_for_master(
75 'https://build.chromium.org/p/chromium.webkit', gatekeeper_trees))
76 self.assertEqual('non-closers', gatekeeper_extras.tree_for_master(
77 'https://build.chromium.org/p/chromium.lkgr', gatekeeper_trees))
78
79 @mock.patch( # pragma: no cover (decorators are run before coverage is loaded)
80 'infra.tools.builder_alerts.buildbot.master_name_from_url',
81 lambda url: 'foo.bar')
82 def test_tree_for_master_falls_back_to_master_name(self):
83 self.assertEqual('foo.bar', gatekeeper_extras.tree_for_master(
84 'https://build.chromium.org/p/foo.bar', {}))
85
86 def test_fetch_master_urls(self):
87 class MockArgs:
88 def __init__(self, master_filter):
89 self.master_filter = master_filter
90
91 gatekeeper = {'test_master1': {}, 'test_master2': {}, 'filtered_master': {}}
92 self.assertEqual(
93 set(gatekeeper_extras.fetch_master_urls(gatekeeper,
94 MockArgs('filtered'))),
95 set(['test_master1', 'test_master2']))
96 self.assertEqual(
97 set(gatekeeper_extras.fetch_master_urls(gatekeeper, MockArgs(None))),
98 set(['test_master1', 'test_master2', 'filtered_master']))
99
100 def test_would_close_tree_uses_asterisk_builder_config(self):
101 self.assertFalse(gatekeeper_extras.would_close_tree(
102 [{'*': {'close_tree': False}}], None, 'test_step'))
103 self.assertTrue(gatekeeper_extras.would_close_tree(
104 [{'*': {'closing_steps': set(['*'])}}], None, 'test_step'))
105
106 def test_would_close_tree_respects_close_tree_flag_field(self):
107 self.assertFalse(gatekeeper_extras.would_close_tree(
108 [{'test_builder': {'close_tree': False}}], 'test_builder', 'test_step'))
109
110 def test_would_close_tree_respects_excluded_steps_field(self):
111 self.assertFalse(gatekeeper_extras.would_close_tree(
112 [{'test_builder': {'excluded_steps': ['test_step']}}],
113 'test_builder', 'test_step'))
114
115 def test_would_close_tree_only_considers_closing_steps(self):
116 self.assertFalse(gatekeeper_extras.would_close_tree(
117 [{'test_builder': {'closing_steps': set(['other_step'])}}],
118 'test_builder', 'test_step'))
119
120 def test_would_close_tree_assumes_no_closing_steps_when_missing_field(self):
121 self.assertFalse(gatekeeper_extras.would_close_tree(
122 [{'test_builder': {}}], 'test_builder', 'test_step'))
123
124 def test_would_close_tree_returns_true_if_step_is_in_closing_steps(self):
125 self.assertTrue(gatekeeper_extras.would_close_tree(
126 [{'test_builder': {'closing_steps': set(['test_step'])}}],
127 'test_builder', 'test_step'))
128
129 def test_would_close_tree_returns_true_if_all_steps_are_closing(self):
130 self.assertTrue(gatekeeper_extras.would_close_tree(
131 [{'test_builder': {'closing_steps': set(['*'])}}],
132 'test_builder', 'test_step'))
133
134
135 if __name__ == '__main__':
136 unittest.main()
OLDNEW
« no previous file with comments | « infra/tools/builder_alerts/gatekeeper_extras.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698