| # 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 |
| from recipe_engine import post_process |
| from PB.go.chromium.org.luci.buildbucket.proto import common as common_pb |
| |
| DEPS = [ |
| 'adb', |
| 'build', |
| 'chromium', |
| 'chromium_android', |
| 'recipe_engine/buildbucket', |
| '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': {}, |
| '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, |
| }, |
| '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, |
| }, |
| 'disable_location_tester': { |
| 'disable_location': 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, |
| }, |
| }) |
| |
| |
| def RunSteps(api): |
| config = BUILDERS[api.buildbucket.builder_name] |
| |
| 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.logcat_bucket = None |
| |
| 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): |
| raw_result = api.chromium.compile(use_goma_module=True) |
| if raw_result.status != common_pb.SUCCESS: |
| return raw_result |
| 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), |
| 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() |
| |
| api.chromium_android.run_test_suite( |
| 'unittests', |
| result_details=config.get('result_details'), |
| store_tombstones=config.get('store_tombstones')) |
| 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_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 sum([ |
| api.chromium.ci_build( |
| builder=buildername, |
| builder_group='chromium.android', |
| revision='4f4b02f6b7fa20a3a25682c457bbc8ad589c8a00', |
| ), |
| api.properties(internal=True), |
| ], api.empty_test_data()) |
| |
| 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_denylisted_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( |
| 'gerrit_refs', |
| api.chromium.try_build( |
| builder_group='tryserver.chromium.android', |
| builder='gerrit_try_builder', |
| change_number=123456789, |
| patch_set=1), |
| api.properties( |
| 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( |
| 'compile_failure', |
| properties_for('basic_builder'), |
| api.step_data('compile', retcode=1), |
| api.post_process(post_process.StatusFailure), |
| api.post_process(post_process.DropExpectation), |
| ) |