Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(40)

Side by Side Diff: scripts/slave/runtest.py

Issue 44923002: Added GLib/DBus workaround to runtest.py under --do-dbus-workaround option. (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/build.git@master
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « scripts/slave/recipes/gpu.expected/win_release_tryserver.json ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 to run a chrome test executable, used by the buildbot slaves. 6 """A tool to run a chrome test executable, used by the buildbot slaves.
7 7
8 When this is run, the current directory (cwd) should be the outer build 8 When this is run, the current directory (cwd) should be the outer build
9 directory (e.g., chrome-release/build/). 9 directory (e.g., chrome-release/build/).
10 10
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 (sandbox_stat.st_uid == 0)): 78 (sandbox_stat.st_uid == 0)):
79 return True 79 return True
80 return False 80 return False
81 81
82 82
83 def get_temp_count(): 83 def get_temp_count():
84 """Returns the number of files and directories inside the temporary dir.""" 84 """Returns the number of files and directories inside the temporary dir."""
85 return len(os.listdir(tempfile.gettempdir())) 85 return len(os.listdir(tempfile.gettempdir()))
86 86
87 87
88 def _DoDBusWorkaround():
ghost stip (do not use) 2013/10/25 18:41:27 can we just call this LaunchDBus()?
Ken Russell (switch to Gerrit) 2013/10/25 19:07:12 Sure, done.
89 """Works around a bug in GLib where it performs operations which
ghost stip (do not use) 2013/10/25 18:41:27 """Launches DBus to work around bug in GLib. Rest
Ken Russell (switch to Gerrit) 2013/10/25 19:07:12 Done.
90 aren't async-signal-safe (in particular, memory allocations) between
91 fork and exec when it spawns subprocesses. This causes threads
92 inside Chrome's browser and utility processes to get stuck, and this
93 harness to hang waiting for those processes, which will never
94 terminate. This doesn't happen on users' machines, because they have
95 an active desktop session and the DBUS_SESSION_BUS_ADDRESS
96 environment variable set, but it does happen on the bots. See Issue
97 309093 for more details."""
98 import platform
99 import subprocess
100 if (platform.uname()[0].lower() == 'linux' and
ghost stip (do not use) 2013/10/25 18:41:27 another option is to only call this in main_linux,
Ken Russell (switch to Gerrit) 2013/10/25 19:07:12 I like having this here because it should be done
101 'DBUS_SESSION_BUS_ADDRESS' not in os.environ):
102 try:
103 dbus_output = subprocess.check_output(['dbus-launch']).split('\n')
ghost stip (do not use) 2013/10/25 18:41:27 put a message here: 'DBUS_SESSION_BUS_ADDRESS not
ghost stip (do not use) 2013/10/25 18:41:27 I'm assuming dbus-launch daemonizes here, otherwis
Ken Russell (switch to Gerrit) 2013/10/25 19:07:12 dbus-launch is synchronous. It runs and exits with
Ken Russell (switch to Gerrit) 2013/10/25 19:07:12 Done.
104 for line in dbus_output:
105 m = re.match(r"([^=]+)\=(.+)", line)
106 if m:
107 os.environ[m.group(1)] = m.group(2)
ghost stip (do not use) 2013/10/25 18:41:27 output to stdout 'setting %s to %s' % (m.group(1),
Ken Russell (switch to Gerrit) 2013/10/25 19:07:12 Thanks, I had this before but took it out. Done.
108 except: # pylint: disable=W0702
109 pass
ghost stip (do not use) 2013/10/25 18:41:27 what exception are you expecting here? if it's tha
Ken Russell (switch to Gerrit) 2013/10/25 19:07:12 subprocess.check_output raises CalledProcessError
Ken Russell (switch to Gerrit) 2013/10/25 19:12:16 Sorry, I lied, and made this catch subprocess.Call
110
88 def _RunGTestCommand(command, results_tracker=None, pipes=None, 111 def _RunGTestCommand(command, results_tracker=None, pipes=None,
89 extra_env=None): 112 extra_env=None):
90 113
91 env = os.environ.copy() 114 env = os.environ.copy()
92 env.update(extra_env or {}) 115 env.update(extra_env or {})
93 116
94 if results_tracker: 117 if results_tracker:
95 return chromium_utils.RunCommand( 118 return chromium_utils.RunCommand(
96 command, pipes=pipes, parser_func=results_tracker.ProcessLine, env=env) 119 command, pipes=pipes, parser_func=results_tracker.ProcessLine, env=env)
97 else: 120 else:
(...skipping 1112 matching lines...) Expand 10 before | Expand all | Expand 10 after
1210 default='supplemental_columns', 1233 default='supplemental_columns',
1211 help='A file containing a JSON blob with a dict ' 1234 help='A file containing a JSON blob with a dict '
1212 'that will be uploaded to the results ' 1235 'that will be uploaded to the results '
1213 'dashboard as supplemental columns.') 1236 'dashboard as supplemental columns.')
1214 option_parser.add_option('', '--enable-lsan', default=False, 1237 option_parser.add_option('', '--enable-lsan', default=False,
1215 help='Enable memory leak detection (LeakSanitizer). ' 1238 help='Enable memory leak detection (LeakSanitizer). '
1216 'Also can be enabled with the factory ' 1239 'Also can be enabled with the factory '
1217 'properties "lsan" and "lsan_run_all_tests".') 1240 'properties "lsan" and "lsan_run_all_tests".')
1218 option_parser.add_option('', '--extra-sharding-args', default='', 1241 option_parser.add_option('', '--extra-sharding-args', default='',
1219 help='Extra options for run_test_cases.py.') 1242 help='Extra options for run_test_cases.py.')
1243 option_parser.add_option('--do-dbus-workaround', action='store_true',
ghost stip (do not use) 2013/10/25 18:41:27 --spawn-dbus
1244 default=False,
1245 help='Work around GLib DBus bug by '
1246 'manually spawning dbus-launch')
1220 1247
1221 chromium_utils.AddPropertiesOptions(option_parser) 1248 chromium_utils.AddPropertiesOptions(option_parser)
1222 options, args = option_parser.parse_args() 1249 options, args = option_parser.parse_args()
1223 if not options.perf_dashboard_id: 1250 if not options.perf_dashboard_id:
1224 options.perf_dashboard_id = options.factory_properties.get('test_name') 1251 options.perf_dashboard_id = options.factory_properties.get('test_name')
1225 1252
1226 options.test_type = options.test_type or options.factory_properties.get( 1253 options.test_type = options.test_type or options.factory_properties.get(
1227 'step_name', '') 1254 'step_name', '')
1228 1255
1229 if options.run_shell_script and options.run_python_script: 1256 if options.run_shell_script and options.run_python_script:
1230 sys.stderr.write('Use either --run-shell-script OR --run-python-script, ' 1257 sys.stderr.write('Use either --run-shell-script OR --run-python-script, '
1231 'not both.') 1258 'not both.')
1232 return 1 1259 return 1
1233 1260
1234 # Print out builder name for log_parser 1261 # Print out builder name for log_parser
1235 print '[Running on builder: "%s"]' % options.builder_name 1262 print '[Running on builder: "%s"]' % options.builder_name
1236 1263
1264 if options.do_dbus_workaround:
1265 _DoDBusWorkaround()
1266
1237 # TODO(thakis): Simplify this once ConvertBuildDirToLegacy() ignores its 1267 # TODO(thakis): Simplify this once ConvertBuildDirToLegacy() ignores its
1238 # arguments. 1268 # arguments.
1239 use_out = False 1269 use_out = False
1240 if sys.platform == 'darwin': 1270 if sys.platform == 'darwin':
1241 use_out = (options.factory_properties.get('gclient_env', {}) 1271 use_out = (options.factory_properties.get('gclient_env', {})
1242 .get('GYP_GENERATORS', '') in ('ninja', 'make')) 1272 .get('GYP_GENERATORS', '') in ('ninja', 'make'))
1243 elif sys.platform != 'win32': 1273 elif sys.platform != 'win32':
1244 use_out = os.path.exists( 1274 use_out = os.path.exists(
1245 os.path.join(os.path.dirname(options.build_dir), 'out')) 1275 os.path.join(os.path.dirname(options.build_dir), 'out'))
1246 options.build_dir, _ = build_directory.ConvertBuildDirToLegacy( 1276 options.build_dir, _ = build_directory.ConvertBuildDirToLegacy(
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
1386 '%d new files were left in %s: Fix the tests to clean up themselves.' 1416 '%d new files were left in %s: Fix the tests to clean up themselves.'
1387 ) % ((new_temp_files - temp_files), tempfile.gettempdir()) 1417 ) % ((new_temp_files - temp_files), tempfile.gettempdir())
1388 # TODO(maruel): Make it an error soon. Not yet since I want to iron out all 1418 # TODO(maruel): Make it an error soon. Not yet since I want to iron out all
1389 # the remaining cases before. 1419 # the remaining cases before.
1390 #result = 1 1420 #result = 1
1391 return result 1421 return result
1392 1422
1393 1423
1394 if '__main__' == __name__: 1424 if '__main__' == __name__:
1395 sys.exit(main()) 1425 sys.exit(main())
OLDNEW
« no previous file with comments | « scripts/slave/recipes/gpu.expected/win_release_tryserver.json ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698