| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """A tool used to run a Chrome test executable and process the output. | 6 """A tool used to run a Chrome test executable and process the output. |
| 7 | 7 |
| 8 This script is used by the buildbot slaves. It must be run from the outer | 8 This script is used by the buildbot slaves. It must be run from the outer |
| 9 build directory, e.g. chrome-release/build/. | 9 build directory, e.g. chrome-release/build/. |
| 10 | 10 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 78 # The directory that this script is in. | 78 # The directory that this script is in. |
| 79 BASE_DIR = os.path.dirname(os.path.abspath(__file__)) | 79 BASE_DIR = os.path.dirname(os.path.abspath(__file__)) |
| 80 | 80 |
| 81 LOG_PROCESSOR_CLASSES = { | 81 LOG_PROCESSOR_CLASSES = { |
| 82 'gtest': gtest_utils.GTestLogParser, | 82 'gtest': gtest_utils.GTestLogParser, |
| 83 'graphing': performance_log_processor.GraphingLogProcessor, | 83 'graphing': performance_log_processor.GraphingLogProcessor, |
| 84 'pagecycler': performance_log_processor.GraphingPageCyclerLogProcessor, | 84 'pagecycler': performance_log_processor.GraphingPageCyclerLogProcessor, |
| 85 } | 85 } |
| 86 | 86 |
| 87 | 87 |
| 88 def _ShouldEnableSandbox(sandbox_path): | |
| 89 """Checks whether the current slave should use the sandbox. | |
| 90 | |
| 91 This is based on should_enable_sandbox in src/testing/test_env.py. | |
| 92 | |
| 93 Args: | |
| 94 sandbox_path: Path to sandbox file. | |
| 95 | |
| 96 Returns: | |
| 97 True iff the slave is a Linux host with the sandbox file both present and | |
| 98 configured correctly. | |
| 99 """ | |
| 100 if not (sys.platform.startswith('linux') and | |
| 101 os.path.exists(sandbox_path)): | |
| 102 return False | |
| 103 sandbox_stat = os.stat(sandbox_path) | |
| 104 if ((sandbox_stat.st_mode & stat.S_ISUID) and | |
| 105 (sandbox_stat.st_mode & stat.S_IRUSR) and | |
| 106 (sandbox_stat.st_mode & stat.S_IXUSR) and | |
| 107 (sandbox_stat.st_uid == 0)): | |
| 108 return True | |
| 109 return False | |
| 110 | |
| 111 | |
| 112 def _GetTempCount(): | 88 def _GetTempCount(): |
| 113 """Returns the number of files and directories inside the temporary dir.""" | 89 """Returns the number of files and directories inside the temporary dir.""" |
| 114 return len(os.listdir(tempfile.gettempdir())) | 90 return len(os.listdir(tempfile.gettempdir())) |
| 115 | 91 |
| 116 | 92 |
| 117 def _LaunchDBus(): | 93 def _LaunchDBus(): |
| 118 """Launches DBus to work around a bug in GLib. | 94 """Launches DBus to work around a bug in GLib. |
| 119 | 95 |
| 120 Works around a bug in GLib where it performs operations which aren't | 96 Works around a bug in GLib where it performs operations which aren't |
| 121 async-signal-safe (in particular, memory allocations) between fork and exec | 97 async-signal-safe (in particular, memory allocations) between fork and exec |
| (...skipping 1208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1330 | 1306 |
| 1331 # Unset http_proxy and HTTPS_PROXY environment variables. When set, this | 1307 # Unset http_proxy and HTTPS_PROXY environment variables. When set, this |
| 1332 # causes some tests to hang. See http://crbug.com/139638 for more info. | 1308 # causes some tests to hang. See http://crbug.com/139638 for more info. |
| 1333 if 'http_proxy' in os.environ: | 1309 if 'http_proxy' in os.environ: |
| 1334 del os.environ['http_proxy'] | 1310 del os.environ['http_proxy'] |
| 1335 print 'Deleted http_proxy environment variable.' | 1311 print 'Deleted http_proxy environment variable.' |
| 1336 if 'HTTPS_PROXY' in os.environ: | 1312 if 'HTTPS_PROXY' in os.environ: |
| 1337 del os.environ['HTTPS_PROXY'] | 1313 del os.environ['HTTPS_PROXY'] |
| 1338 print 'Deleted HTTPS_PROXY environment variable.' | 1314 print 'Deleted HTTPS_PROXY environment variable.' |
| 1339 | 1315 |
| 1340 # Decide whether to enable the suid sandbox for Chrome. | 1316 # Path to SUID sandbox binary. This must be installed on all bots. |
| 1341 if (_ShouldEnableSandbox(CHROME_SANDBOX_PATH) and | 1317 extra_env['CHROME_DEVEL_SANDBOX'] = CHROME_SANDBOX_PATH |
| 1342 not options.enable_tsan and | |
| 1343 not options.enable_lsan): | |
| 1344 print 'Enabling sandbox. Setting environment variable:' | |
| 1345 print ' CHROME_DEVEL_SANDBOX="%s"' % CHROME_SANDBOX_PATH | |
| 1346 extra_env['CHROME_DEVEL_SANDBOX'] = CHROME_SANDBOX_PATH | |
| 1347 else: | |
| 1348 print 'Disabling sandbox. Setting environment variable:' | |
| 1349 print ' CHROME_DEVEL_SANDBOX=""' | |
| 1350 extra_env['CHROME_DEVEL_SANDBOX'] = '' | |
| 1351 | 1318 |
| 1352 # Nuke anything that appears to be stale chrome items in the temporary | 1319 # Nuke anything that appears to be stale chrome items in the temporary |
| 1353 # directory from previous test runs (i.e.- from crashes or unittest leaks). | 1320 # directory from previous test runs (i.e.- from crashes or unittest leaks). |
| 1354 slave_utils.RemoveChromeTemporaryFiles() | 1321 slave_utils.RemoveChromeTemporaryFiles() |
| 1355 | 1322 |
| 1356 extra_env['LD_LIBRARY_PATH'] = '' | 1323 extra_env['LD_LIBRARY_PATH'] = '' |
| 1357 | 1324 |
| 1358 if options.enable_lsan: | 1325 if options.enable_lsan: |
| 1359 # Use the debug version of libstdc++ under LSan. If we don't, there will be | 1326 # Use the debug version of libstdc++ under LSan. If we don't, there will be |
| 1360 # a lot of incomplete stack traces in the reports. | 1327 # a lot of incomplete stack traces in the reports. |
| (...skipping 718 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2079 finally: | 2046 finally: |
| 2080 if did_launch_dbus: | 2047 if did_launch_dbus: |
| 2081 # It looks like the command line argument --exit-with-session | 2048 # It looks like the command line argument --exit-with-session |
| 2082 # isn't working to clean up the spawned dbus-daemon. Kill it | 2049 # isn't working to clean up the spawned dbus-daemon. Kill it |
| 2083 # manually. | 2050 # manually. |
| 2084 _ShutdownDBus() | 2051 _ShutdownDBus() |
| 2085 | 2052 |
| 2086 | 2053 |
| 2087 if '__main__' == __name__: | 2054 if '__main__' == __name__: |
| 2088 sys.exit(main()) | 2055 sys.exit(main()) |
| OLD | NEW |