From 2b67f5c65f7a331650df868148a495c921b970f8 Mon Sep 17 00:00:00 2001 From: Edward Lemur Date: Wed, 7 Feb 2018 18:09:44 +0100 Subject: [PATCH] MB: Add a way to run tests on swarming without using gtest-parallel. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a new test_type 'raw' to run tests on swarming without wrapping it on gtest-parallel. This will be used to run webrtc_perf_tests directly. Bug: chromium:755660 Change-Id: I8558faadf242d1db1ad3e13083941886c92b1bd9 Reviewed-on: https://webrtc-review.googlesource.com/49360 Reviewed-by: Patrik Höglund Commit-Queue: Edward Lemur Cr-Commit-Position: refs/heads/master@{#21962} --- tools_webrtc/mb/mb.py | 60 +++++++++++++++++----------------- tools_webrtc/mb/mb_unittest.py | 41 +++++++++++++++++++++-- 2 files changed, 69 insertions(+), 32 deletions(-) diff --git a/tools_webrtc/mb/mb.py b/tools_webrtc/mb/mb.py index 682532e4d4..4db1bc39c8 100755 --- a/tools_webrtc/mb/mb.py +++ b/tools_webrtc/mb/mb.py @@ -1042,7 +1042,7 @@ class MetaBuildWrapper(object): self.WriteFailureAndRaise('We should not be isolating %s.' % target, output_path=None) if test_type not in ('console_test_launcher', 'windowed_test_launcher', - 'non_parallel_console_test_launcher', + 'non_parallel_console_test_launcher', 'raw', 'additional_compile_target', 'junit_test', 'script'): self.WriteFailureAndRaise('No command line for %s found (test type %s).' % (target, test_type), output_path=None) @@ -1071,21 +1071,23 @@ class MetaBuildWrapper(object): '../../testing/xvfb.py', ] - # Memcheck is only supported for linux. Ignore in other platforms. - memcheck = is_linux and 'rtc_use_memcheck=true' in vals['gn_args'] - memcheck_cmdline = [ - 'bash', - '../../tools_webrtc/valgrind/webrtc_tests.sh', - '--tool', - 'memcheck', - '--target', - 'Release', - '--build-dir', - '..', - '--test', - ] + cmdline = (['../../testing/xvfb.py'] if xvfb else + ['../../testing/test_env.py']) - if not memcheck: + # Memcheck is only supported for linux. Ignore in other platforms. + if is_linux and 'rtc_use_memcheck=true' in vals['gn_args']: + cmdline += [ + 'bash', + '../../tools_webrtc/valgrind/webrtc_tests.sh', + '--tool', + 'memcheck', + '--target', + 'Release', + '--build-dir', + '..', + '--test', + ] + elif test_type != 'raw': extra_files += [ '../../third_party/gtest-parallel/gtest-parallel', '../../third_party/gtest-parallel/gtest_parallel.py', @@ -1094,7 +1096,7 @@ class MetaBuildWrapper(object): sep = '\\' if self.platform == 'win32' else '/' output_dir = '${ISOLATED_OUTDIR}' + sep + 'test_logs' timeout = isolate_map[target].get('timeout', 900) - gtest_parallel_wrapper = [ + cmdline += [ '../../tools_webrtc/gtest-parallel-wrapper.py', '--output_dir=%s' % output_dir, '--gtest_color=no', @@ -1104,27 +1106,25 @@ class MetaBuildWrapper(object): '--timeout=%s' % timeout, '--retry_failed=3', ] + if test_type == 'non_parallel_console_test_launcher': + # Still use the gtest-parallel-wrapper.py script since we need it to + # run tests on swarming, but don't execute tests in parallel. + cmdline.append('--workers=1') + + executable_prefix = '.\\' if self.platform == 'win32' else './' + executable_suffix = '.exe' if self.platform == 'win32' else '' + executable = executable_prefix + target + executable_suffix + + cmdline.append(executable) + if test_type != 'raw': + cmdline.append('--') asan = 'is_asan=true' in vals['gn_args'] lsan = 'is_lsan=true' in vals['gn_args'] msan = 'is_msan=true' in vals['gn_args'] tsan = 'is_tsan=true' in vals['gn_args'] - executable_prefix = '.\\' if self.platform == 'win32' else './' - executable_suffix = '.exe' if self.platform == 'win32' else '' - executable = executable_prefix + target + executable_suffix - - cmdline = (['../../testing/xvfb.py'] if xvfb else - ['../../testing/test_env.py']) - cmdline += memcheck_cmdline if memcheck else gtest_parallel_wrapper - cmdline.append(executable) - if test_type == 'non_parallel_console_test_launcher' and not memcheck: - # Still use the gtest-parallel-wrapper.py script since we need it to - # run tests on swarming, but don't execute tests in parallel. - cmdline.append('--workers=1') - cmdline.extend([ - '--', '--asan=%d' % asan, '--lsan=%d' % lsan, '--msan=%d' % msan, diff --git a/tools_webrtc/mb/mb_unittest.py b/tools_webrtc/mb/mb_unittest.py index dd475317ba..7c1f1e62af 100755 --- a/tools_webrtc/mb/mb_unittest.py +++ b/tools_webrtc/mb/mb_unittest.py @@ -457,8 +457,8 @@ class UnitTest(unittest.TestCase): '--gtest_color=no', '--timeout=500', '--retry_failed=3', - './base_unittests', '--workers=1', + './base_unittests', '--', '--asan=0', '--lsan=0', @@ -501,6 +501,43 @@ class UnitTest(unittest.TestCase): '../../base/base_unittests_script.py', ]) + def test_gn_gen_raw(self): + test_files = { + '/tmp/swarming_targets': 'base_unittests\n', + '/fake_src/testing/buildbot/gn_isolate_map.pyl': ( + "{'base_unittests': {" + " 'label': '//base:base_unittests'," + " 'type': 'raw'," + "}}\n" + ), + '/fake_src/out/Default/base_unittests.runtime_deps': ( + "base_unittests\n" + ), + } + mbw = self.check(['gen', '-c', 'gn_debug_goma', '//out/Default', + '--swarming-targets-file', '/tmp/swarming_targets', + '--isolate-map-file', + '/fake_src/testing/buildbot/gn_isolate_map.pyl'], + files=test_files, ret=0) + + isolate_file = mbw.files['/fake_src/out/Default/base_unittests.isolate'] + isolate_file_contents = ast.literal_eval(isolate_file) + files = isolate_file_contents['variables']['files'] + command = isolate_file_contents['variables']['command'] + + self.assertEqual(files, [ + '../../testing/test_env.py', + 'base_unittests', + ]) + self.assertEqual(command, [ + '../../testing/test_env.py', + './base_unittests', + '--asan=0', + '--lsan=0', + '--msan=0', + '--tsan=0', + ]) + def test_gn_gen_non_parallel_console_test_launcher(self): test_files = { '/tmp/swarming_targets': 'base_unittests\n', @@ -539,8 +576,8 @@ class UnitTest(unittest.TestCase): '--gtest_color=no', '--timeout=900', '--retry_failed=3', - './base_unittests', '--workers=1', + './base_unittests', '--', '--asan=0', '--lsan=0',