blob: fc359d9995580eba55443283cd71ebc99c9e7dcd [file] [log] [blame]
kjellandera013a022016-11-14 05:54:22 -08001#!/usr/bin/python
2# Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3#
4# Use of this source code is governed by a BSD-style license
5# that can be found in the LICENSE file in the root of the source
6# tree. An additional intellectual property rights grant can be found
7# in the file PATENTS. All contributing project authors may
8# be found in the AUTHORS file in the root of the source tree.
9
10"""Tests for mb.py."""
11
ehmaldonadoed8c8ed2016-11-23 12:58:35 -080012import ast
kjellandera013a022016-11-14 05:54:22 -080013import json
14import StringIO
15import os
Mirko Bonadei989e6e72021-01-29 14:34:52 +010016import re
kjellandera013a022016-11-14 05:54:22 -080017import sys
Mirko Bonadei989e6e72021-01-29 14:34:52 +010018import tempfile
kjellandera013a022016-11-14 05:54:22 -080019import unittest
20
21import mb
22
23
24class FakeMBW(mb.MetaBuildWrapper):
25 def __init__(self, win32=False):
26 super(FakeMBW, self).__init__()
27
28 # Override vars for test portability.
29 if win32:
kjellander1c3548c2017-02-15 22:38:22 -080030 self.src_dir = 'c:\\fake_src'
Henrik Kjellander90fd7d82017-05-09 08:30:10 +020031 self.default_config = 'c:\\fake_src\\tools_webrtc\\mb\\mb_config.pyl'
kjellandera013a022016-11-14 05:54:22 -080032 self.default_isolate_map = ('c:\\fake_src\\testing\\buildbot\\'
33 'gn_isolate_map.pyl')
34 self.platform = 'win32'
35 self.executable = 'c:\\python\\python.exe'
36 self.sep = '\\'
Mirko Bonadei989e6e72021-01-29 14:34:52 +010037 self.cwd = 'c:\\fake_src\\out\\Default'
kjellandera013a022016-11-14 05:54:22 -080038 else:
kjellander1c3548c2017-02-15 22:38:22 -080039 self.src_dir = '/fake_src'
Henrik Kjellander90fd7d82017-05-09 08:30:10 +020040 self.default_config = '/fake_src/tools_webrtc/mb/mb_config.pyl'
kjellandera013a022016-11-14 05:54:22 -080041 self.default_isolate_map = '/fake_src/testing/buildbot/gn_isolate_map.pyl'
42 self.executable = '/usr/bin/python'
43 self.platform = 'linux2'
44 self.sep = '/'
Mirko Bonadei989e6e72021-01-29 14:34:52 +010045 self.cwd = '/fake_src/out/Default'
kjellandera013a022016-11-14 05:54:22 -080046
47 self.files = {}
Mirko Bonadei989e6e72021-01-29 14:34:52 +010048 self.dirs = set()
kjellandera013a022016-11-14 05:54:22 -080049 self.calls = []
50 self.cmds = []
51 self.cross_compile = None
52 self.out = ''
53 self.err = ''
54 self.rmdirs = []
55
56 def ExpandUser(self, path):
57 return '$HOME/%s' % path
58
59 def Exists(self, path):
Mirko Bonadei989e6e72021-01-29 14:34:52 +010060 abs_path = self._AbsPath(path)
61 return (self.files.get(abs_path) is not None or abs_path in self.dirs)
kjellandera013a022016-11-14 05:54:22 -080062
63 def MaybeMakeDirectory(self, path):
Mirko Bonadei989e6e72021-01-29 14:34:52 +010064 abpath = self._AbsPath(path)
65 self.dirs.add(abpath)
kjellandera013a022016-11-14 05:54:22 -080066
67 def PathJoin(self, *comps):
68 return self.sep.join(comps)
69
70 def ReadFile(self, path):
Mirko Bonadei989e6e72021-01-29 14:34:52 +010071 return self.files[self._AbsPath(path)]
kjellandera013a022016-11-14 05:54:22 -080072
73 def WriteFile(self, path, contents, force_verbose=False):
74 if self.args.dryrun or self.args.verbose or force_verbose:
75 self.Print('\nWriting """\\\n%s""" to %s.\n' % (contents, path))
Mirko Bonadei989e6e72021-01-29 14:34:52 +010076 abpath = self._AbsPath(path)
77 self.files[abpath] = contents
kjellandera013a022016-11-14 05:54:22 -080078
79 def Call(self, cmd, env=None, buffer_output=True):
kjellandera013a022016-11-14 05:54:22 -080080 self.calls.append(cmd)
81 if self.cmds:
82 return self.cmds.pop(0)
83 return 0, '', ''
84
85 def Print(self, *args, **kwargs):
86 sep = kwargs.get('sep', ' ')
87 end = kwargs.get('end', '\n')
88 f = kwargs.get('file', sys.stdout)
89 if f == sys.stderr:
90 self.err += sep.join(args) + end
91 else:
92 self.out += sep.join(args) + end
93
Mirko Bonadei989e6e72021-01-29 14:34:52 +010094 def TempDir(self):
95 tmp_dir = os.path.join(tempfile.gettempdir(), 'mb_test')
96 self.dirs.add(tmp_dir)
97 return tmp_dir
98
kjellandera013a022016-11-14 05:54:22 -080099 def TempFile(self, mode='w'):
100 return FakeFile(self.files)
101
102 def RemoveFile(self, path):
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100103 abpath = self._AbsPath(path)
104 self.files[abpath] = None
kjellandera013a022016-11-14 05:54:22 -0800105
106 def RemoveDirectory(self, path):
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100107 abpath = self._AbsPath(path)
108 self.rmdirs.append(abpath)
109 files_to_delete = [f for f in self.files if f.startswith(abpath)]
kjellandera013a022016-11-14 05:54:22 -0800110 for f in files_to_delete:
111 self.files[f] = None
112
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100113 def _AbsPath(self, path):
114 if not ((self.platform == 'win32' and path.startswith('c:')) or
115 (self.platform != 'win32' and path.startswith('/'))):
116 path = self.PathJoin(self.cwd, path)
117 if self.sep == '\\':
118 return re.sub(r'\\+', r'\\', path)
119 else:
120 return re.sub('/+', '/', path)
121
kjellandera013a022016-11-14 05:54:22 -0800122
123class FakeFile(object):
124 def __init__(self, files):
125 self.name = '/tmp/file'
126 self.buf = ''
127 self.files = files
128
129 def write(self, contents):
130 self.buf += contents
131
132 def close(self):
133 self.files[self.name] = self.buf
134
135
136TEST_CONFIG = """\
137{
Mirko Bonadei8606b9c2021-01-12 14:29:40 +0100138 'builder_groups': {
kjellandera013a022016-11-14 05:54:22 -0800139 'chromium': {},
Mirko Bonadei8606b9c2021-01-12 14:29:40 +0100140 'fake_group': {
Oleh Prypinb708e932018-03-18 17:34:20 +0100141 'fake_builder': 'rel_bot',
142 'fake_debug_builder': 'debug_goma',
Mirko Bonadei8606b9c2021-01-12 14:29:40 +0100143 'fake_args_bot': '//build/args/bots/fake_group/fake_args_bot.gn',
Oleh Prypinb708e932018-03-18 17:34:20 +0100144 'fake_multi_phase': { 'phase_1': 'phase_1', 'phase_2': 'phase_2'},
145 'fake_android_bot': 'android_bot',
kjellandera013a022016-11-14 05:54:22 -0800146 },
147 },
148 'configs': {
Oleh Prypinb708e932018-03-18 17:34:20 +0100149 'rel_bot': ['rel', 'goma', 'fake_feature1'],
150 'debug_goma': ['debug', 'goma'],
151 'phase_1': ['phase_1'],
152 'phase_2': ['phase_2'],
Oleh Prypinb708e932018-03-18 17:34:20 +0100153 'android_bot': ['android'],
kjellandera013a022016-11-14 05:54:22 -0800154 },
155 'mixins': {
kjellandera013a022016-11-14 05:54:22 -0800156 'fake_feature1': {
157 'gn_args': 'enable_doom_melon=true',
kjellandera013a022016-11-14 05:54:22 -0800158 },
kjellandera013a022016-11-14 05:54:22 -0800159 'goma': {
160 'gn_args': 'use_goma=true',
kjellandera013a022016-11-14 05:54:22 -0800161 },
162 'phase_1': {
163 'gn_args': 'phase=1',
kjellandera013a022016-11-14 05:54:22 -0800164 },
165 'phase_2': {
166 'gn_args': 'phase=2',
kjellandera013a022016-11-14 05:54:22 -0800167 },
168 'rel': {
169 'gn_args': 'is_debug=false',
170 },
171 'debug': {
172 'gn_args': 'is_debug=true',
173 },
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800174 'android': {
175 'gn_args': 'target_os="android"',
176 }
kjellandera013a022016-11-14 05:54:22 -0800177 },
178}
179"""
180
kjellandera013a022016-11-14 05:54:22 -0800181
182class UnitTest(unittest.TestCase):
183 def fake_mbw(self, files=None, win32=False):
184 mbw = FakeMBW(win32=win32)
185 mbw.files.setdefault(mbw.default_config, TEST_CONFIG)
186 mbw.files.setdefault(
187 mbw.ToAbsPath('//testing/buildbot/gn_isolate_map.pyl'),
188 '''{
189 "foo_unittests": {
190 "label": "//foo:foo_unittests",
191 "type": "console_test_launcher",
192 "args": [],
193 },
194 }''')
195 mbw.files.setdefault(
Mirko Bonadei8606b9c2021-01-12 14:29:40 +0100196 mbw.ToAbsPath('//build/args/bots/fake_group/fake_args_bot.gn'),
kjellandera013a022016-11-14 05:54:22 -0800197 'is_debug = false\n')
198 if files:
199 for path, contents in files.items():
200 mbw.files[path] = contents
201 return mbw
202
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100203 def check(self, args, mbw=None, files=None, out=None, err=None, ret=None,
204 env=None):
kjellandera013a022016-11-14 05:54:22 -0800205 if not mbw:
206 mbw = self.fake_mbw(files)
207
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100208 try:
209 prev_env = os.environ.copy()
210 os.environ = env if env else prev_env
211 actual_ret = mbw.Main(args)
212 finally:
213 os.environ = prev_env
214 self.assertEqual(
215 actual_ret, ret,
216 "ret: %s, out: %s, err: %s" % (actual_ret, mbw.out, mbw.err))
kjellandera013a022016-11-14 05:54:22 -0800217 if out is not None:
218 self.assertEqual(mbw.out, out)
219 if err is not None:
220 self.assertEqual(mbw.err, err)
221 return mbw
222
Oleh Prypinb708e932018-03-18 17:34:20 +0100223 def test_analyze(self):
kjellandera013a022016-11-14 05:54:22 -0800224 files = {'/tmp/in.json': '''{\
225 "files": ["foo/foo_unittest.cc"],
226 "test_targets": ["foo_unittests"],
227 "additional_compile_targets": ["all"]
228 }''',
229 '/tmp/out.json.gn': '''{\
230 "status": "Found dependency",
231 "compile_targets": ["//foo:foo_unittests"],
232 "test_targets": ["//foo:foo_unittests"]
233 }'''}
234
235 mbw = self.fake_mbw(files)
236 mbw.Call = lambda cmd, env=None, buffer_output=True: (0, '', '')
237
Oleh Prypinb708e932018-03-18 17:34:20 +0100238 self.check(['analyze', '-c', 'debug_goma', '//out/Default',
kjellandera013a022016-11-14 05:54:22 -0800239 '/tmp/in.json', '/tmp/out.json'], mbw=mbw, ret=0)
240 out = json.loads(mbw.files['/tmp/out.json'])
241 self.assertEqual(out, {
242 'status': 'Found dependency',
243 'compile_targets': ['foo:foo_unittests'],
244 'test_targets': ['foo_unittests']
245 })
246
Oleh Prypinb708e932018-03-18 17:34:20 +0100247 def test_gen(self):
kjellandera013a022016-11-14 05:54:22 -0800248 mbw = self.fake_mbw()
Oleh Prypinb708e932018-03-18 17:34:20 +0100249 self.check(['gen', '-c', 'debug_goma', '//out/Default', '-g', '/goma'],
kjellandera013a022016-11-14 05:54:22 -0800250 mbw=mbw, ret=0)
251 self.assertMultiLineEqual(mbw.files['/fake_src/out/Default/args.gn'],
252 ('goma_dir = "/goma"\n'
253 'is_debug = true\n'
254 'use_goma = true\n'))
255
256 # Make sure we log both what is written to args.gn and the command line.
257 self.assertIn('Writing """', mbw.out)
258 self.assertIn('/fake_src/buildtools/linux64/gn gen //out/Default --check',
259 mbw.out)
260
261 mbw = self.fake_mbw(win32=True)
Oleh Prypinb708e932018-03-18 17:34:20 +0100262 self.check(['gen', '-c', 'debug_goma', '-g', 'c:\\goma', '//out/Debug'],
kjellandera013a022016-11-14 05:54:22 -0800263 mbw=mbw, ret=0)
264 self.assertMultiLineEqual(mbw.files['c:\\fake_src\\out\\Debug\\args.gn'],
265 ('goma_dir = "c:\\\\goma"\n'
266 'is_debug = true\n'
267 'use_goma = true\n'))
268 self.assertIn('c:\\fake_src\\buildtools\\win\\gn.exe gen //out/Debug '
269 '--check\n', mbw.out)
270
271 mbw = self.fake_mbw()
Mirko Bonadei8606b9c2021-01-12 14:29:40 +0100272 self.check(['gen', '-m', 'fake_group', '-b', 'fake_args_bot',
kjellandera013a022016-11-14 05:54:22 -0800273 '//out/Debug'],
274 mbw=mbw, ret=0)
275 self.assertEqual(
276 mbw.files['/fake_src/out/Debug/args.gn'],
Mirko Bonadei8606b9c2021-01-12 14:29:40 +0100277 'import("//build/args/bots/fake_group/fake_args_bot.gn")\n\n')
kjellandera013a022016-11-14 05:54:22 -0800278
279
Oleh Prypinb708e932018-03-18 17:34:20 +0100280 def test_gen_fails(self):
kjellandera013a022016-11-14 05:54:22 -0800281 mbw = self.fake_mbw()
282 mbw.Call = lambda cmd, env=None, buffer_output=True: (1, '', '')
Oleh Prypinb708e932018-03-18 17:34:20 +0100283 self.check(['gen', '-c', 'debug_goma', '//out/Default'], mbw=mbw, ret=1)
kjellandera013a022016-11-14 05:54:22 -0800284
Oleh Prypinb708e932018-03-18 17:34:20 +0100285 def test_gen_swarming(self):
kjellandera013a022016-11-14 05:54:22 -0800286 files = {
Oleh Prypinb708e932018-03-18 17:34:20 +0100287 '/tmp/swarming_targets': 'base_unittests\n',
kjellandera013a022016-11-14 05:54:22 -0800288 '/fake_src/testing/buildbot/gn_isolate_map.pyl': (
Oleh Prypinb708e932018-03-18 17:34:20 +0100289 "{'base_unittests': {"
290 " 'label': '//base:base_unittests',"
291 " 'type': 'raw',"
292 " 'args': [],"
kjellandera013a022016-11-14 05:54:22 -0800293 "}}\n"
294 ),
Oleh Prypinb708e932018-03-18 17:34:20 +0100295 '/fake_src/out/Default/base_unittests.runtime_deps': (
296 "base_unittests\n"
kjellandera013a022016-11-14 05:54:22 -0800297 ),
298 }
Oleh Prypinb708e932018-03-18 17:34:20 +0100299 mbw = self.fake_mbw(files)
kjellandera013a022016-11-14 05:54:22 -0800300 self.check(['gen',
Oleh Prypinb708e932018-03-18 17:34:20 +0100301 '-c', 'debug_goma',
kjellandera013a022016-11-14 05:54:22 -0800302 '--swarming-targets-file', '/tmp/swarming_targets',
kjellandera013a022016-11-14 05:54:22 -0800303 '//out/Default'], mbw=mbw, ret=0)
Oleh Prypinb708e932018-03-18 17:34:20 +0100304 self.assertIn('/fake_src/out/Default/base_unittests.isolate',
kjellandera013a022016-11-14 05:54:22 -0800305 mbw.files)
Oleh Prypinb708e932018-03-18 17:34:20 +0100306 self.assertIn('/fake_src/out/Default/base_unittests.isolated.gen.json',
kjellandera013a022016-11-14 05:54:22 -0800307 mbw.files)
308
Oleh Prypinb708e932018-03-18 17:34:20 +0100309 def test_gen_swarming_android(self):
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800310 test_files = {
311 '/tmp/swarming_targets': 'base_unittests\n',
312 '/fake_src/testing/buildbot/gn_isolate_map.pyl': (
313 "{'base_unittests': {"
314 " 'label': '//base:base_unittests',"
315 " 'type': 'additional_compile_target',"
316 "}}\n"
317 ),
318 '/fake_src/out/Default/base_unittests.runtime_deps': (
319 "base_unittests\n"
320 ),
321 }
Oleh Prypinb708e932018-03-18 17:34:20 +0100322 mbw = self.check(['gen', '-c', 'android_bot', '//out/Default',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800323 '--swarming-targets-file', '/tmp/swarming_targets',
324 '--isolate-map-file',
325 '/fake_src/testing/buildbot/gn_isolate_map.pyl'],
326 files=test_files, ret=0)
327
328 isolate_file = mbw.files['/fake_src/out/Default/base_unittests.isolate']
329 isolate_file_contents = ast.literal_eval(isolate_file)
330 files = isolate_file_contents['variables']['files']
331 command = isolate_file_contents['variables']['command']
332
Oleh Prypinb708e932018-03-18 17:34:20 +0100333 self.assertEqual(files, ['../../.vpython', '../../testing/test_env.py',
334 'base_unittests'])
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800335 self.assertEqual(command, [
kjellanderf9e2a362017-03-24 12:17:33 -0700336 '../../build/android/test_wrapper/logdog_wrapper.py',
337 '--target', 'base_unittests',
Oleh Prypin5bb1afd2018-12-14 16:11:48 +0000338 '--logdog-bin-cmd', '../../bin/logdog_butler',
ehmaldonado34623ce2017-09-08 07:03:13 -0700339 '--logcat-output-file', '${ISOLATED_OUTDIR}/logcats',
340 '--store-tombstones',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800341 ])
342
Oleh Prypinb708e932018-03-18 17:34:20 +0100343 def test_gen_swarming_android_junit_test(self):
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800344 test_files = {
345 '/tmp/swarming_targets': 'base_unittests\n',
346 '/fake_src/testing/buildbot/gn_isolate_map.pyl': (
347 "{'base_unittests': {"
348 " 'label': '//base:base_unittests',"
349 " 'type': 'junit_test',"
350 "}}\n"
351 ),
352 '/fake_src/out/Default/base_unittests.runtime_deps': (
353 "base_unittests\n"
354 ),
355 }
Oleh Prypinb708e932018-03-18 17:34:20 +0100356 mbw = self.check(['gen', '-c', 'android_bot', '//out/Default',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800357 '--swarming-targets-file', '/tmp/swarming_targets',
358 '--isolate-map-file',
359 '/fake_src/testing/buildbot/gn_isolate_map.pyl'],
360 files=test_files, ret=0)
361
362 isolate_file = mbw.files['/fake_src/out/Default/base_unittests.isolate']
363 isolate_file_contents = ast.literal_eval(isolate_file)
364 files = isolate_file_contents['variables']['files']
365 command = isolate_file_contents['variables']['command']
366
Oleh Prypinb708e932018-03-18 17:34:20 +0100367 self.assertEqual(files, ['../../.vpython', '../../testing/test_env.py',
368 'base_unittests'])
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800369 self.assertEqual(command, [
kjellanderf9e2a362017-03-24 12:17:33 -0700370 '../../build/android/test_wrapper/logdog_wrapper.py',
371 '--target', 'base_unittests',
Oleh Prypin5bb1afd2018-12-14 16:11:48 +0000372 '--logdog-bin-cmd', '../../bin/logdog_butler',
ehmaldonado34623ce2017-09-08 07:03:13 -0700373 '--logcat-output-file', '${ISOLATED_OUTDIR}/logcats',
374 '--store-tombstones',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800375 ])
376
Oleh Prypinb708e932018-03-18 17:34:20 +0100377 def test_gen_timeout(self):
Edward Lemurbeffdd42017-09-27 13:07:47 +0200378 test_files = {
379 '/tmp/swarming_targets': 'base_unittests\n',
380 '/fake_src/testing/buildbot/gn_isolate_map.pyl': (
381 "{'base_unittests': {"
382 " 'label': '//base:base_unittests',"
383 " 'type': 'non_parallel_console_test_launcher',"
384 " 'timeout': 500,"
385 "}}\n"
386 ),
387 '/fake_src/out/Default/base_unittests.runtime_deps': (
388 "base_unittests\n"
389 ),
390 }
Oleh Prypinb708e932018-03-18 17:34:20 +0100391 mbw = self.check(['gen', '-c', 'debug_goma', '//out/Default',
Edward Lemurbeffdd42017-09-27 13:07:47 +0200392 '--swarming-targets-file', '/tmp/swarming_targets',
393 '--isolate-map-file',
394 '/fake_src/testing/buildbot/gn_isolate_map.pyl'],
395 files=test_files, ret=0)
396
397 isolate_file = mbw.files['/fake_src/out/Default/base_unittests.isolate']
398 isolate_file_contents = ast.literal_eval(isolate_file)
399 files = isolate_file_contents['variables']['files']
400 command = isolate_file_contents['variables']['command']
401
402 self.assertEqual(files, [
Oleh Prypin739b8162018-05-17 13:28:29 +0200403 '../../.vpython',
Edward Lemurbeffdd42017-09-27 13:07:47 +0200404 '../../testing/test_env.py',
405 '../../third_party/gtest-parallel/gtest-parallel',
406 '../../third_party/gtest-parallel/gtest_parallel.py',
407 '../../tools_webrtc/gtest-parallel-wrapper.py',
408 'base_unittests',
409 ])
410 self.assertEqual(command, [
411 '../../testing/test_env.py',
412 '../../tools_webrtc/gtest-parallel-wrapper.py',
413 '--output_dir=${ISOLATED_OUTDIR}/test_logs',
414 '--gtest_color=no',
415 '--timeout=500',
Edward Lemurbeffdd42017-09-27 13:07:47 +0200416 '--workers=1',
Yves Gerey2e0c6552018-10-08 21:59:25 +0200417 '--retry_failed=3',
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100418 './base_unittests',
Edward Lemurbeffdd42017-09-27 13:07:47 +0200419 '--asan=0',
420 '--lsan=0',
421 '--msan=0',
422 '--tsan=0',
423 ])
424
Oleh Prypinb708e932018-03-18 17:34:20 +0100425 def test_gen_script(self):
Edward Lemur20110752017-09-28 16:14:37 +0200426 test_files = {
427 '/tmp/swarming_targets': 'base_unittests_script\n',
428 '/fake_src/testing/buildbot/gn_isolate_map.pyl': (
429 "{'base_unittests_script': {"
430 " 'label': '//base:base_unittests',"
431 " 'type': 'script',"
432 " 'script': '//base/base_unittests_script.py',"
433 "}}\n"
434 ),
435 '/fake_src/out/Default/base_unittests.runtime_deps': (
436 "base_unittests\n"
437 "base_unittests_script.py\n"
438 ),
439 }
Oleh Prypinb708e932018-03-18 17:34:20 +0100440 mbw = self.check(['gen', '-c', 'debug_goma', '//out/Default',
Edward Lemur20110752017-09-28 16:14:37 +0200441 '--swarming-targets-file', '/tmp/swarming_targets',
442 '--isolate-map-file',
443 '/fake_src/testing/buildbot/gn_isolate_map.pyl'],
444 files=test_files, ret=0)
445
446 isolate_file = (
447 mbw.files['/fake_src/out/Default/base_unittests_script.isolate'])
448 isolate_file_contents = ast.literal_eval(isolate_file)
449 files = isolate_file_contents['variables']['files']
450 command = isolate_file_contents['variables']['command']
451
452 self.assertEqual(files, [
Oleh Prypinb708e932018-03-18 17:34:20 +0100453 '../../.vpython', '../../testing/test_env.py',
454 'base_unittests', 'base_unittests_script.py',
Edward Lemur20110752017-09-28 16:14:37 +0200455 ])
456 self.assertEqual(command, [
457 '../../base/base_unittests_script.py',
458 ])
459
Oleh Prypinb708e932018-03-18 17:34:20 +0100460 def test_gen_raw(self):
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100461 test_files = {
462 '/tmp/swarming_targets': 'base_unittests\n',
463 '/fake_src/testing/buildbot/gn_isolate_map.pyl': (
464 "{'base_unittests': {"
465 " 'label': '//base:base_unittests',"
466 " 'type': 'raw',"
467 "}}\n"
468 ),
469 '/fake_src/out/Default/base_unittests.runtime_deps': (
470 "base_unittests\n"
471 ),
472 }
Oleh Prypinb708e932018-03-18 17:34:20 +0100473 mbw = self.check(['gen', '-c', 'debug_goma', '//out/Default',
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100474 '--swarming-targets-file', '/tmp/swarming_targets',
475 '--isolate-map-file',
476 '/fake_src/testing/buildbot/gn_isolate_map.pyl'],
477 files=test_files, ret=0)
478
479 isolate_file = mbw.files['/fake_src/out/Default/base_unittests.isolate']
480 isolate_file_contents = ast.literal_eval(isolate_file)
481 files = isolate_file_contents['variables']['files']
482 command = isolate_file_contents['variables']['command']
483
484 self.assertEqual(files, [
Oleh Prypin739b8162018-05-17 13:28:29 +0200485 '../../.vpython',
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100486 '../../testing/test_env.py',
Patrik Höglund28b8a0b2020-03-26 20:30:50 +0100487 '../../tools_webrtc/flags_compatibility.py',
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100488 'base_unittests',
489 ])
490 self.assertEqual(command, [
Patrik Höglund28b8a0b2020-03-26 20:30:50 +0100491 '../../tools_webrtc/flags_compatibility.py',
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100492 '../../testing/test_env.py',
493 './base_unittests',
494 '--asan=0',
495 '--lsan=0',
496 '--msan=0',
497 '--tsan=0',
498 ])
499
Oleh Prypinb708e932018-03-18 17:34:20 +0100500 def test_gen_non_parallel_console_test_launcher(self):
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800501 test_files = {
502 '/tmp/swarming_targets': 'base_unittests\n',
503 '/fake_src/testing/buildbot/gn_isolate_map.pyl': (
504 "{'base_unittests': {"
505 " 'label': '//base:base_unittests',"
506 " 'type': 'non_parallel_console_test_launcher',"
507 "}}\n"
508 ),
509 '/fake_src/out/Default/base_unittests.runtime_deps': (
510 "base_unittests\n"
511 ),
512 }
Oleh Prypinb708e932018-03-18 17:34:20 +0100513 mbw = self.check(['gen', '-c', 'debug_goma', '//out/Default',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800514 '--swarming-targets-file', '/tmp/swarming_targets',
515 '--isolate-map-file',
516 '/fake_src/testing/buildbot/gn_isolate_map.pyl'],
517 files=test_files, ret=0)
518
519 isolate_file = mbw.files['/fake_src/out/Default/base_unittests.isolate']
520 isolate_file_contents = ast.literal_eval(isolate_file)
521 files = isolate_file_contents['variables']['files']
522 command = isolate_file_contents['variables']['command']
523
524 self.assertEqual(files, [
Oleh Prypin739b8162018-05-17 13:28:29 +0200525 '../../.vpython',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800526 '../../testing/test_env.py',
kjellander382f2b22017-04-11 04:07:01 -0700527 '../../third_party/gtest-parallel/gtest-parallel',
ehmaldonadoa7507eb2017-05-10 13:40:29 -0700528 '../../third_party/gtest-parallel/gtest_parallel.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200529 '../../tools_webrtc/gtest-parallel-wrapper.py',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800530 'base_unittests',
531 ])
532 self.assertEqual(command, [
533 '../../testing/test_env.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200534 '../../tools_webrtc/gtest-parallel-wrapper.py',
kjellander382f2b22017-04-11 04:07:01 -0700535 '--output_dir=${ISOLATED_OUTDIR}/test_logs',
ehmaldonado76e60e92017-05-04 06:18:26 -0700536 '--gtest_color=no',
537 '--timeout=900',
kjellander382f2b22017-04-11 04:07:01 -0700538 '--workers=1',
Yves Gerey2e0c6552018-10-08 21:59:25 +0200539 '--retry_failed=3',
Edward Lemur2b67f5c2018-02-07 18:09:44 +0100540 './base_unittests',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800541 '--asan=0',
kjellander461a5602017-05-05 06:39:16 -0700542 '--lsan=0',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800543 '--msan=0',
544 '--tsan=0',
545 ])
546
Oleh Prypinb708e932018-03-18 17:34:20 +0100547 def test_isolate_windowed_test_launcher_linux(self):
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800548 test_files = {
549 '/tmp/swarming_targets': 'base_unittests\n',
550 '/fake_src/testing/buildbot/gn_isolate_map.pyl': (
551 "{'base_unittests': {"
552 " 'label': '//base:base_unittests',"
553 " 'type': 'windowed_test_launcher',"
554 "}}\n"
555 ),
556 '/fake_src/out/Default/base_unittests.runtime_deps': (
557 "base_unittests\n"
558 "some_resource_file\n"
559 ),
560 }
Oleh Prypinb708e932018-03-18 17:34:20 +0100561 mbw = self.check(['gen', '-c', 'debug_goma', '//out/Default',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800562 '--swarming-targets-file', '/tmp/swarming_targets',
563 '--isolate-map-file',
564 '/fake_src/testing/buildbot/gn_isolate_map.pyl'],
565 files=test_files, ret=0)
566
567 isolate_file = mbw.files['/fake_src/out/Default/base_unittests.isolate']
568 isolate_file_contents = ast.literal_eval(isolate_file)
569 files = isolate_file_contents['variables']['files']
570 command = isolate_file_contents['variables']['command']
571
572 self.assertEqual(files, [
Oleh Prypin739b8162018-05-17 13:28:29 +0200573 '../../.vpython',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800574 '../../testing/test_env.py',
575 '../../testing/xvfb.py',
576 '../../third_party/gtest-parallel/gtest-parallel',
ehmaldonadoa7507eb2017-05-10 13:40:29 -0700577 '../../third_party/gtest-parallel/gtest_parallel.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200578 '../../tools_webrtc/gtest-parallel-wrapper.py',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800579 'base_unittests',
580 'some_resource_file',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800581 ])
582 self.assertEqual(command, [
583 '../../testing/xvfb.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200584 '../../tools_webrtc/gtest-parallel-wrapper.py',
ehmaldonado55833842017-02-13 03:58:13 -0800585 '--output_dir=${ISOLATED_OUTDIR}/test_logs',
ehmaldonado76e60e92017-05-04 06:18:26 -0700586 '--gtest_color=no',
587 '--timeout=900',
ehmaldonado2a280352017-05-05 04:33:57 -0700588 '--retry_failed=3',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800589 './base_unittests',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800590 '--asan=0',
kjellander461a5602017-05-05 06:39:16 -0700591 '--lsan=0',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800592 '--msan=0',
593 '--tsan=0',
594 ])
595
Oleh Prypinb708e932018-03-18 17:34:20 +0100596 def test_gen_windowed_test_launcher_win(self):
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800597 files = {
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100598 'c:\\fake_src\\out\\Default\\tmp\\swarming_targets': 'unittests\n',
599 'c:\\fake_src\\testing\\buildbot\\gn_isolate_map.pyl': (
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800600 "{'unittests': {"
601 " 'label': '//somewhere:unittests',"
602 " 'type': 'windowed_test_launcher',"
603 "}}\n"
604 ),
605 r'c:\fake_src\out\Default\unittests.exe.runtime_deps': (
606 "unittests.exe\n"
607 "some_dependency\n"
608 ),
609 }
610 mbw = self.fake_mbw(files=files, win32=True)
611 self.check(['gen',
Oleh Prypinb708e932018-03-18 17:34:20 +0100612 '-c', 'debug_goma',
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100613 '--swarming-targets-file',
614 'c:\\fake_src\\out\\Default\\tmp\\swarming_targets',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800615 '--isolate-map-file',
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100616 'c:\\fake_src\\testing\\buildbot\\gn_isolate_map.pyl',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800617 '//out/Default'], mbw=mbw, ret=0)
618
619 isolate_file = mbw.files['c:\\fake_src\\out\\Default\\unittests.isolate']
620 isolate_file_contents = ast.literal_eval(isolate_file)
621 files = isolate_file_contents['variables']['files']
622 command = isolate_file_contents['variables']['command']
623
624 self.assertEqual(files, [
Oleh Prypin739b8162018-05-17 13:28:29 +0200625 '../../.vpython',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800626 '../../testing/test_env.py',
627 '../../third_party/gtest-parallel/gtest-parallel',
ehmaldonadoa7507eb2017-05-10 13:40:29 -0700628 '../../third_party/gtest-parallel/gtest_parallel.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200629 '../../tools_webrtc/gtest-parallel-wrapper.py',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800630 'some_dependency',
631 'unittests.exe',
632 ])
633 self.assertEqual(command, [
634 '../../testing/test_env.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200635 '../../tools_webrtc/gtest-parallel-wrapper.py',
ehmaldonado55833842017-02-13 03:58:13 -0800636 '--output_dir=${ISOLATED_OUTDIR}\\test_logs',
ehmaldonado76e60e92017-05-04 06:18:26 -0700637 '--gtest_color=no',
638 '--timeout=900',
ehmaldonado2a280352017-05-05 04:33:57 -0700639 '--retry_failed=3',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800640 r'.\unittests.exe',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800641 '--asan=0',
kjellander461a5602017-05-05 06:39:16 -0700642 '--lsan=0',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800643 '--msan=0',
644 '--tsan=0',
645 ])
646
Oleh Prypinb708e932018-03-18 17:34:20 +0100647 def test_gen_console_test_launcher(self):
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800648 test_files = {
649 '/tmp/swarming_targets': 'base_unittests\n',
650 '/fake_src/testing/buildbot/gn_isolate_map.pyl': (
651 "{'base_unittests': {"
652 " 'label': '//base:base_unittests',"
653 " 'type': 'console_test_launcher',"
654 "}}\n"
655 ),
656 '/fake_src/out/Default/base_unittests.runtime_deps': (
657 "base_unittests\n"
658 ),
659 }
Oleh Prypinb708e932018-03-18 17:34:20 +0100660 mbw = self.check(['gen', '-c', 'debug_goma', '//out/Default',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800661 '--swarming-targets-file', '/tmp/swarming_targets',
662 '--isolate-map-file',
663 '/fake_src/testing/buildbot/gn_isolate_map.pyl'],
664 files=test_files, ret=0)
665
666 isolate_file = mbw.files['/fake_src/out/Default/base_unittests.isolate']
667 isolate_file_contents = ast.literal_eval(isolate_file)
668 files = isolate_file_contents['variables']['files']
669 command = isolate_file_contents['variables']['command']
670
671 self.assertEqual(files, [
Oleh Prypin739b8162018-05-17 13:28:29 +0200672 '../../.vpython',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800673 '../../testing/test_env.py',
674 '../../third_party/gtest-parallel/gtest-parallel',
ehmaldonadoa7507eb2017-05-10 13:40:29 -0700675 '../../third_party/gtest-parallel/gtest_parallel.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200676 '../../tools_webrtc/gtest-parallel-wrapper.py',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800677 'base_unittests',
678 ])
679 self.assertEqual(command, [
680 '../../testing/test_env.py',
Henrik Kjellander90fd7d82017-05-09 08:30:10 +0200681 '../../tools_webrtc/gtest-parallel-wrapper.py',
ehmaldonado55833842017-02-13 03:58:13 -0800682 '--output_dir=${ISOLATED_OUTDIR}/test_logs',
ehmaldonado76e60e92017-05-04 06:18:26 -0700683 '--gtest_color=no',
684 '--timeout=900',
ehmaldonado2a280352017-05-05 04:33:57 -0700685 '--retry_failed=3',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800686 './base_unittests',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800687 '--asan=0',
kjellander461a5602017-05-05 06:39:16 -0700688 '--lsan=0',
ehmaldonadoed8c8ed2016-11-23 12:58:35 -0800689 '--msan=0',
690 '--tsan=0',
691 ])
692
Oleh Prypin739b8162018-05-17 13:28:29 +0200693 def test_isolate_test_launcher_with_webcam(self):
694 test_files = {
695 '/tmp/swarming_targets': 'base_unittests\n',
696 '/fake_src/testing/buildbot/gn_isolate_map.pyl': (
697 "{'base_unittests': {"
698 " 'label': '//base:base_unittests',"
699 " 'type': 'console_test_launcher',"
700 " 'use_webcam': True,"
701 "}}\n"
702 ),
703 '/fake_src/out/Default/base_unittests.runtime_deps': (
704 "base_unittests\n"
705 "some_resource_file\n"
706 ),
707 }
708 mbw = self.check(['gen', '-c', 'debug_goma', '//out/Default',
709 '--swarming-targets-file', '/tmp/swarming_targets',
710 '--isolate-map-file',
711 '/fake_src/testing/buildbot/gn_isolate_map.pyl'],
712 files=test_files, ret=0)
713
714 isolate_file = mbw.files['/fake_src/out/Default/base_unittests.isolate']
715 isolate_file_contents = ast.literal_eval(isolate_file)
716 files = isolate_file_contents['variables']['files']
717 command = isolate_file_contents['variables']['command']
718
719 self.assertEqual(files, [
720 '../../.vpython',
721 '../../testing/test_env.py',
722 '../../third_party/gtest-parallel/gtest-parallel',
723 '../../third_party/gtest-parallel/gtest_parallel.py',
724 '../../tools_webrtc/ensure_webcam_is_running.py',
725 '../../tools_webrtc/gtest-parallel-wrapper.py',
726 'base_unittests',
727 'some_resource_file',
728 ])
729 self.assertEqual(command, [
730 '../../tools_webrtc/ensure_webcam_is_running.py',
731 '../../testing/test_env.py',
732 '../../tools_webrtc/gtest-parallel-wrapper.py',
733 '--output_dir=${ISOLATED_OUTDIR}/test_logs',
734 '--gtest_color=no',
735 '--timeout=900',
736 '--retry_failed=3',
737 './base_unittests',
Oleh Prypin739b8162018-05-17 13:28:29 +0200738 '--asan=0',
739 '--lsan=0',
740 '--msan=0',
741 '--tsan=0',
742 ])
743
Oleh Prypinb708e932018-03-18 17:34:20 +0100744 def test_isolate(self):
kjellandera013a022016-11-14 05:54:22 -0800745 files = {
746 '/fake_src/out/Default/toolchain.ninja': "",
747 '/fake_src/testing/buildbot/gn_isolate_map.pyl': (
748 "{'base_unittests': {"
749 " 'label': '//base:base_unittests',"
ehmaldonadob2fcf6d2016-11-15 12:20:30 -0800750 " 'type': 'non_parallel_console_test_launcher',"
kjellandera013a022016-11-14 05:54:22 -0800751 "}}\n"
752 ),
753 '/fake_src/out/Default/base_unittests.runtime_deps': (
754 "base_unittests\n"
755 ),
756 }
Oleh Prypinb708e932018-03-18 17:34:20 +0100757 self.check(['isolate', '-c', 'debug_goma', '//out/Default',
kjellandera013a022016-11-14 05:54:22 -0800758 'base_unittests'], files=files, ret=0)
759
760 # test running isolate on an existing build_dir
761 files['/fake_src/out/Default/args.gn'] = 'is_debug = True\n'
762 self.check(['isolate', '//out/Default', 'base_unittests'],
763 files=files, ret=0)
kjellandera013a022016-11-14 05:54:22 -0800764 files['/fake_src/out/Default/mb_type'] = 'gn\n'
765 self.check(['isolate', '//out/Default', 'base_unittests'],
766 files=files, ret=0)
767
Oleh Prypinb708e932018-03-18 17:34:20 +0100768 def test_run(self):
kjellandera013a022016-11-14 05:54:22 -0800769 files = {
770 '/fake_src/testing/buildbot/gn_isolate_map.pyl': (
771 "{'base_unittests': {"
772 " 'label': '//base:base_unittests',"
ehmaldonadob2fcf6d2016-11-15 12:20:30 -0800773 " 'type': 'windowed_test_launcher',"
kjellandera013a022016-11-14 05:54:22 -0800774 "}}\n"
775 ),
776 '/fake_src/out/Default/base_unittests.runtime_deps': (
777 "base_unittests\n"
778 ),
779 }
Oleh Prypinb708e932018-03-18 17:34:20 +0100780 self.check(['run', '-c', 'debug_goma', '//out/Default',
kjellandera013a022016-11-14 05:54:22 -0800781 'base_unittests'], files=files, ret=0)
782
Oleh Prypinb708e932018-03-18 17:34:20 +0100783 def test_run_swarmed(self):
784 files = {
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100785 '/fake_src/testing/buildbot/gn_isolate_map.pyl':
786 ("{'base_unittests': {"
787 " 'label': '//base:base_unittests',"
788 " 'type': 'console_test_launcher',"
789 "}}\n"),
790 '/fake_src/out/Default/base_unittests.runtime_deps':
791 ("base_unittests\n"),
792 '/fake_src/out/Default/base_unittests.archive.json':
793 ("{\"base_unittests\":\"fake_hash\"}"),
794 '/fake_src/third_party/depot_tools/cipd_manifest.txt':
795 ("# vpython\n"
796 "/some/vpython/pkg git_revision:deadbeef\n"),
Oleh Prypinb708e932018-03-18 17:34:20 +0100797 }
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100798 task_json = json.dumps({'tasks': [{'task_id': '00000'}]})
799 collect_json = json.dumps({'00000': {'results': {}}})
kjellandera013a022016-11-14 05:54:22 -0800800
Oleh Prypinb708e932018-03-18 17:34:20 +0100801 mbw = self.fake_mbw(files=files)
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100802 mbw.files[mbw.PathJoin(mbw.TempDir(), 'task.json')] = task_json
803 mbw.files[mbw.PathJoin(mbw.TempDir(), 'collect_output.json')] = collect_json
804 original_impl = mbw.ToSrcRelPath
805
806 def to_src_rel_path_stub(path):
807 if path.endswith('base_unittests.archive.json'):
808 return 'base_unittests.archive.json'
809 return original_impl(path)
810
811 mbw.ToSrcRelPath = to_src_rel_path_stub
812
Oleh Prypinb708e932018-03-18 17:34:20 +0100813 self.check(['run', '-s', '-c', 'debug_goma', '//out/Default',
814 'base_unittests'], mbw=mbw, ret=0)
Mirko Bonadei989e6e72021-01-29 14:34:52 +0100815 mbw = self.fake_mbw(files=files)
816 mbw.files[mbw.PathJoin(mbw.TempDir(), 'task.json')] = task_json
817 mbw.files[mbw.PathJoin(mbw.TempDir(), 'collect_output.json')] = collect_json
818 mbw.ToSrcRelPath = to_src_rel_path_stub
Oleh Prypinb708e932018-03-18 17:34:20 +0100819 self.check(['run', '-s', '-c', 'debug_goma', '-d', 'os', 'Win7',
820 '//out/Default', 'base_unittests'], mbw=mbw, ret=0)
821
822 def test_lookup(self):
823 self.check(['lookup', '-c', 'debug_goma'], ret=0)
824
Oleh Prypind7e2fb32019-05-31 13:25:39 +0200825 def test_quiet_lookup(self):
826 self.check(['lookup', '-c', 'debug_goma', '--quiet'], ret=0,
827 out=('is_debug = true\n'
828 'use_goma = true\n'))
829
Oleh Prypinb708e932018-03-18 17:34:20 +0100830 def test_lookup_goma_dir_expansion(self):
831 self.check(['lookup', '-c', 'rel_bot', '-g', '/foo'], ret=0,
kjellandera013a022016-11-14 05:54:22 -0800832 out=('\n'
833 'Writing """\\\n'
Oleh Prypinb708e932018-03-18 17:34:20 +0100834 'enable_doom_melon = true\n'
kjellandera013a022016-11-14 05:54:22 -0800835 'goma_dir = "/foo"\n'
836 'is_debug = false\n'
837 'use_goma = true\n'
838 '""" to _path_/args.gn.\n\n'
839 '/fake_src/buildtools/linux64/gn gen _path_\n'))
840
kjellandera013a022016-11-14 05:54:22 -0800841 def test_help(self):
842 orig_stdout = sys.stdout
843 try:
844 sys.stdout = StringIO.StringIO()
845 self.assertRaises(SystemExit, self.check, ['-h'])
846 self.assertRaises(SystemExit, self.check, ['help'])
847 self.assertRaises(SystemExit, self.check, ['help', 'gen'])
848 finally:
849 sys.stdout = orig_stdout
850
851 def test_multiple_phases(self):
852 # Check that not passing a --phase to a multi-phase builder fails.
Mirko Bonadei8606b9c2021-01-12 14:29:40 +0100853 mbw = self.check(['lookup', '-m', 'fake_group', '-b', 'fake_multi_phase'],
kjellandera013a022016-11-14 05:54:22 -0800854 ret=1)
855 self.assertIn('Must specify a build --phase', mbw.out)
856
857 # Check that passing a --phase to a single-phase builder fails.
Mirko Bonadei8606b9c2021-01-12 14:29:40 +0100858 mbw = self.check(['lookup', '-m', 'fake_group', '-b', 'fake_builder',
kjellandera013a022016-11-14 05:54:22 -0800859 '--phase', 'phase_1'], ret=1)
860 self.assertIn('Must not specify a build --phase', mbw.out)
861
862 # Check that passing a wrong phase key to a multi-phase builder fails.
Mirko Bonadei8606b9c2021-01-12 14:29:40 +0100863 mbw = self.check(['lookup', '-m', 'fake_group', '-b', 'fake_multi_phase',
kjellandera013a022016-11-14 05:54:22 -0800864 '--phase', 'wrong_phase'], ret=1)
865 self.assertIn('Phase wrong_phase doesn\'t exist', mbw.out)
866
867 # Check that passing a correct phase key to a multi-phase builder passes.
Mirko Bonadei8606b9c2021-01-12 14:29:40 +0100868 mbw = self.check(['lookup', '-m', 'fake_group', '-b', 'fake_multi_phase',
kjellandera013a022016-11-14 05:54:22 -0800869 '--phase', 'phase_1'], ret=0)
870 self.assertIn('phase = 1', mbw.out)
871
Mirko Bonadei8606b9c2021-01-12 14:29:40 +0100872 mbw = self.check(['lookup', '-m', 'fake_group', '-b', 'fake_multi_phase',
kjellandera013a022016-11-14 05:54:22 -0800873 '--phase', 'phase_2'], ret=0)
874 self.assertIn('phase = 2', mbw.out)
875
876 def test_validate(self):
877 mbw = self.fake_mbw()
878 self.check(['validate'], mbw=mbw, ret=0)
879
kjellandera013a022016-11-14 05:54:22 -0800880
881if __name__ == '__main__':
882 unittest.main()