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

Side by Side Diff: scripts/tools/unittests/buildbot_tool_test.py

Issue 761253003: Add a new buildbot-tool generator for master configs (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: merge to head Created 6 years 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 | Annotate | Revision Log
« no previous file with comments | « scripts/tools/buildbot_tool_templates/slaves.cfg ('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 #!/usr/bin/env python
2 # Copyright 2014 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 """Tests for scripts/tools/buildbot_tool.py"""
7
8 import StringIO
9 import sys
10 import textwrap
11 import unittest
12
13
14 # This adjusts sys.path, so it must be imported before the other modules.
15 import test_env
16
17 from common import fake_filesystem
18 from tools import buildbot_tool
19
20
21 SAMPLE_MASTER_CFG_TEMPLATE = """\
22 # builders_block
23 %(builders_block)s
24
25 # git_repo_url
26 %(git_repo_url)s
27
28 # master_dirname
29 %(master_dirname)s
30
31 # master_classname
32 %(master_classname)s
33
34 # master_base_class
35 %(master_base_class)s
36
37 # master_port
38 %(master_port)s
39
40 # master_port_alt
41 %(master_port_alt)s
42
43 # slave_port
44 %(slave_port)s
45 """
46
47 SAMPLE_SLAVES_CFG_TEMPLATE = """\
48 %(slaves_block)s
49 """
50
51 SAMPLE_BUILDERS_PY = """\
52 {
53 "builders": {
54 "Test Linux": {
55 "properties": {
56 "config": "Release"
57 },
58 "recipe": "test_recipe",
59 "slave_pools": ["main"],
60 "slavebuilddir": "test"
61 }
62 },
63 "git_repo_url": "https://chromium.googlesource.com/test/test.git",
64 "master_base_class": "Master1",
65 "master_port": 20999,
66 "master_port_alt": 40999,
67 "slave_port": 30999,
68 "slave_pools": {
69 "main": {
70 "slave_data": {
71 "bits": 64,
72 "os": "linux",
73 "version": "precise"
74 },
75 "slaves": ["vm9999-m1"]
76 }
77 }
78 }
79 """
80
81
82 def _trap_output():
83 orig_output = (sys.stdout, sys.stderr)
84 sys.stdout = StringIO.StringIO()
85 sys.stderr = StringIO.StringIO()
86 return orig_output
87
88
89 def _restore_output(orig_output):
90 out, err = sys.stdout.getvalue(), sys.stderr.getvalue()
91 sys.stdout, sys.stderr = orig_output
92 return out, err
93
94
95 def _stub_constants(new_values):
96 orig = {}
97 for k, v in new_values.items():
98 orig[k] = getattr(buildbot_tool, k)
99 setattr(buildbot_tool, k, v)
100 return orig
101
102
103 def _restore_constants(orig_values):
104 for k, v in orig_values.items():
105 setattr(buildbot_tool, k, v)
106
107
108 class GenTest(unittest.TestCase):
109 def test_normal(self):
110 files = {
111 '/build/templates/master.cfg': SAMPLE_MASTER_CFG_TEMPLATE,
112 '/build/templates/slaves.cfg': SAMPLE_SLAVES_CFG_TEMPLATE,
113 '/build/masters/master.test/builders.py': SAMPLE_BUILDERS_PY,
114 }
115 fs = fake_filesystem.FakeFilesystem(files=files.copy())
116
117 orig_output = _trap_output()
118 orig_constants = _stub_constants({
119 'BASE_DIR': '/build',
120 'TEMPLATE_SUBPATH': 'templates',
121 'TEMPLATE_DIR': '/build/templates',
122 })
123
124 try:
125 ret = buildbot_tool.main(['gen', '/build/masters/master.test'], fs)
126 finally:
127 out, err = _restore_output(orig_output)
128 _restore_constants(orig_constants)
129
130 self.assertEqual(ret, 0)
131 self.assertEqual(err, '')
132 self.assertNotEqual(out, '')
133 self.assertEqual(set(fs.files.keys()),
134 set(files.keys() +
135 ['/build/masters/master.test/master.cfg',
136 '/build/masters/master.test/slaves.cfg']))
137
138 self.assertMultiLineEqual(
139 fs.read_text_file('/build/masters/master.test/master.cfg'),
140 textwrap.dedent("""\
141 # builders_block
142 c['builders'].append({
143 'name': 'Test Linux',
144 'factory': m_annotator.BaseFactory('test_recipe'),
145 'slavebuilddir': 'test'})
146
147
148 # git_repo_url
149 https://chromium.googlesource.com/test/test.git
150
151 # master_dirname
152 master.test
153
154 # master_classname
155 Test
156
157 # master_base_class
158 Master1
159
160 # master_port
161 20999
162
163 # master_port_alt
164 40999
165
166 # slave_port
167 30999
168 """))
169
170 self.assertMultiLineEqual(
171 fs.read_text_file('/build/masters/master.test/slaves.cfg'),
172 textwrap.dedent("""\
173 slaves = [
174 {
175 'master': 'Test',
176 'hostname': 'vm9999-m1',
177 'builder': 'Test Linux',
178 'os': 'linux',
179 'version': 'precise',
180 'bits': '64',
181 },
182 ]
183 """))
184
185 def test_not_found(self):
186 files = {
187 '/build/templates/master.cfg': SAMPLE_MASTER_CFG_TEMPLATE,
188 '/build/templates/slaves.cfg': SAMPLE_SLAVES_CFG_TEMPLATE,
189 }
190 fs = fake_filesystem.FakeFilesystem(files=files.copy())
191
192 orig_output = _trap_output()
193 orig_constants = _stub_constants({
194 'BASE_DIR': '/build',
195 'TEMPLATE_SUBPATH': 'templates',
196 'TEMPLATE_DIR': '/build/templates',
197 })
198
199 try:
200 ret = buildbot_tool.main(['gen', '/build/masters/master.test'], fs)
201 finally:
202 out, err = _restore_output(orig_output)
203 _restore_constants(orig_constants)
204
205 self.assertEqual(ret, 1)
206 self.assertEqual(out, '')
207 self.assertEqual(err, '/build/masters/master.test not found\n')
208
209 def test_bad_template(self):
210 files = {
211 '/build/templates/master.cfg': '%(unknown_key)s',
212 '/build/masters/master.test/builders.py': SAMPLE_BUILDERS_PY,
213 }
214 fs = fake_filesystem.FakeFilesystem(files=files.copy())
215
216 orig_output = _trap_output()
217 orig_constants = _stub_constants({
218 'BASE_DIR': '/build',
219 'TEMPLATE_SUBPATH': 'templates',
220 'TEMPLATE_DIR': '/build/templates',
221 })
222
223 try:
224 self.assertRaises(KeyError,
225 buildbot_tool.main,
226 ['gen', '/build/masters/master.test'],
227 fs)
228 finally:
229 _restore_output(orig_output)
230 _restore_constants(orig_constants)
231
232
233 class HelpTest(unittest.TestCase):
234 def test_help(self):
235 orig_output = _trap_output()
236 fs = fake_filesystem.FakeFilesystem()
237 try:
238 # We do not care what the output is, just that the commands run.
239 self.assertRaises(SystemExit, buildbot_tool.main, ['--help'], fs)
240 self.assertRaises(SystemExit, buildbot_tool.main, ['help'], fs)
241 self.assertRaises(SystemExit, buildbot_tool.main, ['help', 'gen'], fs)
242 finally:
243 _restore_output(orig_output)
244
245
246 if __name__ == '__main__':
247 unittest.TestCase.maxDiff = None
248 unittest.main()
OLDNEW
« no previous file with comments | « scripts/tools/buildbot_tool_templates/slaves.cfg ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698