| # Copyright (c) 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. |
| |
| import contextlib |
| |
| from recipe_engine.types import freeze |
| |
| DEPS = [ |
| 'auto_bisect_staging', |
| 'bisect_tester_staging', |
| 'depot_tools/bot_update', |
| 'chromium', |
| 'chromium_android', |
| 'chromium_tests', |
| 'depot_tools/gclient', |
| 'recipe_engine/json', |
| 'recipe_engine/path', |
| 'recipe_engine/properties', |
| 'recipe_engine/raw_io', |
| 'recipe_engine/step', |
| ] |
| |
| REPO_URL = 'https://chromium.googlesource.com/chromium/src.git' |
| |
| BUILDERS = freeze({ |
| 'tryserver.chromium.perf': { |
| 'builders': { |
| 'android_one_perf_bisect': { |
| 'recipe_config': 'main_builder_rel_mb', |
| 'gclient_apply_config': ['android', 'perf'], |
| 'bucket': 'chrome-perf', |
| }, |
| 'android_nexus5_perf_bisect': { |
| 'recipe_config': 'main_builder_rel_mb', |
| 'gclient_apply_config': ['android', 'perf'], |
| 'bucket': 'chrome-perf', |
| }, |
| 'android_nexus5X_perf_bisect': { |
| 'recipe_config': 'arm64_builder_rel_mb', |
| 'gclient_apply_config': ['android', 'perf'], |
| 'bucket': 'chrome-perf', |
| }, |
| 'android_nexus6_perf_bisect': { |
| 'recipe_config': 'main_builder_rel_mb', |
| 'gclient_apply_config': ['android', 'perf'], |
| 'bucket': 'chrome-perf', |
| }, |
| 'android_nexus7_perf_bisect': { |
| 'recipe_config': 'main_builder_rel_mb', |
| 'gclient_apply_config': ['android', 'perf'], |
| 'bucket': 'chrome-perf', |
| }, |
| 'android_fyi_perf_bisect': { |
| 'recipe_config': 'main_builder_rel_mb', |
| 'gclient_apply_config': ['android', 'perf'], |
| 'bucket': 'chrome-perf', |
| }, |
| 'android_webview_arm64_aosp_perf_bisect': { |
| 'recipe_config': 'main_builder_rel_mb', |
| 'android_apply_config': ['remove_all_system_webviews'], |
| 'gclient_apply_config': ['android', 'perf'], |
| 'bucket': 'chrome-perf', |
| 'webview': True, |
| }, |
| 'android_webview_nexus6_aosp_perf_bisect': { |
| 'recipe_config': 'main_builder_rel_mb', |
| 'android_apply_config': ['remove_all_system_webviews'], |
| 'gclient_apply_config': ['android', 'perf'], |
| 'bucket': 'chrome-perf', |
| 'webview': True, |
| }, |
| 'staging_android_nexus5X_perf_bisect': { |
| 'recipe_config': 'arm64_builder_rel_mb', |
| 'gclient_apply_config': ['android', 'perf'], |
| 'bucket': 'chrome-perf', |
| }, |
| }, |
| }, |
| }) |
| |
| from recipe_engine.recipe_api import Property |
| |
| PROPERTIES = {'mastername': Property(), 'buildername': Property(),} |
| |
| def RunSteps(api, mastername, buildername): |
| bot_config = api.chromium_tests.create_bot_config_object( |
| [api.chromium_tests.create_bot_id(mastername, buildername)], |
| builders=BUILDERS) |
| # The following lines configures android bisect bot to to checkout codes, |
| # executes runhooks, provisions devices and runs legacy bisect script. |
| recipe_config = bot_config.get('recipe_config', 'perf') |
| kwargs = { |
| 'REPO_NAME': 'src', |
| 'REPO_URL': REPO_URL, |
| 'INTERNAL': False, |
| 'BUILD_CONFIG': 'Release', |
| 'TARGET_PLATFORM': 'android', |
| } |
| kwargs.update(bot_config.get('kwargs', {})) |
| api.chromium_android.configure_from_properties(recipe_config, **kwargs) |
| api.chromium_android.apply_config('use_devil_provision') |
| api.chromium.set_config(recipe_config, **kwargs) |
| api.chromium_tests.set_config('chromium') |
| api.chromium.ensure_goma() |
| api.chromium_tests.set_config('chromium') |
| api.chromium_android.c.set_val({'deps_file': 'DEPS'}) |
| api.gclient.set_config('tryserver_chromium_perf') |
| for c in bot_config.get('android_apply_config', []): |
| api.chromium_android.apply_config(c) |
| for c in bot_config.get('gclient_apply_config', []): |
| api.gclient.apply_config(c) |
| update_step = api.auto_bisect_staging.ensure_checkout() |
| api.path.c.dynamic_paths['catapult'] = ( |
| api.m.auto_bisect_staging.working_dir.join('catapult')) |
| api.path.c.dynamic_paths['bisect_results'] = api.path['start_dir'].join( |
| 'bisect_results') |
| api.chromium_android.clean_local_files() |
| |
| bot_db = api.chromium_tests.create_bot_db_object() |
| bot_config.initialize_bot_db(api.chromium_tests, bot_db, update_step) |
| |
| api.chromium_android.use_devil_adb() |
| |
| @contextlib.contextmanager |
| def android_bisect_build_wrapper(new_api): |
| """A context manager for use as auto_bisect's build_context_mgr. |
| |
| This wraps each individual bisect test. We use new_api here to |
| disambiguate from RunSteps' api object. Otherwise calling |
| auto_bisect_staging from within auto_bisect_staging causes a module |
| to require itself. |
| """ |
| with api.chromium_android.android_build_wrapper()(new_api): |
| try: |
| yield |
| finally: |
| api.auto_bisect_staging.ensure_checkout() |
| |
| @contextlib.contextmanager |
| def android_bisect_test_wrapper(new_api): |
| """A context manager for use as auto_bisect's test_context_mgr. |
| |
| This wraps each individual bisect test. We use new_api here to disambiguate |
| from RunSteps' api object. |
| """ |
| with api.chromium_android.android_test_wrapper()(new_api): |
| yield |
| |
| # Make sure the bisect build and individual test runs are wrapped. |
| api.auto_bisect_staging.build_context_mgr = android_bisect_build_wrapper |
| api.auto_bisect_staging.test_context_mgr = android_bisect_test_wrapper |
| |
| api.auto_bisect_staging.start_try_job(api, update_step=update_step, |
| bot_db=bot_db, |
| do_not_nest_wait_for_revision=True) |
| |
| |
| def GenTests(api): |
| config_json_main = { |
| 'command': ('./tools/perf/run_benchmark -v --browser=android-chrome ' |
| '--output-format=chartjson sunspider'), |
| 'max_time_minutes': '25', |
| 'repeat_count': '1', |
| 'truncate_percent': '25', |
| 'target_arch': 'ia32', |
| } |
| |
| results_with_patch = """*RESULT dummy: dummy= [5.83,6.013,5.573]ms |
| Avg dummy: 5.907711ms |
| Sd dummy: 0.255921ms |
| RESULT telemetry_page_measurement_results: num_failed= 0 count |
| RESULT telemetry_page_measurement_results: num_errored= 0 count |
| |
| View online at https://console.developers.google.com/\ |
| m/cloudstorage/b/chromium-telemetry/o/html-results/results-with |
| """ |
| |
| results_without_patch = """*RESULT dummy: dummy= [5.83,6.013,5.573]ms |
| Avg dummy: 5.907711ms |
| Sd dummy: 0.255921ms |
| RESULT telemetry_page_measurement_results: num_failed= 0 count |
| RESULT telemetry_page_measurement_results: num_errored= 0 count |
| |
| View online at https://console.developers.google.com/\ |
| m/cloudstorage/b/chromium-telemetry/o/html-results/results-without |
| """ |
| buildbucket_put_response = { |
| "results":[{ |
| "build":{ |
| "status": "SCHEDULED", |
| "created_ts": "1459200369835900", |
| "bucket": "user.username", |
| "result_details_json": "null", |
| "status_changed_ts": "1459200369835930", |
| "created_by": "user:username@example.com", |
| "updated_ts": "1459200369835940", |
| "utcnow_ts": "1459200369962370", |
| "parameters_json": "{\"This_has_been\": \"removed\"}", |
| "id": "9016911228971028736" |
| }, |
| "kind": "buildbucket#resourcesItem", |
| "etag": "\"8uCIh8TRuYs4vPN3iWmly9SJMqw\"" |
| }] |
| } |
| |
| buildbucket_get_response = { |
| "build":{ |
| "bucket": "master.tryserver.chromium.perf", |
| "id": "9009962699124567824", |
| "result": "SUCCESS", |
| "status": "COMPLETED", |
| "status_changed_utc": "Mon Jun 13 19:32:37 2016", |
| "updated_utc": "Mon Jun 13 19:32:37 2016", |
| "url": "http://build.chromium.org/p/tryserver.chromium.perf/builders/linux_perf_bisect/builds/6537", |
| "utcnow_utc": "Tue Jun 21 21:33:56 2016" |
| } |
| } |
| |
| |
| for _, master_dict in BUILDERS.items(): |
| for buildername in master_dict.get('builders', {}): |
| config_json = config_json_main.copy() |
| |
| yield ( |
| api.test('basic_perf_tryjob_' + buildername) + |
| api.properties.tryserver( |
| path_config='kitchen', |
| mastername='tryserver.chromium.perf', |
| buildername=buildername, |
| gerrit_project='chromium', |
| is_test=True) + |
| api.override_step_data( |
| 'git diff to analyze patch', |
| api.raw_io.stream_output('tools/run-perf-test.cfg')) + |
| api.override_step_data('load config', api.json.output(config_json)) + |
| api.step_data('Running WITHOUT patch.gsutil exists', retcode=1) + |
| api.step_data( |
| 'Running WITH patch.buildbucket.put', |
| stdout=api.json.output(buildbucket_put_response)) + |
| api.step_data( |
| 'Running WITHOUT patch.buildbucket.put', |
| stdout=api.json.output(buildbucket_put_response)) + |
| api.step_data( |
| 'Running WITH patch.buildbucket.get', |
| stdout=api.json.output(buildbucket_get_response)) + |
| api.step_data( |
| 'Running WITH patch.buildbucket.get (2)', |
| stdout=api.json.output(buildbucket_get_response)) + |
| api.step_data( |
| 'Running WITH patch.Performance Test (With Patch) 1 of 1', |
| api.raw_io.output_text( |
| str(results_with_patch), name='stdout_proxy')) + |
| api.step_data( |
| 'Running WITHOUT patch.Performance Test (Without Patch) 1 of 1', |
| api.raw_io.output_text( |
| str(results_without_patch), name='stdout_proxy')) + |
| api.step_data( |
| 'Notify dashboard.Post bisect results', |
| api.json.output({'status_code': 200}))) |
| config_json.update({'metric': 'dummy/dummy'}) |
| |
| yield ( |
| api.test('basic_perf_tryjob_with_metric_' + buildername) + |
| api.properties.tryserver( |
| path_config='kitchen', |
| mastername='tryserver.chromium.perf', |
| buildername=buildername, |
| gerrit_project='chromium', |
| is_test=True) + |
| api.override_step_data( |
| 'git diff to analyze patch', |
| api.raw_io.stream_output('tools/run-perf-test.cfg')) + |
| api.override_step_data('load config', |
| api.json.output(config_json)) + |
| api.step_data('Running WITHOUT patch.gsutil exists', retcode=1) + |
| api.step_data( |
| 'Running WITH patch.buildbucket.put', |
| stdout=api.json.output(buildbucket_put_response)) + |
| api.step_data( |
| 'Running WITHOUT patch.buildbucket.put', |
| stdout=api.json.output(buildbucket_put_response)) + |
| api.step_data( |
| 'Running WITH patch.buildbucket.get', |
| stdout=api.json.output(buildbucket_get_response)) + |
| api.step_data( |
| 'Running WITH patch.buildbucket.get (2)', |
| stdout=api.json.output(buildbucket_get_response)) + |
| api.step_data( |
| 'Running WITH patch.Performance Test (With Patch) 1 of 1', |
| api.raw_io.output_text( |
| str(results_with_patch), name='stdout_proxy')) + |
| api.step_data( |
| 'Running WITHOUT patch.Performance Test (Without Patch) 1 of 1', |
| api.raw_io.output_text( |
| str(results_without_patch), name='stdout_proxy')) + |
| api.step_data( |
| 'Notify dashboard.Post bisect results', |
| api.json.output({'status_code': 200}))) |
| |
| yield ( |
| api.test('perf_tryjob_failed_test_' + buildername) + |
| api.properties.tryserver( |
| path_config='kitchen', |
| mastername='tryserver.chromium.perf', |
| buildername=buildername, |
| gerrit_project='chromium', |
| is_test=True) + |
| api.override_step_data( |
| 'git diff to analyze patch', |
| api.raw_io.stream_output('tools/run-perf-test.cfg')) + |
| api.override_step_data('load config', api.json.output(config_json)) + |
| api.step_data('Running WITHOUT patch.gsutil exists', retcode=1) + |
| api.step_data( |
| 'Running WITH patch.buildbucket.put', |
| stdout=api.json.output(buildbucket_put_response)) + |
| api.step_data( |
| 'Running WITHOUT patch.buildbucket.put', |
| stdout=api.json.output(buildbucket_put_response)) + |
| api.step_data( |
| 'Running WITH patch.buildbucket.get', |
| stdout=api.json.output(buildbucket_get_response)) + |
| api.step_data( |
| 'Running WITH patch.buildbucket.get (2)', |
| stdout=api.json.output(buildbucket_get_response)) + |
| api.step_data( |
| 'Running WITH patch.Performance Test (With Patch) 1 of 1', |
| retcode=1)) |
| |
| config_json.update({'good_revision': '306475', |
| 'bad_revision': '306476'}) |
| |
| yield ( |
| api.test('basic_perf_tryjob_with_revisions_' + buildername) + |
| api.properties.tryserver( |
| path_config='kitchen', |
| mastername='tryserver.chromium.perf', |
| buildername=buildername, |
| gerrit_project='chromium', |
| is_test=True) + |
| api.override_step_data( |
| 'git diff to analyze patch', |
| api.raw_io.stream_output('tools/run-perf-test.cfg')) + |
| api.override_step_data('load config', api.json.output(config_json)) + |
| api.step_data('resolving commit_pos ' + config_json['good_revision'], |
| stdout=api.raw_io.output_text( |
| 'hash:d49c331def2a3bbf3ddd0096eb51551155')) + |
| api.step_data('resolving commit_pos ' + config_json['bad_revision'], |
| stdout=api.raw_io.output_text( |
| 'hash:bad49c331def2a3bbf3ddd0096eb51551155')) + |
| api.step_data('Running WITHOUT patch.gsutil exists', retcode=1) + |
| api.step_data( |
| 'Running WITH patch.buildbucket.put', |
| stdout=api.json.output(buildbucket_put_response)) + |
| api.step_data( |
| 'Running WITHOUT patch.buildbucket.put', |
| stdout=api.json.output(buildbucket_put_response)) + |
| api.step_data( |
| 'Running WITH patch.buildbucket.get', |
| stdout=api.json.output(buildbucket_get_response)) + |
| api.step_data( |
| 'Running WITH patch.buildbucket.get (2)', |
| stdout=api.json.output(buildbucket_get_response)) + |
| api.step_data( |
| 'Running WITH patch.Performance Test (With Patch) 1 of 1', |
| api.raw_io.output_text( |
| str(results_with_patch), name='stdout_proxy')) + |
| api.step_data( |
| 'Running WITHOUT patch.Performance Test (Without Patch) 1 of 1', |
| api.raw_io.output_text( |
| str(results_without_patch), name='stdout_proxy')) + |
| api.step_data('Notify dashboard.Post bisect results', |
| api.json.output({'status_code': 200}))) |
| |
| config_json = { |
| 'max_time_minutes': '25', |
| 'repeat_count': '1', |
| 'truncate_percent': '25', |
| 'target_arch': 'ia32', |
| } |
| |
| yield ( |
| api.test('perf_tryjob_config_error_' + buildername) + |
| api.properties.tryserver( |
| path_config='kitchen', |
| mastername='tryserver.chromium.perf', |
| buildername=buildername) + api.properties( |
| requester='abcdxyz@chromium.org') + api.override_step_data( |
| 'git diff to analyze patch', |
| api.raw_io.stream_output('tools/run-perf-test.cfg')) + |
| api.override_step_data('load config', api.json.output(config_json))) |
| |
| bisect_config = { |
| 'test_type': 'perf', |
| 'command': './tools/perf/run_benchmark -v ' |
| '--browser=android-chromium --output-format=valueset ' |
| 'page_cycler_v2.intl_ar_fa_he', |
| 'metric': 'warm_times/page_load_time', |
| 'repeat_count': '2', |
| 'max_time_minutes': '5', |
| 'truncate_percent': '25', |
| 'bug_id': '425582', |
| 'gs_bucket': 'chrome-perf', |
| 'builder_host': 'master4.golo.chromium.org', |
| 'builder_port': '8341' |
| } |
| yield (api.test('basic_recipe_' + buildername) + |
| api.properties.tryserver( |
| path_config='kitchen', |
| mastername='tryserver.chromium.perf', |
| buildername=buildername) + |
| api.properties( |
| bisect_config=bisect_config) + api.properties( |
| job_name='f7a7b4135624439cbd27fdd5133d74ec') + |
| api.bisect_tester_staging(tempfile='/tmp/dummy') + |
| api.properties(parent_got_revision='a' * 40) + api.properties( |
| parent_build_archive_url='gs://test-domain/test-archive.zip')) |
| |
| local_bisect_config = { |
| 'test_type': 'perf', |
| 'command': './tools/perf/run_benchmark -v ' |
| '--browser=android-chromium --output-format=valueset ' |
| 'page_cycler_v2.intl_ar_fa_he', |
| 'metric': 'warm_times/page_load_time', |
| 'repeat_count': '2', |
| 'max_time_minutes': '5', |
| 'truncate_percent': '25', |
| 'bug_id': '425582', |
| 'gs_bucket': 'chrome-perf', |
| 'builder_host': 'master4.golo.chromium.org', |
| 'builder_port': '8341', |
| 'good_revision': '306475', |
| 'bad_revision': '306476', |
| 'dummy_job_names': True |
| } |
| |
| buildername = 'android_one_perf_bisect' |
| working_device = [ |
| { |
| "battery": { |
| "status": "5", |
| "scale": "100", |
| "temperature": "249", |
| "level": "100", |
| "AC powered": "false", |
| "health": "2", |
| "voltage": "4286", |
| "Wireless powered": "false", |
| "USB powered": "true", |
| "technology": "Li-ion", |
| "present": "true" |
| }, |
| "wifi_ip": "", |
| "imei_slice": "Unknown", |
| "ro.build.id": "LRX21O", |
| "ro.build.product": "product_name", |
| "build_detail": |
| "google/razor/flo:5.0/LRX21O/1570415:userdebug/dev-keys", |
| "serial": "1111", |
| "adb_status": "device", |
| "blacklisted": False, |
| "usb_status": True, |
| }, |
| { |
| "adb_status": "offline", |
| "blacklisted": True, |
| "serial": "03e0363a003c6ad4", |
| "usb_status": False, |
| }, |
| { |
| "adb_status": "unauthorized", |
| "blacklisted": True, |
| "serial": "03e0363a003c6ad5", |
| "usb_status": True, |
| }, |
| { |
| "adb_status": "device", |
| "blacklisted": True, |
| "serial": "03e0363a003c6ad6", |
| "usb_status": True, |
| } |
| ] |
| |
| two_devices = [ |
| { |
| "battery": { |
| "status": "5", |
| "scale": "100", |
| "temperature": "249", |
| "level": "100", |
| "AC powered": "false", |
| "health": "2", |
| "voltage": "4286", |
| "Wireless powered": "false", |
| "USB powered": "true", |
| "technology": "Li-ion", |
| "present": "true" |
| }, |
| "wifi_ip": "", |
| "imei_slice": "Unknown", |
| "ro.build.id": "LRX21O", |
| "ro.build.product": "product_name", |
| "build_detail": |
| "google/razor/flo:5.0/LRX21O/1570415:userdebug/dev-keys", |
| "serial": "2222", |
| "adb_status": "device", |
| "blacklisted": False, |
| "usb_status": True, |
| }, |
| { |
| "battery": { |
| "status": "5", |
| "scale": "100", |
| "temperature": "249", |
| "level": "100", |
| "AC powered": "false", |
| "health": "2", |
| "voltage": "4286", |
| "Wireless powered": "false", |
| "USB powered": "true", |
| "technology": "Li-ion", |
| "present": "true" |
| }, |
| "wifi_ip": "", |
| "imei_slice": "Unknown", |
| "ro.build.id": "LRX21O", |
| "ro.build.product": "product_name", |
| "build_detail": |
| "google/razor/flo:5.0/LRX21O/1570415:userdebug/dev-keys", |
| "serial": "1111", |
| "adb_status": "device", |
| "blacklisted": False, |
| "usb_status": True, |
| }, |
| { |
| "adb_status": "offline", |
| "blacklisted": True, |
| "serial": "03e0363a003c6ad4", |
| "usb_status": False, |
| }, |
| { |
| "adb_status": "unauthorized", |
| "blacklisted": True, |
| "serial": "03e0363a003c6ad5", |
| "usb_status": True, |
| }, |
| { |
| "adb_status": "device", |
| "blacklisted": True, |
| "serial": "03e0363a003c6ad6", |
| "usb_status": True, |
| } |
| ] |
| |
| # simulate the scenario when the first tested device works |
| yield (api.test('local_basic_recipe_basic_device') + |
| api.properties.tryserver( |
| mastername='tryserver.chromium.perf', buildername=buildername) + |
| api.properties( |
| path_config='kitchen', |
| bisect_config=local_bisect_config, |
| job_name='f7a7b4135624439cbd27fdd5133d74ec', |
| local_test=True, |
| parent_got_revision='a' * 40, |
| parent_build_archive_url='gs://test-domain/test-archive.zip') + |
| api.bisect_tester_staging(tempfile='/tmp/dummy') + |
| api.override_step_data('device_status', |
| api.json.output(two_devices)) + |
| api.override_step_data('device_status (2)', |
| api.json.output(two_devices)) + |
| api.step_data('Post bisect results', |
| api.json.output({'status_code': 200})) + |
| api.auto_bisect_staging([ |
| { |
| 'hash': 'e28dc0d49c331def2a3bbf3ddd0096eb51551155', |
| 'commit_pos': '306475', |
| 'parsed_values': [12, 13, 14, 15, 1], |
| 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}], |
| }, |
| { |
| 'hash': 'fc6dfc7ff5b1073408499478969261b826441144', |
| 'commit_pos': '306476', |
| 'parsed_values': [212, 213, 214, 215, 7], |
| 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}], |
| }])) |
| |
| # simulate the scenario when the no device is connected. |
| yield (api.test('local_basic_recipe_no_device') + |
| api.properties.tryserver( |
| mastername='tryserver.chromium.perf', buildername=buildername) + |
| api.properties( |
| path_config='kitchen', |
| bisect_config=local_bisect_config, |
| job_name='f7a7b4135624439cbd27fdd5133d74ec', |
| local_test=True, |
| parent_got_revision='a' * 40, |
| parent_build_archive_url='gs://test-domain/test-archive.zip') + |
| api.bisect_tester_staging(tempfile='/tmp/dummy') + |
| api.override_step_data('device_status', api.json.output([])) + |
| api.override_step_data('device_status (2)', api.json.output([])) + |
| api.auto_bisect_staging([ |
| { |
| 'hash': 'e28dc0d49c331def2a3bbf3ddd0096eb51551155', |
| 'commit_pos': '306475', |
| }, |
| { |
| 'hash': 'fc6dfc7ff5b1073408499478969261b826441144', |
| 'commit_pos': '306476', |
| }])) |
| |
| # simulate the scenario when tests fail not because of device |
| # disconnection. |
| yield (api.test('local_basic_recipe_failed_device') + |
| api.properties.tryserver( |
| mastername='tryserver.chromium.perf', buildername=buildername) + |
| api.properties( |
| path_config='kitchen', |
| bisect_config=local_bisect_config, |
| job_name='f7a7b4135624439cbd27fdd5133d74ec', |
| local_test=True, |
| parent_got_revision='a' * 40, |
| parent_build_archive_url='gs://test-domain/test-archive.zip') + |
| api.bisect_tester_staging(tempfile='/tmp/dummy') + |
| api.override_step_data('device_status', |
| api.json.output(working_device)) + |
| api.override_step_data('device_status (2)', |
| api.json.output(working_device)) + |
| api.step_data('Post bisect results', |
| api.json.output({'status_code': 200})) + |
| api.auto_bisect_staging([ |
| { |
| 'hash': 'e28dc0d49c331def2a3bbf3ddd0096eb51551155', |
| 'commit_pos': '306475', |
| 'parsed_values': [12, 13, 14, 15, 1], |
| 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}], |
| }, |
| { |
| 'hash': 'fc6dfc7ff5b1073408499478969261b826441144', |
| 'commit_pos': '306476', |
| 'parsed_values': [212, 213, 214, 215, 7], |
| 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}], |
| }])) |
| |
| # simulate the scenario when tests fail because of device disconnection. |
| yield (api.test('local_basic_recipe_disconnected_device') + |
| api.properties.tryserver( |
| mastername='tryserver.chromium.perf', buildername=buildername) + |
| api.properties( |
| path_config='kitchen', |
| bisect_config={ |
| 'test_type': 'perf', |
| 'command': './tools/perf/run_benchmark -v ' |
| '--browser=android-chromium --output-format=valueset ' |
| 'page_cycler_v2.intl_ar_fa_he', |
| 'metric': 'warm_times/page_load_time', |
| 'bug_id': '425582', |
| 'gs_bucket': 'chrome-perf', |
| 'good_revision': '306474', |
| 'bad_revision': '306476', |
| }, |
| job_name='f7a7b4135624439cbd27fdd5133d74ec', |
| local_test=True, |
| parent_got_revision='a' * 40, |
| parent_build_archive_url='gs://test-domain/test-archive.zip') + |
| api.bisect_tester_staging(tempfile='/tmp/dummy') + |
| api.override_step_data('device_status', |
| api.json.output(two_devices)) + |
| api.override_step_data('device_status (2)', |
| api.json.output(two_devices)) + |
| # Simulating disconnect by raising failure and changing the output of |
| # multiple_device_status |
| api.step_data('Post bisect results', |
| api.json.output({'status_code': 200})) + |
| api.auto_bisect_staging([ |
| { |
| 'hash': '0000000000000000000000000000000000000000', |
| 'commit_pos': '306474', |
| 'parsed_values': [12, 13, 14, 15, 1], |
| 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}], |
| }, |
| { |
| 'hash': 'e28dc0d49c331def2a3bbf3ddd0096eb51551155', |
| 'commit_pos': '306475', |
| 'parsed_values': [12, 13, 14, 15, 1], |
| 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 1}], |
| }, |
| { |
| 'hash': 'fc6dfc7ff5b1073408499478969261b826441144', |
| 'commit_pos': '306476', |
| 'parsed_values': [212, 213, 214, 215, 7], |
| 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}], |
| }])) |