# Copyright 2018, The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Atest custom enum class."""

from enum import Enum, IntEnum, unique


@unique
class DetectType(IntEnum):
  """An Enum class for local_detect_event."""

  # Detect type for local_detect_event; next expansion: 60
  BUG_DETECTED = 0
  ACLOUD_CREATE = 1
  FIND_BUILD = 2
  NO_FLAKE = 3  # Deprecated.
  HAS_FLAKE = 4  # Deprecated.
  TF_TEARDOWN_LOGCAT = 5
  REBUILD_MODULE_INFO = 6
  NOT_REBUILD_MODULE_INFO = 7
  ONLY_BUILD_MODULE_INFO = 8
  FUZZY_SEARCH_TIME = 9
  PERMISSION_INCONSISTENT = 10
  SMART_REBUILD_MODULE_INFO = 11
  CLEAN_BUILD = 12
  TESTABLE_MODULES = 13
  # Tradefed exit codes v.s. exit conditions
  # 0: NO_ERROR             1: CONFIG_EXCEPTION
  # 2: NO_BUILD             3: DEVICE_UNRESPONSIVE
  # 4: DEVICE_UNAVAILABLE   5: FATAL_HOST_ERROR
  # 6: THROWABLE_EXCEPTION  7: NO_DEVICE_ALLOCATED
  # 8: WRONG_JAVA_VERSION
  TF_EXIT_CODE = 14
  ATEST_CONFIG = 15
  TEST_WITH_ARGS = 16
  TEST_NULL_ARGS = 17
  MODULE_MERGE = 18  # Deprecated. Use MODULE_MERGE_MS instead.
  MODULE_INFO_INIT_TIME = 19  # Deprecated. Use MODULE_INFO_INIT_MS instead.
  MODULE_MERGE_MS = 20
  NATIVE_TEST_NOT_FOUND = 21
  BAZEL_WORKSPACE_GENERATE_TIME = 22
  MODULE_LOAD_MS = 23
  MODULE_INFO_INIT_MS = 24
  INIT_AND_FIND_MS = 25
  FOUND_INSTRUMENTATION_TEST = 26
  FOUND_TARGET_ARTIFACTS = 27
  FIND_TEST_IN_DEPS = 28
  FULL_GENERATE_BAZEL_WORKSPACE_TIME = 29
  # Below detect types are used for determine build conditions:
  # 1. *_CLEAN_OUT: when out/ dir is empty or does not exist.
  # 2. *_BPMK_CHANGE: when any Android.bp/Android.mk has changed.
  # 3. *_ENV_CHANGE: when build-related variable has changed.
  # 4. *_SRC_CHANGE: when source code has changed.
  # 5. *_OTHER: none of above reasons that triggers renewal of ninja file.
  # 6. *_INCREMENTAL: the build doesn't need to renew ninja file.
  MODULE_INFO_CLEAN_OUT = 30
  MODULE_INFO_BPMK_CHANGE = 31
  MODULE_INFO_ENV_CHANGE = 32
  MODULE_INFO_SRC_CHANGE = 33
  MODULE_INFO_OTHER = 34
  MODULE_INFO_INCREMENTAL = 35
  BUILD_CLEAN_OUT = 36
  BUILD_BPMK_CHANGE = 37
  BUILD_ENV_CHANGE = 38
  BUILD_SRC_CHANGE = 39
  BUILD_OTHER = 40
  BUILD_INCREMENTAL = 41
  BUILD_TIME_PER_TARGET = 42
  MODULE_INFO_GEN_NINJA = 43
  BUILD_GEN_NINJA = 44
  # To indicate if the invocation is using test-mapping, send non-zero value
  # if the invocation is test-mapping mode.
  IS_TEST_MAPPING = 45
  # The RBE_STATE indicates the combined state of the RBE and customized out.
  RBE_STATE = 46
  # Prompt the user to select multiple tests.
  INTERACTIVE_SELECTION = 47
  # Upload results to storage.
  # - UPLOAD_FLOW_MS is the total of upload preparation time, includes:
  # -- FETCH_CRED_MS: fetch credential.
  # -- UPLOAD_PREPARE_MS: insert a new record to server.
  UPLOAD_FLOW_MS = 48
  FETCH_CRED_MS = 49
  UPLOAD_PREPARE_MS = 50
  # Time of join the index.
  IDX_JOIN_MS = 51  # Deprecated. Use INDEX_TARGETS_MS instead.
  IS_MINIMAL_BUILD = 52
  # Elapsed time of the Tradefed runner.
  TF_PREPARATION_MS = 53
  TF_TEST_MS = 54
  TF_TEARDOWN_MS = 55
  TF_TOTAL_RUN_MS = 56
  ROBOLEAF_NON_MODULE_FINDER = 57  # Deprecated.
  ROBOLEAF_UNSUPPORTED_FLAG = 58  # Deprecated.
  INDEX_TARGETS_MS = 59
  # An int representing the negotiated speed (in Mbits per seconds) the
  # device is operating at.
  USB_NEGOTIATED_SPEED = 60
  # An int representing the maximum speed (in Mbits per seconds) of which the
  # device is capable.
  USB_MAX_SPEED = 61
  # Time spent on waiting indexing to complete.
  WAIT_FOR_INDEXING_MS = 62
  # Whether procate db is locked. Value 1 means True, otherwise is False.
  IS_PLOCATEDB_LOCKED = 63
  # Device update duration
  DEVICE_UPDATE_MS = 64
  # The ID of the feature that is controlled by rollout control. Positive value
  # means the feature is enabled, negative value means disabled.
  ROLLOUT_CONTROLLED_FEATURE_ID = 65
  ROLLOUT_CONTROLLED_FEATURE_ID_OVERRIDE = 66


@unique
class ExitCode(IntEnum):
  """An Enum class for sys.exit()"""

  SUCCESS = 0
  ENV_NOT_SETUP = 1
  BUILD_FAILURE = 2
  ERROR = 3
  TEST_NOT_FOUND = 4
  TEST_FAILURE = 5
  VERIFY_FAILURE = 6
  OUTSIDE_ROOT = 7
  AVD_CREATE_FAILURE = 8
  AVD_INVALID_ARGS = 9
  EXIT_BEFORE_MAIN = 10
  DEVICE_NOT_FOUND = 11
  MIXED_TYPE_FILTER = 12
  INPUT_TEST_REFERENCE_ERROR = 13
  CONFIG_INVALID_FORMAT = 14
  INVALID_SMART_TESTING_PATH = 15  # deprecated.
  INVALID_EXEC_MODE = 16
  INVALID_OBSOLETE_BASELINE_ARGS = 17  # deprecated.
  INVALID_REGRESSION_ARGS = 18  # deprecated.
  INVALID_TM_ARGS = 19
  INVALID_TM_FORMAT = 20
  INSUFFICIENT_DEVICES = 21
  # The code > 100 are reserved for collecting data only, actually the run
  # doesn't finish at the point.
  COLLECT_ONLY_FILE_NOT_FOUND = 101


@unique
class FilterType(Enum):
  """An Enum class for filter types"""

  WILDCARD_FILTER = 'wildcard class_method'
  REGULAR_FILTER = 'regular class_method'
