xref: /aosp_15_r20/external/webrtc/tools_webrtc/mb/mb_unittest.py (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker#!/usr/bin/env vpython3
2*d9f75844SAndroid Build Coastguard Worker
3*d9f75844SAndroid Build Coastguard Worker# Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
4*d9f75844SAndroid Build Coastguard Worker#
5*d9f75844SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license
6*d9f75844SAndroid Build Coastguard Worker# that can be found in the LICENSE file in the root of the source
7*d9f75844SAndroid Build Coastguard Worker# tree. An additional intellectual property rights grant can be found
8*d9f75844SAndroid Build Coastguard Worker# in the file PATENTS.  All contributing project authors may
9*d9f75844SAndroid Build Coastguard Worker# be found in the AUTHORS file in the root of the source tree.
10*d9f75844SAndroid Build Coastguard Worker
11*d9f75844SAndroid Build Coastguard Worker"""Tests for mb.py."""
12*d9f75844SAndroid Build Coastguard Worker
13*d9f75844SAndroid Build Coastguard Workerimport ast
14*d9f75844SAndroid Build Coastguard Workerimport os
15*d9f75844SAndroid Build Coastguard Workerimport re
16*d9f75844SAndroid Build Coastguard Workerimport sys
17*d9f75844SAndroid Build Coastguard Workerimport tempfile
18*d9f75844SAndroid Build Coastguard Workerimport unittest
19*d9f75844SAndroid Build Coastguard Worker
20*d9f75844SAndroid Build Coastguard Worker_SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
21*d9f75844SAndroid Build Coastguard Worker_SRC_DIR = os.path.dirname(os.path.dirname(_SCRIPT_DIR))
22*d9f75844SAndroid Build Coastguard Workersys.path.insert(0, _SRC_DIR)
23*d9f75844SAndroid Build Coastguard Worker
24*d9f75844SAndroid Build Coastguard Workerfrom tools_webrtc.mb import mb
25*d9f75844SAndroid Build Coastguard Worker
26*d9f75844SAndroid Build Coastguard Worker
27*d9f75844SAndroid Build Coastguard Workerclass FakeMBW(mb.WebRTCMetaBuildWrapper):
28*d9f75844SAndroid Build Coastguard Worker  def __init__(self, win32=False):
29*d9f75844SAndroid Build Coastguard Worker    super().__init__()
30*d9f75844SAndroid Build Coastguard Worker
31*d9f75844SAndroid Build Coastguard Worker    # Override vars for test portability.
32*d9f75844SAndroid Build Coastguard Worker    if win32:
33*d9f75844SAndroid Build Coastguard Worker      self.chromium_src_dir = 'c:\\fake_src'
34*d9f75844SAndroid Build Coastguard Worker      self.default_config = 'c:\\fake_src\\tools_webrtc\\mb\\mb_config.pyl'
35*d9f75844SAndroid Build Coastguard Worker      self.default_isolate_map = ('c:\\fake_src\\testing\\buildbot\\'
36*d9f75844SAndroid Build Coastguard Worker                                  'gn_isolate_map.pyl')
37*d9f75844SAndroid Build Coastguard Worker      self.platform = 'win32'
38*d9f75844SAndroid Build Coastguard Worker      self.executable = 'c:\\python\\vpython3.exe'
39*d9f75844SAndroid Build Coastguard Worker      self.sep = '\\'
40*d9f75844SAndroid Build Coastguard Worker      self.cwd = 'c:\\fake_src\\out\\Default'
41*d9f75844SAndroid Build Coastguard Worker    else:
42*d9f75844SAndroid Build Coastguard Worker      self.chromium_src_dir = '/fake_src'
43*d9f75844SAndroid Build Coastguard Worker      self.default_config = '/fake_src/tools_webrtc/mb/mb_config.pyl'
44*d9f75844SAndroid Build Coastguard Worker      self.default_isolate_map = '/fake_src/testing/buildbot/gn_isolate_map.pyl'
45*d9f75844SAndroid Build Coastguard Worker      self.executable = '/usr/bin/vpython3'
46*d9f75844SAndroid Build Coastguard Worker      self.platform = 'linux2'
47*d9f75844SAndroid Build Coastguard Worker      self.sep = '/'
48*d9f75844SAndroid Build Coastguard Worker      self.cwd = '/fake_src/out/Default'
49*d9f75844SAndroid Build Coastguard Worker
50*d9f75844SAndroid Build Coastguard Worker    self.files = {}
51*d9f75844SAndroid Build Coastguard Worker    self.dirs = set()
52*d9f75844SAndroid Build Coastguard Worker    self.calls = []
53*d9f75844SAndroid Build Coastguard Worker    self.cmds = []
54*d9f75844SAndroid Build Coastguard Worker    self.cross_compile = None
55*d9f75844SAndroid Build Coastguard Worker    self.out = ''
56*d9f75844SAndroid Build Coastguard Worker    self.err = ''
57*d9f75844SAndroid Build Coastguard Worker    self.rmdirs = []
58*d9f75844SAndroid Build Coastguard Worker
59*d9f75844SAndroid Build Coastguard Worker  def ExpandUser(self, path):
60*d9f75844SAndroid Build Coastguard Worker    # pylint: disable=no-self-use
61*d9f75844SAndroid Build Coastguard Worker    return '$HOME/%s' % path
62*d9f75844SAndroid Build Coastguard Worker
63*d9f75844SAndroid Build Coastguard Worker  def Exists(self, path):
64*d9f75844SAndroid Build Coastguard Worker    abs_path = self._AbsPath(path)
65*d9f75844SAndroid Build Coastguard Worker    return self.files.get(abs_path) is not None or abs_path in self.dirs
66*d9f75844SAndroid Build Coastguard Worker
67*d9f75844SAndroid Build Coastguard Worker  def ListDir(self, path):
68*d9f75844SAndroid Build Coastguard Worker    dir_contents = []
69*d9f75844SAndroid Build Coastguard Worker    for f in list(self.files.keys()) + list(self.dirs):
70*d9f75844SAndroid Build Coastguard Worker      head, _ = os.path.split(f)
71*d9f75844SAndroid Build Coastguard Worker      if head == path:
72*d9f75844SAndroid Build Coastguard Worker        dir_contents.append(f)
73*d9f75844SAndroid Build Coastguard Worker    return dir_contents
74*d9f75844SAndroid Build Coastguard Worker
75*d9f75844SAndroid Build Coastguard Worker  def MaybeMakeDirectory(self, path):
76*d9f75844SAndroid Build Coastguard Worker    abpath = self._AbsPath(path)
77*d9f75844SAndroid Build Coastguard Worker    self.dirs.add(abpath)
78*d9f75844SAndroid Build Coastguard Worker
79*d9f75844SAndroid Build Coastguard Worker  def PathJoin(self, *comps):
80*d9f75844SAndroid Build Coastguard Worker    return self.sep.join(comps)
81*d9f75844SAndroid Build Coastguard Worker
82*d9f75844SAndroid Build Coastguard Worker  def ReadFile(self, path):
83*d9f75844SAndroid Build Coastguard Worker    try:
84*d9f75844SAndroid Build Coastguard Worker      return self.files[self._AbsPath(path)]
85*d9f75844SAndroid Build Coastguard Worker    except KeyError as e:
86*d9f75844SAndroid Build Coastguard Worker      raise IOError('%s not found' % path) from e
87*d9f75844SAndroid Build Coastguard Worker
88*d9f75844SAndroid Build Coastguard Worker  def WriteFile(self, path, contents, force_verbose=False):
89*d9f75844SAndroid Build Coastguard Worker    if self.args.dryrun or self.args.verbose or force_verbose:
90*d9f75844SAndroid Build Coastguard Worker      self.Print('\nWriting """\\\n%s""" to %s.\n' % (contents, path))
91*d9f75844SAndroid Build Coastguard Worker    abpath = self._AbsPath(path)
92*d9f75844SAndroid Build Coastguard Worker    self.files[abpath] = contents
93*d9f75844SAndroid Build Coastguard Worker
94*d9f75844SAndroid Build Coastguard Worker  def Call(self, cmd, env=None, capture_output=True, input=None):
95*d9f75844SAndroid Build Coastguard Worker    # pylint: disable=redefined-builtin
96*d9f75844SAndroid Build Coastguard Worker    del env
97*d9f75844SAndroid Build Coastguard Worker    del capture_output
98*d9f75844SAndroid Build Coastguard Worker    del input
99*d9f75844SAndroid Build Coastguard Worker    self.calls.append(cmd)
100*d9f75844SAndroid Build Coastguard Worker    if self.cmds:
101*d9f75844SAndroid Build Coastguard Worker      return self.cmds.pop(0)
102*d9f75844SAndroid Build Coastguard Worker    return 0, '', ''
103*d9f75844SAndroid Build Coastguard Worker
104*d9f75844SAndroid Build Coastguard Worker  def Print(self, *args, **kwargs):
105*d9f75844SAndroid Build Coastguard Worker    sep = kwargs.get('sep', ' ')
106*d9f75844SAndroid Build Coastguard Worker    end = kwargs.get('end', '\n')
107*d9f75844SAndroid Build Coastguard Worker    f = kwargs.get('file', sys.stdout)
108*d9f75844SAndroid Build Coastguard Worker    if f == sys.stderr:
109*d9f75844SAndroid Build Coastguard Worker      self.err += sep.join(args) + end
110*d9f75844SAndroid Build Coastguard Worker    else:
111*d9f75844SAndroid Build Coastguard Worker      self.out += sep.join(args) + end
112*d9f75844SAndroid Build Coastguard Worker
113*d9f75844SAndroid Build Coastguard Worker  def TempDir(self):
114*d9f75844SAndroid Build Coastguard Worker    tmp_dir = os.path.join(tempfile.gettempdir(), 'mb_test')
115*d9f75844SAndroid Build Coastguard Worker    self.dirs.add(tmp_dir)
116*d9f75844SAndroid Build Coastguard Worker    return tmp_dir
117*d9f75844SAndroid Build Coastguard Worker
118*d9f75844SAndroid Build Coastguard Worker  def TempFile(self, mode='w'):
119*d9f75844SAndroid Build Coastguard Worker    del mode
120*d9f75844SAndroid Build Coastguard Worker    return FakeFile(self.files)
121*d9f75844SAndroid Build Coastguard Worker
122*d9f75844SAndroid Build Coastguard Worker  def RemoveFile(self, path):
123*d9f75844SAndroid Build Coastguard Worker    abpath = self._AbsPath(path)
124*d9f75844SAndroid Build Coastguard Worker    self.files[abpath] = None
125*d9f75844SAndroid Build Coastguard Worker
126*d9f75844SAndroid Build Coastguard Worker  def RemoveDirectory(self, abs_path):
127*d9f75844SAndroid Build Coastguard Worker    # Normalize the passed-in path to handle different working directories
128*d9f75844SAndroid Build Coastguard Worker    # used during unit testing.
129*d9f75844SAndroid Build Coastguard Worker    abs_path = self._AbsPath(abs_path)
130*d9f75844SAndroid Build Coastguard Worker    self.rmdirs.append(abs_path)
131*d9f75844SAndroid Build Coastguard Worker    files_to_delete = [f for f in self.files if f.startswith(abs_path)]
132*d9f75844SAndroid Build Coastguard Worker    for f in files_to_delete:
133*d9f75844SAndroid Build Coastguard Worker      self.files[f] = None
134*d9f75844SAndroid Build Coastguard Worker
135*d9f75844SAndroid Build Coastguard Worker  def _AbsPath(self, path):
136*d9f75844SAndroid Build Coastguard Worker    if not ((self.platform == 'win32' and path.startswith('c:')) or
137*d9f75844SAndroid Build Coastguard Worker            (self.platform != 'win32' and path.startswith('/'))):
138*d9f75844SAndroid Build Coastguard Worker      path = self.PathJoin(self.cwd, path)
139*d9f75844SAndroid Build Coastguard Worker    if self.sep == '\\':
140*d9f75844SAndroid Build Coastguard Worker      return re.sub(r'\\+', r'\\', path)
141*d9f75844SAndroid Build Coastguard Worker    return re.sub('/+', '/', path)
142*d9f75844SAndroid Build Coastguard Worker
143*d9f75844SAndroid Build Coastguard Worker
144*d9f75844SAndroid Build Coastguard Workerclass FakeFile:
145*d9f75844SAndroid Build Coastguard Worker  # pylint: disable=invalid-name
146*d9f75844SAndroid Build Coastguard Worker  def __init__(self, files):
147*d9f75844SAndroid Build Coastguard Worker    self.name = '/tmp/file'
148*d9f75844SAndroid Build Coastguard Worker    self.buf = ''
149*d9f75844SAndroid Build Coastguard Worker    self.files = files
150*d9f75844SAndroid Build Coastguard Worker
151*d9f75844SAndroid Build Coastguard Worker  def write(self, contents):
152*d9f75844SAndroid Build Coastguard Worker    self.buf += contents
153*d9f75844SAndroid Build Coastguard Worker
154*d9f75844SAndroid Build Coastguard Worker  def close(self):
155*d9f75844SAndroid Build Coastguard Worker    self.files[self.name] = self.buf
156*d9f75844SAndroid Build Coastguard Worker
157*d9f75844SAndroid Build Coastguard Worker
158*d9f75844SAndroid Build Coastguard WorkerTEST_CONFIG = """\
159*d9f75844SAndroid Build Coastguard Worker{
160*d9f75844SAndroid Build Coastguard Worker  'builder_groups': {
161*d9f75844SAndroid Build Coastguard Worker    'chromium': {},
162*d9f75844SAndroid Build Coastguard Worker    'fake_group': {
163*d9f75844SAndroid Build Coastguard Worker      'fake_builder': 'rel_bot',
164*d9f75844SAndroid Build Coastguard Worker      'fake_debug_builder': 'debug_goma',
165*d9f75844SAndroid Build Coastguard Worker      'fake_args_bot': 'fake_args_bot',
166*d9f75844SAndroid Build Coastguard Worker      'fake_multi_phase': { 'phase_1': 'phase_1', 'phase_2': 'phase_2'},
167*d9f75844SAndroid Build Coastguard Worker      'fake_android_bot': 'android_bot',
168*d9f75844SAndroid Build Coastguard Worker      'fake_args_file': 'args_file_goma',
169*d9f75844SAndroid Build Coastguard Worker      'fake_ios_error': 'ios_error',
170*d9f75844SAndroid Build Coastguard Worker    },
171*d9f75844SAndroid Build Coastguard Worker  },
172*d9f75844SAndroid Build Coastguard Worker  'configs': {
173*d9f75844SAndroid Build Coastguard Worker    'args_file_goma': ['fake_args_bot', 'goma'],
174*d9f75844SAndroid Build Coastguard Worker    'fake_args_bot': ['fake_args_bot'],
175*d9f75844SAndroid Build Coastguard Worker    'rel_bot': ['rel', 'goma', 'fake_feature1'],
176*d9f75844SAndroid Build Coastguard Worker    'debug_goma': ['debug', 'goma'],
177*d9f75844SAndroid Build Coastguard Worker    'phase_1': ['rel', 'phase_1'],
178*d9f75844SAndroid Build Coastguard Worker    'phase_2': ['rel', 'phase_2'],
179*d9f75844SAndroid Build Coastguard Worker    'android_bot': ['android'],
180*d9f75844SAndroid Build Coastguard Worker    'ios_error': ['error'],
181*d9f75844SAndroid Build Coastguard Worker  },
182*d9f75844SAndroid Build Coastguard Worker  'mixins': {
183*d9f75844SAndroid Build Coastguard Worker    'error': {
184*d9f75844SAndroid Build Coastguard Worker      'gn_args': 'error',
185*d9f75844SAndroid Build Coastguard Worker    },
186*d9f75844SAndroid Build Coastguard Worker    'fake_args_bot': {
187*d9f75844SAndroid Build Coastguard Worker      'args_file': '//build/args/bots/fake_group/fake_args_bot.gn',
188*d9f75844SAndroid Build Coastguard Worker    },
189*d9f75844SAndroid Build Coastguard Worker    'fake_feature1': {
190*d9f75844SAndroid Build Coastguard Worker      'gn_args': 'enable_doom_melon=true',
191*d9f75844SAndroid Build Coastguard Worker    },
192*d9f75844SAndroid Build Coastguard Worker    'goma': {
193*d9f75844SAndroid Build Coastguard Worker      'gn_args': 'use_goma=true',
194*d9f75844SAndroid Build Coastguard Worker    },
195*d9f75844SAndroid Build Coastguard Worker    'phase_1': {
196*d9f75844SAndroid Build Coastguard Worker      'gn_args': 'phase=1',
197*d9f75844SAndroid Build Coastguard Worker    },
198*d9f75844SAndroid Build Coastguard Worker    'phase_2': {
199*d9f75844SAndroid Build Coastguard Worker      'gn_args': 'phase=2',
200*d9f75844SAndroid Build Coastguard Worker    },
201*d9f75844SAndroid Build Coastguard Worker    'rel': {
202*d9f75844SAndroid Build Coastguard Worker      'gn_args': 'is_debug=false dcheck_always_on=false',
203*d9f75844SAndroid Build Coastguard Worker    },
204*d9f75844SAndroid Build Coastguard Worker    'debug': {
205*d9f75844SAndroid Build Coastguard Worker      'gn_args': 'is_debug=true',
206*d9f75844SAndroid Build Coastguard Worker    },
207*d9f75844SAndroid Build Coastguard Worker    'android': {
208*d9f75844SAndroid Build Coastguard Worker      'gn_args': 'target_os="android" dcheck_always_on=false',
209*d9f75844SAndroid Build Coastguard Worker    }
210*d9f75844SAndroid Build Coastguard Worker  },
211*d9f75844SAndroid Build Coastguard Worker}
212*d9f75844SAndroid Build Coastguard Worker"""
213*d9f75844SAndroid Build Coastguard Worker
214*d9f75844SAndroid Build Coastguard Worker
215*d9f75844SAndroid Build Coastguard Workerdef CreateFakeMBW(files=None, win32=False):
216*d9f75844SAndroid Build Coastguard Worker  mbw = FakeMBW(win32=win32)
217*d9f75844SAndroid Build Coastguard Worker  mbw.files.setdefault(mbw.default_config, TEST_CONFIG)
218*d9f75844SAndroid Build Coastguard Worker  mbw.files.setdefault(
219*d9f75844SAndroid Build Coastguard Worker      mbw.ToAbsPath('//testing/buildbot/gn_isolate_map.pyl'), '''{
220*d9f75844SAndroid Build Coastguard Worker      "foo_unittests": {
221*d9f75844SAndroid Build Coastguard Worker        "label": "//foo:foo_unittests",
222*d9f75844SAndroid Build Coastguard Worker        "type": "console_test_launcher",
223*d9f75844SAndroid Build Coastguard Worker        "args": [],
224*d9f75844SAndroid Build Coastguard Worker      },
225*d9f75844SAndroid Build Coastguard Worker    }''')
226*d9f75844SAndroid Build Coastguard Worker  mbw.files.setdefault(
227*d9f75844SAndroid Build Coastguard Worker      mbw.ToAbsPath('//build/args/bots/fake_group/fake_args_bot.gn'),
228*d9f75844SAndroid Build Coastguard Worker      'is_debug = false\ndcheck_always_on=false\n')
229*d9f75844SAndroid Build Coastguard Worker  mbw.files.setdefault(mbw.ToAbsPath('//tools/mb/rts_banned_suites.json'), '{}')
230*d9f75844SAndroid Build Coastguard Worker  if files:
231*d9f75844SAndroid Build Coastguard Worker    for path, contents in list(files.items()):
232*d9f75844SAndroid Build Coastguard Worker      mbw.files[path] = contents
233*d9f75844SAndroid Build Coastguard Worker      if path.endswith('.runtime_deps'):
234*d9f75844SAndroid Build Coastguard Worker
235*d9f75844SAndroid Build Coastguard Worker        def FakeCall(cmd, env=None, capture_output=True, stdin=None):
236*d9f75844SAndroid Build Coastguard Worker          # pylint: disable=cell-var-from-loop
237*d9f75844SAndroid Build Coastguard Worker          del cmd
238*d9f75844SAndroid Build Coastguard Worker          del env
239*d9f75844SAndroid Build Coastguard Worker          del capture_output
240*d9f75844SAndroid Build Coastguard Worker          del stdin
241*d9f75844SAndroid Build Coastguard Worker          mbw.files[path] = contents
242*d9f75844SAndroid Build Coastguard Worker          return 0, '', ''
243*d9f75844SAndroid Build Coastguard Worker
244*d9f75844SAndroid Build Coastguard Worker        # pylint: disable=invalid-name
245*d9f75844SAndroid Build Coastguard Worker        mbw.Call = FakeCall
246*d9f75844SAndroid Build Coastguard Worker  return mbw
247*d9f75844SAndroid Build Coastguard Worker
248*d9f75844SAndroid Build Coastguard Worker
249*d9f75844SAndroid Build Coastguard Workerclass UnitTest(unittest.TestCase):
250*d9f75844SAndroid Build Coastguard Worker  # pylint: disable=invalid-name
251*d9f75844SAndroid Build Coastguard Worker  def check(self,
252*d9f75844SAndroid Build Coastguard Worker            args,
253*d9f75844SAndroid Build Coastguard Worker            mbw=None,
254*d9f75844SAndroid Build Coastguard Worker            files=None,
255*d9f75844SAndroid Build Coastguard Worker            out=None,
256*d9f75844SAndroid Build Coastguard Worker            err=None,
257*d9f75844SAndroid Build Coastguard Worker            ret=None,
258*d9f75844SAndroid Build Coastguard Worker            env=None):
259*d9f75844SAndroid Build Coastguard Worker    if not mbw:
260*d9f75844SAndroid Build Coastguard Worker      mbw = CreateFakeMBW(files)
261*d9f75844SAndroid Build Coastguard Worker
262*d9f75844SAndroid Build Coastguard Worker    try:
263*d9f75844SAndroid Build Coastguard Worker      prev_env = os.environ.copy()
264*d9f75844SAndroid Build Coastguard Worker      os.environ = env if env else prev_env
265*d9f75844SAndroid Build Coastguard Worker      actual_ret = mbw.Main(args)
266*d9f75844SAndroid Build Coastguard Worker    finally:
267*d9f75844SAndroid Build Coastguard Worker      os.environ = prev_env
268*d9f75844SAndroid Build Coastguard Worker    self.assertEqual(
269*d9f75844SAndroid Build Coastguard Worker        actual_ret, ret,
270*d9f75844SAndroid Build Coastguard Worker        "ret: %s, out: %s, err: %s" % (actual_ret, mbw.out, mbw.err))
271*d9f75844SAndroid Build Coastguard Worker    if out is not None:
272*d9f75844SAndroid Build Coastguard Worker      self.assertEqual(mbw.out, out)
273*d9f75844SAndroid Build Coastguard Worker    if err is not None:
274*d9f75844SAndroid Build Coastguard Worker      self.assertEqual(mbw.err, err)
275*d9f75844SAndroid Build Coastguard Worker    return mbw
276*d9f75844SAndroid Build Coastguard Worker
277*d9f75844SAndroid Build Coastguard Worker  def test_gen_swarming(self):
278*d9f75844SAndroid Build Coastguard Worker    files = {
279*d9f75844SAndroid Build Coastguard Worker        '/tmp/swarming_targets':
280*d9f75844SAndroid Build Coastguard Worker        'foo_unittests\n',
281*d9f75844SAndroid Build Coastguard Worker        '/fake_src/testing/buildbot/gn_isolate_map.pyl':
282*d9f75844SAndroid Build Coastguard Worker        ("{'foo_unittests': {"
283*d9f75844SAndroid Build Coastguard Worker         "  'label': '//foo:foo_unittests',"
284*d9f75844SAndroid Build Coastguard Worker         "  'type': 'raw',"
285*d9f75844SAndroid Build Coastguard Worker         "  'args': [],"
286*d9f75844SAndroid Build Coastguard Worker         "}}\n"),
287*d9f75844SAndroid Build Coastguard Worker        '/fake_src/out/Default/foo_unittests.runtime_deps': ("foo_unittests\n"),
288*d9f75844SAndroid Build Coastguard Worker    }
289*d9f75844SAndroid Build Coastguard Worker    mbw = CreateFakeMBW(files)
290*d9f75844SAndroid Build Coastguard Worker    self.check([
291*d9f75844SAndroid Build Coastguard Worker        'gen', '-c', 'debug_goma', '--swarming-targets-file',
292*d9f75844SAndroid Build Coastguard Worker        '/tmp/swarming_targets', '//out/Default'
293*d9f75844SAndroid Build Coastguard Worker    ],
294*d9f75844SAndroid Build Coastguard Worker               mbw=mbw,
295*d9f75844SAndroid Build Coastguard Worker               ret=0)
296*d9f75844SAndroid Build Coastguard Worker    self.assertIn('/fake_src/out/Default/foo_unittests.isolate', mbw.files)
297*d9f75844SAndroid Build Coastguard Worker    self.assertIn('/fake_src/out/Default/foo_unittests.isolated.gen.json',
298*d9f75844SAndroid Build Coastguard Worker                  mbw.files)
299*d9f75844SAndroid Build Coastguard Worker
300*d9f75844SAndroid Build Coastguard Worker  def test_gen_swarming_android(self):
301*d9f75844SAndroid Build Coastguard Worker    test_files = {
302*d9f75844SAndroid Build Coastguard Worker        '/tmp/swarming_targets':
303*d9f75844SAndroid Build Coastguard Worker        'foo_unittests\n',
304*d9f75844SAndroid Build Coastguard Worker        '/fake_src/testing/buildbot/gn_isolate_map.pyl':
305*d9f75844SAndroid Build Coastguard Worker        ("{'foo_unittests': {"
306*d9f75844SAndroid Build Coastguard Worker         "  'label': '//foo:foo_unittests',"
307*d9f75844SAndroid Build Coastguard Worker         "  'type': 'console_test_launcher',"
308*d9f75844SAndroid Build Coastguard Worker         "}}\n"),
309*d9f75844SAndroid Build Coastguard Worker        '/fake_src/out/Default/foo_unittests.runtime_deps': ("foo_unittests\n"),
310*d9f75844SAndroid Build Coastguard Worker    }
311*d9f75844SAndroid Build Coastguard Worker    mbw = self.check([
312*d9f75844SAndroid Build Coastguard Worker        'gen', '-c', 'android_bot', '//out/Default', '--swarming-targets-file',
313*d9f75844SAndroid Build Coastguard Worker        '/tmp/swarming_targets', '--isolate-map-file',
314*d9f75844SAndroid Build Coastguard Worker        '/fake_src/testing/buildbot/gn_isolate_map.pyl'
315*d9f75844SAndroid Build Coastguard Worker    ],
316*d9f75844SAndroid Build Coastguard Worker                     files=test_files,
317*d9f75844SAndroid Build Coastguard Worker                     ret=0)
318*d9f75844SAndroid Build Coastguard Worker
319*d9f75844SAndroid Build Coastguard Worker    isolate_file = mbw.files['/fake_src/out/Default/foo_unittests.isolate']
320*d9f75844SAndroid Build Coastguard Worker    isolate_file_contents = ast.literal_eval(isolate_file)
321*d9f75844SAndroid Build Coastguard Worker    files = isolate_file_contents['variables']['files']
322*d9f75844SAndroid Build Coastguard Worker    command = isolate_file_contents['variables']['command']
323*d9f75844SAndroid Build Coastguard Worker
324*d9f75844SAndroid Build Coastguard Worker    self.assertEqual(
325*d9f75844SAndroid Build Coastguard Worker        files,
326*d9f75844SAndroid Build Coastguard Worker        ['../../.vpython3', '../../testing/test_env.py', 'foo_unittests'])
327*d9f75844SAndroid Build Coastguard Worker    self.assertEqual(command, [
328*d9f75844SAndroid Build Coastguard Worker        'luci-auth',
329*d9f75844SAndroid Build Coastguard Worker        'context',
330*d9f75844SAndroid Build Coastguard Worker        '--',
331*d9f75844SAndroid Build Coastguard Worker        'vpython3',
332*d9f75844SAndroid Build Coastguard Worker        '../../build/android/test_wrapper/logdog_wrapper.py',
333*d9f75844SAndroid Build Coastguard Worker        '--target',
334*d9f75844SAndroid Build Coastguard Worker        'foo_unittests',
335*d9f75844SAndroid Build Coastguard Worker        '--logdog-bin-cmd',
336*d9f75844SAndroid Build Coastguard Worker        '../../.task_template_packages/logdog_butler',
337*d9f75844SAndroid Build Coastguard Worker        '--logcat-output-file',
338*d9f75844SAndroid Build Coastguard Worker        '${ISOLATED_OUTDIR}/logcats',
339*d9f75844SAndroid Build Coastguard Worker        '--store-tombstones',
340*d9f75844SAndroid Build Coastguard Worker    ])
341*d9f75844SAndroid Build Coastguard Worker
342*d9f75844SAndroid Build Coastguard Worker  def test_gen_swarming_android_junit_test(self):
343*d9f75844SAndroid Build Coastguard Worker    test_files = {
344*d9f75844SAndroid Build Coastguard Worker        '/tmp/swarming_targets':
345*d9f75844SAndroid Build Coastguard Worker        'foo_unittests\n',
346*d9f75844SAndroid Build Coastguard Worker        '/fake_src/testing/buildbot/gn_isolate_map.pyl':
347*d9f75844SAndroid Build Coastguard Worker        ("{'foo_unittests': {"
348*d9f75844SAndroid Build Coastguard Worker         "  'label': '//foo:foo_unittests',"
349*d9f75844SAndroid Build Coastguard Worker         "  'type': 'junit_test',"
350*d9f75844SAndroid Build Coastguard Worker         "}}\n"),
351*d9f75844SAndroid Build Coastguard Worker        '/fake_src/out/Default/foo_unittests.runtime_deps': ("foo_unittests\n"),
352*d9f75844SAndroid Build Coastguard Worker    }
353*d9f75844SAndroid Build Coastguard Worker    mbw = self.check([
354*d9f75844SAndroid Build Coastguard Worker        'gen', '-c', 'android_bot', '//out/Default', '--swarming-targets-file',
355*d9f75844SAndroid Build Coastguard Worker        '/tmp/swarming_targets', '--isolate-map-file',
356*d9f75844SAndroid Build Coastguard Worker        '/fake_src/testing/buildbot/gn_isolate_map.pyl'
357*d9f75844SAndroid Build Coastguard Worker    ],
358*d9f75844SAndroid Build Coastguard Worker                     files=test_files,
359*d9f75844SAndroid Build Coastguard Worker                     ret=0)
360*d9f75844SAndroid Build Coastguard Worker
361*d9f75844SAndroid Build Coastguard Worker    isolate_file = mbw.files['/fake_src/out/Default/foo_unittests.isolate']
362*d9f75844SAndroid Build Coastguard Worker    isolate_file_contents = ast.literal_eval(isolate_file)
363*d9f75844SAndroid Build Coastguard Worker    files = isolate_file_contents['variables']['files']
364*d9f75844SAndroid Build Coastguard Worker    command = isolate_file_contents['variables']['command']
365*d9f75844SAndroid Build Coastguard Worker
366*d9f75844SAndroid Build Coastguard Worker    self.assertEqual(
367*d9f75844SAndroid Build Coastguard Worker        files,
368*d9f75844SAndroid Build Coastguard Worker        ['../../.vpython3', '../../testing/test_env.py', 'foo_unittests'])
369*d9f75844SAndroid Build Coastguard Worker    self.assertEqual(command, [
370*d9f75844SAndroid Build Coastguard Worker        'luci-auth',
371*d9f75844SAndroid Build Coastguard Worker        'context',
372*d9f75844SAndroid Build Coastguard Worker        '--',
373*d9f75844SAndroid Build Coastguard Worker        'vpython3',
374*d9f75844SAndroid Build Coastguard Worker        '../../build/android/test_wrapper/logdog_wrapper.py',
375*d9f75844SAndroid Build Coastguard Worker        '--target',
376*d9f75844SAndroid Build Coastguard Worker        'foo_unittests',
377*d9f75844SAndroid Build Coastguard Worker        '--logdog-bin-cmd',
378*d9f75844SAndroid Build Coastguard Worker        '../../.task_template_packages/logdog_butler',
379*d9f75844SAndroid Build Coastguard Worker        '--logcat-output-file',
380*d9f75844SAndroid Build Coastguard Worker        '${ISOLATED_OUTDIR}/logcats',
381*d9f75844SAndroid Build Coastguard Worker        '--store-tombstones',
382*d9f75844SAndroid Build Coastguard Worker    ])
383*d9f75844SAndroid Build Coastguard Worker
384*d9f75844SAndroid Build Coastguard Worker  def test_gen_timeout(self):
385*d9f75844SAndroid Build Coastguard Worker    test_files = {
386*d9f75844SAndroid Build Coastguard Worker        '/tmp/swarming_targets':
387*d9f75844SAndroid Build Coastguard Worker        'foo_unittests\n',
388*d9f75844SAndroid Build Coastguard Worker        '/fake_src/testing/buildbot/gn_isolate_map.pyl':
389*d9f75844SAndroid Build Coastguard Worker        ("{'foo_unittests': {"
390*d9f75844SAndroid Build Coastguard Worker         "  'label': '//foo:foo_unittests',"
391*d9f75844SAndroid Build Coastguard Worker         "  'type': 'non_parallel_console_test_launcher',"
392*d9f75844SAndroid Build Coastguard Worker         "  'timeout': 500,"
393*d9f75844SAndroid Build Coastguard Worker         "}}\n"),
394*d9f75844SAndroid Build Coastguard Worker        '/fake_src/out/Default/foo_unittests.runtime_deps': ("foo_unittests\n"),
395*d9f75844SAndroid Build Coastguard Worker    }
396*d9f75844SAndroid Build Coastguard Worker    mbw = self.check([
397*d9f75844SAndroid Build Coastguard Worker        'gen', '-c', 'debug_goma', '//out/Default', '--swarming-targets-file',
398*d9f75844SAndroid Build Coastguard Worker        '/tmp/swarming_targets', '--isolate-map-file',
399*d9f75844SAndroid Build Coastguard Worker        '/fake_src/testing/buildbot/gn_isolate_map.pyl'
400*d9f75844SAndroid Build Coastguard Worker    ],
401*d9f75844SAndroid Build Coastguard Worker                     files=test_files,
402*d9f75844SAndroid Build Coastguard Worker                     ret=0)
403*d9f75844SAndroid Build Coastguard Worker
404*d9f75844SAndroid Build Coastguard Worker    isolate_file = mbw.files['/fake_src/out/Default/foo_unittests.isolate']
405*d9f75844SAndroid Build Coastguard Worker    isolate_file_contents = ast.literal_eval(isolate_file)
406*d9f75844SAndroid Build Coastguard Worker    files = isolate_file_contents['variables']['files']
407*d9f75844SAndroid Build Coastguard Worker    command = isolate_file_contents['variables']['command']
408*d9f75844SAndroid Build Coastguard Worker
409*d9f75844SAndroid Build Coastguard Worker    self.assertEqual(files, [
410*d9f75844SAndroid Build Coastguard Worker        '../../.vpython3',
411*d9f75844SAndroid Build Coastguard Worker        '../../testing/test_env.py',
412*d9f75844SAndroid Build Coastguard Worker        '../../third_party/gtest-parallel/gtest-parallel',
413*d9f75844SAndroid Build Coastguard Worker        '../../third_party/gtest-parallel/gtest_parallel.py',
414*d9f75844SAndroid Build Coastguard Worker        '../../tools_webrtc/gtest-parallel-wrapper.py',
415*d9f75844SAndroid Build Coastguard Worker        'foo_unittests',
416*d9f75844SAndroid Build Coastguard Worker    ])
417*d9f75844SAndroid Build Coastguard Worker    self.assertEqual(command, [
418*d9f75844SAndroid Build Coastguard Worker        'vpython3',
419*d9f75844SAndroid Build Coastguard Worker        '../../testing/test_env.py',
420*d9f75844SAndroid Build Coastguard Worker        '../../tools_webrtc/gtest-parallel-wrapper.py',
421*d9f75844SAndroid Build Coastguard Worker        '--output_dir=${ISOLATED_OUTDIR}/test_logs',
422*d9f75844SAndroid Build Coastguard Worker        '--gtest_color=no',
423*d9f75844SAndroid Build Coastguard Worker        '--timeout=500',
424*d9f75844SAndroid Build Coastguard Worker        '--workers=1',
425*d9f75844SAndroid Build Coastguard Worker        '--retry_failed=3',
426*d9f75844SAndroid Build Coastguard Worker        './foo_unittests',
427*d9f75844SAndroid Build Coastguard Worker        '--asan=0',
428*d9f75844SAndroid Build Coastguard Worker        '--lsan=0',
429*d9f75844SAndroid Build Coastguard Worker        '--msan=0',
430*d9f75844SAndroid Build Coastguard Worker        '--tsan=0',
431*d9f75844SAndroid Build Coastguard Worker    ])
432*d9f75844SAndroid Build Coastguard Worker
433*d9f75844SAndroid Build Coastguard Worker  def test_gen_script(self):
434*d9f75844SAndroid Build Coastguard Worker    test_files = {
435*d9f75844SAndroid Build Coastguard Worker        '/tmp/swarming_targets':
436*d9f75844SAndroid Build Coastguard Worker        'foo_unittests_script\n',
437*d9f75844SAndroid Build Coastguard Worker        '/fake_src/testing/buildbot/gn_isolate_map.pyl':
438*d9f75844SAndroid Build Coastguard Worker        ("{'foo_unittests_script': {"
439*d9f75844SAndroid Build Coastguard Worker         "  'label': '//foo:foo_unittests',"
440*d9f75844SAndroid Build Coastguard Worker         "  'type': 'script',"
441*d9f75844SAndroid Build Coastguard Worker         "  'script': '//foo/foo_unittests_script.py',"
442*d9f75844SAndroid Build Coastguard Worker         "}}\n"),
443*d9f75844SAndroid Build Coastguard Worker        '/fake_src/out/Default/foo_unittests_script.runtime_deps':
444*d9f75844SAndroid Build Coastguard Worker        ("foo_unittests\n"
445*d9f75844SAndroid Build Coastguard Worker         "foo_unittests_script.py\n"),
446*d9f75844SAndroid Build Coastguard Worker    }
447*d9f75844SAndroid Build Coastguard Worker    mbw = self.check([
448*d9f75844SAndroid Build Coastguard Worker        'gen', '-c', 'debug_goma', '//out/Default', '--swarming-targets-file',
449*d9f75844SAndroid Build Coastguard Worker        '/tmp/swarming_targets', '--isolate-map-file',
450*d9f75844SAndroid Build Coastguard Worker        '/fake_src/testing/buildbot/gn_isolate_map.pyl'
451*d9f75844SAndroid Build Coastguard Worker    ],
452*d9f75844SAndroid Build Coastguard Worker                     files=test_files,
453*d9f75844SAndroid Build Coastguard Worker                     ret=0)
454*d9f75844SAndroid Build Coastguard Worker
455*d9f75844SAndroid Build Coastguard Worker    isolate_file = (
456*d9f75844SAndroid Build Coastguard Worker        mbw.files['/fake_src/out/Default/foo_unittests_script.isolate'])
457*d9f75844SAndroid Build Coastguard Worker    isolate_file_contents = ast.literal_eval(isolate_file)
458*d9f75844SAndroid Build Coastguard Worker    files = isolate_file_contents['variables']['files']
459*d9f75844SAndroid Build Coastguard Worker    command = isolate_file_contents['variables']['command']
460*d9f75844SAndroid Build Coastguard Worker
461*d9f75844SAndroid Build Coastguard Worker    self.assertEqual(files, [
462*d9f75844SAndroid Build Coastguard Worker        '../../.vpython3',
463*d9f75844SAndroid Build Coastguard Worker        '../../testing/test_env.py',
464*d9f75844SAndroid Build Coastguard Worker        'foo_unittests',
465*d9f75844SAndroid Build Coastguard Worker        'foo_unittests_script.py',
466*d9f75844SAndroid Build Coastguard Worker    ])
467*d9f75844SAndroid Build Coastguard Worker    self.assertEqual(command, [
468*d9f75844SAndroid Build Coastguard Worker        'vpython3',
469*d9f75844SAndroid Build Coastguard Worker        '../../foo/foo_unittests_script.py',
470*d9f75844SAndroid Build Coastguard Worker    ])
471*d9f75844SAndroid Build Coastguard Worker
472*d9f75844SAndroid Build Coastguard Worker  def test_gen_raw(self):
473*d9f75844SAndroid Build Coastguard Worker    test_files = {
474*d9f75844SAndroid Build Coastguard Worker        '/tmp/swarming_targets':
475*d9f75844SAndroid Build Coastguard Worker        'foo_unittests\n',
476*d9f75844SAndroid Build Coastguard Worker        '/fake_src/testing/buildbot/gn_isolate_map.pyl':
477*d9f75844SAndroid Build Coastguard Worker        ("{'foo_unittests': {"
478*d9f75844SAndroid Build Coastguard Worker         "  'label': '//foo:foo_unittests',"
479*d9f75844SAndroid Build Coastguard Worker         "  'type': 'raw',"
480*d9f75844SAndroid Build Coastguard Worker         "}}\n"),
481*d9f75844SAndroid Build Coastguard Worker        '/fake_src/out/Default/foo_unittests.runtime_deps': ("foo_unittests\n"),
482*d9f75844SAndroid Build Coastguard Worker    }
483*d9f75844SAndroid Build Coastguard Worker    mbw = self.check([
484*d9f75844SAndroid Build Coastguard Worker        'gen', '-c', 'debug_goma', '//out/Default', '--swarming-targets-file',
485*d9f75844SAndroid Build Coastguard Worker        '/tmp/swarming_targets', '--isolate-map-file',
486*d9f75844SAndroid Build Coastguard Worker        '/fake_src/testing/buildbot/gn_isolate_map.pyl'
487*d9f75844SAndroid Build Coastguard Worker    ],
488*d9f75844SAndroid Build Coastguard Worker                     files=test_files,
489*d9f75844SAndroid Build Coastguard Worker                     ret=0)
490*d9f75844SAndroid Build Coastguard Worker
491*d9f75844SAndroid Build Coastguard Worker    isolate_file = mbw.files['/fake_src/out/Default/foo_unittests.isolate']
492*d9f75844SAndroid Build Coastguard Worker    isolate_file_contents = ast.literal_eval(isolate_file)
493*d9f75844SAndroid Build Coastguard Worker    files = isolate_file_contents['variables']['files']
494*d9f75844SAndroid Build Coastguard Worker    command = isolate_file_contents['variables']['command']
495*d9f75844SAndroid Build Coastguard Worker
496*d9f75844SAndroid Build Coastguard Worker    self.assertEqual(files, [
497*d9f75844SAndroid Build Coastguard Worker        '../../.vpython3',
498*d9f75844SAndroid Build Coastguard Worker        '../../testing/test_env.py',
499*d9f75844SAndroid Build Coastguard Worker        'foo_unittests',
500*d9f75844SAndroid Build Coastguard Worker    ])
501*d9f75844SAndroid Build Coastguard Worker    self.assertEqual(command, ['bin/run_foo_unittests'])
502*d9f75844SAndroid Build Coastguard Worker
503*d9f75844SAndroid Build Coastguard Worker  def test_gen_non_parallel_console_test_launcher(self):
504*d9f75844SAndroid Build Coastguard Worker    test_files = {
505*d9f75844SAndroid Build Coastguard Worker        '/tmp/swarming_targets':
506*d9f75844SAndroid Build Coastguard Worker        'foo_unittests\n',
507*d9f75844SAndroid Build Coastguard Worker        '/fake_src/testing/buildbot/gn_isolate_map.pyl':
508*d9f75844SAndroid Build Coastguard Worker        ("{'foo_unittests': {"
509*d9f75844SAndroid Build Coastguard Worker         "  'label': '//foo:foo_unittests',"
510*d9f75844SAndroid Build Coastguard Worker         "  'type': 'non_parallel_console_test_launcher',"
511*d9f75844SAndroid Build Coastguard Worker         "}}\n"),
512*d9f75844SAndroid Build Coastguard Worker        '/fake_src/out/Default/foo_unittests.runtime_deps': ("foo_unittests\n"),
513*d9f75844SAndroid Build Coastguard Worker    }
514*d9f75844SAndroid Build Coastguard Worker    mbw = self.check([
515*d9f75844SAndroid Build Coastguard Worker        'gen', '-c', 'debug_goma', '//out/Default', '--swarming-targets-file',
516*d9f75844SAndroid Build Coastguard Worker        '/tmp/swarming_targets', '--isolate-map-file',
517*d9f75844SAndroid Build Coastguard Worker        '/fake_src/testing/buildbot/gn_isolate_map.pyl'
518*d9f75844SAndroid Build Coastguard Worker    ],
519*d9f75844SAndroid Build Coastguard Worker                     files=test_files,
520*d9f75844SAndroid Build Coastguard Worker                     ret=0)
521*d9f75844SAndroid Build Coastguard Worker
522*d9f75844SAndroid Build Coastguard Worker    isolate_file = mbw.files['/fake_src/out/Default/foo_unittests.isolate']
523*d9f75844SAndroid Build Coastguard Worker    isolate_file_contents = ast.literal_eval(isolate_file)
524*d9f75844SAndroid Build Coastguard Worker    files = isolate_file_contents['variables']['files']
525*d9f75844SAndroid Build Coastguard Worker    command = isolate_file_contents['variables']['command']
526*d9f75844SAndroid Build Coastguard Worker
527*d9f75844SAndroid Build Coastguard Worker    self.assertEqual(files, [
528*d9f75844SAndroid Build Coastguard Worker        '../../.vpython3',
529*d9f75844SAndroid Build Coastguard Worker        '../../testing/test_env.py',
530*d9f75844SAndroid Build Coastguard Worker        '../../third_party/gtest-parallel/gtest-parallel',
531*d9f75844SAndroid Build Coastguard Worker        '../../third_party/gtest-parallel/gtest_parallel.py',
532*d9f75844SAndroid Build Coastguard Worker        '../../tools_webrtc/gtest-parallel-wrapper.py',
533*d9f75844SAndroid Build Coastguard Worker        'foo_unittests',
534*d9f75844SAndroid Build Coastguard Worker    ])
535*d9f75844SAndroid Build Coastguard Worker    self.assertEqual(command, [
536*d9f75844SAndroid Build Coastguard Worker        'vpython3',
537*d9f75844SAndroid Build Coastguard Worker        '../../testing/test_env.py',
538*d9f75844SAndroid Build Coastguard Worker        '../../tools_webrtc/gtest-parallel-wrapper.py',
539*d9f75844SAndroid Build Coastguard Worker        '--output_dir=${ISOLATED_OUTDIR}/test_logs',
540*d9f75844SAndroid Build Coastguard Worker        '--gtest_color=no',
541*d9f75844SAndroid Build Coastguard Worker        '--timeout=900',
542*d9f75844SAndroid Build Coastguard Worker        '--workers=1',
543*d9f75844SAndroid Build Coastguard Worker        '--retry_failed=3',
544*d9f75844SAndroid Build Coastguard Worker        './foo_unittests',
545*d9f75844SAndroid Build Coastguard Worker        '--asan=0',
546*d9f75844SAndroid Build Coastguard Worker        '--lsan=0',
547*d9f75844SAndroid Build Coastguard Worker        '--msan=0',
548*d9f75844SAndroid Build Coastguard Worker        '--tsan=0',
549*d9f75844SAndroid Build Coastguard Worker    ])
550*d9f75844SAndroid Build Coastguard Worker
551*d9f75844SAndroid Build Coastguard Worker  def test_isolate_windowed_test_launcher_linux(self):
552*d9f75844SAndroid Build Coastguard Worker    test_files = {
553*d9f75844SAndroid Build Coastguard Worker        '/tmp/swarming_targets':
554*d9f75844SAndroid Build Coastguard Worker        'foo_unittests\n',
555*d9f75844SAndroid Build Coastguard Worker        '/fake_src/testing/buildbot/gn_isolate_map.pyl':
556*d9f75844SAndroid Build Coastguard Worker        ("{'foo_unittests': {"
557*d9f75844SAndroid Build Coastguard Worker         "  'label': '//foo:foo_unittests',"
558*d9f75844SAndroid Build Coastguard Worker         "  'type': 'windowed_test_launcher',"
559*d9f75844SAndroid Build Coastguard Worker         "}}\n"),
560*d9f75844SAndroid Build Coastguard Worker        '/fake_src/out/Default/foo_unittests.runtime_deps':
561*d9f75844SAndroid Build Coastguard Worker        ("foo_unittests\n"
562*d9f75844SAndroid Build Coastguard Worker         "some_resource_file\n"),
563*d9f75844SAndroid Build Coastguard Worker    }
564*d9f75844SAndroid Build Coastguard Worker    mbw = self.check([
565*d9f75844SAndroid Build Coastguard Worker        'gen', '-c', 'debug_goma', '//out/Default', '--swarming-targets-file',
566*d9f75844SAndroid Build Coastguard Worker        '/tmp/swarming_targets', '--isolate-map-file',
567*d9f75844SAndroid Build Coastguard Worker        '/fake_src/testing/buildbot/gn_isolate_map.pyl'
568*d9f75844SAndroid Build Coastguard Worker    ],
569*d9f75844SAndroid Build Coastguard Worker                     files=test_files,
570*d9f75844SAndroid Build Coastguard Worker                     ret=0)
571*d9f75844SAndroid Build Coastguard Worker
572*d9f75844SAndroid Build Coastguard Worker    isolate_file = mbw.files['/fake_src/out/Default/foo_unittests.isolate']
573*d9f75844SAndroid Build Coastguard Worker    isolate_file_contents = ast.literal_eval(isolate_file)
574*d9f75844SAndroid Build Coastguard Worker    files = isolate_file_contents['variables']['files']
575*d9f75844SAndroid Build Coastguard Worker    command = isolate_file_contents['variables']['command']
576*d9f75844SAndroid Build Coastguard Worker
577*d9f75844SAndroid Build Coastguard Worker    self.assertEqual(files, [
578*d9f75844SAndroid Build Coastguard Worker        '../../.vpython3',
579*d9f75844SAndroid Build Coastguard Worker        '../../testing/test_env.py',
580*d9f75844SAndroid Build Coastguard Worker        '../../testing/xvfb.py',
581*d9f75844SAndroid Build Coastguard Worker        '../../third_party/gtest-parallel/gtest-parallel',
582*d9f75844SAndroid Build Coastguard Worker        '../../third_party/gtest-parallel/gtest_parallel.py',
583*d9f75844SAndroid Build Coastguard Worker        '../../tools_webrtc/gtest-parallel-wrapper.py',
584*d9f75844SAndroid Build Coastguard Worker        'foo_unittests',
585*d9f75844SAndroid Build Coastguard Worker        'some_resource_file',
586*d9f75844SAndroid Build Coastguard Worker    ])
587*d9f75844SAndroid Build Coastguard Worker    self.assertEqual(command, [
588*d9f75844SAndroid Build Coastguard Worker        'vpython3',
589*d9f75844SAndroid Build Coastguard Worker        '../../testing/xvfb.py',
590*d9f75844SAndroid Build Coastguard Worker        '../../tools_webrtc/gtest-parallel-wrapper.py',
591*d9f75844SAndroid Build Coastguard Worker        '--output_dir=${ISOLATED_OUTDIR}/test_logs',
592*d9f75844SAndroid Build Coastguard Worker        '--gtest_color=no',
593*d9f75844SAndroid Build Coastguard Worker        '--timeout=900',
594*d9f75844SAndroid Build Coastguard Worker        '--retry_failed=3',
595*d9f75844SAndroid Build Coastguard Worker        './foo_unittests',
596*d9f75844SAndroid Build Coastguard Worker        '--asan=0',
597*d9f75844SAndroid Build Coastguard Worker        '--lsan=0',
598*d9f75844SAndroid Build Coastguard Worker        '--msan=0',
599*d9f75844SAndroid Build Coastguard Worker        '--tsan=0',
600*d9f75844SAndroid Build Coastguard Worker    ])
601*d9f75844SAndroid Build Coastguard Worker
602*d9f75844SAndroid Build Coastguard Worker  def test_gen_windowed_test_launcher_win(self):
603*d9f75844SAndroid Build Coastguard Worker    files = {
604*d9f75844SAndroid Build Coastguard Worker        'c:\\fake_src\\out\\Default\\tmp\\swarming_targets':
605*d9f75844SAndroid Build Coastguard Worker        'unittests\n',
606*d9f75844SAndroid Build Coastguard Worker        'c:\\fake_src\\testing\\buildbot\\gn_isolate_map.pyl':
607*d9f75844SAndroid Build Coastguard Worker        ("{'unittests': {"
608*d9f75844SAndroid Build Coastguard Worker         "  'label': '//somewhere:unittests',"
609*d9f75844SAndroid Build Coastguard Worker         "  'type': 'windowed_test_launcher',"
610*d9f75844SAndroid Build Coastguard Worker         "}}\n"),
611*d9f75844SAndroid Build Coastguard Worker        r'c:\fake_src\out\Default\unittests.exe.runtime_deps':
612*d9f75844SAndroid Build Coastguard Worker        ("unittests.exe\n"
613*d9f75844SAndroid Build Coastguard Worker         "some_dependency\n"),
614*d9f75844SAndroid Build Coastguard Worker    }
615*d9f75844SAndroid Build Coastguard Worker    mbw = CreateFakeMBW(files=files, win32=True)
616*d9f75844SAndroid Build Coastguard Worker    self.check([
617*d9f75844SAndroid Build Coastguard Worker        'gen', '-c', 'debug_goma', '--swarming-targets-file',
618*d9f75844SAndroid Build Coastguard Worker        'c:\\fake_src\\out\\Default\\tmp\\swarming_targets',
619*d9f75844SAndroid Build Coastguard Worker        '--isolate-map-file',
620*d9f75844SAndroid Build Coastguard Worker        'c:\\fake_src\\testing\\buildbot\\gn_isolate_map.pyl', '//out/Default'
621*d9f75844SAndroid Build Coastguard Worker    ],
622*d9f75844SAndroid Build Coastguard Worker               mbw=mbw,
623*d9f75844SAndroid Build Coastguard Worker               ret=0)
624*d9f75844SAndroid Build Coastguard Worker
625*d9f75844SAndroid Build Coastguard Worker    isolate_file = mbw.files['c:\\fake_src\\out\\Default\\unittests.isolate']
626*d9f75844SAndroid Build Coastguard Worker    isolate_file_contents = ast.literal_eval(isolate_file)
627*d9f75844SAndroid Build Coastguard Worker    files = isolate_file_contents['variables']['files']
628*d9f75844SAndroid Build Coastguard Worker    command = isolate_file_contents['variables']['command']
629*d9f75844SAndroid Build Coastguard Worker
630*d9f75844SAndroid Build Coastguard Worker    self.assertEqual(files, [
631*d9f75844SAndroid Build Coastguard Worker        '../../.vpython3',
632*d9f75844SAndroid Build Coastguard Worker        '../../testing/test_env.py',
633*d9f75844SAndroid Build Coastguard Worker        '../../third_party/gtest-parallel/gtest-parallel',
634*d9f75844SAndroid Build Coastguard Worker        '../../third_party/gtest-parallel/gtest_parallel.py',
635*d9f75844SAndroid Build Coastguard Worker        '../../tools_webrtc/gtest-parallel-wrapper.py',
636*d9f75844SAndroid Build Coastguard Worker        'some_dependency',
637*d9f75844SAndroid Build Coastguard Worker        'unittests.exe',
638*d9f75844SAndroid Build Coastguard Worker    ])
639*d9f75844SAndroid Build Coastguard Worker    self.assertEqual(command, [
640*d9f75844SAndroid Build Coastguard Worker        'vpython3',
641*d9f75844SAndroid Build Coastguard Worker        '../../testing/test_env.py',
642*d9f75844SAndroid Build Coastguard Worker        '../../tools_webrtc/gtest-parallel-wrapper.py',
643*d9f75844SAndroid Build Coastguard Worker        '--output_dir=${ISOLATED_OUTDIR}/test_logs',
644*d9f75844SAndroid Build Coastguard Worker        '--gtest_color=no',
645*d9f75844SAndroid Build Coastguard Worker        '--timeout=900',
646*d9f75844SAndroid Build Coastguard Worker        '--retry_failed=3',
647*d9f75844SAndroid Build Coastguard Worker        r'.\unittests.exe',
648*d9f75844SAndroid Build Coastguard Worker        '--asan=0',
649*d9f75844SAndroid Build Coastguard Worker        '--lsan=0',
650*d9f75844SAndroid Build Coastguard Worker        '--msan=0',
651*d9f75844SAndroid Build Coastguard Worker        '--tsan=0',
652*d9f75844SAndroid Build Coastguard Worker    ])
653*d9f75844SAndroid Build Coastguard Worker
654*d9f75844SAndroid Build Coastguard Worker  def test_gen_console_test_launcher(self):
655*d9f75844SAndroid Build Coastguard Worker    test_files = {
656*d9f75844SAndroid Build Coastguard Worker        '/tmp/swarming_targets':
657*d9f75844SAndroid Build Coastguard Worker        'foo_unittests\n',
658*d9f75844SAndroid Build Coastguard Worker        '/fake_src/testing/buildbot/gn_isolate_map.pyl':
659*d9f75844SAndroid Build Coastguard Worker        ("{'foo_unittests': {"
660*d9f75844SAndroid Build Coastguard Worker         "  'label': '//foo:foo_unittests',"
661*d9f75844SAndroid Build Coastguard Worker         "  'type': 'console_test_launcher',"
662*d9f75844SAndroid Build Coastguard Worker         "}}\n"),
663*d9f75844SAndroid Build Coastguard Worker        '/fake_src/out/Default/foo_unittests.runtime_deps': ("foo_unittests\n"),
664*d9f75844SAndroid Build Coastguard Worker    }
665*d9f75844SAndroid Build Coastguard Worker    mbw = self.check([
666*d9f75844SAndroid Build Coastguard Worker        'gen', '-c', 'debug_goma', '//out/Default', '--swarming-targets-file',
667*d9f75844SAndroid Build Coastguard Worker        '/tmp/swarming_targets', '--isolate-map-file',
668*d9f75844SAndroid Build Coastguard Worker        '/fake_src/testing/buildbot/gn_isolate_map.pyl'
669*d9f75844SAndroid Build Coastguard Worker    ],
670*d9f75844SAndroid Build Coastguard Worker                     files=test_files,
671*d9f75844SAndroid Build Coastguard Worker                     ret=0)
672*d9f75844SAndroid Build Coastguard Worker
673*d9f75844SAndroid Build Coastguard Worker    isolate_file = mbw.files['/fake_src/out/Default/foo_unittests.isolate']
674*d9f75844SAndroid Build Coastguard Worker    isolate_file_contents = ast.literal_eval(isolate_file)
675*d9f75844SAndroid Build Coastguard Worker    files = isolate_file_contents['variables']['files']
676*d9f75844SAndroid Build Coastguard Worker    command = isolate_file_contents['variables']['command']
677*d9f75844SAndroid Build Coastguard Worker
678*d9f75844SAndroid Build Coastguard Worker    self.assertEqual(files, [
679*d9f75844SAndroid Build Coastguard Worker        '../../.vpython3',
680*d9f75844SAndroid Build Coastguard Worker        '../../testing/test_env.py',
681*d9f75844SAndroid Build Coastguard Worker        '../../third_party/gtest-parallel/gtest-parallel',
682*d9f75844SAndroid Build Coastguard Worker        '../../third_party/gtest-parallel/gtest_parallel.py',
683*d9f75844SAndroid Build Coastguard Worker        '../../tools_webrtc/gtest-parallel-wrapper.py',
684*d9f75844SAndroid Build Coastguard Worker        'foo_unittests',
685*d9f75844SAndroid Build Coastguard Worker    ])
686*d9f75844SAndroid Build Coastguard Worker    self.assertEqual(command, [
687*d9f75844SAndroid Build Coastguard Worker        'vpython3',
688*d9f75844SAndroid Build Coastguard Worker        '../../testing/test_env.py',
689*d9f75844SAndroid Build Coastguard Worker        '../../tools_webrtc/gtest-parallel-wrapper.py',
690*d9f75844SAndroid Build Coastguard Worker        '--output_dir=${ISOLATED_OUTDIR}/test_logs',
691*d9f75844SAndroid Build Coastguard Worker        '--gtest_color=no',
692*d9f75844SAndroid Build Coastguard Worker        '--timeout=900',
693*d9f75844SAndroid Build Coastguard Worker        '--retry_failed=3',
694*d9f75844SAndroid Build Coastguard Worker        './foo_unittests',
695*d9f75844SAndroid Build Coastguard Worker        '--asan=0',
696*d9f75844SAndroid Build Coastguard Worker        '--lsan=0',
697*d9f75844SAndroid Build Coastguard Worker        '--msan=0',
698*d9f75844SAndroid Build Coastguard Worker        '--tsan=0',
699*d9f75844SAndroid Build Coastguard Worker    ])
700*d9f75844SAndroid Build Coastguard Worker
701*d9f75844SAndroid Build Coastguard Worker  def test_isolate_test_launcher_with_webcam(self):
702*d9f75844SAndroid Build Coastguard Worker    test_files = {
703*d9f75844SAndroid Build Coastguard Worker        '/tmp/swarming_targets':
704*d9f75844SAndroid Build Coastguard Worker        'foo_unittests\n',
705*d9f75844SAndroid Build Coastguard Worker        '/fake_src/testing/buildbot/gn_isolate_map.pyl':
706*d9f75844SAndroid Build Coastguard Worker        ("{'foo_unittests': {"
707*d9f75844SAndroid Build Coastguard Worker         "  'label': '//foo:foo_unittests',"
708*d9f75844SAndroid Build Coastguard Worker         "  'type': 'console_test_launcher',"
709*d9f75844SAndroid Build Coastguard Worker         "  'use_webcam': True,"
710*d9f75844SAndroid Build Coastguard Worker         "}}\n"),
711*d9f75844SAndroid Build Coastguard Worker        '/fake_src/out/Default/foo_unittests.runtime_deps':
712*d9f75844SAndroid Build Coastguard Worker        ("foo_unittests\n"
713*d9f75844SAndroid Build Coastguard Worker         "some_resource_file\n"),
714*d9f75844SAndroid Build Coastguard Worker    }
715*d9f75844SAndroid Build Coastguard Worker    mbw = self.check([
716*d9f75844SAndroid Build Coastguard Worker        'gen', '-c', 'debug_goma', '//out/Default', '--swarming-targets-file',
717*d9f75844SAndroid Build Coastguard Worker        '/tmp/swarming_targets', '--isolate-map-file',
718*d9f75844SAndroid Build Coastguard Worker        '/fake_src/testing/buildbot/gn_isolate_map.pyl'
719*d9f75844SAndroid Build Coastguard Worker    ],
720*d9f75844SAndroid Build Coastguard Worker                     files=test_files,
721*d9f75844SAndroid Build Coastguard Worker                     ret=0)
722*d9f75844SAndroid Build Coastguard Worker
723*d9f75844SAndroid Build Coastguard Worker    isolate_file = mbw.files['/fake_src/out/Default/foo_unittests.isolate']
724*d9f75844SAndroid Build Coastguard Worker    isolate_file_contents = ast.literal_eval(isolate_file)
725*d9f75844SAndroid Build Coastguard Worker    files = isolate_file_contents['variables']['files']
726*d9f75844SAndroid Build Coastguard Worker    command = isolate_file_contents['variables']['command']
727*d9f75844SAndroid Build Coastguard Worker
728*d9f75844SAndroid Build Coastguard Worker    self.assertEqual(files, [
729*d9f75844SAndroid Build Coastguard Worker        '../../.vpython3',
730*d9f75844SAndroid Build Coastguard Worker        '../../testing/test_env.py',
731*d9f75844SAndroid Build Coastguard Worker        '../../third_party/gtest-parallel/gtest-parallel',
732*d9f75844SAndroid Build Coastguard Worker        '../../third_party/gtest-parallel/gtest_parallel.py',
733*d9f75844SAndroid Build Coastguard Worker        '../../tools_webrtc/ensure_webcam_is_running.py',
734*d9f75844SAndroid Build Coastguard Worker        '../../tools_webrtc/gtest-parallel-wrapper.py',
735*d9f75844SAndroid Build Coastguard Worker        'foo_unittests',
736*d9f75844SAndroid Build Coastguard Worker        'some_resource_file',
737*d9f75844SAndroid Build Coastguard Worker    ])
738*d9f75844SAndroid Build Coastguard Worker    self.assertEqual(command, [
739*d9f75844SAndroid Build Coastguard Worker        'vpython3',
740*d9f75844SAndroid Build Coastguard Worker        '../../tools_webrtc/ensure_webcam_is_running.py',
741*d9f75844SAndroid Build Coastguard Worker        'vpython3',
742*d9f75844SAndroid Build Coastguard Worker        '../../testing/test_env.py',
743*d9f75844SAndroid Build Coastguard Worker        '../../tools_webrtc/gtest-parallel-wrapper.py',
744*d9f75844SAndroid Build Coastguard Worker        '--output_dir=${ISOLATED_OUTDIR}/test_logs',
745*d9f75844SAndroid Build Coastguard Worker        '--gtest_color=no',
746*d9f75844SAndroid Build Coastguard Worker        '--timeout=900',
747*d9f75844SAndroid Build Coastguard Worker        '--retry_failed=3',
748*d9f75844SAndroid Build Coastguard Worker        './foo_unittests',
749*d9f75844SAndroid Build Coastguard Worker        '--asan=0',
750*d9f75844SAndroid Build Coastguard Worker        '--lsan=0',
751*d9f75844SAndroid Build Coastguard Worker        '--msan=0',
752*d9f75844SAndroid Build Coastguard Worker        '--tsan=0',
753*d9f75844SAndroid Build Coastguard Worker    ])
754*d9f75844SAndroid Build Coastguard Worker
755*d9f75844SAndroid Build Coastguard Worker  def test_isolate(self):
756*d9f75844SAndroid Build Coastguard Worker    files = {
757*d9f75844SAndroid Build Coastguard Worker        '/fake_src/out/Default/toolchain.ninja':
758*d9f75844SAndroid Build Coastguard Worker        "",
759*d9f75844SAndroid Build Coastguard Worker        '/fake_src/testing/buildbot/gn_isolate_map.pyl':
760*d9f75844SAndroid Build Coastguard Worker        ("{'foo_unittests': {"
761*d9f75844SAndroid Build Coastguard Worker         "  'label': '//foo:foo_unittests',"
762*d9f75844SAndroid Build Coastguard Worker         "  'type': 'non_parallel_console_test_launcher',"
763*d9f75844SAndroid Build Coastguard Worker         "}}\n"),
764*d9f75844SAndroid Build Coastguard Worker        '/fake_src/out/Default/foo_unittests.runtime_deps': ("foo_unittests\n"),
765*d9f75844SAndroid Build Coastguard Worker    }
766*d9f75844SAndroid Build Coastguard Worker    self.check(
767*d9f75844SAndroid Build Coastguard Worker        ['isolate', '-c', 'debug_goma', '//out/Default', 'foo_unittests'],
768*d9f75844SAndroid Build Coastguard Worker        files=files,
769*d9f75844SAndroid Build Coastguard Worker        ret=0)
770*d9f75844SAndroid Build Coastguard Worker
771*d9f75844SAndroid Build Coastguard Worker    # test running isolate on an existing build_dir
772*d9f75844SAndroid Build Coastguard Worker    files['/fake_src/out/Default/args.gn'] = 'is_debug = true\n'
773*d9f75844SAndroid Build Coastguard Worker    self.check(['isolate', '//out/Default', 'foo_unittests'],
774*d9f75844SAndroid Build Coastguard Worker               files=files,
775*d9f75844SAndroid Build Coastguard Worker               ret=0)
776*d9f75844SAndroid Build Coastguard Worker    files['/fake_src/out/Default/mb_type'] = 'gn\n'
777*d9f75844SAndroid Build Coastguard Worker    self.check(['isolate', '//out/Default', 'foo_unittests'],
778*d9f75844SAndroid Build Coastguard Worker               files=files,
779*d9f75844SAndroid Build Coastguard Worker               ret=0)
780*d9f75844SAndroid Build Coastguard Worker
781*d9f75844SAndroid Build Coastguard Workerif __name__ == '__main__':
782*d9f75844SAndroid Build Coastguard Worker  unittest.main()
783