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

Unified Diff: infra/scripts/legacy/scripts/slave/runisolatedtest.py

Issue 1213433006: Fork runtest.py and everything it needs src-side for easier hacking (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: runisolatedtest.py Created 5 years, 6 months 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 side-by-side diff with in-line comments
Download patch
Index: infra/scripts/legacy/scripts/slave/runisolatedtest.py
diff --git a/infra/scripts/legacy/scripts/slave/runisolatedtest.py b/infra/scripts/legacy/scripts/slave/runisolatedtest.py
new file mode 100755
index 0000000000000000000000000000000000000000..e9b0fb061193476ebc9a858b10e41b60eacc3005
--- /dev/null
+++ b/infra/scripts/legacy/scripts/slave/runisolatedtest.py
@@ -0,0 +1,169 @@
+#!/usr/bin/env python
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""A tool to run a chrome test executable directly, or in isolated mode.
+
+TODO(maruel): This script technically needs to die and be replaced by running
+all the tests always isolated even when not run on Swarming. This will take a
+while.
+"""
+
+import logging
+import optparse
+import os
+import subprocess
+import sys
+
+
+USAGE = ('%s [options] /full/path/to/test.exe -- [original test command]' %
+ os.path.basename(sys.argv[0]))
+
+LINUX_ISOLATE_ENABLED_TESTS = set((
+ 'base_unittests',
+ 'browser_tests',
+ 'interactive_ui_tests',
+ 'net_unittests',
+ 'unit_tests',
+))
+
+# TODO(maruel): Not enabled because of lack of XCode support and missing
+# dependencies for more complex tests.
+MAC_ISOLATE_ENABLED_TESTS = set()
+
+WIN_ISOLATE_ENABLED_TESTS = set((
+ 'base_unittests',
+ 'browser_tests',
+ 'interactive_ui_tests',
+ 'net_unittests',
+ 'unit_tests',
+))
+
+# http://crbug.com/260311
+# They are missing files for an unknown reason.
+BUG_260311 = set((
+ 'browser_tests',
+ 'interactive_ui_tests',
+))
+
+ISOLATE_ENABLED_BUILDERS = {
+ # CI linux
+ 'Linux Tests': LINUX_ISOLATE_ENABLED_TESTS,
+ # CI mac
+ 'Mac10.6 Tests (1)': MAC_ISOLATE_ENABLED_TESTS,
+ 'Mac10.7 Tests (1)': MAC_ISOLATE_ENABLED_TESTS,
+ # CI win
+ 'Vista Tests (1)': WIN_ISOLATE_ENABLED_TESTS - BUG_260311,
+ 'Vista Tests (2)': WIN_ISOLATE_ENABLED_TESTS - BUG_260311,
+ 'Vista Tests (3)': WIN_ISOLATE_ENABLED_TESTS - BUG_260311,
+ 'Win7 Tests (1)': WIN_ISOLATE_ENABLED_TESTS,
+ 'Win7 Tests (2)': WIN_ISOLATE_ENABLED_TESTS,
+ 'Win7 Tests (3)': WIN_ISOLATE_ENABLED_TESTS,
+ 'XP Tests (1)': WIN_ISOLATE_ENABLED_TESTS - BUG_260311,
+ 'XP Tests (2)': WIN_ISOLATE_ENABLED_TESTS - BUG_260311,
+ 'XP Tests (3)': WIN_ISOLATE_ENABLED_TESTS - BUG_260311,
+
+ # Try Server
+ 'linux_rel': LINUX_ISOLATE_ENABLED_TESTS,
+ 'mac_rel': MAC_ISOLATE_ENABLED_TESTS,
+ 'win_rel': WIN_ISOLATE_ENABLED_TESTS,
+}
+
+
+def should_run_as_isolated(builder_name, test_name):
+ logging.info('should_run_as_isolated(%s, %s)' % (builder_name, test_name))
+ return test_name in ISOLATE_ENABLED_BUILDERS.get(builder_name, [])
+
+
+def run_command(command):
+ """Inspired from chromium_utils.py's RunCommand()."""
+ print '\n' + subprocess.list2cmdline(command)
+ sys.stdout.flush()
+ sys.stderr.flush()
+ return subprocess.call(command)
+
+
+def run_test_isolated(isolate_script, test_exe, original_command):
+ """Runs the test under isolate.py run.
+
+ It compensates for discrepancies between sharding_supervisor.py arguments and
+ run_test_cases.py arguments.
+
+ The isolated file must be alongside the test executable, with the same
+ name and the .isolated extension.
+ """
+ isolated_file = os.path.splitext(test_exe)[0] + '.isolated'
+
+ if not os.path.exists(isolated_file):
+ logging.error('No isolate file %s', isolated_file)
+ return 1
+
+ isolate_command = [sys.executable, isolate_script,
+ 'run', '--isolated', isolated_file,
+ # Print info log lines, so isolate.py prints the path to
+ # the binary it's about to run, http://crbug.com/311625
+ '-v']
+
+ # Start setting the test specific options.
+ isolate_command.append('--')
+ isolate_command.append('--no-cr')
+ original_command = original_command[:]
+ while original_command:
+ item = original_command.pop(0)
+ if item == '--total-slave':
+ isolate_command.extend(['--shards', original_command.pop(0)])
+ elif item == '--slave-index':
+ isolate_command.extend(['--index', original_command.pop(0)])
+ elif item.startswith(('--gtest_filter',
+ '--gtest_output',
+ '--test-launcher')):
+ isolate_command.append(item)
+
+ return run_command(isolate_command)
+
+
+def main(argv):
+ option_parser = optparse.OptionParser(USAGE)
+ option_parser.add_option('--test_name', default='',
+ help='The name of the test')
+ option_parser.add_option('--builder_name', default='',
+ help='The name of the builder that created this'
+ 'test')
+ option_parser.add_option('--checkout_dir',
+ help='Checkout directory, used to locate the '
+ 'swarm_client scripts.')
+ option_parser.add_option('-f', '--force-isolated', action='store_true',
+ help='Force test to run isolated. By default only '
+ 'white listed builders and tests are run isolated.')
+ option_parser.add_option('-v', '--verbose', action='count', default=0,
+ help='Use to increase log verbosity. Can be passed '
+ 'in multiple times for more detailed logs.')
+
+ options, args = option_parser.parse_args(argv)
+
+ test_exe = args[0]
+ original_command = args[1:]
+
+ # Initialize logging.
+ level = [logging.ERROR, logging.INFO, logging.DEBUG][min(2, options.verbose)]
+ logging.basicConfig(level=level,
+ format='%(asctime)s %(filename)s:%(lineno)-3d'
+ ' %(levelname)s %(message)s',
+ datefmt='%y%m%d %H:%M:%S')
+
+ if (options.force_isolated or
+ should_run_as_isolated(options.builder_name, options.test_name)):
+ logging.info('Running test in isolate mode')
+ # Search first in swarming_client
+ isolate_script = os.path.join(options.checkout_dir, 'src', 'tools',
+ 'swarming_client', 'isolate.py')
+
+ return run_test_isolated(isolate_script, test_exe, original_command)
+ else:
+ logging.info('Running test normally')
+ return run_command(original_command)
+
+
+if '__main__' == __name__:
+ sys.exit(main(None))
« no previous file with comments | « infra/scripts/legacy/scripts/slave/results_dashboard.py ('k') | infra/scripts/legacy/scripts/slave/runtest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698