| # Copyright 2014 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. |
| |
| from recipe_engine.types import freeze |
| |
| DEPS = [ |
| 'adb', |
| 'build', |
| 'chromium', |
| 'chromium_android', |
| 'recipe_engine/context', |
| 'recipe_engine/file', |
| 'recipe_engine/json', |
| 'recipe_engine/path', |
| 'recipe_engine/properties', |
| 'recipe_engine/step', |
| ] |
| |
| BUILDERS = freeze({ |
| 'basic_builder': { |
| 'target': 'Release', |
| 'build': True, |
| }, |
| 'coverage_builder': { |
| 'coverage': True, |
| 'target': 'Debug', |
| 'build': True, |
| }, |
| 'tester': {}, |
| 'perf_runner': { |
| 'perf_config': 'sharded_perf_tests.json', |
| }, |
| 'perf_runner_user_build': { |
| 'perf_config': 'sharded_perf_tests.json', |
| 'skip_wipe': True, |
| }, |
| 'perf_runner_disable_location': { |
| 'perf_config': 'sharded_perf_tests.json', |
| 'disable_location': True, |
| }, |
| 'perf_runner_allow_low_battery': { |
| 'perf_config': 'sharded_perf_tests.json', |
| 'min_battery_level': 50, |
| }, |
| 'perf_adb_vendor_keys': { |
| 'adb_vendor_keys': True, |
| }, |
| 'perf_runner_allow_high_battery_temp': { |
| 'perf_config': 'sharded_perf_tests.json', |
| 'max_battery_temp': 500, |
| }, |
| 'gerrit_try_builder': { |
| 'build': True, |
| 'skip_wipe': True, |
| }, |
| 'webview_tester': { |
| 'android_apply_config': ['remove_all_system_webviews'], |
| }, |
| 'slow_tester': { |
| 'timeout_scale': 2, |
| }, |
| 'downgrade_install_tester': { |
| 'specific_install': True, |
| 'downgrade': True, |
| }, |
| 'keep_data_install_tester': { |
| 'specific_install': True, |
| 'keep_data': True, |
| }, |
| 'no_strict_mode_tester': { |
| 'strict_mode': 'off', |
| }, |
| 'resource_size_builder': { |
| 'resource_size': True, |
| }, |
| 'webview_cts': { |
| 'run_webview_cts': True, |
| }, |
| 'device_flags_builder': { |
| 'device_flags': 'device_flags_file', |
| }, |
| 'no_cache_builder': { |
| 'use_git_cache': False, |
| }, |
| 'json_results_file': { |
| 'json_results_file': 'json_results_file', |
| }, |
| 'result_details': { |
| 'result_details': True, |
| 'store_tombstones': True, |
| }, |
| 'upload_archives_to_bucket': { |
| 'perf_config': 'sharded_perf_tests.json', |
| 'archives_bucket': 'my-bucket', |
| }, |
| 'timestamp_as_point_id': { |
| 'perf_config': 'sharded_perf_tests.json', |
| 'timestamp_as_point_id': True |
| }, |
| 'telemetry_browser_tests_tester': { |
| 'run_telemetry_browser_tests': True, |
| }, |
| 'use_devil_adb': { |
| 'android_apply_config': ['use_devil_adb'], |
| }, |
| 'remove_system_vrcore': { |
| 'android_apply_config': ['remove_system_vrcore'], |
| }, |
| 'stackwalker': { |
| 'run_stackwalker': True, |
| }, |
| 'asan': { |
| 'chromium_apply_config': ['chromium_asan'], |
| } |
| }) |
| |
| from recipe_engine.recipe_api import Property |
| |
| PROPERTIES = { |
| 'buildername': Property(), |
| } |
| |
| def RunSteps(api, buildername): |
| config = BUILDERS[buildername] |
| |
| api.chromium_android.configure_from_properties( |
| 'base_config', |
| REPO_URL='svn://svn.chromium.org/chrome/trunk/src', |
| REPO_NAME='src/repo', |
| INTERNAL=True, |
| BUILD_CONFIG='Release') |
| |
| api.chromium_android.c.get_app_manifest_vars = True |
| api.chromium_android.c.coverage = config.get('coverage', False) |
| api.chromium_android.c.asan_symbolize = True |
| |
| for c in config.get('chromium_apply_config', []): |
| api.chromium.apply_config(c) |
| |
| for c in config.get('android_apply_config', []): |
| api.chromium_android.apply_config(c) |
| |
| api.chromium_android.init_and_sync( |
| use_bot_update=False, use_git_cache=config.get('use_git_cache', True)) |
| |
| if config.get('build', False): |
| api.chromium.ensure_goma() |
| api.chromium.runhooks() |
| api.chromium_android.run_tree_truth(additional_repos=['foo']) |
| assert 'MAJOR' in api.chromium.get_version() |
| |
| api.chromium_android.host_info() |
| |
| if config.get('build', False): |
| api.chromium.compile(use_goma_module=True) |
| api.chromium_android.make_zip_archive( |
| 'zip_build_product', 'archive.zip', include_filters=['*.apk'], |
| exclude_filters=['*.so', '*.a']) |
| else: |
| api.chromium_android.download_build('build-bucket', |
| 'build_product.zip') |
| with api.context(cwd=api.path['checkout']): |
| api.chromium_android.git_number() |
| |
| if config.get('specific_install'): |
| api.chromium_android.adb_install_apk( |
| 'Chrome.apk', |
| devices=['abc123'], |
| allow_downgrade=config.get('downgrade', False), |
| keep_data=config.get('keep_data', False), |
| ) |
| |
| api.adb.root_devices() |
| api.chromium_android.spawn_logcat_monitor() |
| |
| failure = False |
| try: |
| # TODO(luqui): remove redundant cruft, need one consistent API. |
| api.chromium_android.device_status_check() |
| |
| api.path.mock_add_paths(api.chromium_android.known_devices_file) |
| api.chromium_android.device_status_check() |
| |
| api.chromium_android.provision_devices( |
| skip_wipe=config.get('skip_wipe', False), |
| disable_location=config.get('disable_location', False), |
| min_battery_level=config.get('min_battery_level'), |
| max_battery_temp=config.get('max_battery_temp'), |
| reboot_timeout=1800) |
| |
| api.chromium_android.common_tests_setup_steps(skip_wipe=True) |
| |
| except api.step.StepFailure as f: |
| failure = f |
| |
| api.chromium_android.monkey_test() |
| |
| try: |
| if config.get('perf_config'): |
| api.chromium_android.run_sharded_perf_tests( |
| config=config.get('perf_config'), |
| upload_archives_to_bucket=config.get('archives_bucket'), |
| timestamp_as_point_id=config.get('timestamp_as_point_id', False)) |
| except api.step.StepFailure as f: |
| failure = f |
| api.chromium_android.run_instrumentation_suite( |
| name='WebViewInstrumentationTest', |
| apk_under_test=api.chromium_android.apk_path( |
| 'WebViewInstrumentation.apk'), |
| test_apk=api.chromium_android.apk_path('WebViewInstrumentationTest.apk'), |
| flakiness_dashboard='test-results.appspot.com', |
| annotation='SmallTest', |
| except_annotation='FlakyTest', |
| screenshot=True, |
| timeout_scale=config.get('timeout_scale'), |
| strict_mode=config.get('strict_mode'), |
| additional_apks=['Additional.apk'], |
| device_flags=config.get('device_flags'), |
| json_results_file=config.get('json_results_file'), |
| result_details=config.get('result_details'), |
| store_tombstones=config.get('store_tombstones')) |
| api.chromium_android.run_test_suite( |
| 'unittests', |
| result_details=config.get('result_details'), |
| store_tombstones=config.get('store_tombstones'), |
| tool='asan') |
| if not failure: |
| api.chromium_android.run_bisect_script(extra_src='test.py', |
| path_to_config='test.py') |
| |
| if config.get('resource_size'): |
| api.chromium_android.resource_sizes( |
| apk_path=api.chromium_android.apk_path('Example.apk'), |
| chartjson_file=True) |
| api.chromium_android.supersize_archive( |
| apk_path=api.chromium_android.apk_path('Example.apk'), |
| size_path=api.chromium_android.apk_path('Example.apk.size')) |
| |
| if config.get('run_webview_cts'): |
| api.chromium_android.run_webview_cts( |
| android_platform='L', |
| arch='arm64', |
| command_line_args=['--webview_arg_1', '--webview_arg_2'], |
| result_details=True) |
| |
| if config.get('run_telemetry_browser_tests'): |
| api.chromium_android.run_telemetry_browser_test('PopularUrlsTest') |
| |
| api.chromium_android.logcat_dump() |
| api.chromium_android.stack_tool_steps() |
| if config.get('coverage', False): |
| api.chromium_android.coverage_report() |
| |
| if config.get('run_stackwalker'): |
| chrome_breakpad_binary = api.path['checkout'].join( |
| 'out', api.chromium.c.BUILD_CONFIG, 'lib.unstripped', 'libchrome.so') |
| webview_breakpad_binary = api.path['checkout'].join( |
| 'out', api.chromium.c.BUILD_CONFIG, 'lib.unstripped', |
| 'libwebviewchromium.so') |
| dump_syms_binary = api.path['checkout'].join( |
| 'out', api.chromium.c.BUILD_CONFIG, 'dump_syms') |
| microdump_stackwalk_binary = api.path['checkout'].join( |
| 'out', api.chromium.c.BUILD_CONFIG, 'microdump_stackwalk') |
| api.path.mock_add_paths(chrome_breakpad_binary) |
| api.path.mock_add_paths(webview_breakpad_binary) |
| api.path.mock_add_paths(dump_syms_binary) |
| api.path.mock_add_paths(microdump_stackwalk_binary) |
| |
| api.chromium_android.common_tests_final_steps( |
| checkout_dir=api.path['checkout']) |
| |
| |
| if failure: |
| # pylint: disable=raising-bad-type |
| raise failure |
| |
| def GenTests(api): |
| def properties_for(buildername): |
| return api.properties.generic( |
| buildername=buildername, |
| bot_id='tehslave', |
| repo_name='src/repo', |
| issue='123456789', |
| patchset='1', |
| rietveld='http://rietveld.example.com', |
| repo_url='svn://svn.chromium.org/chrome/trunk/src', |
| revision='4f4b02f6b7fa20a3a25682c457bbc8ad589c8a00', |
| internal=True) |
| |
| for buildername in BUILDERS: |
| yield api.test('%s_basic' % buildername) + properties_for(buildername) |
| |
| yield (api.test('tester_no_devices_during_recovery') + |
| properties_for('tester') + |
| api.step_data('device_recovery', retcode=1)) |
| |
| yield (api.test('tester_no_devices_during_status') + |
| properties_for('tester') + |
| api.step_data('device_status', retcode=1)) |
| |
| yield (api.test('tester_other_device_failure_during_recovery') + |
| properties_for('tester') + |
| api.step_data('device_recovery', retcode=2)) |
| |
| yield (api.test('tester_other_device_failure_during_status') + |
| properties_for('tester') + |
| api.step_data('device_status', retcode=2)) |
| |
| yield (api.test('tester_with_step_warning') + |
| properties_for('tester') + |
| api.step_data('unittests', retcode=88)) |
| |
| yield (api.test('tester_failing_host_info') + |
| properties_for('tester') + |
| api.step_data( |
| 'Host Info', |
| api.json.output({'failures': ['foo', 'bar']}), |
| retcode=1)) |
| |
| yield (api.test('tester_blacklisted_devices') + |
| properties_for('tester') + |
| api.override_step_data('provision_devices', |
| api.json.output(['abc123', 'def456']))) |
| |
| yield (api.test('tester_offline_devices') + |
| properties_for('tester') + |
| api.override_step_data('device_status', |
| api.json.output([{}, {}]))) |
| |
| yield (api.test('perf_tests_failure') + |
| properties_for('perf_runner') + |
| api.step_data('perf_test.foo', retcode=1)) |
| |
| yield (api.test('perf_tests_infra_failure') + |
| properties_for('perf_runner') + |
| api.step_data('perf_test.foo', retcode=87)) |
| |
| yield (api.test('perf_tests_reference_failure') + |
| properties_for('perf_runner') + |
| api.step_data('perf_test.foo.reference', retcode=1)) |
| |
| yield (api.test('perf_tests_infra_reference_failure') + |
| properties_for('perf_runner') + |
| api.step_data('perf_test.foo.reference', retcode=87)) |
| |
| yield (api.test('gerrit_refs') + |
| api.properties.generic( |
| buildername='gerrit_try_builder', |
| bot_id='testslave', |
| repo_name='src/repo', |
| issue='123456789', |
| patchset='1', |
| rietveld='http://rietveld.example.com', |
| repo_url='svn://svn.chromium.org/chrome/trunk/src', |
| revision='4f4b02f6b7fa20a3a25682c457bbc8ad589c8a00', |
| internal=True, **({'event.patchSet.ref':'refs/changes/50/176150/1'}))) |
| |
| yield (api.test('tombstones_m53') + |
| properties_for('tester') + |
| api.chromium.override_version(major=53)) |
| |
| yield (api.test('telemetry_browser_tests_failures') + |
| properties_for('telemetry_browser_tests_tester') + |
| api.override_step_data('Run telemetry browser_test PopularUrlsTest', |
| api.json.output({'successes': ['passed_test1', 'passed_test2'], |
| 'failures': ['failed_test_1', 'failed_test_2']}), |
| retcode=1)) |
| |
| yield (api.test('upload_result_details_failures') + |
| properties_for('result_details') + |
| api.override_step_data('unittests: generate result details', |
| retcode=1)) |
| |
| yield (api.test('asan_setup_failure') + |
| properties_for('asan') + |
| api.override_step_data('Set up ASAN on devices.wait_for_devices', |
| retcode=87)) |