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