Chromium Code Reviews| 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()) |