# 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. import argparse import json import os import sys # This is the list of tests to run. It is a dictionary with the following # fields: # # name (required): The name of the step, to show on the buildbot status page. # path (required): The path to the executable which runs the tests. # additional_args (optional): An array of optional arguments. # uses_app_engine_sdk (optional): True if app engine SDK must be in PYTHONPATH. # uses_sandbox_env (optional): True if CHROME_DEVEL_SANDBOX must be in # environment. # disabled (optional): List of platforms the test is disabled on. May contain # 'win', 'mac', or 'linux'. # outputs_presentation_json (optional): If True, pass in --presentation-json # argument to the test executable to allow it to update the buildbot status # page. More details here: # github.com/luci/recipes-py/blob/master/recipe_modules/generator_script/api.py _CATAPULT_TESTS = [ { 'name': 'Build Python Tests', 'path': 'catapult_build/bin/run_py_tests', }, { 'name': 'Catapult Base Tests', 'path': 'catapult_base/bin/run_tests', }, { 'name': 'Dashboard Dev Server Tests Canary', 'path': 'dashboard/bin/run_dev_server_tests', 'additional_args': [ '--no-install-hooks', '--no-use-local-chrome', '--channel=canary' ], # https://github.com/catapult-project/catapult/issues/2138 'disabled': ['linux', 'mac', 'win'], 'outputs_presentation_json': True, }, { 'name': 'Dashboard Dev Server Tests Stable', 'path': 'dashboard/bin/run_dev_server_tests', 'additional_args': [ '--no-install-hooks', '--no-use-local-chrome', '--channel=stable', ], 'outputs_presentation_json': True, }, { 'name': 'Dashboard Python Tests', 'path': 'dashboard/bin/run_py_tests', 'additional_args': ['--no-install-hooks'], 'uses_app_engine_sdk': True, }, { 'name': 'Dependency Manager Tests', 'path': 'dependency_manager/bin/run_tests', }, { 'name': 'Devil Python Tests', 'path': 'devil/bin/run_py_tests', 'disabled': ['mac', 'win'], }, { 'name': 'Perf Insights Dev Server Tests Canary', 'path': 'perf_insights/bin/run_dev_server_tests', 'additional_args': [ '--no-install-hooks', '--no-use-local-chrome', '--channel=canary' ], # https://github.com/catapult-project/catapult/issues/2138 'disabled': ['linux', 'mac', 'win'], 'outputs_presentation_json': True, }, { 'name': 'Perf Insights Dev Server Tests Stable', 'path': 'perf_insights/bin/run_dev_server_tests', 'additional_args': [ '--no-install-hooks', '--no-use-local-chrome', '--channel=stable', ], 'uses_sandbox_env': True, 'outputs_presentation_json': True, }, { 'name': 'Perf Insights Python Tests', 'path': 'perf_insights/bin/run_py_tests', 'additional_args': ['--no-install-hooks'], }, { 'name': 'Perf VINN Insights Tests', 'path': 'perf_insights/bin/run_vinn_tests', }, { 'name': 'Py-vulcanize Tests', 'path': 'third_party/py_vulcanize/bin/run_py_tests', 'additional_args': ['--no-install-hooks'], }, { 'name': 'Systrace Tests', 'path': 'systrace/bin/run_tests', }, { 'name': 'Telemetry Tests with Stable Browser', 'path': 'telemetry/bin/run_tests', 'additional_args': [ '--browser=reference', '--start-xvfb' ], 'uses_sandbox_env': True, }, { 'name': 'Tracing Dev Server Tests Canary', 'path': 'tracing/bin/run_dev_server_tests', 'additional_args': [ '--no-install-hooks', '--no-use-local-chrome', '--channel=canary' ], # Test failing on Windows: # https://github.com/catapult-project/catapult/issues/1816 # Tests failing on all platform: # https://github.com/catapult-project/catapult/issues/2138 'disabled': ['win', 'linux', 'mac'], 'outputs_presentation_json': True, }, { 'name': 'Tracing Dev Server Tests Stable', 'path': 'tracing/bin/run_dev_server_tests', 'additional_args': [ '--no-install-hooks', '--no-use-local-chrome', '--channel=stable', ], 'outputs_presentation_json': True, }, { 'name': 'Tracing D8 Tests', 'path': 'tracing/bin/run_vinn_tests', }, { 'name': 'Tracing Python Tests', 'path': 'tracing/bin/run_py_tests', 'additional_args': ['--no-install-hooks'], }, { 'name': 'Vinn Tests', 'path': 'third_party/vinn/run_test', }, ] def main(args=None): """Send list of test to run to recipes generator_script. See documentation at: github.com/luci/recipes-py/blob/master/recipe_modules/generator_script/api.py """ parser = argparse.ArgumentParser(description='Run catapult tests.') parser.add_argument('--api-path-checkout', help='Path to catapult checkout') parser.add_argument('--app-engine-sdk-pythonpath', help='PYTHONPATH to include app engine SDK path') parser.add_argument('--platform', help='Platform name (linux, mac, or win)') parser.add_argument('--output-json', help='Output for buildbot status page') args = parser.parse_args(args) steps = [] for test in _CATAPULT_TESTS: if args.platform in test.get('disabled', []): continue step = { 'name': test['name'], 'env': {} } step['cmd'] = ['python', os.path.join(args.api_path_checkout, test['path'])] if test.get('additional_args'): step['cmd'] += test['additional_args'] if test.get('uses_app_engine_sdk'): step['env']['PYTHONPATH'] = args.app_engine_sdk_pythonpath if test.get('uses_sandbox_env'): step['env']['CHROME_DEVEL_SANDBOX'] = '/opt/chromium/chrome_sandbox' if test.get('outputs_presentation_json'): step['outputs_presentation_json'] = True steps.append(step) with open(args.output_json, 'w') as outfile: json.dump(steps, outfile) if __name__ == '__main__': main(sys.argv[1:])