blob: 109d2bcb2da9960c49369b15fbe619b8d0574484 [file] [log] [blame]
Christoffer Jansson4e8a7732022-02-08 09:01:12 +01001#!/usr/bin/env vpython3
2
kjellandera013a022016-11-14 05:54:22 -08003# Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
4#
5# Use of this source code is governed by a BSD-style license
6# that can be found in the LICENSE file in the root of the source
7# tree. An additional intellectual property rights grant can be found
8# in the file PATENTS. All contributing project authors may
9# be found in the AUTHORS file in the root of the source tree.
10
11"""Tests for mb.py."""
12
ehmaldonadoed8c8ed2016-11-23 12:58:35 -080013import ast
kjellandera013a022016-11-14 05:54:22 -080014import os
Mirko Bonadei989e6e72021-01-29 14:34:52 +010015import re
kjellandera013a022016-11-14 05:54:22 -080016import sys
Mirko Bonadei989e6e72021-01-29 14:34:52 +010017import tempfile
kjellandera013a022016-11-14 05:54:22 -080018import unittest
19
Jeremy Leconte81635f32022-03-29 12:32:14 +020020_SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
21_SRC_DIR = os.path.dirname(os.path.dirname(_SCRIPT_DIR))
22sys.path.insert(0, _SRC_DIR)
23
24from tools_webrtc.mb import mb
kjellandera013a022016-11-14 05:54:22 -080025
26
Jeremy Leconte81635f32022-03-29 12:32:14 +020027class FakeMBW(mb.WebRTCMetaBuildWrapper):
kjellandera013a022016-11-14 05:54:22 -080028 def __init__(self, win32=False):
Jeremy Leconteac5cf782022-03-31 11:55:01 +020029 super().__init__()
kjellandera013a022016-11-14 05:54:22 -080030
31 # Override vars for test portability.
32 if win32:
Jeremy Leconte81635f32022-03-29 12:32:14 +020033 self.chromium_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'
Christoffer Jansson4e8a7732022-02-08 09:01:12 +010038 self.executable = 'c:\\python\\vpython3.exe'
kjellandera013a022016-11-14 05:54:22 -080039 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:
Jeremy Leconte81635f32022-03-29 12:32:14 +020042 self.chromium_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'
Christoffer Jansson4e8a7732022-02-08 09:01:12 +010045 self.executable = '/usr/bin/vpython3'
kjellandera013a022016-11-14 05:54:22 -080046 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):
Jeremy Lecontee2881612022-04-19 14:03:35 +020060 # pylint: disable=no-self-use
kjellandera013a022016-11-14 05:54:22 -080061 return '$HOME/%s' % path
62
63 def Exists(self, path):
Mirko Bonadei989e6e72021-01-29 14:34:52 +010064 abs_path = self._AbsPath(path)
Jeremy Leconteac5cf782022-03-31 11:55:01 +020065 return self.files.get(abs_path) is not None or abs_path in self.dirs
Jeremy Leconte81635f32022-03-29 12:32:14 +020066
67 def ListDir(self, path):
68 dir_contents = []
69 for f in list(self.files.keys()) + list(self.dirs):
70 head, _ = os.path.split(f)
71 if head == path:
72 dir_contents.append(f)
73 return dir_contents
kjellandera013a022016-11-14 05:54:22 -080074
75 def MaybeMakeDirectory(self, path):
Mirko Bonadei989e6e72021-01-29 14:34:52 +010076 abpath = self._AbsPath(path)
77 self.dirs.add(abpath)
kjellandera013a022016-11-14 05:54:22 -080078
79 def PathJoin(self, *comps):
80 return self.sep.join(comps)
81
82 def ReadFile(self, path):
Jeremy Leconte81635f32022-03-29 12:32:14 +020083 try:
84 return self.files[self._AbsPath(path)]
Jeremy Leconteac5cf782022-03-31 11:55:01 +020085 except KeyError as e:
86 raise IOError('%s not found' % path) from e
kjellandera013a022016-11-14 05:54:22 -080087
88 def WriteFile(self, path, contents, force_verbose=False):
89 if self.args.dryrun or self.args.verbose or force_verbose:
90 self.Print('\nWriting """\\\n%s""" to %s.\n' % (contents, path))
Mirko Bonadei989e6e72021-01-29 14:34:52 +010091 abpath = self._AbsPath(path)
92 self.files[abpath] = contents
kjellandera013a022016-11-14 05:54:22 -080093
Jeremy Leconte3d38cd32022-08-16 15:13:58 +020094 def Call(self, cmd, env=None, capture_output=True, stdin=None):
Jeremy Leconte81635f32022-03-29 12:32:14 +020095 del env
Jeremy Leconte3d38cd32022-08-16 15:13:58 +020096 del capture_output
Jeremy Leconte81635f32022-03-29 12:32:14 +020097 del stdin
kjellandera013a022016-11-14 05:54:22 -080098 self.calls.append(cmd)
99 if self.cmds:
100 return self.cmds.pop(0)
101 return 0, '', ''
102
103 def Print(self, *args, **kwargs):
104 sep = kwargs.get('sep', ' ')
105 end = kwargs.get('end', '\n')
106 f = kwargs.get('file', sys.stdout)
107 if f == sys.stderr:
108 self.err += sep.join(args) + end
109 else:
110 self.out += sep.join(args) + end
111
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100112 def TempDir(self):
113 tmp_dir = os.path.join(tempfile.gettempdir(), 'mb_test')
114 self.dirs.add(tmp_dir)
115 return tmp_dir
116
Jeremy Leconte81635f32022-03-29 12:32:14 +0200117 def TempFile(self, mode='w'):
118 del mode
kjellandera013a022016-11-14 05:54:22 -0800119 return FakeFile(self.files)
120
121 def RemoveFile(self, path):
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100122 abpath = self._AbsPath(path)
123 self.files[abpath] = None
kjellandera013a022016-11-14 05:54:22 -0800124
Jeremy Leconte81635f32022-03-29 12:32:14 +0200125 def RemoveDirectory(self, abs_path):
126 # Normalize the passed-in path to handle different working directories
127 # used during unit testing.
128 abs_path = self._AbsPath(abs_path)
129 self.rmdirs.append(abs_path)
130 files_to_delete = [f for f in self.files if f.startswith(abs_path)]
kjellandera013a022016-11-14 05:54:22 -0800131 for f in files_to_delete:
132 self.files[f] = None
133
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100134 def _AbsPath(self, path):
135 if not ((self.platform == 'win32' and path.startswith('c:')) or
136 (self.platform != 'win32' and path.startswith('/'))):
137 path = self.PathJoin(self.cwd, path)
138 if self.sep == '\\':
139 return re.sub(r'\\+', r'\\', path)
Nidhi Jaju23949772021-12-02 10:38:50 +0000140 return re.sub('/+', '/', path)
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100141
kjellandera013a022016-11-14 05:54:22 -0800142
Jeremy Leconteac5cf782022-03-31 11:55:01 +0200143class FakeFile:
144 # pylint: disable=invalid-name
kjellandera013a022016-11-14 05:54:22 -0800145 def __init__(self, files):
146 self.name = '/tmp/file'
147 self.buf = ''
148 self.files = files
149
150 def write(self, contents):
151 self.buf += contents
152
153 def close(self):
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100154 self.files[self.name] = self.buf
kjellandera013a022016-11-14 05:54:22 -0800155
156
157TEST_CONFIG = """\
158{
Mirko Bonadei8606b9c2021-01-12 14:29:40 +0100159 'builder_groups': {
kjellandera013a022016-11-14 05:54:22 -0800160 'chromium': {},
Mirko Bonadei8606b9c2021-01-12 14:29:40 +0100161 'fake_group': {
Oleh Prypinb708e932018-03-18 17:34:20 +0100162 'fake_builder': 'rel_bot',
163 'fake_debug_builder': 'debug_goma',
Jeremy Leconte81635f32022-03-29 12:32:14 +0200164 'fake_args_bot': 'fake_args_bot',
Oleh Prypinb708e932018-03-18 17:34:20 +0100165 'fake_multi_phase': { 'phase_1': 'phase_1', 'phase_2': 'phase_2'},
166 'fake_android_bot': 'android_bot',
Jeremy Leconte81635f32022-03-29 12:32:14 +0200167 'fake_args_file': 'args_file_goma',
168 'fake_ios_error': 'ios_error',
kjellandera013a022016-11-14 05:54:22 -0800169 },
170 },
171 'configs': {
Jeremy Leconte81635f32022-03-29 12:32:14 +0200172 'args_file_goma': ['fake_args_bot', 'goma'],
173 'fake_args_bot': ['fake_args_bot'],
Oleh Prypinb708e932018-03-18 17:34:20 +0100174 'rel_bot': ['rel', 'goma', 'fake_feature1'],
175 'debug_goma': ['debug', 'goma'],
Jeremy Leconte81635f32022-03-29 12:32:14 +0200176 'phase_1': ['rel', 'phase_1'],
177 'phase_2': ['rel', 'phase_2'],
Oleh Prypinb708e932018-03-18 17:34:20 +0100178 'android_bot': ['android'],
Jeremy Leconte81635f32022-03-29 12:32:14 +0200179 'ios_error': ['error'],
kjellandera013a022016-11-14 05:54:22 -0800180 },
181 'mixins': {
Jeremy Leconte81635f32022-03-29 12:32:14 +0200182 'error': {
183 'gn_args': 'error',
184 },
185 'fake_args_bot': {
186 'args_file': '//build/args/bots/fake_group/fake_args_bot.gn',
187 },
kjellandera013a022016-11-14 05:54:22 -0800188 'fake_feature1': {
189 'gn_args': 'enable_doom_melon=true',
kjellandera013a022016-11-14 05:54:22 -0800190 },
kjellandera013a022016-11-14 05:54:22 -0800191 'goma': {
192 'gn_args': 'use_goma=true',
kjellandera013a022016-11-14 05:54:22 -0800193 },
194 'phase_1': {
195 'gn_args': 'phase=1',
kjellandera013a022016-11-14 05:54:22 -0800196 },
197 'phase_2': {
198 'gn_args': 'phase=2',
kjellandera013a022016-11-14 05:54:22 -0800199 },
200 'rel': {
Jeremy Leconte81635f32022-03-29 12:32:14 +0200201 'gn_args': 'is_debug=false dcheck_always_on=false',
kjellandera013a022016-11-14 05:54:22 -0800202 },
203 'debug': {
204 'gn_args': 'is_debug=true',
205 },
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800206 'android': {
Jeremy Leconte81635f32022-03-29 12:32:14 +0200207 'gn_args': 'target_os="android" dcheck_always_on=false',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800208 }
kjellandera013a022016-11-14 05:54:22 -0800209 },
210}
211"""
212
kjellandera013a022016-11-14 05:54:22 -0800213
Jeremy Leconteac5cf782022-03-31 11:55:01 +0200214def CreateFakeMBW(files=None, win32=False):
215 mbw = FakeMBW(win32=win32)
216 mbw.files.setdefault(mbw.default_config, TEST_CONFIG)
217 mbw.files.setdefault(
218 mbw.ToAbsPath('//testing/buildbot/gn_isolate_map.pyl'), '''{
219 "foo_unittests": {
220 "label": "//foo:foo_unittests",
221 "type": "console_test_launcher",
222 "args": [],
223 },
224 }''')
225 mbw.files.setdefault(
226 mbw.ToAbsPath('//build/args/bots/fake_group/fake_args_bot.gn'),
227 'is_debug = false\ndcheck_always_on=false\n')
228 mbw.files.setdefault(mbw.ToAbsPath('//tools/mb/rts_banned_suites.json'), '{}')
229 if files:
230 for path, contents in list(files.items()):
231 mbw.files[path] = contents
232 if path.endswith('.runtime_deps'):
233
Jeremy Leconte3d38cd32022-08-16 15:13:58 +0200234 def FakeCall(cmd, env=None, capture_output=True, stdin=None):
Jeremy Leconteac5cf782022-03-31 11:55:01 +0200235 # pylint: disable=cell-var-from-loop
236 del cmd
237 del env
Jeremy Leconte3d38cd32022-08-16 15:13:58 +0200238 del capture_output
Jeremy Leconteac5cf782022-03-31 11:55:01 +0200239 del stdin
240 mbw.files[path] = contents
241 return 0, '', ''
242
243 # pylint: disable=invalid-name
244 mbw.Call = FakeCall
245 return mbw
246
247
kjellandera013a022016-11-14 05:54:22 -0800248class UnitTest(unittest.TestCase):
Jeremy Leconteac5cf782022-03-31 11:55:01 +0200249 # pylint: disable=invalid-name
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100250 def check(self,
251 args,
252 mbw=None,
253 files=None,
254 out=None,
255 err=None,
256 ret=None,
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100257 env=None):
kjellandera013a022016-11-14 05:54:22 -0800258 if not mbw:
Jeremy Leconteac5cf782022-03-31 11:55:01 +0200259 mbw = CreateFakeMBW(files)
kjellandera013a022016-11-14 05:54:22 -0800260
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100261 try:
262 prev_env = os.environ.copy()
263 os.environ = env if env else prev_env
264 actual_ret = mbw.Main(args)
265 finally:
266 os.environ = prev_env
267 self.assertEqual(
268 actual_ret, ret,
269 "ret: %s, out: %s, err: %s" % (actual_ret, mbw.out, mbw.err))
kjellandera013a022016-11-14 05:54:22 -0800270 if out is not None:
271 self.assertEqual(mbw.out, out)
272 if err is not None:
273 self.assertEqual(mbw.err, err)
274 return mbw
275
Oleh Prypinb708e932018-03-18 17:34:20 +0100276 def test_gen_swarming(self):
kjellandera013a022016-11-14 05:54:22 -0800277 files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100278 '/tmp/swarming_targets':
Jeremy Leconte7c942912022-04-25 21:05:27 +0200279 'foo_unittests\n',
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100280 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
Jeremy Leconte7c942912022-04-25 21:05:27 +0200281 ("{'foo_unittests': {"
282 " 'label': '//foo:foo_unittests',"
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100283 " 'type': 'raw',"
284 " 'args': [],"
285 "}}\n"),
Jeremy Leconte7c942912022-04-25 21:05:27 +0200286 '/fake_src/out/Default/foo_unittests.runtime_deps': ("foo_unittests\n"),
kjellandera013a022016-11-14 05:54:22 -0800287 }
Jeremy Leconteac5cf782022-03-31 11:55:01 +0200288 mbw = CreateFakeMBW(files)
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100289 self.check([
290 'gen', '-c', 'debug_goma', '--swarming-targets-file',
291 '/tmp/swarming_targets', '//out/Default'
292 ],
293 mbw=mbw,
294 ret=0)
Jeremy Leconte7c942912022-04-25 21:05:27 +0200295 self.assertIn('/fake_src/out/Default/foo_unittests.isolate', mbw.files)
296 self.assertIn('/fake_src/out/Default/foo_unittests.isolated.gen.json',
kjellandera013a022016-11-14 05:54:22 -0800297 mbw.files)
298
Oleh Prypinb708e932018-03-18 17:34:20 +0100299 def test_gen_swarming_android(self):
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800300 test_files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100301 '/tmp/swarming_targets':
Jeremy Leconte7c942912022-04-25 21:05:27 +0200302 'foo_unittests\n',
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100303 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
Jeremy Leconte7c942912022-04-25 21:05:27 +0200304 ("{'foo_unittests': {"
305 " 'label': '//foo:foo_unittests',"
Jeremy Leconte81635f32022-03-29 12:32:14 +0200306 " 'type': 'console_test_launcher',"
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100307 "}}\n"),
Jeremy Leconte7c942912022-04-25 21:05:27 +0200308 '/fake_src/out/Default/foo_unittests.runtime_deps': ("foo_unittests\n"),
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800309 }
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100310 mbw = self.check([
311 'gen', '-c', 'android_bot', '//out/Default', '--swarming-targets-file',
312 '/tmp/swarming_targets', '--isolate-map-file',
313 '/fake_src/testing/buildbot/gn_isolate_map.pyl'
314 ],
315 files=test_files,
316 ret=0)
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800317
Jeremy Leconte7c942912022-04-25 21:05:27 +0200318 isolate_file = mbw.files['/fake_src/out/Default/foo_unittests.isolate']
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800319 isolate_file_contents = ast.literal_eval(isolate_file)
320 files = isolate_file_contents['variables']['files']
321 command = isolate_file_contents['variables']['command']
322
Jeremy Leconte7c942912022-04-25 21:05:27 +0200323 self.assertEqual(
324 files,
325 ['../../.vpython3', '../../testing/test_env.py', 'foo_unittests'])
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800326 self.assertEqual(command, [
Mirko Bonadei5d9ae862022-01-27 20:18:16 +0100327 'vpython3',
kjellanderf9e2a362017-03-24 12:17:33 -0700328 '../../build/android/test_wrapper/logdog_wrapper.py',
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100329 '--target',
Jeremy Leconte7c942912022-04-25 21:05:27 +0200330 'foo_unittests',
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100331 '--logdog-bin-cmd',
332 '../../bin/logdog_butler',
333 '--logcat-output-file',
334 '${ISOLATED_OUTDIR}/logcats',
ehmaldonado34623ce2017-09-08 07:03:13 -0700335 '--store-tombstones',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800336 ])
337
Oleh Prypinb708e932018-03-18 17:34:20 +0100338 def test_gen_swarming_android_junit_test(self):
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800339 test_files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100340 '/tmp/swarming_targets':
Jeremy Leconte7c942912022-04-25 21:05:27 +0200341 'foo_unittests\n',
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100342 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
Jeremy Leconte7c942912022-04-25 21:05:27 +0200343 ("{'foo_unittests': {"
344 " 'label': '//foo:foo_unittests',"
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100345 " 'type': 'junit_test',"
346 "}}\n"),
Jeremy Leconte7c942912022-04-25 21:05:27 +0200347 '/fake_src/out/Default/foo_unittests.runtime_deps': ("foo_unittests\n"),
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800348 }
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100349 mbw = self.check([
350 'gen', '-c', 'android_bot', '//out/Default', '--swarming-targets-file',
351 '/tmp/swarming_targets', '--isolate-map-file',
352 '/fake_src/testing/buildbot/gn_isolate_map.pyl'
353 ],
354 files=test_files,
355 ret=0)
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800356
Jeremy Leconte7c942912022-04-25 21:05:27 +0200357 isolate_file = mbw.files['/fake_src/out/Default/foo_unittests.isolate']
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800358 isolate_file_contents = ast.literal_eval(isolate_file)
359 files = isolate_file_contents['variables']['files']
360 command = isolate_file_contents['variables']['command']
361
Jeremy Leconte7c942912022-04-25 21:05:27 +0200362 self.assertEqual(
363 files,
364 ['../../.vpython3', '../../testing/test_env.py', 'foo_unittests'])
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800365 self.assertEqual(command, [
Mirko Bonadei5d9ae862022-01-27 20:18:16 +0100366 'vpython3',
kjellanderf9e2a362017-03-24 12:17:33 -0700367 '../../build/android/test_wrapper/logdog_wrapper.py',
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100368 '--target',
Jeremy Leconte7c942912022-04-25 21:05:27 +0200369 'foo_unittests',
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100370 '--logdog-bin-cmd',
371 '../../bin/logdog_butler',
372 '--logcat-output-file',
373 '${ISOLATED_OUTDIR}/logcats',
ehmaldonado34623ce2017-09-08 07:03:13 -0700374 '--store-tombstones',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800375 ])
376
Oleh Prypinb708e932018-03-18 17:34:20 +0100377 def test_gen_timeout(self):
Edward Lemurbeffdd42017-09-27 13:07:47 +0200378 test_files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100379 '/tmp/swarming_targets':
Jeremy Leconte7c942912022-04-25 21:05:27 +0200380 'foo_unittests\n',
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100381 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
Jeremy Leconte7c942912022-04-25 21:05:27 +0200382 ("{'foo_unittests': {"
383 " 'label': '//foo:foo_unittests',"
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100384 " 'type': 'non_parallel_console_test_launcher',"
385 " 'timeout': 500,"
386 "}}\n"),
Jeremy Leconte7c942912022-04-25 21:05:27 +0200387 '/fake_src/out/Default/foo_unittests.runtime_deps': ("foo_unittests\n"),
Edward Lemurbeffdd42017-09-27 13:07:47 +0200388 }
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100389 mbw = self.check([
390 'gen', '-c', 'debug_goma', '//out/Default', '--swarming-targets-file',
391 '/tmp/swarming_targets', '--isolate-map-file',
392 '/fake_src/testing/buildbot/gn_isolate_map.pyl'
393 ],
394 files=test_files,
395 ret=0)
Edward Lemurbeffdd42017-09-27 13:07:47 +0200396
Jeremy Leconte7c942912022-04-25 21:05:27 +0200397 isolate_file = mbw.files['/fake_src/out/Default/foo_unittests.isolate']
Edward Lemurbeffdd42017-09-27 13:07:47 +0200398 isolate_file_contents = ast.literal_eval(isolate_file)
399 files = isolate_file_contents['variables']['files']
400 command = isolate_file_contents['variables']['command']
401
402 self.assertEqual(files, [
Mirko Bonadei5d9ae862022-01-27 20:18:16 +0100403 '../../.vpython3',
Edward Lemurbeffdd42017-09-27 13:07:47 +0200404 '../../testing/test_env.py',
405 '../../third_party/gtest-parallel/gtest-parallel',
406 '../../third_party/gtest-parallel/gtest_parallel.py',
407 '../../tools_webrtc/gtest-parallel-wrapper.py',
Jeremy Leconte7c942912022-04-25 21:05:27 +0200408 'foo_unittests',
Edward Lemurbeffdd42017-09-27 13:07:47 +0200409 ])
410 self.assertEqual(command, [
Mirko Bonadei5d9ae862022-01-27 20:18:16 +0100411 'vpython3',
Edward Lemurbeffdd42017-09-27 13:07:47 +0200412 '../../testing/test_env.py',
413 '../../tools_webrtc/gtest-parallel-wrapper.py',
414 '--output_dir=${ISOLATED_OUTDIR}/test_logs',
415 '--gtest_color=no',
416 '--timeout=500',
Edward Lemurbeffdd42017-09-27 13:07:47 +0200417 '--workers=1',
Yves Gerey2e0c6552018-10-08 21:59:25 +0200418 '--retry_failed=3',
Jeremy Leconte7c942912022-04-25 21:05:27 +0200419 './foo_unittests',
Edward Lemurbeffdd42017-09-27 13:07:47 +0200420 '--asan=0',
421 '--lsan=0',
422 '--msan=0',
423 '--tsan=0',
424 ])
425
Oleh Prypinb708e932018-03-18 17:34:20 +0100426 def test_gen_script(self):
Edward Lemur20110752017-09-28 16:14:37 +0200427 test_files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100428 '/tmp/swarming_targets':
Jeremy Leconte7c942912022-04-25 21:05:27 +0200429 'foo_unittests_script\n',
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100430 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
Jeremy Leconte7c942912022-04-25 21:05:27 +0200431 ("{'foo_unittests_script': {"
432 " 'label': '//foo:foo_unittests',"
Jeremy Leconte137173c2022-03-29 07:12:54 +0000433 " 'type': 'script',"
Jeremy Leconte7c942912022-04-25 21:05:27 +0200434 " 'script': '//foo/foo_unittests_script.py',"
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100435 "}}\n"),
Jeremy Leconte7c942912022-04-25 21:05:27 +0200436 '/fake_src/out/Default/foo_unittests_script.runtime_deps':
437 ("foo_unittests\n"
438 "foo_unittests_script.py\n"),
Edward Lemur20110752017-09-28 16:14:37 +0200439 }
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100440 mbw = self.check([
441 'gen', '-c', 'debug_goma', '//out/Default', '--swarming-targets-file',
442 '/tmp/swarming_targets', '--isolate-map-file',
443 '/fake_src/testing/buildbot/gn_isolate_map.pyl'
444 ],
445 files=test_files,
446 ret=0)
Edward Lemur20110752017-09-28 16:14:37 +0200447
448 isolate_file = (
Jeremy Leconte7c942912022-04-25 21:05:27 +0200449 mbw.files['/fake_src/out/Default/foo_unittests_script.isolate'])
Edward Lemur20110752017-09-28 16:14:37 +0200450 isolate_file_contents = ast.literal_eval(isolate_file)
451 files = isolate_file_contents['variables']['files']
452 command = isolate_file_contents['variables']['command']
453
454 self.assertEqual(files, [
Jeremy Leconte7c942912022-04-25 21:05:27 +0200455 '../../.vpython3',
456 '../../testing/test_env.py',
457 'foo_unittests',
458 'foo_unittests_script.py',
Edward Lemur20110752017-09-28 16:14:37 +0200459 ])
460 self.assertEqual(command, [
Mirko Bonadei5d9ae862022-01-27 20:18:16 +0100461 'vpython3',
Jeremy Leconte7c942912022-04-25 21:05:27 +0200462 '../../foo/foo_unittests_script.py',
Edward Lemur20110752017-09-28 16:14:37 +0200463 ])
464
Oleh Prypinb708e932018-03-18 17:34:20 +0100465 def test_gen_raw(self):
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100466 test_files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100467 '/tmp/swarming_targets':
Jeremy Leconte7c942912022-04-25 21:05:27 +0200468 'foo_unittests\n',
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100469 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
Jeremy Leconte7c942912022-04-25 21:05:27 +0200470 ("{'foo_unittests': {"
471 " 'label': '//foo:foo_unittests',"
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100472 " 'type': 'raw',"
473 "}}\n"),
Jeremy Leconte7c942912022-04-25 21:05:27 +0200474 '/fake_src/out/Default/foo_unittests.runtime_deps': ("foo_unittests\n"),
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100475 }
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100476 mbw = self.check([
477 'gen', '-c', 'debug_goma', '//out/Default', '--swarming-targets-file',
478 '/tmp/swarming_targets', '--isolate-map-file',
479 '/fake_src/testing/buildbot/gn_isolate_map.pyl'
480 ],
481 files=test_files,
482 ret=0)
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100483
Jeremy Leconte7c942912022-04-25 21:05:27 +0200484 isolate_file = mbw.files['/fake_src/out/Default/foo_unittests.isolate']
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100485 isolate_file_contents = ast.literal_eval(isolate_file)
486 files = isolate_file_contents['variables']['files']
487 command = isolate_file_contents['variables']['command']
488
489 self.assertEqual(files, [
Mirko Bonadei5d9ae862022-01-27 20:18:16 +0100490 '../../.vpython3',
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100491 '../../testing/test_env.py',
Jeremy Lecontea2e3d802021-12-07 12:54:08 +0100492 '../../tools_webrtc/flags_compatibility.py',
Jeremy Leconte7c942912022-04-25 21:05:27 +0200493 'foo_unittests',
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100494 ])
495 self.assertEqual(command, [
Mirko Bonadei5d9ae862022-01-27 20:18:16 +0100496 'vpython3',
Jeremy Lecontea2e3d802021-12-07 12:54:08 +0100497 '../../tools_webrtc/flags_compatibility.py',
Jeremy Leconte7c942912022-04-25 21:05:27 +0200498 './foo_unittests',
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100499 ])
500
Oleh Prypinb708e932018-03-18 17:34:20 +0100501 def test_gen_non_parallel_console_test_launcher(self):
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800502 test_files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100503 '/tmp/swarming_targets':
Jeremy Leconte7c942912022-04-25 21:05:27 +0200504 'foo_unittests\n',
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100505 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
Jeremy Leconte7c942912022-04-25 21:05:27 +0200506 ("{'foo_unittests': {"
507 " 'label': '//foo:foo_unittests',"
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100508 " 'type': 'non_parallel_console_test_launcher',"
509 "}}\n"),
Jeremy Leconte7c942912022-04-25 21:05:27 +0200510 '/fake_src/out/Default/foo_unittests.runtime_deps': ("foo_unittests\n"),
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800511 }
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100512 mbw = self.check([
513 'gen', '-c', 'debug_goma', '//out/Default', '--swarming-targets-file',
514 '/tmp/swarming_targets', '--isolate-map-file',
515 '/fake_src/testing/buildbot/gn_isolate_map.pyl'
516 ],
517 files=test_files,
518 ret=0)
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800519
Jeremy Leconte7c942912022-04-25 21:05:27 +0200520 isolate_file = mbw.files['/fake_src/out/Default/foo_unittests.isolate']
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800521 isolate_file_contents = ast.literal_eval(isolate_file)
522 files = isolate_file_contents['variables']['files']
523 command = isolate_file_contents['variables']['command']
524
525 self.assertEqual(files, [
Mirko Bonadei5d9ae862022-01-27 20:18:16 +0100526 '../../.vpython3',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800527 '../../testing/test_env.py',
kjellander382f2b22017-04-11 04:07:01 -0700528 '../../third_party/gtest-parallel/gtest-parallel',
ehmaldonadoa7507eb2017-05-10 13:40:29 -0700529 '../../third_party/gtest-parallel/gtest_parallel.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200530 '../../tools_webrtc/gtest-parallel-wrapper.py',
Jeremy Leconte7c942912022-04-25 21:05:27 +0200531 'foo_unittests',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800532 ])
533 self.assertEqual(command, [
Mirko Bonadei5d9ae862022-01-27 20:18:16 +0100534 'vpython3',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800535 '../../testing/test_env.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200536 '../../tools_webrtc/gtest-parallel-wrapper.py',
kjellander382f2b22017-04-11 04:07:01 -0700537 '--output_dir=${ISOLATED_OUTDIR}/test_logs',
ehmaldonado76e60e92017-05-04 06:18:26 -0700538 '--gtest_color=no',
539 '--timeout=900',
kjellander382f2b22017-04-11 04:07:01 -0700540 '--workers=1',
Yves Gerey2e0c6552018-10-08 21:59:25 +0200541 '--retry_failed=3',
Jeremy Leconte7c942912022-04-25 21:05:27 +0200542 './foo_unittests',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800543 '--asan=0',
kjellander461a5602017-05-05 06:39:16 -0700544 '--lsan=0',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800545 '--msan=0',
546 '--tsan=0',
547 ])
548
Oleh Prypinb708e932018-03-18 17:34:20 +0100549 def test_isolate_windowed_test_launcher_linux(self):
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800550 test_files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100551 '/tmp/swarming_targets':
Jeremy Leconte7c942912022-04-25 21:05:27 +0200552 'foo_unittests\n',
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100553 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
Jeremy Leconte7c942912022-04-25 21:05:27 +0200554 ("{'foo_unittests': {"
555 " 'label': '//foo:foo_unittests',"
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100556 " 'type': 'windowed_test_launcher',"
557 "}}\n"),
Jeremy Leconte7c942912022-04-25 21:05:27 +0200558 '/fake_src/out/Default/foo_unittests.runtime_deps':
559 ("foo_unittests\n"
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100560 "some_resource_file\n"),
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800561 }
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100562 mbw = self.check([
563 'gen', '-c', 'debug_goma', '//out/Default', '--swarming-targets-file',
564 '/tmp/swarming_targets', '--isolate-map-file',
565 '/fake_src/testing/buildbot/gn_isolate_map.pyl'
566 ],
567 files=test_files,
568 ret=0)
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800569
Jeremy Leconte7c942912022-04-25 21:05:27 +0200570 isolate_file = mbw.files['/fake_src/out/Default/foo_unittests.isolate']
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800571 isolate_file_contents = ast.literal_eval(isolate_file)
572 files = isolate_file_contents['variables']['files']
573 command = isolate_file_contents['variables']['command']
574
575 self.assertEqual(files, [
Mirko Bonadei5d9ae862022-01-27 20:18:16 +0100576 '../../.vpython3',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800577 '../../testing/test_env.py',
578 '../../testing/xvfb.py',
579 '../../third_party/gtest-parallel/gtest-parallel',
ehmaldonadoa7507eb2017-05-10 13:40:29 -0700580 '../../third_party/gtest-parallel/gtest_parallel.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200581 '../../tools_webrtc/gtest-parallel-wrapper.py',
Jeremy Leconte7c942912022-04-25 21:05:27 +0200582 'foo_unittests',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800583 'some_resource_file',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800584 ])
585 self.assertEqual(command, [
Mirko Bonadei5d9ae862022-01-27 20:18:16 +0100586 'vpython3',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800587 '../../testing/xvfb.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200588 '../../tools_webrtc/gtest-parallel-wrapper.py',
ehmaldonado55833842017-02-13 03:58:13 -0800589 '--output_dir=${ISOLATED_OUTDIR}/test_logs',
ehmaldonado76e60e92017-05-04 06:18:26 -0700590 '--gtest_color=no',
591 '--timeout=900',
ehmaldonado2a280352017-05-05 04:33:57 -0700592 '--retry_failed=3',
Jeremy Leconte7c942912022-04-25 21:05:27 +0200593 './foo_unittests',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800594 '--asan=0',
kjellander461a5602017-05-05 06:39:16 -0700595 '--lsan=0',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800596 '--msan=0',
597 '--tsan=0',
598 ])
599
Oleh Prypinb708e932018-03-18 17:34:20 +0100600 def test_gen_windowed_test_launcher_win(self):
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800601 files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100602 'c:\\fake_src\\out\\Default\\tmp\\swarming_targets':
603 'unittests\n',
604 'c:\\fake_src\\testing\\buildbot\\gn_isolate_map.pyl':
605 ("{'unittests': {"
606 " 'label': '//somewhere:unittests',"
607 " 'type': 'windowed_test_launcher',"
608 "}}\n"),
609 r'c:\fake_src\out\Default\unittests.exe.runtime_deps':
610 ("unittests.exe\n"
611 "some_dependency\n"),
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800612 }
Jeremy Leconteac5cf782022-03-31 11:55:01 +0200613 mbw = CreateFakeMBW(files=files, win32=True)
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100614 self.check([
615 'gen', '-c', 'debug_goma', '--swarming-targets-file',
616 'c:\\fake_src\\out\\Default\\tmp\\swarming_targets',
617 '--isolate-map-file',
618 'c:\\fake_src\\testing\\buildbot\\gn_isolate_map.pyl', '//out/Default'
619 ],
620 mbw=mbw,
621 ret=0)
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800622
623 isolate_file = mbw.files['c:\\fake_src\\out\\Default\\unittests.isolate']
624 isolate_file_contents = ast.literal_eval(isolate_file)
625 files = isolate_file_contents['variables']['files']
626 command = isolate_file_contents['variables']['command']
627
628 self.assertEqual(files, [
Mirko Bonadei5d9ae862022-01-27 20:18:16 +0100629 '../../.vpython3',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800630 '../../testing/test_env.py',
631 '../../third_party/gtest-parallel/gtest-parallel',
ehmaldonadoa7507eb2017-05-10 13:40:29 -0700632 '../../third_party/gtest-parallel/gtest_parallel.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200633 '../../tools_webrtc/gtest-parallel-wrapper.py',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800634 'some_dependency',
635 'unittests.exe',
636 ])
637 self.assertEqual(command, [
Mirko Bonadei5d9ae862022-01-27 20:18:16 +0100638 'vpython3',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800639 '../../testing/test_env.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200640 '../../tools_webrtc/gtest-parallel-wrapper.py',
Jeremy Lecontee2881612022-04-19 14:03:35 +0200641 '--output_dir=${ISOLATED_OUTDIR}/test_logs',
ehmaldonado76e60e92017-05-04 06:18:26 -0700642 '--gtest_color=no',
643 '--timeout=900',
ehmaldonado2a280352017-05-05 04:33:57 -0700644 '--retry_failed=3',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800645 r'.\unittests.exe',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800646 '--asan=0',
kjellander461a5602017-05-05 06:39:16 -0700647 '--lsan=0',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800648 '--msan=0',
649 '--tsan=0',
650 ])
651
Oleh Prypinb708e932018-03-18 17:34:20 +0100652 def test_gen_console_test_launcher(self):
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800653 test_files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100654 '/tmp/swarming_targets':
Jeremy Leconte7c942912022-04-25 21:05:27 +0200655 'foo_unittests\n',
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100656 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
Jeremy Leconte7c942912022-04-25 21:05:27 +0200657 ("{'foo_unittests': {"
658 " 'label': '//foo:foo_unittests',"
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100659 " 'type': 'console_test_launcher',"
660 "}}\n"),
Jeremy Leconte7c942912022-04-25 21:05:27 +0200661 '/fake_src/out/Default/foo_unittests.runtime_deps': ("foo_unittests\n"),
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800662 }
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100663 mbw = self.check([
664 'gen', '-c', 'debug_goma', '//out/Default', '--swarming-targets-file',
665 '/tmp/swarming_targets', '--isolate-map-file',
666 '/fake_src/testing/buildbot/gn_isolate_map.pyl'
667 ],
668 files=test_files,
669 ret=0)
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800670
Jeremy Leconte7c942912022-04-25 21:05:27 +0200671 isolate_file = mbw.files['/fake_src/out/Default/foo_unittests.isolate']
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800672 isolate_file_contents = ast.literal_eval(isolate_file)
673 files = isolate_file_contents['variables']['files']
674 command = isolate_file_contents['variables']['command']
675
676 self.assertEqual(files, [
Mirko Bonadei5d9ae862022-01-27 20:18:16 +0100677 '../../.vpython3',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800678 '../../testing/test_env.py',
679 '../../third_party/gtest-parallel/gtest-parallel',
ehmaldonadoa7507eb2017-05-10 13:40:29 -0700680 '../../third_party/gtest-parallel/gtest_parallel.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200681 '../../tools_webrtc/gtest-parallel-wrapper.py',
Jeremy Leconte7c942912022-04-25 21:05:27 +0200682 'foo_unittests',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800683 ])
684 self.assertEqual(command, [
Mirko Bonadei5d9ae862022-01-27 20:18:16 +0100685 'vpython3',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800686 '../../testing/test_env.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200687 '../../tools_webrtc/gtest-parallel-wrapper.py',
ehmaldonado55833842017-02-13 03:58:13 -0800688 '--output_dir=${ISOLATED_OUTDIR}/test_logs',
ehmaldonado76e60e92017-05-04 06:18:26 -0700689 '--gtest_color=no',
690 '--timeout=900',
ehmaldonado2a280352017-05-05 04:33:57 -0700691 '--retry_failed=3',
Jeremy Leconte7c942912022-04-25 21:05:27 +0200692 './foo_unittests',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800693 '--asan=0',
kjellander461a5602017-05-05 06:39:16 -0700694 '--lsan=0',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800695 '--msan=0',
696 '--tsan=0',
697 ])
698
Oleh Prypin739b8162018-05-17 13:28:29 +0200699 def test_isolate_test_launcher_with_webcam(self):
700 test_files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100701 '/tmp/swarming_targets':
Jeremy Leconte7c942912022-04-25 21:05:27 +0200702 'foo_unittests\n',
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100703 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
Jeremy Leconte7c942912022-04-25 21:05:27 +0200704 ("{'foo_unittests': {"
705 " 'label': '//foo:foo_unittests',"
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100706 " 'type': 'console_test_launcher',"
707 " 'use_webcam': True,"
708 "}}\n"),
Jeremy Leconte7c942912022-04-25 21:05:27 +0200709 '/fake_src/out/Default/foo_unittests.runtime_deps':
710 ("foo_unittests\n"
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100711 "some_resource_file\n"),
Oleh Prypin739b8162018-05-17 13:28:29 +0200712 }
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100713 mbw = self.check([
714 'gen', '-c', 'debug_goma', '//out/Default', '--swarming-targets-file',
715 '/tmp/swarming_targets', '--isolate-map-file',
716 '/fake_src/testing/buildbot/gn_isolate_map.pyl'
717 ],
718 files=test_files,
719 ret=0)
Oleh Prypin739b8162018-05-17 13:28:29 +0200720
Jeremy Leconte7c942912022-04-25 21:05:27 +0200721 isolate_file = mbw.files['/fake_src/out/Default/foo_unittests.isolate']
Oleh Prypin739b8162018-05-17 13:28:29 +0200722 isolate_file_contents = ast.literal_eval(isolate_file)
723 files = isolate_file_contents['variables']['files']
724 command = isolate_file_contents['variables']['command']
725
726 self.assertEqual(files, [
Mirko Bonadei5d9ae862022-01-27 20:18:16 +0100727 '../../.vpython3',
Oleh Prypin739b8162018-05-17 13:28:29 +0200728 '../../testing/test_env.py',
729 '../../third_party/gtest-parallel/gtest-parallel',
730 '../../third_party/gtest-parallel/gtest_parallel.py',
731 '../../tools_webrtc/ensure_webcam_is_running.py',
732 '../../tools_webrtc/gtest-parallel-wrapper.py',
Jeremy Leconte7c942912022-04-25 21:05:27 +0200733 'foo_unittests',
Oleh Prypin739b8162018-05-17 13:28:29 +0200734 'some_resource_file',
735 ])
736 self.assertEqual(command, [
Mirko Bonadei5d9ae862022-01-27 20:18:16 +0100737 'vpython3',
Oleh Prypin739b8162018-05-17 13:28:29 +0200738 '../../tools_webrtc/ensure_webcam_is_running.py',
Mirko Bonadei5d9ae862022-01-27 20:18:16 +0100739 'vpython3',
Oleh Prypin739b8162018-05-17 13:28:29 +0200740 '../../testing/test_env.py',
741 '../../tools_webrtc/gtest-parallel-wrapper.py',
742 '--output_dir=${ISOLATED_OUTDIR}/test_logs',
743 '--gtest_color=no',
744 '--timeout=900',
745 '--retry_failed=3',
Jeremy Leconte7c942912022-04-25 21:05:27 +0200746 './foo_unittests',
Oleh Prypin739b8162018-05-17 13:28:29 +0200747 '--asan=0',
748 '--lsan=0',
749 '--msan=0',
750 '--tsan=0',
751 ])
752
Oleh Prypinb708e932018-03-18 17:34:20 +0100753 def test_isolate(self):
kjellandera013a022016-11-14 05:54:22 -0800754 files = {
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100755 '/fake_src/out/Default/toolchain.ninja':
756 "",
757 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
Jeremy Leconte7c942912022-04-25 21:05:27 +0200758 ("{'foo_unittests': {"
759 " 'label': '//foo:foo_unittests',"
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100760 " 'type': 'non_parallel_console_test_launcher',"
761 "}}\n"),
Jeremy Leconte7c942912022-04-25 21:05:27 +0200762 '/fake_src/out/Default/foo_unittests.runtime_deps': ("foo_unittests\n"),
kjellandera013a022016-11-14 05:54:22 -0800763 }
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100764 self.check(
Jeremy Leconte7c942912022-04-25 21:05:27 +0200765 ['isolate', '-c', 'debug_goma', '//out/Default', 'foo_unittests'],
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100766 files=files,
767 ret=0)
kjellandera013a022016-11-14 05:54:22 -0800768
769 # test running isolate on an existing build_dir
Jeremy Leconte81635f32022-03-29 12:32:14 +0200770 files['/fake_src/out/Default/args.gn'] = 'is_debug = true\n'
Jeremy Leconte7c942912022-04-25 21:05:27 +0200771 self.check(['isolate', '//out/Default', 'foo_unittests'],
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100772 files=files,
773 ret=0)
kjellandera013a022016-11-14 05:54:22 -0800774 files['/fake_src/out/Default/mb_type'] = 'gn\n'
Jeremy Leconte7c942912022-04-25 21:05:27 +0200775 self.check(['isolate', '//out/Default', 'foo_unittests'],
Jeremy Lecontef22c78b2021-12-07 19:49:48 +0100776 files=files,
777 ret=0)
kjellandera013a022016-11-14 05:54:22 -0800778
kjellandera013a022016-11-14 05:54:22 -0800779if __name__ == '__main__':
780 unittest.main()