1 /* 2 * Copyright (C) 2020 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.tradefed.result.error; 17 18 import com.android.tradefed.result.proto.TestRecordProto.FailureStatus; 19 20 import javax.annotation.Nonnull; 21 22 /** Error Identifiers from Trade Federation infra, and dependent infra (like Build infra). */ 23 public enum InfraErrorIdentifier implements ErrorIdentifier { 24 25 // ******************************************************************************************** 26 // Infra: 500_001 ~ 510_000 27 // ******************************************************************************************** 28 // 500_001 - 500_500: General errors 29 ARTIFACT_NOT_FOUND(500_001, FailureStatus.DEPENDENCY_ISSUE), 30 FAIL_TO_CREATE_FILE(500_002, FailureStatus.INFRA_FAILURE), 31 INVOCATION_CANCELLED(500_003, FailureStatus.CANCELLED), 32 CODE_COVERAGE_ERROR(500_004, FailureStatus.INFRA_FAILURE), 33 MODULE_SETUP_RUNTIME_EXCEPTION(500_005, FailureStatus.CUSTOMER_ISSUE), 34 CONFIGURED_ARTIFACT_NOT_FOUND(500_006, FailureStatus.CUSTOMER_ISSUE), 35 INVOCATION_TIMEOUT(500_007, FailureStatus.TIMED_OUT), 36 OPTION_CONFIGURATION_ERROR(500_008, FailureStatus.CUSTOMER_ISSUE), 37 RUNNER_ALLOCATION_ERROR(500_009, FailureStatus.INFRA_FAILURE), 38 SCHEDULER_ALLOCATION_ERROR(500_010, FailureStatus.CUSTOMER_ISSUE), 39 HOST_BINARY_FAILURE(500_011, FailureStatus.DEPENDENCY_ISSUE), 40 MISMATCHED_BUILD_DEVICE(500_012, FailureStatus.CUSTOMER_ISSUE), 41 LAB_HOST_FILESYSTEM_ERROR(500_013, FailureStatus.INFRA_FAILURE), 42 TRADEFED_SHUTTING_DOWN(500_014, FailureStatus.INFRA_FAILURE), 43 LAB_HOST_FILESYSTEM_FULL(500_015, FailureStatus.INFRA_FAILURE), 44 TRADEFED_SKIPPED_TESTS_DURING_SHUTDOWN(500_016, FailureStatus.CANCELLED), 45 SCHEDULING_ERROR(500_017, FailureStatus.INFRA_FAILURE), 46 EVENT_PROCESSING_TIMEOUT(500_018, FailureStatus.INFRA_FAILURE), 47 OUT_OF_MEMORY_ERROR(500_019, FailureStatus.INFRA_FAILURE), 48 // Use a catch-all error during bring up of the new feature 49 INCREMENTAL_FLASHING_ERROR(500_020, FailureStatus.INFRA_FAILURE), 50 BLOCK_COMPARE_ERROR(500_021, FailureStatus.INFRA_FAILURE), 51 FLASHSTATION_CACHE_PREPARATION_ERROR(500_022, FailureStatus.INFRA_FAILURE), 52 FLASHSTATION_SETUP_ERROR(500_023, FailureStatus.INFRA_FAILURE), 53 54 // 500_400 - 500_500: General errors - subprocess related 55 INTERRUPTED_DURING_SUBPROCESS_SHUTDOWN(500_401, FailureStatus.INFRA_FAILURE), 56 57 // 500_501 - 501_000: Build, Artifacts download related errors 58 ARTIFACT_REMOTE_PATH_NULL(500_501, FailureStatus.INFRA_FAILURE), 59 ARTIFACT_UNSUPPORTED_PATH(500_502, FailureStatus.INFRA_FAILURE), 60 ARTIFACT_DOWNLOAD_ERROR(500_503, FailureStatus.DEPENDENCY_ISSUE), 61 GCS_ERROR(500_504, FailureStatus.DEPENDENCY_ISSUE), 62 ANDROID_PARTNER_SERVER_ERROR(500_505, FailureStatus.DEPENDENCY_ISSUE), 63 ARTIFACT_INVALID(500_506, FailureStatus.DEPENDENCY_ISSUE), 64 SANDBOX_SETUP_ERROR(500_507, FailureStatus.INFRA_FAILURE), 65 66 // 501_001 - 501_500: environment issues: For example: lab wifi 67 WIFI_FAILED_CONNECT(501_001, FailureStatus.DEPENDENCY_ISSUE), 68 GOOGLE_ACCOUNT_SETUP_FAILED(501_002, FailureStatus.DEPENDENCY_ISSUE), 69 NO_WIFI(501_003, FailureStatus.DEPENDENCY_ISSUE), 70 NO_DISK_SPACE(501_004, FailureStatus.DEPENDENCY_ISSUE), 71 VIRTUAL_WIFI_FAILED_CONNECT(501_005, FailureStatus.DEPENDENCY_ISSUE), 72 73 // 502_000 - 502_100: Test issues detected by infra 74 EXPECTED_TESTS_MISMATCH(502_000, FailureStatus.TEST_FAILURE), 75 76 // 505_000 - 505_250: Acloud errors 77 // The error codes should be aligned with errors defined in 78 // tools/acloud/internal/constants.py 79 NO_ACLOUD_REPORT(505_000, FailureStatus.DEPENDENCY_ISSUE), 80 ACLOUD_UNDETERMINED(505_001, FailureStatus.DEPENDENCY_ISSUE), 81 ACLOUD_TIMED_OUT(505_002, FailureStatus.DEPENDENCY_ISSUE), 82 ACLOUD_UNRECOGNIZED_ERROR_TYPE(505_003, FailureStatus.DEPENDENCY_ISSUE), 83 ACLOUD_INIT_ERROR(505_004, FailureStatus.DEPENDENCY_ISSUE), 84 ACLOUD_CREATE_GCE_ERROR(505_005, FailureStatus.DEPENDENCY_ISSUE), 85 ACLOUD_DOWNLOAD_ARTIFACT_ERROR(505_006, FailureStatus.DEPENDENCY_ISSUE), 86 ACLOUD_BOOT_UP_ERROR(505_007, FailureStatus.LOST_SYSTEM_UNDER_TEST), 87 GCE_QUOTA_ERROR(505_008, FailureStatus.DEPENDENCY_ISSUE), 88 ACLOUD_SSH_CONNECT_ERROR(505_009, FailureStatus.DEPENDENCY_ISSUE), 89 ACLOUD_OXYGEN_LEASE_ERROR(505_010, FailureStatus.DEPENDENCY_ISSUE), 90 ACLOUD_OXYGEN_RELEASE_ERROR(505_011, FailureStatus.DEPENDENCY_ISSUE), 91 OXYGEN_DEVICE_LAUNCHER_FAILURE(505_012, FailureStatus.LOST_SYSTEM_UNDER_TEST), 92 OXYGEN_SERVER_SHUTTING_DOWN(505_013, FailureStatus.DEPENDENCY_ISSUE), 93 OXYGEN_BAD_GATEWAY_ERROR(505_014, FailureStatus.DEPENDENCY_ISSUE), 94 OXYGEN_REQUEST_TIMEOUT(505_015, FailureStatus.DEPENDENCY_ISSUE), 95 OXYGEN_RESOURCE_EXHAUSTED(505_016, FailureStatus.DEPENDENCY_ISSUE), 96 OXYGEN_SERVER_CONNECTION_FAILURE(505_017, FailureStatus.DEPENDENCY_ISSUE), 97 OXYGEN_CLIENT_BINARY_TIMEOUT(505_018, FailureStatus.INFRA_FAILURE), 98 OXYGEN_CLIENT_BINARY_ERROR(505_019, FailureStatus.INFRA_FAILURE), 99 OXYGEN_CLIENT_LEASE_ERROR(505_020, FailureStatus.INFRA_FAILURE), 100 OXYGEN_NOT_ENOUGH_RESOURCE(505_021, FailureStatus.INFRA_FAILURE), 101 OXYGEN_DEVICE_LAUNCHER_TIMEOUT(505_022, FailureStatus.LOST_SYSTEM_UNDER_TEST), 102 OXYGEN_SERVER_LB_CONNECTION_ERROR(505_023, FailureStatus.INFRA_FAILURE), 103 ACLOUD_INVALID_SERVICE_ACCOUNT_KEY(505_024, FailureStatus.DEPENDENCY_ISSUE), 104 ACLOUD_QUOTA_EXCEED_GPU(505_025, FailureStatus.DEPENDENCY_ISSUE), 105 106 // 505_251 - 505_300: Configuration errors 107 INTERNAL_CONFIG_ERROR(505_251, FailureStatus.INFRA_FAILURE), 108 CLASS_NOT_FOUND(505_252, FailureStatus.CUSTOMER_ISSUE), 109 CONFIGURATION_NOT_FOUND(505_253, FailureStatus.CUSTOMER_ISSUE), 110 UNEXPECTED_DEVICE_CONFIGURED(505_254, FailureStatus.CUSTOMER_ISSUE), 111 KEYSTORE_CONFIG_ERROR(505_255, FailureStatus.DEPENDENCY_ISSUE), 112 TEST_MAPPING_PATH_COLLISION(505_256, FailureStatus.DEPENDENCY_ISSUE), 113 TEST_MAPPING_FILE_FORMAT_ISSUE(505_257, FailureStatus.CUSTOMER_ISSUE), 114 TEST_MAPPING_FILE_NOT_EXIST(505_258, FailureStatus.CUSTOMER_ISSUE), 115 116 // 505_301 - 505_400: Cuttlefish launch failure 117 // Cuttlefish boot failure signature: bluetooth_failed 118 CUTTLEFISH_LAUNCH_FAILURE_BLUETOOTH(505_301, FailureStatus.DEPENDENCY_ISSUE), 119 // Cuttlefish boot failure signature: fetch_cvd_failure_resolve_host 120 CUTTLEFISH_LAUNCH_FAILURE_CVD_RESOLVE_HOST(505_302, FailureStatus.DEPENDENCY_ISSUE), 121 // Cuttlefish boot failure signature: fetch_cvd_failure_connect_server 122 CUTTLEFISH_LAUNCH_FAILURE_CVD_SERVER_CONNECTION(505_303, FailureStatus.DEPENDENCY_ISSUE), 123 // Cuttlefish boot failure signature: launch_cvd_port_collision 124 CUTTLEFISH_LAUNCH_FAILURE_CVD_PORT_COLLISION(505_304, FailureStatus.DEPENDENCY_ISSUE), 125 // Cuttlefish boot failure signature: fetch_cvd_failure_general 126 CUTTLEFISH_LAUNCH_FAILURE_CVD_FETCH(505_305, FailureStatus.DEPENDENCY_ISSUE), 127 // Cuttlefish boot failure signature: cf_webrtc_crash 128 CUTTLEFISH_LAUNCH_FAILURE_WEBRTC_CRASH(505_306, FailureStatus.DEPENDENCY_ISSUE), 129 CUTTLEFISH_LAUNCH_FAILURE_OPENWRT(505_307, FailureStatus.DEPENDENCY_ISSUE), 130 CUTTLEFISH_LAUNCH_FAILURE_CROSVM(505_308, FailureStatus.DEPENDENCY_ISSUE), 131 CUTTLEFISH_LAUNCH_FAILURE_NGINX(505_309, FailureStatus.DEPENDENCY_ISSUE), 132 CUTTLEFISH_LAUNCH_FAILURE_CVD_FETCH_HANG(505_310, FailureStatus.DEPENDENCY_ISSUE), 133 CUTTLEFISH_LAUNCH_FAILURE_RUN_CVD_MISSING(505_311, FailureStatus.DEPENDENCY_ISSUE), 134 135 UNDETERMINED(510_000, FailureStatus.UNSET); 136 137 private final long code; 138 private final @Nonnull FailureStatus status; 139 InfraErrorIdentifier(int code, FailureStatus status)140 InfraErrorIdentifier(int code, FailureStatus status) { 141 this.code = code; 142 this.status = (status == null ? FailureStatus.UNSET : status); 143 } 144 145 @Override code()146 public long code() { 147 return code; 148 } 149 150 @Override status()151 public @Nonnull FailureStatus status() { 152 return status; 153 } 154 } 155