Index: testing/scripts/run_isolated_script_test.py |
diff --git a/testing/scripts/run_isolated_script_test.py b/testing/scripts/run_isolated_script_test.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..db6782033a46a71f135971df4d4a1da6c90add01 |
--- /dev/null |
+++ b/testing/scripts/run_isolated_script_test.py |
@@ -0,0 +1,97 @@ |
+#!/usr/bin/env python |
+# Copyright 2015 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. |
+ |
+"""Runs a script that can run as an isolate (or not). |
+ |
+The main requirement is that |
+ |
+ --isolated-script-test-output=[FILENAME] |
+ |
+is passed on the command line to run_isolated_script_tests. This gets |
+remapped to the command line argument --write-full-results-to. |
+ |
+json is written to that file in the format produced by |
+common.parse_common_test_results. |
+ |
+For compatibility with //base/test/launcher-based tests, the script |
+will also remap the env vars GTEST_TOTAL_SHARDS and GTEST_SHARD_INDEX |
+to the command line arguments --total-shards and --shard-index. |
+ |
+This script is intended to be the base command invoked by the isolate, |
+followed by a subsequent Python script. It could be generalized to |
+invoke an arbitrary executable. |
+""" |
+ |
+import argparse |
+import json |
+import os |
+import pprint |
+import sys |
+ |
+ |
+import common |
+ |
+# Add src/testing/ into sys.path for importing xvfb. |
+sys.path.append(os.path.join(os.path.dirname(__file__), '..')) |
+import xvfb |
+ |
+ |
+def main(): |
+ parser = argparse.ArgumentParser() |
+ parser.add_argument('--isolated-script-test-output', type=str, |
+ required=True) |
+ parser.add_argument('--shards', type=int, help='number of shards') |
+ parser.add_argument('--xvfb', help='start xvfb', action='store_true') |
+ |
+ # This argument is ignored for now. |
+ parser.add_argument('--isolated-script-test-chartjson-output', type=str) |
+ |
+ args, rest_args = parser.parse_known_args() |
+ |
+ sharding_args, env = _remap_gtest_env_vars(os.environ) |
+ |
+ cmd = [sys.executable] + rest_args + sharding_args |
+ cmd += ['--write-full-results-to', args.isolated_script_test_output] |
+ if args.xvfb: |
+ return xvfb.run_executable(cmd, env) |
+ else: |
+ return common.run_command(cmd, env=env) |
+ |
+ |
+def _remap_gtest_env_vars(orig_env): |
mithro
2017/01/31 23:51:42
run_webkit_tests.py already supports these GTEST a
Dirk Pranke
2017/02/01 01:32:51
I think both maruel@ and I consider the support fo
|
+ total_shards = None |
+ shard_index = None |
+ env = orig_env.copy() |
+ if 'GTEST_TOTAL_SHARDS' in env: |
+ total_shards = int(env['GTEST_TOTAL_SHARDS']) |
+ del env['GTEST_TOTAL_SHARDS'] |
+ if 'GTEST_SHARD_INDEX' in env: |
+ shard_index = int(env['GTEST_SHARD_INDEX']) |
+ del env['GTEST_SHARD_INDEX'] |
+ sharding_args = [] |
+ if total_shards is not None and shard_index is not None: |
+ sharding_args = [ |
+ '--total-shards=%d' % total_shards, |
+ '--shard-index=%d' % shard_index |
+ ] |
+ return sharding_args, env |
+ |
+ |
+ |
+# This is not really a "script test" so does not need to manually add |
+# any additional compile targets. |
+def main_compile_targets(args): |
+ json.dump([], args.output) |
+ |
+ |
+if __name__ == '__main__': |
+ # Conform minimally to the protocol defined by ScriptTest. |
+ if 'compile_targets' in sys.argv: |
+ funcs = { |
+ 'run': None, |
+ 'compile_targets': main_compile_targets, |
+ } |
+ sys.exit(common.run_script(sys.argv[1:], funcs)) |
+ sys.exit(main()) |