Index: infra/scripts/legacy/scripts/slave/runtest.py |
diff --git a/infra/scripts/legacy/scripts/slave/runtest.py b/infra/scripts/legacy/scripts/slave/runtest.py |
index c1d8d0769963945cd8fa10ba22cd34a9bb9587ba..efc97bc8519641b32503bbe2a3f4fb1f24084d83 100755 |
--- a/infra/scripts/legacy/scripts/slave/runtest.py |
+++ b/infra/scripts/legacy/scripts/slave/runtest.py |
@@ -21,6 +21,7 @@ import json |
import logging |
import optparse |
import os |
+import platform |
import re |
import stat |
import subprocess |
@@ -374,85 +375,24 @@ def _SymbolizeSnippetsInJSON(options, json_file_name): |
print stderr |
-def _MainMac(options, args, extra_env): |
- """Runs the test on mac.""" |
- if len(args) < 1: |
- raise chromium_utils.MissingArgument('Usage: %s' % USAGE) |
- |
- test_exe = args[0] |
- if options.run_python_script: |
- build_dir = os.path.normpath(os.path.abspath(options.build_dir)) |
- test_exe_path = test_exe |
- else: |
- build_dir = os.path.normpath(os.path.abspath(options.build_dir)) |
- test_exe_path = os.path.join(build_dir, options.target, test_exe) |
- |
- # Nuke anything that appears to be stale chrome items in the temporary |
- # directory from previous test runs (i.e.- from crashes or unittest leaks). |
- slave_utils.RemoveChromeTemporaryFiles() |
- |
- if options.run_shell_script: |
- command = ['bash', test_exe_path] |
- elif options.run_python_script: |
- command = [sys.executable, test_exe] |
- else: |
- command = _BuildTestBinaryCommand(build_dir, test_exe_path, options) |
- command.extend(args[1:]) |
- |
- log_processor_class = _SelectLogProcessor(options) |
- log_processor = _CreateLogProcessor(log_processor_class, options) |
- |
- if options.generate_json_file: |
- if os.path.exists(options.test_output_xml): |
- # remove the old XML output file. |
- os.remove(options.test_output_xml) |
- |
- try: |
- if _UsingGtestJson(options): |
- json_file_name = log_processor.PrepareJSONFile( |
- options.test_launcher_summary_output) |
- command.append('--test-launcher-summary-output=%s' % json_file_name) |
- |
- pipes = [] |
- if options.use_symbolization_script: |
- pipes = [_GetSanitizerSymbolizeCommand()] |
- |
- command = _GenerateRunIsolatedCommand(build_dir, test_exe_path, options, |
- command) |
- result = _RunGTestCommand(options, command, extra_env, pipes=pipes) |
- finally: |
- if _UsingGtestJson(options): |
- log_processor.ProcessJSONFile(options.build_dir) |
- |
- if options.generate_json_file: |
- if not _GenerateJSONForTestResults(options, log_processor): |
- return 1 |
- |
- if options.annotate: |
- annotation_utils.annotate( |
- options.test_type, result, log_processor, |
- perf_dashboard_id=options.perf_dashboard_id) |
- |
- return result |
- |
+def _Main(options, args, extra_env): |
+ """Using the target build configuration, run the executable given in the |
+ first non-option argument, passing any following arguments to that |
+ executable. |
-def _MainLinux(options, args, extra_env): |
- """Runs the test on Linux.""" |
- import platform |
- xvfb_path = os.path.join(os.path.dirname(sys.argv[0]), '..', '..', |
- 'third_party', 'xvfb', platform.architecture()[0]) |
+ Args: |
+ options: Command-line options for this invocation of runtest.py. |
+ args: Command and arguments for the test. |
+ extra_env: A dictionary of extra environment variables to set. |
+ Returns: |
+ Exit status code. |
+ """ |
if len(args) < 1: |
raise chromium_utils.MissingArgument('Usage: %s' % USAGE) |
- build_dir = os.path.normpath(os.path.abspath(options.build_dir)) |
- if options.slave_name: |
- slave_name = options.slave_name |
- else: |
- slave_name = slave_utils.SlaveBuildName(build_dir) |
- bin_dir = os.path.join(build_dir, options.target) |
- |
- # Figure out what we want for a special frame buffer directory. |
+ xvfb_path = os.path.join(os.path.dirname(sys.argv[0]), '..', '..', |
+ 'third_party', 'xvfb', platform.architecture()[0]) |
special_xvfb_dir = None |
fp_chromeos = options.factory_properties.get('chromeos', None) |
if (fp_chromeos or |
@@ -460,44 +400,43 @@ def _MainLinux(options, args, extra_env): |
slave_utils.GypFlagIsOn(options, 'chromeos')): |
special_xvfb_dir = xvfb_path |
+ build_dir = os.path.normpath(os.path.abspath(options.build_dir)) |
+ bin_dir = os.path.join(build_dir, options.target) |
+ slave_name = options.slave_name or slave_utils.SlaveBuildName(build_dir) |
+ |
test_exe = args[0] |
if options.run_python_script: |
test_exe_path = test_exe |
else: |
test_exe_path = os.path.join(bin_dir, test_exe) |
+ |
if not os.path.exists(test_exe_path): |
if options.factory_properties.get('succeed_on_missing_exe', False): |
print '%s missing but succeed_on_missing_exe used, exiting' % ( |
test_exe_path) |
return 0 |
- msg = 'Unable to find %s' % test_exe_path |
- raise chromium_utils.PathNotFound(msg) |
- |
- # Unset http_proxy and HTTPS_PROXY environment variables. When set, this |
- # causes some tests to hang. See http://crbug.com/139638 for more info. |
- if 'http_proxy' in os.environ: |
- del os.environ['http_proxy'] |
- print 'Deleted http_proxy environment variable.' |
- if 'HTTPS_PROXY' in os.environ: |
- del os.environ['HTTPS_PROXY'] |
- print 'Deleted HTTPS_PROXY environment variable.' |
- |
- # Path to SUID sandbox binary. This must be installed on all bots. |
- extra_env['CHROME_DEVEL_SANDBOX'] = CHROME_SANDBOX_PATH |
- |
- # Nuke anything that appears to be stale chrome items in the temporary |
- # directory from previous test runs (i.e.- from crashes or unittest leaks). |
- slave_utils.RemoveChromeTemporaryFiles() |
+ raise chromium_utils.PathNotFound('Unable to find %s' % test_exe_path) |
- extra_env['LD_LIBRARY_PATH'] = '' |
+ if sys.platform == 'linux2': |
+ # Unset http_proxy and HTTPS_PROXY environment variables. When set, this |
+ # causes some tests to hang. See http://crbug.com/139638 for more info. |
+ if 'http_proxy' in os.environ: |
+ del os.environ['http_proxy'] |
+ print 'Deleted http_proxy environment variable.' |
+ if 'HTTPS_PROXY' in os.environ: |
+ del os.environ['HTTPS_PROXY'] |
+ print 'Deleted HTTPS_PROXY environment variable.' |
- if options.enable_lsan: |
- # Use the debug version of libstdc++ under LSan. If we don't, there will be |
- # a lot of incomplete stack traces in the reports. |
- extra_env['LD_LIBRARY_PATH'] += '/usr/lib/x86_64-linux-gnu/debug:' |
+ # Path to SUID sandbox binary. This must be installed on all bots. |
+ extra_env['CHROME_DEVEL_SANDBOX'] = CHROME_SANDBOX_PATH |
- extra_env['LD_LIBRARY_PATH'] += '%s:%s/lib:%s/lib.target' % (bin_dir, bin_dir, |
- bin_dir) |
+ extra_env['LD_LIBRARY_PATH'] = '' |
+ if options.enable_lsan: |
+ # Use the debug version of libstdc++ under LSan. If we don't, there will |
+ # be a lot of incomplete stack traces in the reports. |
+ extra_env['LD_LIBRARY_PATH'] += '/usr/lib/x86_64-linux-gnu/debug:' |
+ extra_env['LD_LIBRARY_PATH'] += '%s:%s/lib:%s/lib.target' % ( |
+ bin_dir, bin_dir, bin_dir) |
if options.run_shell_script: |
command = ['bash', test_exe_path] |
@@ -507,6 +446,10 @@ def _MainLinux(options, args, extra_env): |
command = _BuildTestBinaryCommand(build_dir, test_exe_path, options) |
command.extend(args[1:]) |
+ # Nuke anything that appears to be stale chrome items in the temporary |
+ # directory from previous test runs (i.e.- from crashes or unittest leaks). |
+ slave_utils.RemoveChromeTemporaryFiles() |
+ |
log_processor_class = _SelectLogProcessor(options) |
log_processor = _CreateLogProcessor(log_processor_class, options) |
@@ -516,16 +459,15 @@ def _MainLinux(options, args, extra_env): |
os.remove(options.test_output_xml) |
try: |
- start_xvfb = False |
- json_file_name = None |
- |
# TODO(dpranke): checking on test_exe is a temporary hack until we |
# can change the buildbot master to pass --xvfb instead of --no-xvfb |
# for these two steps. See |
# https://code.google.com/p/chromium/issues/detail?id=179814 |
- start_xvfb = (options.xvfb or |
- 'layout_test_wrapper' in test_exe or |
- 'devtools_perf_test_wrapper' in test_exe) |
+ start_xvfb = ( |
+ sys.platform == 'linux2' and ( |
+ options.xvfb or |
+ 'layout_test_wrapper' in test_exe or |
+ 'devtools_perf_test_wrapper' in test_exe)) |
if start_xvfb: |
xvfb.StartVirtualX( |
slave_name, bin_dir, |
@@ -568,82 +510,6 @@ def _MainLinux(options, args, extra_env): |
return result |
-def _MainWin(options, args, extra_env): |
- """Runs tests on windows. |
- |
- Using the target build configuration, run the executable given in the |
- first non-option argument, passing any following arguments to that |
- executable. |
- |
- Args: |
- options: Command-line options for this invocation of runtest.py. |
- args: Command and arguments for the test. |
- extra_env: A dictionary of extra environment variables to set. |
- |
- Returns: |
- Exit status code. |
- """ |
- if len(args) < 1: |
- raise chromium_utils.MissingArgument('Usage: %s' % USAGE) |
- |
- test_exe = args[0] |
- build_dir = os.path.abspath(options.build_dir) |
- if options.run_python_script: |
- test_exe_path = test_exe |
- else: |
- test_exe_path = os.path.join(build_dir, options.target, test_exe) |
- |
- if not os.path.exists(test_exe_path): |
- if options.factory_properties.get('succeed_on_missing_exe', False): |
- print '%s missing but succeed_on_missing_exe used, exiting' % ( |
- test_exe_path) |
- return 0 |
- raise chromium_utils.PathNotFound('Unable to find %s' % test_exe_path) |
- |
- if options.run_python_script: |
- command = [sys.executable, test_exe] |
- else: |
- command = _BuildTestBinaryCommand(build_dir, test_exe_path, options) |
- |
- command.extend(args[1:]) |
- |
- # Nuke anything that appears to be stale chrome items in the temporary |
- # directory from previous test runs (i.e.- from crashes or unittest leaks). |
- slave_utils.RemoveChromeTemporaryFiles() |
- |
- log_processor_class = _SelectLogProcessor(options) |
- log_processor = _CreateLogProcessor(log_processor_class, options) |
- |
- if options.generate_json_file: |
- if os.path.exists(options.test_output_xml): |
- # remove the old XML output file. |
- os.remove(options.test_output_xml) |
- |
- try: |
- if _UsingGtestJson(options): |
- json_file_name = log_processor.PrepareJSONFile( |
- options.test_launcher_summary_output) |
- command.append('--test-launcher-summary-output=%s' % json_file_name) |
- |
- command = _GenerateRunIsolatedCommand(build_dir, test_exe_path, options, |
- command) |
- result = _RunGTestCommand(options, command, extra_env) |
- finally: |
- if _UsingGtestJson(options): |
- log_processor.ProcessJSONFile(options.build_dir) |
- |
- if options.generate_json_file: |
- if not _GenerateJSONForTestResults(options, log_processor): |
- return 1 |
- |
- if options.annotate: |
- annotation_utils.annotate( |
- options.test_type, result, log_processor, |
- perf_dashboard_id=options.perf_dashboard_id) |
- |
- return result |
- |
- |
def _ConfigureSanitizerTools(options, args, extra_env): |
if (options.enable_asan or options.enable_tsan or |
options.enable_msan or options.enable_lsan): |
@@ -943,17 +809,7 @@ def main(): |
'--results-directory is required with --generate-json-file=True') |
return 1 |
- if sys.platform.startswith('darwin'): |
- result = _MainMac(options, args, extra_env) |
- elif sys.platform == 'win32': |
- result = _MainWin(options, args, extra_env) |
- elif sys.platform == 'linux2': |
- result = _MainLinux(options, args, extra_env) |
- else: |
- sys.stderr.write('Unknown sys.platform value %s\n' % repr(sys.platform)) |
- return 1 |
- |
- return result |
+ return _Main(options, args, extra_env) |
finally: |
if did_launch_dbus: |
# It looks like the command line argument --exit-with-session |