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

Side by Side Diff: tools/mb/mb_unittest.py

Issue 1370373005: Add MB commands for generating isolates and running them. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add some basic unit tests for coverage of isolate and run Created 5 years, 2 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 | « tools/mb/mb.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
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright 2015 The Chromium Authors. All rights reserved. 2 # Copyright 2015 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Tests for mb.py.""" 6 """Tests for mb.py."""
7 7
8 import json 8 import json
9 import StringIO 9 import StringIO
10 import os 10 import os
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 51
52 def PathJoin(self, *comps): 52 def PathJoin(self, *comps):
53 return self.sep.join(comps) 53 return self.sep.join(comps)
54 54
55 def ReadFile(self, path): 55 def ReadFile(self, path):
56 return self.files[path] 56 return self.files[path]
57 57
58 def WriteFile(self, path, contents, force_verbose=False): 58 def WriteFile(self, path, contents, force_verbose=False):
59 self.files[path] = contents 59 self.files[path] = contents
60 60
61 def Call(self, cmd, env=None): 61 def Call(self, cmd, env=None, buffer_output=True):
62 if env: 62 if env:
63 self.cross_compile = env.get('GYP_CROSSCOMPILE') 63 self.cross_compile = env.get('GYP_CROSSCOMPILE')
64 self.calls.append(cmd) 64 self.calls.append(cmd)
65 if self.cmds: 65 if self.cmds:
66 return self.cmds.pop(0) 66 return self.cmds.pop(0)
67 return 0, '', '' 67 return 0, '', ''
68 68
69 def Print(self, *args, **kwargs): 69 def Print(self, *args, **kwargs):
70 sep = kwargs.get('sep', ' ') 70 sep = kwargs.get('sep', ' ')
71 end = kwargs.get('end', '\n') 71 end = kwargs.get('end', '\n')
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 ['/fake_src/out/Debug', '/fake_src/out/Debug']) 201 ['/fake_src/out/Debug', '/fake_src/out/Debug'])
202 self.assertEqual(mbw.files['/fake_src/out/Debug/mb_type'], 'gyp') 202 self.assertEqual(mbw.files['/fake_src/out/Debug/mb_type'], 'gyp')
203 203
204 def test_gn_analyze(self): 204 def test_gn_analyze(self):
205 files = {'/tmp/in.json': """{\ 205 files = {'/tmp/in.json': """{\
206 "files": ["foo/foo_unittest.cc"], 206 "files": ["foo/foo_unittest.cc"],
207 "targets": ["foo_unittests", "bar_unittests"] 207 "targets": ["foo_unittests", "bar_unittests"]
208 }"""} 208 }"""}
209 209
210 mbw = self.fake_mbw(files) 210 mbw = self.fake_mbw(files)
211 mbw.Call = lambda cmd, env=None: (0, 'out/Default/foo_unittests\n', '') 211 mbw.Call = lambda cmd, env=None, buffer_output=True: (
212 0, 'out/Default/foo_unittests\n', '')
212 213
213 self.check(['analyze', '-c', 'gn_debug', '//out/Default', 214 self.check(['analyze', '-c', 'gn_debug', '//out/Default',
214 '/tmp/in.json', '/tmp/out.json'], mbw=mbw, ret=0) 215 '/tmp/in.json', '/tmp/out.json'], mbw=mbw, ret=0)
215 out = json.loads(mbw.files['/tmp/out.json']) 216 out = json.loads(mbw.files['/tmp/out.json'])
216 self.assertEqual(out, { 217 self.assertEqual(out, {
217 'status': 'Found dependency', 218 'status': 'Found dependency',
218 'targets': ['foo_unittests'], 219 'targets': ['foo_unittests'],
219 'build_targets': ['foo_unittests'] 220 'build_targets': ['foo_unittests']
220 }) 221 })
221 222
222 def test_gn_analyze_all(self): 223 def test_gn_analyze_all(self):
223 files = {'/tmp/in.json': """{\ 224 files = {'/tmp/in.json': """{\
224 "files": ["foo/foo_unittest.cc"], 225 "files": ["foo/foo_unittest.cc"],
225 "targets": ["all", "bar_unittests"] 226 "targets": ["all", "bar_unittests"]
226 }"""} 227 }"""}
227 mbw = self.fake_mbw(files) 228 mbw = self.fake_mbw(files)
228 mbw.Call = lambda cmd, env=None: (0, 'out/Default/foo_unittests\n', '') 229 mbw.Call = lambda cmd, env=None, buffer_output=True: (
230 0, 'out/Default/foo_unittests\n', '')
229 self.check(['analyze', '-c', 'gn_debug', '//out/Default', 231 self.check(['analyze', '-c', 'gn_debug', '//out/Default',
230 '/tmp/in.json', '/tmp/out.json'], mbw=mbw, ret=0) 232 '/tmp/in.json', '/tmp/out.json'], mbw=mbw, ret=0)
231 out = json.loads(mbw.files['/tmp/out.json']) 233 out = json.loads(mbw.files['/tmp/out.json'])
232 self.assertEqual(out, { 234 self.assertEqual(out, {
233 'status': 'Found dependency (all)', 235 'status': 'Found dependency (all)',
234 }) 236 })
235 237
236 def test_gn_analyze_missing_file(self): 238 def test_gn_analyze_missing_file(self):
237 files = {'/tmp/in.json': """{\ 239 files = {'/tmp/in.json': """{\
238 "files": ["foo/foo_unittest.cc"], 240 "files": ["foo/foo_unittest.cc"],
(...skipping 25 matching lines...) Expand all
264 mbw = self.fake_mbw(win32=True) 266 mbw = self.fake_mbw(win32=True)
265 self.check(['gen', '-c', 'gn_debug', '-g', 'c:\\goma', '//out/Debug'], 267 self.check(['gen', '-c', 'gn_debug', '-g', 'c:\\goma', '//out/Debug'],
266 mbw=mbw, ret=0, 268 mbw=mbw, ret=0,
267 out=('c:\\fake_src\\buildtools\\win\\gn gen //out/Debug ' 269 out=('c:\\fake_src\\buildtools\\win\\gn gen //out/Debug '
268 '"--args=is_debug=true use_goma=true goma_dir=\\"' 270 '"--args=is_debug=true use_goma=true goma_dir=\\"'
269 'c:\\goma\\"" --check\n')) 271 'c:\\goma\\"" --check\n'))
270 272
271 273
272 def test_gn_gen_fails(self): 274 def test_gn_gen_fails(self):
273 mbw = self.fake_mbw() 275 mbw = self.fake_mbw()
274 mbw.Call = lambda cmd, env=None: (1, '', '') 276 mbw.Call = lambda cmd, env=None, buffer_output=True: (1, '', '')
275 self.check(['gen', '-c', 'gn_debug', '//out/Default'], mbw=mbw, ret=1) 277 self.check(['gen', '-c', 'gn_debug', '//out/Default'], mbw=mbw, ret=1)
276 278
277 def test_gn_gen_swarming(self): 279 def test_gn_gen_swarming(self):
278 files = { 280 files = {
279 '/tmp/swarming_targets': 'base_unittests\n', 281 '/tmp/swarming_targets': 'base_unittests\n',
280 '/fake_src/testing/buildbot/gn_isolate_map.pyl': ( 282 '/fake_src/testing/buildbot/gn_isolate_map.pyl': (
281 "{'base_unittests': {" 283 "{'base_unittests': {"
282 " 'label': '//base:base_unittests'," 284 " 'label': '//base:base_unittests',"
283 " 'type': 'raw'," 285 " 'type': 'raw',"
284 " 'args': []," 286 " 'args': [],"
285 "}}\n" 287 "}}\n"
286 ), 288 ),
287 '/fake_src/out/Default/base_unittests.runtime_deps': ( 289 '/fake_src/out/Default/base_unittests.runtime_deps': (
288 "base_unittests\n" 290 "base_unittests\n"
289 ), 291 ),
290 } 292 }
291 mbw = self.fake_mbw(files) 293 mbw = self.fake_mbw(files)
292 self.check(['gen', 294 self.check(['gen',
293 '-c', 'gn_debug', 295 '-c', 'gn_debug',
294 '--swarming-targets-file', '/tmp/swarming_targets', 296 '--swarming-targets-file', '/tmp/swarming_targets',
295 '//out/Default'], mbw=mbw, ret=0) 297 '//out/Default'], mbw=mbw, ret=0)
296 self.assertIn('/fake_src/out/Default/base_unittests.isolate', 298 self.assertIn('/fake_src/out/Default/base_unittests.isolate',
297 mbw.files) 299 mbw.files)
298 self.assertIn('/fake_src/out/Default/base_unittests.isolated.gen.json', 300 self.assertIn('/fake_src/out/Default/base_unittests.isolated.gen.json',
299 mbw.files) 301 mbw.files)
300 302
303 def test_gn_isolate(self):
304 files = {
305 '/fake_src/testing/buildbot/gn_isolate_map.pyl': (
306 "{'base_unittests': {"
307 " 'label': '//base:base_unittests',"
308 " 'type': 'raw',"
309 " 'args': [],"
310 "}}\n"
311 ),
312 '/fake_src/out/Default/base_unittests.runtime_deps': (
313 "base_unittests\n"
314 ),
315 }
316 self.check(['isolate', '-c', 'gn_debug', '//out/Default', 'base_unittests'],
317 files=files, ret=0)
318
319 # test running isolate on an existing build_dir
320 files['/fake_src/out/Default/args.gn'] = 'is_debug = True\n'
321 self.check(['isolate', '//out/Default', 'base_unittests'],
322 files=files, ret=0)
323
324 files['/fake_src/out/Default/mb_type'] = 'gn\n'
325 self.check(['isolate', '//out/Default', 'base_unittests'],
326 files=files, ret=0)
327
328 def test_gn_run(self):
329 files = {
330 '/fake_src/testing/buildbot/gn_isolate_map.pyl': (
331 "{'base_unittests': {"
332 " 'label': '//base:base_unittests',"
333 " 'type': 'raw',"
334 " 'args': [],"
335 "}}\n"
336 ),
337 '/fake_src/out/Default/base_unittests.runtime_deps': (
338 "base_unittests\n"
339 ),
340 }
341 self.check(['run', '-c', 'gn_debug', '//out/Default', 'base_unittests'],
342 files=files, ret=0)
343
301 def test_gn_lookup(self): 344 def test_gn_lookup(self):
302 self.check(['lookup', '-c', 'gn_debug'], ret=0) 345 self.check(['lookup', '-c', 'gn_debug'], ret=0)
303 346
304 def test_gn_lookup_goma_dir_expansion(self): 347 def test_gn_lookup_goma_dir_expansion(self):
305 self.check(['lookup', '-c', 'gn_rel_bot', '-g', '/foo'], ret=0, 348 self.check(['lookup', '-c', 'gn_rel_bot', '-g', '/foo'], ret=0,
306 out=("/fake_src/buildtools/linux64/gn gen _path_ " 349 out=("/fake_src/buildtools/linux64/gn gen _path_ "
307 "'--args=is_debug=false use_goma=true " 350 "'--args=is_debug=false use_goma=true "
308 "goma_dir=\"/foo\"'\n" )) 351 "goma_dir=\"/foo\"'\n" ))
309 352
310 def test_gyp_analyze(self): 353 def test_gyp_analyze(self):
(...skipping 14 matching lines...) Expand all
325 "python build/gyp_chromium -G output_dir=out\n")) 368 "python build/gyp_chromium -G output_dir=out\n"))
326 369
327 mbw = self.fake_mbw(win32=True) 370 mbw = self.fake_mbw(win32=True)
328 self.check(['gen', '-c', 'gyp_rel_bot', '-g', 'c:\\goma', '//out/Release'], 371 self.check(['gen', '-c', 'gyp_rel_bot', '-g', 'c:\\goma', '//out/Release'],
329 mbw=mbw, ret=0, 372 mbw=mbw, ret=0,
330 out=("set GYP_DEFINES=goma=1 gomadir='c:\\goma'\n" 373 out=("set GYP_DEFINES=goma=1 gomadir='c:\\goma'\n"
331 "python build\\gyp_chromium -G output_dir=out\n")) 374 "python build\\gyp_chromium -G output_dir=out\n"))
332 375
333 def test_gyp_gen_fails(self): 376 def test_gyp_gen_fails(self):
334 mbw = self.fake_mbw() 377 mbw = self.fake_mbw()
335 mbw.Call = lambda cmd, env=None: (1, '', '') 378 mbw.Call = lambda cmd, env=None, buffer_output=True: (1, '', '')
336 self.check(['gen', '-c', 'gyp_rel_bot', '//out/Release'], mbw=mbw, ret=1) 379 self.check(['gen', '-c', 'gyp_rel_bot', '//out/Release'], mbw=mbw, ret=1)
337 380
338 def test_gyp_lookup_goma_dir_expansion(self): 381 def test_gyp_lookup_goma_dir_expansion(self):
339 self.check(['lookup', '-c', 'gyp_rel_bot', '-g', '/foo'], ret=0, 382 self.check(['lookup', '-c', 'gyp_rel_bot', '-g', '/foo'], ret=0,
340 out=("GYP_DEFINES='goma=1 gomadir=/foo'\n" 383 out=("GYP_DEFINES='goma=1 gomadir=/foo'\n"
341 "python build/gyp_chromium -G output_dir=_path_\n")) 384 "python build/gyp_chromium -G output_dir=_path_\n"))
342 385
343 def test_help(self): 386 def test_help(self):
344 orig_stdout = sys.stdout 387 orig_stdout = sys.stdout
345 try: 388 try:
346 sys.stdout = StringIO.StringIO() 389 sys.stdout = StringIO.StringIO()
347 self.assertRaises(SystemExit, self.check, ['-h']) 390 self.assertRaises(SystemExit, self.check, ['-h'])
348 self.assertRaises(SystemExit, self.check, ['help']) 391 self.assertRaises(SystemExit, self.check, ['help'])
349 self.assertRaises(SystemExit, self.check, ['help', 'gen']) 392 self.assertRaises(SystemExit, self.check, ['help', 'gen'])
350 finally: 393 finally:
351 sys.stdout = orig_stdout 394 sys.stdout = orig_stdout
352 395
353 396
354 def test_validate(self): 397 def test_validate(self):
355 self.check(['validate'], ret=0) 398 self.check(['validate'], ret=0)
356 399
357 400
358 if __name__ == '__main__': 401 if __name__ == '__main__':
359 unittest.main() 402 unittest.main()
OLDNEW
« no previous file with comments | « tools/mb/mb.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698