Index: ios/build/bots/scripts/run.py |
diff --git a/ios/build/bots/scripts/run.py b/ios/build/bots/scripts/run.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..01ac2e0a072887e023734fe76519cf1f034d257e |
--- /dev/null |
+++ b/ios/build/bots/scripts/run.py |
@@ -0,0 +1,152 @@ |
+#!/usr/bin/python |
+# Copyright 2016 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. |
+ |
+"""Run a test. |
+ |
+Sample usage: |
+ ./run.py \ |
+ -a src/xcodebuild/Release-iphoneos/base_unittests.app \ |
+ -o /tmp/out \ |
+ -p iPhone 5s \ |
+ -v 9.3 |
+ |
+ Installs base_unittests.app in an iPhone 5s simulator running iOS 9.3, |
+ runs it, and captures all test data in /tmp/out. |
+""" |
+ |
+import argparse |
+import json |
+import os |
+import sys |
+import traceback |
+ |
+import test_runner |
+ |
+ |
+def main(args, test_args): |
+ summary = {} |
+ tr = None |
+ |
+ if not os.path.exists(args.out_dir): |
+ os.makedirs(args.out_dir) |
+ |
+ try: |
+ if args.iossim and args.platform and args.version: |
+ tr = test_runner.SimulatorTestRunner( |
+ args.app, |
+ args.iossim, |
+ args.platform, |
+ args.version, |
+ args.xcode_version, |
+ args.out_dir, |
+ env_vars=args.env_var, |
+ test_args=test_args, |
+ xctest=args.xctest, |
+ ) |
+ else: |
+ tr = test_runner.DeviceTestRunner( |
+ args.app, |
+ args.xcode_version, |
+ args.out_dir, |
+ env_vars=args.env_var, |
+ test_args=test_args, |
+ xctest=args.xctest, |
+ ) |
+ |
+ return 0 if tr.launch() else 1 |
+ except test_runner.TestRunnerError as e: |
+ sys.stderr.write(traceback.format_exc()) |
+ summary['step_text'] = '%s%s' % ( |
+ e.__class__.__name__, ': %s' % e.args[0] if e.args else '') |
+ |
+ # test_runner.Launch returns 0 on success, 1 on failure, so return 2 |
+ # on exception to distinguish between a test failure, and a failure |
+ # to launch the test at all. |
+ return 2 |
+ finally: |
+ if tr: |
+ summary['logs'] = tr.logs |
+ |
+ with open(os.path.join(args.out_dir, 'summary.json'), 'w') as f: |
+ json.dump(summary, f) |
+ |
+ |
+if __name__ == '__main__': |
+ parser = argparse.ArgumentParser() |
+ |
+ parser.add_argument( |
+ '-a', |
+ '--app', |
+ help='Compiled .app to run.', |
+ metavar='app', |
+ required=True, |
+ ) |
+ parser.add_argument( |
+ '-e', |
+ '--env-var', |
+ action='append', |
+ help='Environment variable to pass to the test itself.', |
+ metavar='ENV=val', |
+ ) |
+ parser.add_argument( |
+ '-i', |
+ '--iossim', |
+ help='Compiled iossim to run the app on.', |
+ metavar='iossim', |
+ ) |
+ parser.add_argument( |
+ '-j', |
+ '--args-json', |
+ default='{}', |
+ help='Specify "env_var": [...] and "test_args": [...] using a JSON dict.', |
+ metavar='{}', |
+ ) |
+ parser.add_argument( |
+ '-o', |
+ '--out-dir', |
+ help='Directory to store all test data in.', |
+ metavar='dir', |
+ required=True, |
+ ) |
+ parser.add_argument( |
+ '-p', |
+ '--platform', |
+ help='Platform to simulate.', |
+ metavar='sim', |
+ ) |
+ parser.add_argument( |
+ '-v', |
+ '--version', |
+ help='Version of iOS the simulator should run.', |
+ metavar='ver', |
+ ) |
+ parser.add_argument( |
+ '-x', |
+ '--xcode-version', |
+ help='Version of Xcode to use.', |
+ metavar='ver', |
+ required=True, |
+ ) |
+ parser.add_argument( |
+ '--xctest', |
+ action='store_true', |
+ help='Whether or not the given app should be run as an XCTest.', |
+ ) |
+ |
+ args, test_args = parser.parse_known_args() |
+ if args.iossim or args.platform or args.version: |
+ # If any of --iossim, --platform, or --version |
+ # are specified then they must all be specified. |
+ if not (args.iossim and args.platform and args.version): |
+ parser.error( |
+ 'must specify all or none of -i/--iossim, -p/--platform, -v/--version') |
+ |
+ args_json = json.loads(args.args_json) |
+ args.env_var = args.env_var or [] |
+ args.env_var.extend(args_json.get('env_var', [])) |
+ args.xctest = args_json.get('xctest', args.xctest) |
+ test_args.extend(args_json.get('test_args', [])) |
+ |
+ sys.exit(main(args, test_args)) |