blob: b555f4934e59c4ae6ea84d442b7dc45c4b815988 [file] [log] [blame]
kjellandera013a022016-11-14 05:54:22 -08001#!/usr/bin/python
2# Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3#
4# Use of this source code is governed by a BSD-style license
5# that can be found in the LICENSE file in the root of the source
6# tree. An additional intellectual property rights grant can be found
7# in the file PATENTS. All contributing project authors may
8# be found in the AUTHORS file in the root of the source tree.
9
10"""Tests for mb.py."""
11
ehmaldonadoed8c8ed2016-11-23 12:58:35 -080012import ast
kjellandera013a022016-11-14 05:54:22 -080013import json
Nidhi Jaju23949772021-12-02 10:38:50 +000014try:
Jeremy Lecontef22c78b2021-12-07 19:49:48 +010015 from StringIO import StringIO # for Python2
Nidhi Jaju23949772021-12-02 10:38:50 +000016except ImportError:
Jeremy Lecontef22c78b2021-12-07 19:49:48 +010017 from io import StringIO # for Python3
kjellandera013a022016-11-14 05:54:22 -080018import os
Mirko Bonadei989e6e72021-01-29 14:34:52 +010019import re
kjellandera013a022016-11-14 05:54:22 -080020import sys
Mirko Bonadei989e6e72021-01-29 14:34:52 +010021import tempfile
kjellandera013a022016-11-14 05:54:22 -080022import unittest
23
24import mb
25
26
27class FakeMBW(mb.MetaBuildWrapper):
28 def __init__(self, win32=False):
29 super(FakeMBW, self).__init__()
30
31 # Override vars for test portability.
32 if win32:
kjellander1c3548c2017-02-15 22:38:22 -080033 self.src_dir = 'c:\\fake_src'
Henrik Kjellander90fd7d82017-05-09 08:30:10 +020034 self.default_config = 'c:\\fake_src\\tools_webrtc\\mb\\mb_config.pyl'
kjellandera013a022016-11-14 05:54:22 -080035 self.default_isolate_map = ('c:\\fake_src\\testing\\buildbot\\'
36 'gn_isolate_map.pyl')
37 self.platform = 'win32'
38 self.executable = 'c:\\python\\python.exe'
39 self.sep = '\\'
Mirko Bonadei989e6e72021-01-29 14:34:52 +010040 self.cwd = 'c:\\fake_src\\out\\Default'
kjellandera013a022016-11-14 05:54:22 -080041 else:
kjellander1c3548c2017-02-15 22:38:22 -080042 self.src_dir = '/fake_src'
Henrik Kjellander90fd7d82017-05-09 08:30:10 +020043 self.default_config = '/fake_src/tools_webrtc/mb/mb_config.pyl'
kjellandera013a022016-11-14 05:54:22 -080044 self.default_isolate_map = '/fake_src/testing/buildbot/gn_isolate_map.pyl'
45 self.executable = '/usr/bin/python'
46 self.platform = 'linux2'
47 self.sep = '/'
Mirko Bonadei989e6e72021-01-29 14:34:52 +010048 self.cwd = '/fake_src/out/Default'
kjellandera013a022016-11-14 05:54:22 -080049
50 self.files = {}
Mirko Bonadei989e6e72021-01-29 14:34:52 +010051 self.dirs = set()
kjellandera013a022016-11-14 05:54:22 -080052 self.calls = []
53 self.cmds = []
54 self.cross_compile = None
55 self.out = ''
56 self.err = ''
57 self.rmdirs = []
58
59 def ExpandUser(self, path):
60 return '$HOME/%s' % path
61
62 def Exists(self, path):
Mirko Bonadei989e6e72021-01-29 14:34:52 +010063 abs_path = self._AbsPath(path)
Jeremy Lecontef22c78b2021-12-07 19:49:48 +010064 return self.files.get(abs_path) is not None or abs_path in self.dirs
kjellandera013a022016-11-14 05:54:22 -080065
66 def MaybeMakeDirectory(self, path):
Mirko Bonadei989e6e72021-01-29 14:34:52 +010067 abpath = self._AbsPath(path)
68 self.dirs.add(abpath)
kjellandera013a022016-11-14 05:54:22 -080069
70 def PathJoin(self, *comps):
71 return self.sep.join(comps)
72
73 def ReadFile(self, path):
Mirko Bonadei989e6e72021-01-29 14:34:52 +010074 return self.files[self._AbsPath(path)]
kjellandera013a022016-11-14 05:54:22 -080075
76 def WriteFile(self, path, contents, force_verbose=False):
77 if self.args.dryrun or self.args.verbose or force_verbose:
78 self.Print('\nWriting """\\\n%s""" to %s.\n' % (contents, path))
Mirko Bonadei989e6e72021-01-29 14:34:52 +010079 abpath = self._AbsPath(path)
80 self.files[abpath] = contents
kjellandera013a022016-11-14 05:54:22 -080081
82 def Call(self, cmd, env=None, buffer_output=True):
kjellandera013a022016-11-14 05:54:22 -080083 self.calls.append(cmd)
84 if self.cmds:
85 return self.cmds.pop(0)
86 return 0, '', ''
87
88 def Print(self, *args, **kwargs):
89 sep = kwargs.get('sep', ' ')
90 end = kwargs.get('end', '\n')
91 f = kwargs.get('file', sys.stdout)
92 if f == sys.stderr:
93 self.err += sep.join(args) + end
94 else:
95 self.out += sep.join(args) + end
96
Mirko Bonadei989e6e72021-01-29 14:34:52 +010097 def TempDir(self):
98 tmp_dir = os.path.join(tempfile.gettempdir(), 'mb_test')
99 self.dirs.add(tmp_dir)
100 return tmp_dir
101
Nidhi Jaju23949772021-12-02 10:38:50 +0000102 def TempFile(self):
kjellandera013a022016-11-14 05:54:22 -0800103 return FakeFile(self.files)
104
105 def RemoveFile(self, path):
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100106 abpath = self._AbsPath(path)
107 self.files[abpath] = None
kjellandera013a022016-11-14 05:54:22 -0800108
109 def RemoveDirectory(self, path):
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100110 abpath = self._AbsPath(path)
111 self.rmdirs.append(abpath)
112 files_to_delete = [f for f in self.files if f.startswith(abpath)]
kjellandera013a022016-11-14 05:54:22 -0800113 for f in files_to_delete:
114 self.files[f] = None
115
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100116 def _AbsPath(self, path):
117 if not ((self.platform == 'win32' and path.startswith('c:')) or
118 (self.platform != 'win32' and path.startswith('/'))):
119 path = self.PathJoin(self.cwd, path)
120 if self.sep == '\\':
121 return re.sub(r'\\+', r'\\', path)
Nidhi Jaju23949772021-12-02 10:38:50 +0000122 return re.sub('/+', '/', path)
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100123
kjellandera013a022016-11-14 05:54:22 -0800124
125class FakeFile(object):
126 def __init__(self, files):
127 self.name = '/tmp/file'
128 self.buf = ''
129 self.files = files
130
131 def write(self, contents):
132 self.buf += contents
133
134 def close(self):
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100135 self.files[self.name] = self.buf
kjellandera013a022016-11-14 05:54:22 -0800136
137
138TEST_CONFIG = """\
139{
Mirko Bonadei8606b9c2021-01-12 14:29:40 +0100140 'builder_groups': {
kjellandera013a022016-11-14 05:54:22 -0800141 'chromium': {},
Mirko Bonadei8606b9c2021-01-12 14:29:40 +0100142 'fake_group': {
Oleh Prypinb708e932018-03-18 17:34:20 +0100143 'fake_builder': 'rel_bot',
144 'fake_debug_builder': 'debug_goma',
Mirko Bonadei8606b9c2021-01-12 14:29:40 +0100145 'fake_args_bot': '//build/args/bots/fake_group/fake_args_bot.gn',
Oleh Prypinb708e932018-03-18 17:34:20 +0100146 'fake_multi_phase': { 'phase_1': 'phase_1', 'phase_2': 'phase_2'},
147 'fake_android_bot': 'android_bot',
kjellandera013a022016-11-14 05:54:22 -0800148 },
149 },
150 'configs': {
Oleh Prypinb708e932018-03-18 17:34:20 +0100151 'rel_bot': ['rel', 'goma', 'fake_feature1'],
152 'debug_goma': ['debug', 'goma'],
153 'phase_1': ['phase_1'],
154 'phase_2': ['phase_2'],
Oleh Prypinb708e932018-03-18 17:34:20 +0100155 'android_bot': ['android'],
kjellandera013a022016-11-14 05:54:22 -0800156 },
157 'mixins': {
kjellandera013a022016-11-14 05:54:22 -0800158 'fake_feature1': {
159 'gn_args': 'enable_doom_melon=true',
kjellandera013a022016-11-14 05:54:22 -0800160 },
kjellandera013a022016-11-14 05:54:22 -0800161 'goma': {
162 'gn_args': 'use_goma=true',
kjellandera013a022016-11-14 05:54:22 -0800163 },
164 'phase_1': {
165 'gn_args': 'phase=1',
kjellandera013a022016-11-14 05:54:22 -0800166 },
167 'phase_2': {
168 'gn_args': 'phase=2',
kjellandera013a022016-11-14 05:54:22 -0800169 },
170 'rel': {
171 'gn_args': 'is_debug=false',
172 },
173 'debug': {
174 'gn_args': 'is_debug=true',
175 },
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800176 'android': {
177 'gn_args': 'target_os="android"',
178 }
kjellandera013a022016-11-14 05:54:22 -0800179 },
180}
181"""
182
kjellandera013a022016-11-14 05:54:22 -0800183
184class UnitTest(unittest.TestCase):
185 def fake_mbw(self, files=None, win32=False):
186 mbw = FakeMBW(win32=win32)
187 mbw.files.setdefault(mbw.default_config, TEST_CONFIG)
188 mbw.files.setdefault(
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100189 mbw.ToAbsPath('//testing/buildbot/gn_isolate_map.pyl'), '''{
kjellandera013a022016-11-14 05:54:22 -0800190 "foo_unittests": {
191 "label": "//foo:foo_unittests",
192 "type": "console_test_launcher",
193 "args": [],
194 },
195 }''')
196 mbw.files.setdefault(
Mirko Bonadei8606b9c2021-01-12 14:29:40 +0100197 mbw.ToAbsPath('//build/args/bots/fake_group/fake_args_bot.gn'),
kjellandera013a022016-11-14 05:54:22 -0800198 'is_debug = false\n')
199 if files:
200 for path, contents in files.items():
201 mbw.files[path] = contents
202 return mbw
203
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100204 def check(self,
205 args,
206 mbw=None,
207 files=None,
208 out=None,
209 err=None,
210 ret=None,
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100211 env=None):
kjellandera013a022016-11-14 05:54:22 -0800212 if not mbw:
213 mbw = self.fake_mbw(files)
214
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100215 try:
216 prev_env = os.environ.copy()
217 os.environ = env if env else prev_env
218 actual_ret = mbw.Main(args)
219 finally:
220 os.environ = prev_env
221 self.assertEqual(
222 actual_ret, ret,
223 "ret: %s, out: %s, err: %s" % (actual_ret, mbw.out, mbw.err))
kjellandera013a022016-11-14 05:54:22 -0800224 if out is not None:
225 self.assertEqual(mbw.out, out)
226 if err is not None:
227 self.assertEqual(mbw.err, err)
228 return mbw
229
Oleh Prypinb708e932018-03-18 17:34:20 +0100230 def test_analyze(self):
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100231 files = {
232 '/tmp/in.json':
233 '''{\
kjellandera013a022016-11-14 05:54:22 -0800234 "files": ["foo/foo_unittest.cc"],
235 "test_targets": ["foo_unittests"],
236 "additional_compile_targets": ["all"]
237 }''',
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100238 '/tmp/out.json.gn':
239 '''{\
kjellandera013a022016-11-14 05:54:22 -0800240 "status": "Found dependency",
241 "compile_targets": ["//foo:foo_unittests"],
242 "test_targets": ["//foo:foo_unittests"]
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100243 }'''
244 }
kjellandera013a022016-11-14 05:54:22 -0800245
246 mbw = self.fake_mbw(files)
247 mbw.Call = lambda cmd, env=None, buffer_output=True: (0, '', '')
248
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100249 self.check([
250 'analyze', '-c', 'debug_goma', '//out/Default', '/tmp/in.json',
251 '/tmp/out.json'
252 ],
253 mbw=mbw,
254 ret=0)
kjellandera013a022016-11-14 05:54:22 -0800255 out = json.loads(mbw.files['/tmp/out.json'])
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100256 self.assertEqual(
257 out, {
258 'status': 'Found dependency',
259 'compile_targets': ['foo:foo_unittests'],
260 'test_targets': ['foo_unittests']
261 })
kjellandera013a022016-11-14 05:54:22 -0800262
Oleh Prypinb708e932018-03-18 17:34:20 +0100263 def test_gen(self):
kjellandera013a022016-11-14 05:54:22 -0800264 mbw = self.fake_mbw()
Oleh Prypinb708e932018-03-18 17:34:20 +0100265 self.check(['gen', '-c', 'debug_goma', '//out/Default', '-g', '/goma'],
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100266 mbw=mbw,
267 ret=0)
kjellandera013a022016-11-14 05:54:22 -0800268 self.assertMultiLineEqual(mbw.files['/fake_src/out/Default/args.gn'],
269 ('goma_dir = "/goma"\n'
270 'is_debug = true\n'
271 'use_goma = true\n'))
272
273 # Make sure we log both what is written to args.gn and the command line.
274 self.assertIn('Writing """', mbw.out)
275 self.assertIn('/fake_src/buildtools/linux64/gn gen //out/Default --check',
276 mbw.out)
277
278 mbw = self.fake_mbw(win32=True)
Oleh Prypinb708e932018-03-18 17:34:20 +0100279 self.check(['gen', '-c', 'debug_goma', '-g', 'c:\\goma', '//out/Debug'],
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100280 mbw=mbw,
281 ret=0)
kjellandera013a022016-11-14 05:54:22 -0800282 self.assertMultiLineEqual(mbw.files['c:\\fake_src\\out\\Debug\\args.gn'],
283 ('goma_dir = "c:\\\\goma"\n'
284 'is_debug = true\n'
285 'use_goma = true\n'))
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100286 self.assertIn(
287 'c:\\fake_src\\buildtools\\win\\gn.exe gen //out/Debug '
288 '--check\n', mbw.out)
kjellandera013a022016-11-14 05:54:22 -0800289
290 mbw = self.fake_mbw()
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100291 self.check(
292 ['gen', '-m', 'fake_group', '-b', 'fake_args_bot', '//out/Debug'],
293 mbw=mbw,
294 ret=0)
kjellandera013a022016-11-14 05:54:22 -0800295 self.assertEqual(
296 mbw.files['/fake_src/out/Debug/args.gn'],
Mirko Bonadei8606b9c2021-01-12 14:29:40 +0100297 'import("//build/args/bots/fake_group/fake_args_bot.gn")\n\n')
kjellandera013a022016-11-14 05:54:22 -0800298
Oleh Prypinb708e932018-03-18 17:34:20 +0100299 def test_gen_fails(self):
kjellandera013a022016-11-14 05:54:22 -0800300 mbw = self.fake_mbw()
301 mbw.Call = lambda cmd, env=None, buffer_output=True: (1, '', '')
Oleh Prypinb708e932018-03-18 17:34:20 +0100302 self.check(['gen', '-c', 'debug_goma', '//out/Default'], mbw=mbw, ret=1)
kjellandera013a022016-11-14 05:54:22 -0800303
Oleh Prypinb708e932018-03-18 17:34:20 +0100304 def test_gen_swarming(self):
kjellandera013a022016-11-14 05:54:22 -0800305 files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100306 '/tmp/swarming_targets':
307 'base_unittests\n',
308 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
309 ("{'base_unittests': {"
310 " 'label': '//base:base_unittests',"
311 " 'type': 'raw',"
312 " 'args': [],"
313 "}}\n"),
314 '/fake_src/out/Default/base_unittests.runtime_deps':
315 ("base_unittests\n"),
kjellandera013a022016-11-14 05:54:22 -0800316 }
Oleh Prypinb708e932018-03-18 17:34:20 +0100317 mbw = self.fake_mbw(files)
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100318 self.check([
319 'gen', '-c', 'debug_goma', '--swarming-targets-file',
320 '/tmp/swarming_targets', '//out/Default'
321 ],
322 mbw=mbw,
323 ret=0)
324 self.assertIn('/fake_src/out/Default/base_unittests.isolate', mbw.files)
Oleh Prypinb708e932018-03-18 17:34:20 +0100325 self.assertIn('/fake_src/out/Default/base_unittests.isolated.gen.json',
kjellandera013a022016-11-14 05:54:22 -0800326 mbw.files)
327
Oleh Prypinb708e932018-03-18 17:34:20 +0100328 def test_gen_swarming_android(self):
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800329 test_files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100330 '/tmp/swarming_targets':
331 'base_unittests\n',
332 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
333 ("{'base_unittests': {"
334 " 'label': '//base:base_unittests',"
335 " 'type': 'additional_compile_target',"
336 "}}\n"),
337 '/fake_src/out/Default/base_unittests.runtime_deps':
338 ("base_unittests\n"),
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800339 }
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100340 mbw = self.check([
341 'gen', '-c', 'android_bot', '//out/Default', '--swarming-targets-file',
342 '/tmp/swarming_targets', '--isolate-map-file',
343 '/fake_src/testing/buildbot/gn_isolate_map.pyl'
344 ],
345 files=test_files,
346 ret=0)
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800347
348 isolate_file = mbw.files['/fake_src/out/Default/base_unittests.isolate']
349 isolate_file_contents = ast.literal_eval(isolate_file)
350 files = isolate_file_contents['variables']['files']
351 command = isolate_file_contents['variables']['command']
352
Jeremy Lecontea2e3d802021-12-07 12:54:08 +0100353 self.assertEqual(files, ['../../.vpython', '../../testing/test_env.py',
354 'base_unittests'])
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800355 self.assertEqual(command, [
Jeremy Leconteaad4ba12021-11-23 14:32:09 +0100356 'vpython',
kjellanderf9e2a362017-03-24 12:17:33 -0700357 '../../build/android/test_wrapper/logdog_wrapper.py',
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100358 '--target',
359 'base_unittests',
360 '--logdog-bin-cmd',
361 '../../bin/logdog_butler',
362 '--logcat-output-file',
363 '${ISOLATED_OUTDIR}/logcats',
ehmaldonado34623ce2017-09-08 07:03:13 -0700364 '--store-tombstones',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800365 ])
366
Oleh Prypinb708e932018-03-18 17:34:20 +0100367 def test_gen_swarming_android_junit_test(self):
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800368 test_files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100369 '/tmp/swarming_targets':
370 'base_unittests\n',
371 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
372 ("{'base_unittests': {"
373 " 'label': '//base:base_unittests',"
374 " 'type': 'junit_test',"
375 "}}\n"),
376 '/fake_src/out/Default/base_unittests.runtime_deps':
377 ("base_unittests\n"),
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800378 }
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100379 mbw = self.check([
380 'gen', '-c', 'android_bot', '//out/Default', '--swarming-targets-file',
381 '/tmp/swarming_targets', '--isolate-map-file',
382 '/fake_src/testing/buildbot/gn_isolate_map.pyl'
383 ],
384 files=test_files,
385 ret=0)
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800386
387 isolate_file = mbw.files['/fake_src/out/Default/base_unittests.isolate']
388 isolate_file_contents = ast.literal_eval(isolate_file)
389 files = isolate_file_contents['variables']['files']
390 command = isolate_file_contents['variables']['command']
391
Jeremy Lecontea2e3d802021-12-07 12:54:08 +0100392 self.assertEqual(files, ['../../.vpython', '../../testing/test_env.py',
393 'base_unittests'])
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800394 self.assertEqual(command, [
Jeremy Leconteaad4ba12021-11-23 14:32:09 +0100395 'vpython',
kjellanderf9e2a362017-03-24 12:17:33 -0700396 '../../build/android/test_wrapper/logdog_wrapper.py',
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100397 '--target',
398 'base_unittests',
399 '--logdog-bin-cmd',
400 '../../bin/logdog_butler',
401 '--logcat-output-file',
402 '${ISOLATED_OUTDIR}/logcats',
ehmaldonado34623ce2017-09-08 07:03:13 -0700403 '--store-tombstones',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800404 ])
405
Oleh Prypinb708e932018-03-18 17:34:20 +0100406 def test_gen_timeout(self):
Edward Lemurbeffdd42017-09-27 13:07:47 +0200407 test_files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100408 '/tmp/swarming_targets':
409 'base_unittests\n',
410 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
411 ("{'base_unittests': {"
412 " 'label': '//base:base_unittests',"
413 " 'type': 'non_parallel_console_test_launcher',"
414 " 'timeout': 500,"
415 "}}\n"),
416 '/fake_src/out/Default/base_unittests.runtime_deps':
417 ("base_unittests\n"),
Edward Lemurbeffdd42017-09-27 13:07:47 +0200418 }
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100419 mbw = self.check([
420 'gen', '-c', 'debug_goma', '//out/Default', '--swarming-targets-file',
421 '/tmp/swarming_targets', '--isolate-map-file',
422 '/fake_src/testing/buildbot/gn_isolate_map.pyl'
423 ],
424 files=test_files,
425 ret=0)
Edward Lemurbeffdd42017-09-27 13:07:47 +0200426
427 isolate_file = mbw.files['/fake_src/out/Default/base_unittests.isolate']
428 isolate_file_contents = ast.literal_eval(isolate_file)
429 files = isolate_file_contents['variables']['files']
430 command = isolate_file_contents['variables']['command']
431
432 self.assertEqual(files, [
Oleh Prypin739b8162018-05-17 13:28:29 +0200433 '../../.vpython',
Edward Lemurbeffdd42017-09-27 13:07:47 +0200434 '../../testing/test_env.py',
435 '../../third_party/gtest-parallel/gtest-parallel',
436 '../../third_party/gtest-parallel/gtest_parallel.py',
437 '../../tools_webrtc/gtest-parallel-wrapper.py',
438 'base_unittests',
439 ])
440 self.assertEqual(command, [
Jeremy Leconteaad4ba12021-11-23 14:32:09 +0100441 'vpython',
Edward Lemurbeffdd42017-09-27 13:07:47 +0200442 '../../testing/test_env.py',
443 '../../tools_webrtc/gtest-parallel-wrapper.py',
444 '--output_dir=${ISOLATED_OUTDIR}/test_logs',
Jeremy Lecontedc3a4c42021-11-19 10:42:03 +0100445 '--dump_json_test_results=${ISOLATED_OUTDIR}/gtest_output.json',
Edward Lemurbeffdd42017-09-27 13:07:47 +0200446 '--gtest_color=no',
447 '--timeout=500',
Edward Lemurbeffdd42017-09-27 13:07:47 +0200448 '--workers=1',
Yves Gerey2e0c6552018-10-08 21:59:25 +0200449 '--retry_failed=3',
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100450 './base_unittests',
Edward Lemurbeffdd42017-09-27 13:07:47 +0200451 '--asan=0',
452 '--lsan=0',
453 '--msan=0',
454 '--tsan=0',
455 ])
456
Oleh Prypinb708e932018-03-18 17:34:20 +0100457 def test_gen_script(self):
Edward Lemur20110752017-09-28 16:14:37 +0200458 test_files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100459 '/tmp/swarming_targets':
460 'base_unittests_script\n',
461 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
462 ("{'base_unittests_script': {"
463 " 'label': '//base:base_unittests',"
464 " 'type': 'script',"
465 " 'script': '//base/base_unittests_script.py',"
466 "}}\n"),
467 '/fake_src/out/Default/base_unittests.runtime_deps':
468 ("base_unittests\n"
469 "base_unittests_script.py\n"),
Edward Lemur20110752017-09-28 16:14:37 +0200470 }
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100471 mbw = self.check([
472 'gen', '-c', 'debug_goma', '//out/Default', '--swarming-targets-file',
473 '/tmp/swarming_targets', '--isolate-map-file',
474 '/fake_src/testing/buildbot/gn_isolate_map.pyl'
475 ],
476 files=test_files,
477 ret=0)
Edward Lemur20110752017-09-28 16:14:37 +0200478
479 isolate_file = (
480 mbw.files['/fake_src/out/Default/base_unittests_script.isolate'])
481 isolate_file_contents = ast.literal_eval(isolate_file)
482 files = isolate_file_contents['variables']['files']
483 command = isolate_file_contents['variables']['command']
484
485 self.assertEqual(files, [
Oleh Prypinb708e932018-03-18 17:34:20 +0100486 '../../.vpython', '../../testing/test_env.py',
487 'base_unittests', 'base_unittests_script.py',
Edward Lemur20110752017-09-28 16:14:37 +0200488 ])
489 self.assertEqual(command, [
Jeremy Leconte59b8a462021-12-01 13:42:44 +0100490 'vpython',
Edward Lemur20110752017-09-28 16:14:37 +0200491 '../../base/base_unittests_script.py',
492 ])
493
Oleh Prypinb708e932018-03-18 17:34:20 +0100494 def test_gen_raw(self):
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100495 test_files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100496 '/tmp/swarming_targets':
497 'base_unittests\n',
498 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
499 ("{'base_unittests': {"
500 " 'label': '//base:base_unittests',"
501 " 'type': 'raw',"
502 "}}\n"),
503 '/fake_src/out/Default/base_unittests.runtime_deps':
504 ("base_unittests\n"),
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100505 }
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100506 mbw = self.check([
507 'gen', '-c', 'debug_goma', '//out/Default', '--swarming-targets-file',
508 '/tmp/swarming_targets', '--isolate-map-file',
509 '/fake_src/testing/buildbot/gn_isolate_map.pyl'
510 ],
511 files=test_files,
512 ret=0)
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100513
514 isolate_file = mbw.files['/fake_src/out/Default/base_unittests.isolate']
515 isolate_file_contents = ast.literal_eval(isolate_file)
516 files = isolate_file_contents['variables']['files']
517 command = isolate_file_contents['variables']['command']
518
519 self.assertEqual(files, [
Oleh Prypin739b8162018-05-17 13:28:29 +0200520 '../../.vpython',
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100521 '../../testing/test_env.py',
Jeremy Lecontea2e3d802021-12-07 12:54:08 +0100522 '../../tools_webrtc/flags_compatibility.py',
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100523 'base_unittests',
524 ])
525 self.assertEqual(command, [
Jeremy Leconteaad4ba12021-11-23 14:32:09 +0100526 'vpython',
Jeremy Lecontea2e3d802021-12-07 12:54:08 +0100527 '../../tools_webrtc/flags_compatibility.py',
528 'vpython',
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100529 '../../testing/test_env.py',
530 './base_unittests',
531 '--asan=0',
532 '--lsan=0',
533 '--msan=0',
534 '--tsan=0',
535 ])
536
Oleh Prypinb708e932018-03-18 17:34:20 +0100537 def test_gen_non_parallel_console_test_launcher(self):
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800538 test_files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100539 '/tmp/swarming_targets':
540 'base_unittests\n',
541 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
542 ("{'base_unittests': {"
543 " 'label': '//base:base_unittests',"
544 " 'type': 'non_parallel_console_test_launcher',"
545 "}}\n"),
546 '/fake_src/out/Default/base_unittests.runtime_deps':
547 ("base_unittests\n"),
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800548 }
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100549 mbw = self.check([
550 'gen', '-c', 'debug_goma', '//out/Default', '--swarming-targets-file',
551 '/tmp/swarming_targets', '--isolate-map-file',
552 '/fake_src/testing/buildbot/gn_isolate_map.pyl'
553 ],
554 files=test_files,
555 ret=0)
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800556
557 isolate_file = mbw.files['/fake_src/out/Default/base_unittests.isolate']
558 isolate_file_contents = ast.literal_eval(isolate_file)
559 files = isolate_file_contents['variables']['files']
560 command = isolate_file_contents['variables']['command']
561
562 self.assertEqual(files, [
Oleh Prypin739b8162018-05-17 13:28:29 +0200563 '../../.vpython',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800564 '../../testing/test_env.py',
kjellander382f2b22017-04-11 04:07:01 -0700565 '../../third_party/gtest-parallel/gtest-parallel',
ehmaldonadoa7507eb2017-05-10 13:40:29 -0700566 '../../third_party/gtest-parallel/gtest_parallel.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200567 '../../tools_webrtc/gtest-parallel-wrapper.py',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800568 'base_unittests',
569 ])
570 self.assertEqual(command, [
Jeremy Leconteaad4ba12021-11-23 14:32:09 +0100571 'vpython',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800572 '../../testing/test_env.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200573 '../../tools_webrtc/gtest-parallel-wrapper.py',
kjellander382f2b22017-04-11 04:07:01 -0700574 '--output_dir=${ISOLATED_OUTDIR}/test_logs',
Jeremy Lecontedc3a4c42021-11-19 10:42:03 +0100575 '--dump_json_test_results=${ISOLATED_OUTDIR}/gtest_output.json',
ehmaldonado76e60e92017-05-04 06:18:26 -0700576 '--gtest_color=no',
577 '--timeout=900',
kjellander382f2b22017-04-11 04:07:01 -0700578 '--workers=1',
Yves Gerey2e0c6552018-10-08 21:59:25 +0200579 '--retry_failed=3',
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100580 './base_unittests',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800581 '--asan=0',
kjellander461a5602017-05-05 06:39:16 -0700582 '--lsan=0',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800583 '--msan=0',
584 '--tsan=0',
585 ])
586
Oleh Prypinb708e932018-03-18 17:34:20 +0100587 def test_isolate_windowed_test_launcher_linux(self):
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800588 test_files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100589 '/tmp/swarming_targets':
590 'base_unittests\n',
591 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
592 ("{'base_unittests': {"
593 " 'label': '//base:base_unittests',"
594 " 'type': 'windowed_test_launcher',"
595 "}}\n"),
596 '/fake_src/out/Default/base_unittests.runtime_deps':
597 ("base_unittests\n"
598 "some_resource_file\n"),
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800599 }
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100600 mbw = self.check([
601 'gen', '-c', 'debug_goma', '//out/Default', '--swarming-targets-file',
602 '/tmp/swarming_targets', '--isolate-map-file',
603 '/fake_src/testing/buildbot/gn_isolate_map.pyl'
604 ],
605 files=test_files,
606 ret=0)
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800607
608 isolate_file = mbw.files['/fake_src/out/Default/base_unittests.isolate']
609 isolate_file_contents = ast.literal_eval(isolate_file)
610 files = isolate_file_contents['variables']['files']
611 command = isolate_file_contents['variables']['command']
612
613 self.assertEqual(files, [
Oleh Prypin739b8162018-05-17 13:28:29 +0200614 '../../.vpython',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800615 '../../testing/test_env.py',
616 '../../testing/xvfb.py',
617 '../../third_party/gtest-parallel/gtest-parallel',
ehmaldonadoa7507eb2017-05-10 13:40:29 -0700618 '../../third_party/gtest-parallel/gtest_parallel.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200619 '../../tools_webrtc/gtest-parallel-wrapper.py',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800620 'base_unittests',
621 'some_resource_file',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800622 ])
623 self.assertEqual(command, [
Jeremy Leconteaad4ba12021-11-23 14:32:09 +0100624 'vpython',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800625 '../../testing/xvfb.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200626 '../../tools_webrtc/gtest-parallel-wrapper.py',
ehmaldonado55833842017-02-13 03:58:13 -0800627 '--output_dir=${ISOLATED_OUTDIR}/test_logs',
Jeremy Lecontedc3a4c42021-11-19 10:42:03 +0100628 '--dump_json_test_results=${ISOLATED_OUTDIR}/gtest_output.json',
ehmaldonado76e60e92017-05-04 06:18:26 -0700629 '--gtest_color=no',
630 '--timeout=900',
ehmaldonado2a280352017-05-05 04:33:57 -0700631 '--retry_failed=3',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800632 './base_unittests',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800633 '--asan=0',
kjellander461a5602017-05-05 06:39:16 -0700634 '--lsan=0',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800635 '--msan=0',
636 '--tsan=0',
637 ])
638
Oleh Prypinb708e932018-03-18 17:34:20 +0100639 def test_gen_windowed_test_launcher_win(self):
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800640 files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100641 'c:\\fake_src\\out\\Default\\tmp\\swarming_targets':
642 'unittests\n',
643 'c:\\fake_src\\testing\\buildbot\\gn_isolate_map.pyl':
644 ("{'unittests': {"
645 " 'label': '//somewhere:unittests',"
646 " 'type': 'windowed_test_launcher',"
647 "}}\n"),
648 r'c:\fake_src\out\Default\unittests.exe.runtime_deps':
649 ("unittests.exe\n"
650 "some_dependency\n"),
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800651 }
652 mbw = self.fake_mbw(files=files, win32=True)
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100653 self.check([
654 'gen', '-c', 'debug_goma', '--swarming-targets-file',
655 'c:\\fake_src\\out\\Default\\tmp\\swarming_targets',
656 '--isolate-map-file',
657 'c:\\fake_src\\testing\\buildbot\\gn_isolate_map.pyl', '//out/Default'
658 ],
659 mbw=mbw,
660 ret=0)
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800661
662 isolate_file = mbw.files['c:\\fake_src\\out\\Default\\unittests.isolate']
663 isolate_file_contents = ast.literal_eval(isolate_file)
664 files = isolate_file_contents['variables']['files']
665 command = isolate_file_contents['variables']['command']
666
667 self.assertEqual(files, [
Oleh Prypin739b8162018-05-17 13:28:29 +0200668 '../../.vpython',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800669 '../../testing/test_env.py',
670 '../../third_party/gtest-parallel/gtest-parallel',
ehmaldonadoa7507eb2017-05-10 13:40:29 -0700671 '../../third_party/gtest-parallel/gtest_parallel.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200672 '../../tools_webrtc/gtest-parallel-wrapper.py',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800673 'some_dependency',
674 'unittests.exe',
675 ])
676 self.assertEqual(command, [
Jeremy Leconteaad4ba12021-11-23 14:32:09 +0100677 'vpython',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800678 '../../testing/test_env.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200679 '../../tools_webrtc/gtest-parallel-wrapper.py',
ehmaldonado55833842017-02-13 03:58:13 -0800680 '--output_dir=${ISOLATED_OUTDIR}\\test_logs',
Jeremy Lecontedc3a4c42021-11-19 10:42:03 +0100681 '--dump_json_test_results=${ISOLATED_OUTDIR}\\gtest_output.json',
ehmaldonado76e60e92017-05-04 06:18:26 -0700682 '--gtest_color=no',
683 '--timeout=900',
ehmaldonado2a280352017-05-05 04:33:57 -0700684 '--retry_failed=3',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800685 r'.\unittests.exe',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800686 '--asan=0',
kjellander461a5602017-05-05 06:39:16 -0700687 '--lsan=0',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800688 '--msan=0',
689 '--tsan=0',
690 ])
691
Oleh Prypinb708e932018-03-18 17:34:20 +0100692 def test_gen_console_test_launcher(self):
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800693 test_files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100694 '/tmp/swarming_targets':
695 'base_unittests\n',
696 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
697 ("{'base_unittests': {"
698 " 'label': '//base:base_unittests',"
699 " 'type': 'console_test_launcher',"
700 "}}\n"),
701 '/fake_src/out/Default/base_unittests.runtime_deps':
702 ("base_unittests\n"),
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800703 }
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100704 mbw = self.check([
705 'gen', '-c', 'debug_goma', '//out/Default', '--swarming-targets-file',
706 '/tmp/swarming_targets', '--isolate-map-file',
707 '/fake_src/testing/buildbot/gn_isolate_map.pyl'
708 ],
709 files=test_files,
710 ret=0)
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800711
712 isolate_file = mbw.files['/fake_src/out/Default/base_unittests.isolate']
713 isolate_file_contents = ast.literal_eval(isolate_file)
714 files = isolate_file_contents['variables']['files']
715 command = isolate_file_contents['variables']['command']
716
717 self.assertEqual(files, [
Oleh Prypin739b8162018-05-17 13:28:29 +0200718 '../../.vpython',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800719 '../../testing/test_env.py',
720 '../../third_party/gtest-parallel/gtest-parallel',
ehmaldonadoa7507eb2017-05-10 13:40:29 -0700721 '../../third_party/gtest-parallel/gtest_parallel.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200722 '../../tools_webrtc/gtest-parallel-wrapper.py',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800723 'base_unittests',
724 ])
725 self.assertEqual(command, [
Jeremy Leconteaad4ba12021-11-23 14:32:09 +0100726 'vpython',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800727 '../../testing/test_env.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200728 '../../tools_webrtc/gtest-parallel-wrapper.py',
ehmaldonado55833842017-02-13 03:58:13 -0800729 '--output_dir=${ISOLATED_OUTDIR}/test_logs',
Jeremy Lecontedc3a4c42021-11-19 10:42:03 +0100730 '--dump_json_test_results=${ISOLATED_OUTDIR}/gtest_output.json',
ehmaldonado76e60e92017-05-04 06:18:26 -0700731 '--gtest_color=no',
732 '--timeout=900',
ehmaldonado2a280352017-05-05 04:33:57 -0700733 '--retry_failed=3',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800734 './base_unittests',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800735 '--asan=0',
kjellander461a5602017-05-05 06:39:16 -0700736 '--lsan=0',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800737 '--msan=0',
738 '--tsan=0',
739 ])
740
Oleh Prypin739b8162018-05-17 13:28:29 +0200741 def test_isolate_test_launcher_with_webcam(self):
742 test_files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100743 '/tmp/swarming_targets':
744 'base_unittests\n',
745 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
746 ("{'base_unittests': {"
747 " 'label': '//base:base_unittests',"
748 " 'type': 'console_test_launcher',"
749 " 'use_webcam': True,"
750 "}}\n"),
751 '/fake_src/out/Default/base_unittests.runtime_deps':
752 ("base_unittests\n"
753 "some_resource_file\n"),
Oleh Prypin739b8162018-05-17 13:28:29 +0200754 }
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100755 mbw = self.check([
756 'gen', '-c', 'debug_goma', '//out/Default', '--swarming-targets-file',
757 '/tmp/swarming_targets', '--isolate-map-file',
758 '/fake_src/testing/buildbot/gn_isolate_map.pyl'
759 ],
760 files=test_files,
761 ret=0)
Oleh Prypin739b8162018-05-17 13:28:29 +0200762
763 isolate_file = mbw.files['/fake_src/out/Default/base_unittests.isolate']
764 isolate_file_contents = ast.literal_eval(isolate_file)
765 files = isolate_file_contents['variables']['files']
766 command = isolate_file_contents['variables']['command']
767
768 self.assertEqual(files, [
769 '../../.vpython',
770 '../../testing/test_env.py',
771 '../../third_party/gtest-parallel/gtest-parallel',
772 '../../third_party/gtest-parallel/gtest_parallel.py',
773 '../../tools_webrtc/ensure_webcam_is_running.py',
774 '../../tools_webrtc/gtest-parallel-wrapper.py',
775 'base_unittests',
776 'some_resource_file',
777 ])
778 self.assertEqual(command, [
Jeremy Leconteaad4ba12021-11-23 14:32:09 +0100779 'vpython',
Oleh Prypin739b8162018-05-17 13:28:29 +0200780 '../../tools_webrtc/ensure_webcam_is_running.py',
Jeremy Leconteaad4ba12021-11-23 14:32:09 +0100781 'vpython',
Oleh Prypin739b8162018-05-17 13:28:29 +0200782 '../../testing/test_env.py',
783 '../../tools_webrtc/gtest-parallel-wrapper.py',
784 '--output_dir=${ISOLATED_OUTDIR}/test_logs',
Jeremy Lecontedc3a4c42021-11-19 10:42:03 +0100785 '--dump_json_test_results=${ISOLATED_OUTDIR}/gtest_output.json',
Oleh Prypin739b8162018-05-17 13:28:29 +0200786 '--gtest_color=no',
787 '--timeout=900',
788 '--retry_failed=3',
789 './base_unittests',
Oleh Prypin739b8162018-05-17 13:28:29 +0200790 '--asan=0',
791 '--lsan=0',
792 '--msan=0',
793 '--tsan=0',
794 ])
795
Oleh Prypinb708e932018-03-18 17:34:20 +0100796 def test_isolate(self):
kjellandera013a022016-11-14 05:54:22 -0800797 files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100798 '/fake_src/out/Default/toolchain.ninja':
799 "",
800 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
801 ("{'base_unittests': {"
802 " 'label': '//base:base_unittests',"
803 " 'type': 'non_parallel_console_test_launcher',"
804 "}}\n"),
805 '/fake_src/out/Default/base_unittests.runtime_deps':
806 ("base_unittests\n"),
kjellandera013a022016-11-14 05:54:22 -0800807 }
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100808 self.check(
809 ['isolate', '-c', 'debug_goma', '//out/Default', 'base_unittests'],
810 files=files,
811 ret=0)
kjellandera013a022016-11-14 05:54:22 -0800812
813 # test running isolate on an existing build_dir
814 files['/fake_src/out/Default/args.gn'] = 'is_debug = True\n'
815 self.check(['isolate', '//out/Default', 'base_unittests'],
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100816 files=files,
817 ret=0)
kjellandera013a022016-11-14 05:54:22 -0800818 files['/fake_src/out/Default/mb_type'] = 'gn\n'
819 self.check(['isolate', '//out/Default', 'base_unittests'],
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100820 files=files,
821 ret=0)
kjellandera013a022016-11-14 05:54:22 -0800822
Oleh Prypinb708e932018-03-18 17:34:20 +0100823 def test_run(self):
kjellandera013a022016-11-14 05:54:22 -0800824 files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100825 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
826 ("{'base_unittests': {"
827 " 'label': '//base:base_unittests',"
828 " 'type': 'windowed_test_launcher',"
829 "}}\n"),
830 '/fake_src/out/Default/base_unittests.runtime_deps':
831 ("base_unittests\n"),
kjellandera013a022016-11-14 05:54:22 -0800832 }
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100833 self.check(['run', '-c', 'debug_goma', '//out/Default', 'base_unittests'],
834 files=files,
835 ret=0)
kjellandera013a022016-11-14 05:54:22 -0800836
Oleh Prypinb708e932018-03-18 17:34:20 +0100837 def test_run_swarmed(self):
838 files = {
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100839 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
840 ("{'base_unittests': {"
841 " 'label': '//base:base_unittests',"
842 " 'type': 'console_test_launcher',"
843 "}}\n"),
844 '/fake_src/out/Default/base_unittests.runtime_deps':
845 ("base_unittests\n"),
846 '/fake_src/out/Default/base_unittests.archive.json':
847 ("{\"base_unittests\":\"fake_hash\"}"),
848 '/fake_src/third_party/depot_tools/cipd_manifest.txt':
849 ("# vpython\n"
850 "/some/vpython/pkg git_revision:deadbeef\n"),
Oleh Prypinb708e932018-03-18 17:34:20 +0100851 }
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100852 task_json = json.dumps({'tasks': [{'task_id': '00000'}]})
853 collect_json = json.dumps({'00000': {'results': {}}})
kjellandera013a022016-11-14 05:54:22 -0800854
Oleh Prypinb708e932018-03-18 17:34:20 +0100855 mbw = self.fake_mbw(files=files)
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100856 mbw.files[mbw.PathJoin(mbw.TempDir(), 'task.json')] = task_json
857 mbw.files[mbw.PathJoin(mbw.TempDir(), 'collect_output.json')] = collect_json
858 original_impl = mbw.ToSrcRelPath
859
860 def to_src_rel_path_stub(path):
861 if path.endswith('base_unittests.archive.json'):
862 return 'base_unittests.archive.json'
863 return original_impl(path)
864
865 mbw.ToSrcRelPath = to_src_rel_path_stub
866
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100867 self.check(
868 ['run', '-s', '-c', 'debug_goma', '//out/Default', 'base_unittests'],
869 mbw=mbw,
870 ret=0)
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100871 mbw = self.fake_mbw(files=files)
872 mbw.files[mbw.PathJoin(mbw.TempDir(), 'task.json')] = task_json
873 mbw.files[mbw.PathJoin(mbw.TempDir(), 'collect_output.json')] = collect_json
874 mbw.ToSrcRelPath = to_src_rel_path_stub
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100875 self.check([
876 'run', '-s', '-c', 'debug_goma', '-d', 'os', 'Win7', '//out/Default',
877 'base_unittests'
878 ],
879 mbw=mbw,
880 ret=0)
Oleh Prypinb708e932018-03-18 17:34:20 +0100881
882 def test_lookup(self):
883 self.check(['lookup', '-c', 'debug_goma'], ret=0)
884
Oleh Prypind7e2fb32019-05-31 13:25:39 +0200885 def test_quiet_lookup(self):
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100886 self.check(['lookup', '-c', 'debug_goma', '--quiet'],
887 ret=0,
Oleh Prypind7e2fb32019-05-31 13:25:39 +0200888 out=('is_debug = true\n'
889 'use_goma = true\n'))
890
Oleh Prypinb708e932018-03-18 17:34:20 +0100891 def test_lookup_goma_dir_expansion(self):
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100892 self.check(['lookup', '-c', 'rel_bot', '-g', '/foo'],
893 ret=0,
kjellandera013a022016-11-14 05:54:22 -0800894 out=('\n'
895 'Writing """\\\n'
Oleh Prypinb708e932018-03-18 17:34:20 +0100896 'enable_doom_melon = true\n'
kjellandera013a022016-11-14 05:54:22 -0800897 'goma_dir = "/foo"\n'
898 'is_debug = false\n'
899 'use_goma = true\n'
900 '""" to _path_/args.gn.\n\n'
901 '/fake_src/buildtools/linux64/gn gen _path_\n'))
902
kjellandera013a022016-11-14 05:54:22 -0800903 def test_help(self):
904 orig_stdout = sys.stdout
905 try:
Nidhi Jaju23949772021-12-02 10:38:50 +0000906 sys.stdout = StringIO()
kjellandera013a022016-11-14 05:54:22 -0800907 self.assertRaises(SystemExit, self.check, ['-h'])
908 self.assertRaises(SystemExit, self.check, ['help'])
909 self.assertRaises(SystemExit, self.check, ['help', 'gen'])
910 finally:
911 sys.stdout = orig_stdout
912
913 def test_multiple_phases(self):
914 # Check that not passing a --phase to a multi-phase builder fails.
Mirko Bonadei8606b9c2021-01-12 14:29:40 +0100915 mbw = self.check(['lookup', '-m', 'fake_group', '-b', 'fake_multi_phase'],
kjellandera013a022016-11-14 05:54:22 -0800916 ret=1)
917 self.assertIn('Must specify a build --phase', mbw.out)
918
919 # Check that passing a --phase to a single-phase builder fails.
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100920 mbw = self.check([
921 'lookup', '-m', 'fake_group', '-b', 'fake_builder', '--phase', 'phase_1'
922 ],
923 ret=1)
kjellandera013a022016-11-14 05:54:22 -0800924 self.assertIn('Must not specify a build --phase', mbw.out)
925
926 # Check that passing a wrong phase key to a multi-phase builder fails.
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100927 mbw = self.check([
928 'lookup', '-m', 'fake_group', '-b', 'fake_multi_phase', '--phase',
929 'wrong_phase'
930 ],
931 ret=1)
kjellandera013a022016-11-14 05:54:22 -0800932 self.assertIn('Phase wrong_phase doesn\'t exist', mbw.out)
933
934 # Check that passing a correct phase key to a multi-phase builder passes.
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100935 mbw = self.check([
936 'lookup', '-m', 'fake_group', '-b', 'fake_multi_phase', '--phase',
937 'phase_1'
938 ],
939 ret=0)
kjellandera013a022016-11-14 05:54:22 -0800940 self.assertIn('phase = 1', mbw.out)
941
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100942 mbw = self.check([
943 'lookup', '-m', 'fake_group', '-b', 'fake_multi_phase', '--phase',
944 'phase_2'
945 ],
946 ret=0)
kjellandera013a022016-11-14 05:54:22 -0800947 self.assertIn('phase = 2', mbw.out)
948
949 def test_validate(self):
950 mbw = self.fake_mbw()
951 self.check(['validate'], mbw=mbw, ret=0)
952
kjellandera013a022016-11-14 05:54:22 -0800953
954if __name__ == '__main__':
955 unittest.main()