"""Generated message classes for devicerun version v1alpha.

The Device Run API allows management, scheduling, and execution of automated
sessions and workloads across device catalogs.
"""
# NOTE: This file is autogenerated and should not be edited by hand.

from apitools.base.protorpclite import messages as _messages
from apitools.base.py import encoding
from apitools.base.py import extra_types


package = 'devicerun'


class AllocationConfig(_messages.Message):
  r"""Allocation config.

  Fields:
    deviceConfigs: Required. At least one device config is required. If more
      than one device config is required, the multiple devices are allocated
      to each shard of the OmniLab job to run multi-device-interaction tests.
  """

  deviceConfigs = _messages.MessageField('DeviceConfig', 1, repeated=True)


class AndroidBugreportDeviceAction(_messages.Message):
  r"""Captures a bugreport from the device. The output will be written to a
  file named `bugreport.zip` in the execution output directory.

  Fields:
    collectOnPass: Optional. Whether to deliver the bugreport when the test
      passes. If false, the bugreport is skipped on pass to save time (default
      behavior). If true, the bugreport is always delivered.
  """

  collectOnPass = _messages.BooleanField(1)


class AndroidDumpsysDeviceAction(_messages.Message):
  r"""Captures dumpsys output from the device. The output will be written to a
  file named `dumpsys.log` in the execution output directory.

  Fields:
    collectOnPass: Optional. Whether to deliver the dumpsys when the test
      passes. If false, the dumpsys is skipped on pass to save time (default
      behavior). If true, the dumpsys is always delivered.
  """

  collectOnPass = _messages.BooleanField(1)


class AndroidInstallPackagesDeviceAction(_messages.Message):
  r"""Installs Android packages on the device.

  Fields:
    installables: Required. The Android packages to install on the device. The
      installation will be performed in the order specified. Limits: - A
      maximum of 20 installables are allowed. - A maximum of 100 files are
      allowed in total across all installables.
  """

  installables = _messages.MessageField('AndroidInstallable', 1, repeated=True)


class AndroidInstallable(_messages.Message):
  r"""An Android Installable represents the file(s) for installing an Android
  package on a device. This can be an APK, an Android App Bundle (AAB), or an
  APK Set.

  Fields:
    files: Required. Files that make up the package. Supported formats are
      distinguished by their file extension: - APK: One or more files with
      extension `.apk`. - App Bundle: A single file with extension `.aab`. -
      APK Set: A single file with extension `.apks`.
  """

  files = _messages.MessageField('InputFile', 1, repeated=True)


class AndroidInstrumentationTest(_messages.Message):
  r"""The configuration of an Android instrumentation test. See
  https://developer.android.com/training/testing/instrumented-tests for more
  information on Android instrumentation tests.

  Messages:
    AdditionalTestOptionsValue: Optional. Additional test options to pass to
      the test runner. Passed to `am instrument` command as `-e` options,
      which will be passed to the instrumentation test runner using its
      `onCreate()` method. Formats supported in test_targets are not allowed
      to be used here. Limits: - Maximum number of entries: 32. - Maximum key
      size: 64 bytes (UTF-8). - Maximum value size: 1024 bytes (UTF-8).

  Fields:
    additionalTestOptions: Optional. Additional test options to pass to the
      test runner. Passed to `am instrument` command as `-e` options, which
      will be passed to the instrumentation test runner using its `onCreate()`
      method. Formats supported in test_targets are not allowed to be used
      here. Limits: - Maximum number of entries: 32. - Maximum key size: 64
      bytes (UTF-8). - Maximum value size: 1024 bytes (UTF-8).
    enableCodeCoverage: Optional. Whether to enable code coverage collection
      for the test. A coverage file `coverage.ec` will be uploaded to the
      results folder. For this to work, your classes have to be instrumented
      offline (build time) by EMMA/JaCoCo.
    instrumentationTimeout: Optional. The timeout of the instrumentation test.
      Default value: 5 min. Range: [1 min, 3 hours].
    orchestratorVersion: Optional. The version of the Android Test
      Orchestrator to use for the test. If not set, no orchestrator is used.
      If set to "auto", a system-default orchestrator is used.
    smartSharding: Optional. Smart sharding strategy to split the job into
      multiple shards based on the test methods and their execution time.
    testInstallable: Required. The test package to install and run the test.
    testRunnerClass: Optional. Full class name of the test runner class. The
      class must be `androidx.test.runner.AndroidJUnitRunner` or a subclass of
      it. The default value is determined by examining the application's
      manifest. If multiple instrumentations are found, the first one in the
      manifest will be used.
    testTargets: Optional. A list of test targets or target filters to run.
      Each target must be fully qualified with the package name or class name,
      in one of these formats: - `package package_name` - `notPackage
      com.package.to.skip` - `class package_name.class_name` - `class
      package_name.class_name#method_name` - `notClass com.foo.ClassToSkip` -
      `notClass com.foo.ClassName#testMethodToSkip` - `annotation
      com.foo.AnnotationToRun` - `notAnnotation com.foo.AnnotationToSkip` -
      `size [small|medium|large]` Formats like `testfile` or `notTestfile`
      won't be supported. If empty, all targets in the module will be run.
      Limits: - Maximum number of entries: 1024.
    uniformSharding: Optional. Uniform sharding strategy to split the job into
      multiple shards with equal number of test methods.
  """

  @encoding.MapUnrecognizedFields('additionalProperties')
  class AdditionalTestOptionsValue(_messages.Message):
    r"""Optional. Additional test options to pass to the test runner. Passed
    to `am instrument` command as `-e` options, which will be passed to the
    instrumentation test runner using its `onCreate()` method. Formats
    supported in test_targets are not allowed to be used here. Limits: -
    Maximum number of entries: 32. - Maximum key size: 64 bytes (UTF-8). -
    Maximum value size: 1024 bytes (UTF-8).

    Messages:
      AdditionalProperty: An additional property for a
        AdditionalTestOptionsValue object.

    Fields:
      additionalProperties: Additional properties of type
        AdditionalTestOptionsValue
    """

    class AdditionalProperty(_messages.Message):
      r"""An additional property for a AdditionalTestOptionsValue object.

      Fields:
        key: Name of the additional property.
        value: A string attribute.
      """

      key = _messages.StringField(1)
      value = _messages.StringField(2)

    additionalProperties = _messages.MessageField('AdditionalProperty', 1, repeated=True)

  additionalTestOptions = _messages.MessageField('AdditionalTestOptionsValue', 1)
  enableCodeCoverage = _messages.BooleanField(2)
  instrumentationTimeout = _messages.StringField(3)
  orchestratorVersion = _messages.StringField(4)
  smartSharding = _messages.MessageField('AndroidInstrumentationTestSmartSharding', 5)
  testInstallable = _messages.MessageField('AndroidInstallable', 6)
  testRunnerClass = _messages.StringField(7)
  testTargets = _messages.StringField(8, repeated=True)
  uniformSharding = _messages.MessageField('AndroidInstrumentationTestUniformSharding', 9)


class AndroidInstrumentationTestSmartSharding(_messages.Message):
  r"""The smart sharding strategy to split the job into multiple shards based
  on the test methods and their recorded execution time.

  Fields:
    maxShardCount: Optional. The maximum number of shards to create. If unset
      or less than 1, system-defined max limits are used. This limit takes
      precedence if the targeted_shard_duration cannot be satisfied. Limits: -
      For physical devices, the number of shards must be <= 20. - For virtual
      devices, the number of shards must be <= 200.
    targetedShardDuration: Required. The targeted duration of each shard.
      Limits: - Must be at least 2 minutes. - Must be at most 3 hours. Shard
      duration is not guaranteed because smart sharding uses test case history
      and default durations which may not be accurate. Durations are
      calculated based on the following inputs: - Timing records from previous
      runs of the same test case. - For new test cases, the average duration
      of other known test cases. - A system-chosen, default duration if there
      are no previous timing records available. Because the actual shard
      duration can exceed the targeted shard duration, we recommend that you
      set the targeted value at least 5 minutes less than the maximum allowed
      instrumentation timeout. This approach avoids cancelling the shard
      before all tests can finish.
    timingRecord: Required. The timing record file to use for smart sharding.
      If the file does not exist, smart sharding will use default test time
      (30s) for each test method to shard the job into multiple shards. This
      file will be overwritten with the latest timing record after the job is
      completed.
  """

  maxShardCount = _messages.IntegerField(1, variant=_messages.Variant.INT32)
  targetedShardDuration = _messages.StringField(2)
  timingRecord = _messages.MessageField('InputFile', 3)


class AndroidInstrumentationTestUniformSharding(_messages.Message):
  r"""Uniformly shards test cases given a total number of shards. It will be
  translated to `-e numShard` and `-e shardIndex` AndroidJUnitRunner
  arguments. With uniform sharding enabled, specifying either of these
  sharding arguments via `environment_variables` is invalid. Based on the
  sharding mechanism AndroidJUnitRunner uses, there is no guarantee that test
  cases will be distributed uniformly across all shards.

  Fields:
    shardCount: Required. The total number of shards to create. This must
      always be a positive number that is no greater than the total number of
      test cases. Limits: - For physical devices, the number of shards must be
      <= 20. - For virtual devices, the number of shards must be <= 200.
  """

  shardCount = _messages.IntegerField(1, variant=_messages.Variant.INT32)


class AndroidLogcatDeviceAction(_messages.Message):
  r"""Collects logcat output from the device. The output will be written to a
  file named `logcat.txt` in the execution output directory.
  """



class AndroidMockLocationDeviceAction(_messages.Message):
  r"""Mocks the location of the Android device.

  Fields:
    location: Required. The mock location to set on the device.
  """

  location = _messages.MessageField('LatLng', 1)


class AndroidNativeBinary(_messages.Message):
  r"""The configuration of an Android native binary execution.

  Messages:
    EnvVarsValue: Optional. A map of environment variables to set for the
      binary process. The keys are the variable names and the values are the
      variable values. The maximum number of entries is 100. Each key is
      limited to 128 characters and must conform to POSIX standards. Each
      value is limited to 2048 characters. The total size of all environment
      variables must not exceed 16 KiB.

  Fields:
    androidNativeBinary: Required. The file path of the Android native binary.
    args: Optional. Arguments for running the binary file. The flags will be
      appended to the command line that invokes the binary. The number of
      options is limited to 100.
    envVars: Optional. A map of environment variables to set for the binary
      process. The keys are the variable names and the values are the variable
      values. The maximum number of entries is 100. Each key is limited to 128
      characters and must conform to POSIX standards. Each value is limited to
      2048 characters. The total size of all environment variables must not
      exceed 16 KiB.
    executionTimeout: Optional. The timeout of the execution. Default value: 5
      min. Range: [1 min, 3 hours].
  """

  @encoding.MapUnrecognizedFields('additionalProperties')
  class EnvVarsValue(_messages.Message):
    r"""Optional. A map of environment variables to set for the binary
    process. The keys are the variable names and the values are the variable
    values. The maximum number of entries is 100. Each key is limited to 128
    characters and must conform to POSIX standards. Each value is limited to
    2048 characters. The total size of all environment variables must not
    exceed 16 KiB.

    Messages:
      AdditionalProperty: An additional property for a EnvVarsValue object.

    Fields:
      additionalProperties: Additional properties of type EnvVarsValue
    """

    class AdditionalProperty(_messages.Message):
      r"""An additional property for a EnvVarsValue object.

      Fields:
        key: Name of the additional property.
        value: A string attribute.
      """

      key = _messages.StringField(1)
      value = _messages.StringField(2)

    additionalProperties = _messages.MessageField('AdditionalProperty', 1, repeated=True)

  androidNativeBinary = _messages.MessageField('InputFile', 1)
  args = _messages.StringField(2, repeated=True)
  envVars = _messages.MessageField('EnvVarsValue', 3)
  executionTimeout = _messages.StringField(4)


class AndroidOrientationDeviceAction(_messages.Message):
  r"""Sets the orientation of the device.

  Fields:
    orientation: Required. The orientation to set the device to. One of
      `portrait` or `landscape`.
  """

  orientation = _messages.StringField(1)


class AndroidPhysicalDeviceRequirement(_messages.Message):
  r"""The requirement of an Android physical device.

  Fields:
    buildType: Optional. The build type of the device, e.g. "user",
      "userdebug", "eng", etc.
      https://developer.android.com/reference/android/os/Build#TYPE
    model: Optional. The model of the device, e.g. "pixel 6", "pixel 7", etc.
      https://developer.android.com/reference/android/os/Build#MODEL
    sdkVersion: Optional. The API level/SDK version of the device, e.g. "26",
      "27", etc.
      https://developer.android.com/reference/android/os/Build#VERSION.SDK_INT
  """

  buildType = _messages.MessageField('StringRequirement', 1)
  model = _messages.MessageField('StringRequirement', 2)
  sdkVersion = _messages.MessageField('IntRequirement', 3)


class AndroidPullFilesDeviceAction(_messages.Message):
  r"""Pulls directories and files from the device at the end of the run. Files
  will be copied to the '/artifacts' directory, with the absolute path
  structure preserved. Note that: 1. A clean device is provided for the run.
  2. Any existing files in the output directory may be overwritten. 3. Pulling
  files is best effort. Will skip files if they don't exist on the device.

  Fields:
    paths: Required. Absolute directory or file paths to pull from the device.
      Limits: - A maximum of 10 paths are allowed.
  """

  paths = _messages.StringField(1, repeated=True)


class AndroidPushFilesDeviceAction(_messages.Message):
  r"""Pushes files to the device at the beginning of the run. Files are
  overwritten if a file with the same path already exists on the device, if
  device permissions allow.

  Fields:
    fileConfigs: Required. Configs of pushing files to the device. Limits: - A
      maximum of 50 files are allowed.
  """

  fileConfigs = _messages.MessageField('AndroidPushFilesDeviceActionFileConfig', 1, repeated=True)


class AndroidPushFilesDeviceActionFileConfig(_messages.Message):
  r"""The configuration of pushing a file to the device.

  Fields:
    destinationPath: Required. The destination path on the device.
    sourceFile: Required. The file to be pushed to the device.
  """

  destinationPath = _messages.StringField(1)
  sourceFile = _messages.MessageField('InputFile', 2)


class AndroidRecordVideoDeviceAction(_messages.Message):
  r"""Records a video of the device screen during the run. The video will be
  written to a file named `video.mp4` in the execution output directory.

  Fields:
    discardOnPass: Optional. Whether to discard and not upload the recording
      when the test passes. Default is false.
  """

  discardOnPass = _messages.BooleanField(1)


class AndroidSwitchLocaleDeviceAction(_messages.Message):
  r"""Switches the locale (language and region) of the device.

  Fields:
    localeCode: Required. The locale (language and region) to switch the
      device to. The format is `language-region`, e.g. "en-US", "zh-CN", etc.
      The typical language value is a two or three-letter language code as
      defined in ISO639. The typical region value is a two-letter ISO 3166
      code or a three-digit UN M.49 area code.
  """

  localeCode = _messages.StringField(1)


class CancelSessionRequest(_messages.Message):
  r"""Request to cancel a session."""


class CancelSessionResponse(_messages.Message):
  r"""Response of the cancel session request.

  Enums:
    CancelResultValueValuesEnum: The result of the request.

  Fields:
    cancelResult: The result of the request.
  """

  class CancelResultValueValuesEnum(_messages.Enum):
    r"""The result of the request.

    Values:
      CANCEL_RESULT_UNSPECIFIED: Unspecified cancel result.
      SESSION_MARKED_AS_CANCELLED: The session is marked as cancelled, but has
        not finished yet.
      SESSION_FINISHED: The session is finished, either by itself or by the
        cancel request.
    """
    CANCEL_RESULT_UNSPECIFIED = 0
    SESSION_MARKED_AS_CANCELLED = 1
    SESSION_FINISHED = 2

  cancelResult = _messages.EnumField('CancelResultValueValuesEnum', 1)


class CatalogAndroidDeviceDetails(_messages.Message):
  r"""Android-specific device attributes.

  Fields:
    buildType: Output only. Mirrors the AOSP `ro.build.type` property, e.g.
      "user", "userdebug", "eng". Empty if unknown.
    supportedAbis: Output only. Lists ABIs supported by the device
      (android.os.Build.SUPPORTED_ABIS), most preferred first, e.g.
      "arm64-v8a".
  """

  buildType = _messages.StringField(1)
  supportedAbis = _messages.StringField(2, repeated=True)


class CatalogAndroidxTestOrchestratorDetails(_messages.Message):
  r"""AndroidX Test Orchestrator-specific attributes. Reserved for future
  orchestrator-only fields.
  """



class CatalogAutomationSupport(_messages.Message):
  r"""Per-product metadata for the Automation (DeviceRun) product."""


class CatalogDevice(_messages.Message):
  r"""A single routable device configuration in the catalog.

  Enums:
    FormFactorValueValuesEnum: Output only. Specifies the form factor of the
      device.
    HardwareTypeValueValuesEnum: Output only. Indicates whether the device is
      physical or virtual.
    PlatformValueValuesEnum: Output only. Specifies the platform of the
      device.

  Messages:
    LabelsValue: Output only. Additional information. Informational only. May
      change over the lifecycle of a device.

  Fields:
    androidDetails: Output only. Contains Android-specific attributes (set
      when platform == ANDROID).
    availability: Output only. Reports the current fleet availability for this
      device configuration.
    displayName: Output only. Provides a human-readable display name, e.g.
      "Pixel 5".
    formFactor: Output only. Specifies the form factor of the device.
    hardwareType: Output only. Indicates whether the device is physical or
      virtual.
    iosDetails: Output only. Contains iOS-specific attributes (set when
      platform == IOS).
    labels: Output only. Additional information. Informational only. May
      change over the lifecycle of a device.
    lifecycle: Output only. The device lifecycle (maturity stage and removal
      date).
    manufacturer: Output only. Specifies the hardware manufacturer of the
      device.
    modelCode: Output only. Provides a human-readable model identifier for
      this device, independent of OS version. May be empty. Platform-
      dependent: * Android physical: hardware codename
      (android.os.Build.DEVICE), e.g. "shiba". * Android virtual: AVD model
      identifier, e.g. "MediumPhone.arm". * iOS: model identifier, e.g.
      "iphone14pro".
    name: Identifier. Identifies the device resource. Format:
      `projects/{project}/locations/{location}/devices/{device}`. The {device}
      segment is an opaque, stable string. Clients must not parse it to derive
      or assume device-specific details.
    osVersion: Output only. Specifies the OS version, e.g. "30" (Android API
      level) or "17.4" (iOS).
    platform: Output only. Specifies the platform of the device.
    primaryScreen: Output only. Measurements of the primary device screen.
      Informational only. Unset for devices without a screen (e.g. some
      wearables).
    supportedProducts: Output only. Products/Services supported by this
      device.
  """

  class FormFactorValueValuesEnum(_messages.Enum):
    r"""Output only. Specifies the form factor of the device.

    Values:
      FORM_FACTOR_UNSPECIFIED: Form factor not specified.
      PHONE: Phone.
      TABLET: Tablet.
      WEARABLE: Wearable (e.g. watch).
      TV: TV.
    """
    FORM_FACTOR_UNSPECIFIED = 0
    PHONE = 1
    TABLET = 2
    WEARABLE = 3
    TV = 4

  class HardwareTypeValueValuesEnum(_messages.Enum):
    r"""Output only. Indicates whether the device is physical or virtual.

    Values:
      HARDWARE_TYPE_UNSPECIFIED: Hardware type not specified.
      PHYSICAL: Physical hardware device.
      VIRTUAL: Virtual device (emulator / simulator).
    """
    HARDWARE_TYPE_UNSPECIFIED = 0
    PHYSICAL = 1
    VIRTUAL = 2

  class PlatformValueValuesEnum(_messages.Enum):
    r"""Output only. Specifies the platform of the device.

    Values:
      PLATFORM_UNSPECIFIED: Platform not specified.
      ANDROID: Android.
      IOS: iOS.
    """
    PLATFORM_UNSPECIFIED = 0
    ANDROID = 1
    IOS = 2

  @encoding.MapUnrecognizedFields('additionalProperties')
  class LabelsValue(_messages.Message):
    r"""Output only. Additional information. Informational only. May change
    over the lifecycle of a device.

    Messages:
      AdditionalProperty: An additional property for a LabelsValue object.

    Fields:
      additionalProperties: Additional properties of type LabelsValue
    """

    class AdditionalProperty(_messages.Message):
      r"""An additional property for a LabelsValue object.

      Fields:
        key: Name of the additional property.
        value: A string attribute.
      """

      key = _messages.StringField(1)
      value = _messages.StringField(2)

    additionalProperties = _messages.MessageField('AdditionalProperty', 1, repeated=True)

  androidDetails = _messages.MessageField('CatalogAndroidDeviceDetails', 1)
  availability = _messages.MessageField('CatalogDeviceAvailability', 2)
  displayName = _messages.StringField(3)
  formFactor = _messages.EnumField('FormFactorValueValuesEnum', 4)
  hardwareType = _messages.EnumField('HardwareTypeValueValuesEnum', 5)
  iosDetails = _messages.MessageField('CatalogIosDeviceDetails', 6)
  labels = _messages.MessageField('LabelsValue', 7)
  lifecycle = _messages.MessageField('CatalogLifecycle', 8)
  manufacturer = _messages.StringField(9)
  modelCode = _messages.StringField(10)
  name = _messages.StringField(11)
  osVersion = _messages.StringField(12)
  platform = _messages.EnumField('PlatformValueValuesEnum', 13)
  primaryScreen = _messages.MessageField('CatalogScreenMetrics', 14)
  supportedProducts = _messages.MessageField('CatalogSupportedProduct', 15, repeated=True)


class CatalogDeviceAvailability(_messages.Message):
  r"""Fleet availability for a device configuration.

  Enums:
    AvailableValueValuesEnum: Output only. Specifies the current availability
      bucket (idle, immediately allocatable devices) for this device
      configuration. This is a best-effort snapshot, refreshed periodically.
      It fluctuates depending on traffic as other requests allocate devices.
    CapacityValueValuesEnum: Output only. Specifies the current capacity
      bucket for this device configuration. Represents the total number of
      online devices (idle or in use).

  Fields:
    available: Output only. Specifies the current availability bucket (idle,
      immediately allocatable devices) for this device configuration. This is
      a best-effort snapshot, refreshed periodically. It fluctuates depending
      on traffic as other requests allocate devices.
    capacity: Output only. Specifies the current capacity bucket for this
      device configuration. Represents the total number of online devices
      (idle or in use).
  """

  class AvailableValueValuesEnum(_messages.Enum):
    r"""Output only. Specifies the current availability bucket (idle,
    immediately allocatable devices) for this device configuration. This is a
    best-effort snapshot, refreshed periodically. It fluctuates depending on
    traffic as other requests allocate devices.

    Values:
      AVAILABILITY_UNSPECIFIED: The value of availability is unknown or unset.
      AVAILABILITY_NONE: No devices of this configuration are currently idle.
        A request can still be made, but it will queue until a device frees
        up. Expect longer wait times, and avoid requesting many devices at
        once (e.g. high shard counts).
      AVAILABILITY_LOW: A small number of devices are currently idle. Suitable
        for a few concurrent requests. Larger bursts (e.g. many shards) may
        queue until devices free up.
      AVAILABILITY_MEDIUM: A moderate number of devices are currently idle.
        Suitable for a moderate number of concurrent requests. Very large
        bursts may still queue.
      AVAILABILITY_HIGH: Many devices are currently idle. Suitable for a large
        number of concurrent requests with little to no queueing at the moment
        of observation.
    """
    AVAILABILITY_UNSPECIFIED = 0
    AVAILABILITY_NONE = 1
    AVAILABILITY_LOW = 2
    AVAILABILITY_MEDIUM = 3
    AVAILABILITY_HIGH = 4

  class CapacityValueValuesEnum(_messages.Enum):
    r"""Output only. Specifies the current capacity bucket for this device
    configuration. Represents the total number of online devices (idle or in
    use).

    Values:
      CAPACITY_UNSPECIFIED: The value of device capacity is unknown or unset.
      CAPACITY_NONE: No online devices of this configuration. These devices
        are unavailable either temporarily or permanently and should not be
        requested. If the device is also marked as deprecated, this state is
        very likely permanent.
      CAPACITY_LOW: Devices that are low in capacity (the lab has a small
        number of these devices). These devices may be used if users need to
        test on this specific device model and version. Please note that due
        to low capacity, the tests may take much longer to finish, especially
        if a large number of tests are invoked at once. These devices are not
        suitable for test sharding.
      CAPACITY_MEDIUM: Devices that are medium in capacity (the lab has a
        decent number of these devices, though not as many as high capacity
        devices). These devices are suitable for fewer test runs (e.g. fewer
        than 100 tests) and only for low shard counts (e.g. less than 10
        shards).
      CAPACITY_HIGH: Devices that are high in capacity (the lab has a large
        number of these devices). These devices are generally suggested for
        running a large number of simultaneous tests (e.g. more than 100
        tests). Please note that high capacity devices do not guarantee short
        wait times due to several factors: 1. Traffic (how heavily they are
        used at any given moment). 2. High capacity devices are prioritized
        for certain usages, which may cause user tests to be slower than
        selecting other similar device types.
    """
    CAPACITY_UNSPECIFIED = 0
    CAPACITY_NONE = 1
    CAPACITY_LOW = 2
    CAPACITY_MEDIUM = 3
    CAPACITY_HIGH = 4

  available = _messages.EnumField('AvailableValueValuesEnum', 1)
  capacity = _messages.EnumField('CapacityValueValuesEnum', 2)


class CatalogDeviceStreamingSupport(_messages.Message):
  r"""Per-product metadata for the DeviceStreaming product.

  Fields:
    minimumAndroidStudioVersion: Output only. Specifies the minimum Android
      Studio version that supports this device. Optional; only set when the
      device is known to work only at or above a certain Android Studio
      version. Expected format "major.minor.micro.patch", e.g.
      "5921.22.2211.8881706".
  """

  minimumAndroidStudioVersion = _messages.StringField(1)


class CatalogIosDeviceDetails(_messages.Message):
  r"""iOS-specific device attributes. Reserved for future iOS-only fields."""


class CatalogLifecycle(_messages.Message):
  r"""Catalog resource lifecycle: maturity state plus key lifecycle dates.

  Enums:
    StateValueValuesEnum: Output only. Specifies the current maturity state of
      the resource.

  Fields:
    removalDate: Output only. Specifies the date the resource is scheduled to
      be removed from the catalog. Only set when `state == DEPRECATED`.
    state: Output only. Specifies the current maturity state of the resource.
  """

  class StateValueValuesEnum(_messages.Enum):
    r"""Output only. Specifies the current maturity state of the resource.

    Values:
      STATE_UNSPECIFIED: State not specified.
      PREVIEW: Early access. This resource may have reduced stability and
        availability.
      ACTIVE: Generally available.
      DEPRECATED: Still usable, but scheduled for removal.
    """
    STATE_UNSPECIFIED = 0
    PREVIEW = 1
    ACTIVE = 2
    DEPRECATED = 3

  removalDate = _messages.MessageField('Date', 1)
  state = _messages.EnumField('StateValueValuesEnum', 2)


class CatalogListDevicesResponse(_messages.Message):
  r"""Response including listed devices.

  Fields:
    devices: The list of devices.
    nextPageToken: Token to receive the next page of devices. This will be
      absent if the end of the response list has been reached.
  """

  devices = _messages.MessageField('CatalogDevice', 1, repeated=True)
  nextPageToken = _messages.StringField(2)


class CatalogListSoftwareVersionsResponse(_messages.Message):
  r"""Response including listed software versions.

  Fields:
    nextPageToken: Token to receive the next page of software versions. This
      will be absent if the end of the response list has been reached.
    softwareVersions: The list of software versions.
  """

  nextPageToken = _messages.StringField(1)
  softwareVersions = _messages.MessageField('CatalogSoftwareVersion', 2, repeated=True)


class CatalogScreenMetrics(_messages.Message):
  r"""Screen measurements of a device.

  Fields:
    densityDpi: Output only. Pixel density in dots per inch (dpi).
    heightPx: Output only. Height in pixels.
    widthPx: Output only. Width in pixels.
  """

  densityDpi = _messages.IntegerField(1, variant=_messages.Variant.INT32)
  heightPx = _messages.IntegerField(2, variant=_messages.Variant.INT32)
  widthPx = _messages.IntegerField(3, variant=_messages.Variant.INT32)


class CatalogSoftwareVersion(_messages.Message):
  r"""A single software version in the catalog.

  Enums:
    SoftwareTypeValueValuesEnum: Output only. Specifies which software this is
      a version of. Filter on this field to narrow the collection to a single
      kind of software, for example `software_type =
      "ANDROIDX_TEST_ORCHESTRATOR"`.

  Fields:
    androidxTestOrchestratorDetails: Output only. Contains AndroidX Test
      Orchestrator-specific attributes (set when software_type ==
      ANDROIDX_TEST_ORCHESTRATOR).
    displayName: Output only. Provides a human-readable name for this version,
      e.g. "AndroidX Test Orchestrator 1.4.1".
    isDefault: Output only. Indicates whether the system uses this version
      when a request does not select one explicitly. Exactly one version per
      `software_type` is the default, and it may change over time.
    lifecycle: Output only. The version lifecycle (maturity stage and removal
      date).
    name: Identifier. Identifies the software version resource. Format: `proje
      cts/{project}/locations/{location}/softwareVersions/{software_version}`.
      The {software_version} segment is an opaque, stable string. Clients must
      not parse it to derive or assume the version.
    softwareType: Output only. Specifies which software this is a version of.
      Filter on this field to narrow the collection to a single kind of
      software, for example `software_type = "ANDROIDX_TEST_ORCHESTRATOR"`.
    version: Output only. Specifies the version identifier, e.g. "1.4.1".
      Unique within a `software_type`.
  """

  class SoftwareTypeValueValuesEnum(_messages.Enum):
    r"""Output only. Specifies which software this is a version of. Filter on
    this field to narrow the collection to a single kind of software, for
    example `software_type = "ANDROIDX_TEST_ORCHESTRATOR"`.

    Values:
      SOFTWARE_TYPE_UNSPECIFIED: Software type not specified.
      ANDROIDX_TEST_ORCHESTRATOR: AndroidX Test Orchestrator, which runs each
        Android instrumentation test case in its own process.
    """
    SOFTWARE_TYPE_UNSPECIFIED = 0
    ANDROIDX_TEST_ORCHESTRATOR = 1

  androidxTestOrchestratorDetails = _messages.MessageField('CatalogAndroidxTestOrchestratorDetails', 1)
  displayName = _messages.StringField(2)
  isDefault = _messages.BooleanField(3)
  lifecycle = _messages.MessageField('CatalogLifecycle', 4)
  name = _messages.StringField(5)
  softwareType = _messages.EnumField('SoftwareTypeValueValuesEnum', 6)
  version = _messages.StringField(7)


class CatalogSupportedProduct(_messages.Message):
  r"""Declares that a device supports a given Device Cloud product, with
  optional per-product metadata. Discriminated by which product-specific
  message is set; adding a new product = new oneof arm + new per-product
  message.

  Fields:
    automation: Output only. Represents Automation, which is DeviceRun-backed
      automated test execution.
    deviceStreaming: Output only. Represents DeviceStreaming, which is
      interactive remote device streaming.
  """

  automation = _messages.MessageField('CatalogAutomationSupport', 1)
  deviceStreaming = _messages.MessageField('CatalogDeviceStreamingSupport', 2)


class Date(_messages.Message):
  r"""Represents a whole or partial calendar date, such as a birthday. The
  time of day and time zone are either specified elsewhere or are
  insignificant. The date is relative to the Gregorian Calendar. This can
  represent one of the following: * A full date, with non-zero year, month,
  and day values. * A month and day, with a zero year (for example, an
  anniversary). * A year on its own, with a zero month and a zero day. * A
  year and month, with a zero day (for example, a credit card expiration
  date). Related types: * google.type.TimeOfDay * google.type.DateTime *
  google.protobuf.Timestamp

  Fields:
    day: Day of a month. Must be from 1 to 31 and valid for the year and
      month, or 0 to specify a year by itself or a year and month where the
      day isn't significant.
    month: Month of a year. Must be from 1 to 12, or 0 to specify a year
      without a month and day.
    year: Year of the date. Must be from 1 to 9999, or 0 to specify a date
      without a year.
  """

  day = _messages.IntegerField(1, variant=_messages.Variant.INT32)
  month = _messages.IntegerField(2, variant=_messages.Variant.INT32)
  year = _messages.IntegerField(3, variant=_messages.Variant.INT32)


class DeviceAction(_messages.Message):
  r"""The action to be performed on a device.

  Fields:
    androidBugreport: Captures a bugreport from the device unless the test
      result is pass.
    androidDumpsys: Captures a dumpsys from the device.
    androidInstallPackages: Installs Android packages on the device.
    androidLogcat: Collects logcat output from the device.
    androidMockLocation: Mocks the location of the device.
    androidOrientation: Sets the orientation of the device.
    androidPullFiles: Pulls directories and files from the device at the end
      of the run.
    androidPushFiles: Pushes files to the device at the beginning of the run.
    androidRecordVideo: Records a video of the device screen during the run.
    androidSwitchLocale: Switches the locale (language and region) of the
      device.
    iosAppPrivacyReport: Collects the exported iOS App Privacy Report during
      the run.
    iosInstallPackages: Installs additional iOS packages on the device.
    iosPullFiles: Pulls directories and files from the iOS device sandbox at
      the end of the run.
    iosPushFiles: Pushes files to the iOS device sandbox at the beginning of
      the run.
    iosRecordVideo: Records a video of the iOS device screen during the run.
  """

  androidBugreport = _messages.MessageField('AndroidBugreportDeviceAction', 1)
  androidDumpsys = _messages.MessageField('AndroidDumpsysDeviceAction', 2)
  androidInstallPackages = _messages.MessageField('AndroidInstallPackagesDeviceAction', 3)
  androidLogcat = _messages.MessageField('AndroidLogcatDeviceAction', 4)
  androidMockLocation = _messages.MessageField('AndroidMockLocationDeviceAction', 5)
  androidOrientation = _messages.MessageField('AndroidOrientationDeviceAction', 6)
  androidPullFiles = _messages.MessageField('AndroidPullFilesDeviceAction', 7)
  androidPushFiles = _messages.MessageField('AndroidPushFilesDeviceAction', 8)
  androidRecordVideo = _messages.MessageField('AndroidRecordVideoDeviceAction', 9)
  androidSwitchLocale = _messages.MessageField('AndroidSwitchLocaleDeviceAction', 10)
  iosAppPrivacyReport = _messages.MessageField('IosAppPrivacyReportDeviceAction', 11)
  iosInstallPackages = _messages.MessageField('IosInstallPackagesDeviceAction', 12)
  iosPullFiles = _messages.MessageField('IosPullFilesDeviceAction', 13)
  iosPushFiles = _messages.MessageField('IosPushFilesDeviceAction', 14)
  iosRecordVideo = _messages.MessageField('IosRecordVideoDeviceAction', 15)


class DeviceConfig(_messages.Message):
  r"""The configuration of a run on a device.

  Fields:
    actions: Optional. The actions to be performed on the device. Actions will
      be executed in the order they are specified in the list. Each action
      type can at most have 1 instance in the list.
    requirement: Required. The requirement of the device.
  """

  actions = _messages.MessageField('DeviceAction', 1, repeated=True)
  requirement = _messages.MessageField('DeviceRequirement', 2)


class DeviceRequirement(_messages.Message):
  r"""The requirement of a device.

  Fields:
    androidPhysicalDeviceRequirement: The requirement of a physical Android
      device.
    deviceId: The device ID of a device in the catalog. The device ID is the
      last part of a device's resource name.
  """

  androidPhysicalDeviceRequirement = _messages.MessageField('AndroidPhysicalDeviceRequirement', 1)
  deviceId = _messages.StringField(2)


class DevicerunProjectsLocationsDevicesGetRequest(_messages.Message):
  r"""A DevicerunProjectsLocationsDevicesGetRequest object.

  Fields:
    name: Required. The name of the device. Format:
      `projects/{project}/locations/global/devices/{device}`.
  """

  name = _messages.StringField(1, required=True)


class DevicerunProjectsLocationsDevicesListRequest(_messages.Message):
  r"""A DevicerunProjectsLocationsDevicesListRequest object.

  Fields:
    filter: Optional. An AIP-160 (https://google.aip.dev/160) filter
      expression restricting which devices are returned. An empty filter
      returns all devices. Filtering is supported over the `Device` fields,
      including nested fields via dot-path. Enum and string values must be
      double-quoted. Examples: * `platform = "ANDROID"` * `platform =
      "ANDROID" AND os_version = "34"` * `hardware_type = "PHYSICAL" AND
      form_factor = "PHONE"` * `android_details.build_type = "userdebug"` *
      `availability.capacity = "HIGH"`
    pageSize: Optional. The maximum number of devices to return. The server
      may return fewer items than this value.
    pageToken: Optional. A page token, received from a previous `ListDevices`
      call. Provide this to receive the subsequent page. When paginating, all
      other parameters provided to `ListDevices` must match the call that
      provided the page token.
    parent: Required. The parent of the collection of devices. Format:
      `projects/{project}/locations/global`.
  """

  filter = _messages.StringField(1)
  pageSize = _messages.IntegerField(2, variant=_messages.Variant.INT32)
  pageToken = _messages.StringField(3)
  parent = _messages.StringField(4, required=True)


class DevicerunProjectsLocationsGetRequest(_messages.Message):
  r"""A DevicerunProjectsLocationsGetRequest object.

  Fields:
    name: Resource name for the location.
  """

  name = _messages.StringField(1, required=True)


class DevicerunProjectsLocationsListRequest(_messages.Message):
  r"""A DevicerunProjectsLocationsListRequest object.

  Fields:
    extraLocationTypes: Optional. Do not use this field unless explicitly
      documented otherwise. This is primarily for internal usage.
    filter: A filter to narrow down results to a preferred subset. The
      filtering language accepts strings like `"displayName=tokyo"`, and is
      documented in more detail in [AIP-160](https://google.aip.dev/160).
    name: The resource that owns the locations collection, if applicable.
    pageSize: The maximum number of results to return. If not set, the service
      selects a default.
    pageToken: A page token received from the `next_page_token` field in the
      response. Send that page token to receive the subsequent page.
  """

  extraLocationTypes = _messages.StringField(1, repeated=True)
  filter = _messages.StringField(2)
  name = _messages.StringField(3, required=True)
  pageSize = _messages.IntegerField(4, variant=_messages.Variant.INT32)
  pageToken = _messages.StringField(5)


class DevicerunProjectsLocationsOperationsCancelRequest(_messages.Message):
  r"""A DevicerunProjectsLocationsOperationsCancelRequest object.

  Fields:
    googleLongrunningCancelOperationRequest: A
      GoogleLongrunningCancelOperationRequest resource to be passed as the
      request body.
    name: The name of the operation resource to be cancelled.
  """

  googleLongrunningCancelOperationRequest = _messages.MessageField('GoogleLongrunningCancelOperationRequest', 1)
  name = _messages.StringField(2, required=True)


class DevicerunProjectsLocationsOperationsDeleteRequest(_messages.Message):
  r"""A DevicerunProjectsLocationsOperationsDeleteRequest object.

  Fields:
    name: The name of the operation resource to be deleted.
  """

  name = _messages.StringField(1, required=True)


class DevicerunProjectsLocationsOperationsGetRequest(_messages.Message):
  r"""A DevicerunProjectsLocationsOperationsGetRequest object.

  Fields:
    name: The name of the operation resource.
  """

  name = _messages.StringField(1, required=True)


class DevicerunProjectsLocationsOperationsListRequest(_messages.Message):
  r"""A DevicerunProjectsLocationsOperationsListRequest object.

  Fields:
    filter: The standard list filter.
    name: The name of the operation's parent resource.
    pageSize: The standard list page size.
    pageToken: The standard list page token.
    returnPartialSuccess: When set to `true`, operations that are reachable
      are returned as normal, and those that are unreachable are returned in
      the ListOperationsResponse.unreachable field. This can only be `true`
      when reading across collections. For example, when `parent` is set to
      `"projects/example/locations/-"`. This field is not supported by default
      and will result in an `UNIMPLEMENTED` error if set unless explicitly
      documented otherwise in service or product specific documentation.
  """

  filter = _messages.StringField(1)
  name = _messages.StringField(2, required=True)
  pageSize = _messages.IntegerField(3, variant=_messages.Variant.INT32)
  pageToken = _messages.StringField(4)
  returnPartialSuccess = _messages.BooleanField(5)


class DevicerunProjectsLocationsSessionsCancelRequest(_messages.Message):
  r"""A DevicerunProjectsLocationsSessionsCancelRequest object.

  Fields:
    cancelSessionRequest: A CancelSessionRequest resource to be passed as the
      request body.
    name: Required. The name of the session. Format:
      "projects/{project}/locations/{location}/sessions/{session}"
  """

  cancelSessionRequest = _messages.MessageField('CancelSessionRequest', 1)
  name = _messages.StringField(2, required=True)


class DevicerunProjectsLocationsSessionsCreateRequest(_messages.Message):
  r"""A DevicerunProjectsLocationsSessionsCreateRequest object.

  Fields:
    parent: Required. The parent resource where this session will be created.
      Format: `projects/{project}/locations/{location}`.
    requestId: Optional. A unique identifier for this request. This request is
      only idempotent if a `request_id` is provided, i.e. if a request with
      the same `request_id` is received, then the previous result will be
      returned. The server will guarantee that for at least 60 minutes after
      the first request. The value must be a UUID (e.g.,
      123e4567-e89b-12d3-a456-426655440000). See github.com/google/uuid for
      more details.
    session: A Session resource to be passed as the request body.
    sessionId: Optional. The ID to use for the session, which will become the
      final component of the resource name. If not provided, the server will
      generate a value for this field. When provided, this value must be
      between 4 and 63 characters, and match the following regex:
      ^a-z{2,61}[a-z0-9]$.
  """

  parent = _messages.StringField(1, required=True)
  requestId = _messages.StringField(2)
  session = _messages.MessageField('Session', 3)
  sessionId = _messages.StringField(4)


class DevicerunProjectsLocationsSessionsDeleteRequest(_messages.Message):
  r"""A DevicerunProjectsLocationsSessionsDeleteRequest object.

  Fields:
    name: Required. The name of the session. Format:
      `projects/{project}/locations/{location}/sessions/{session}`.
    requestId: Optional. A unique identifier for this request. This request is
      only idempotent if a `request_id` is provided, i.e. if a request with
      the same `request_id` is received, then the previous result will be
      returned. The server will guarantee that for at least 60 minutes after
      the first request. The value must be a UUID (e.g.,
      123e4567-e89b-12d3-a456-426655440000). See github.com/google/uuid for
      more details.
  """

  name = _messages.StringField(1, required=True)
  requestId = _messages.StringField(2)


class DevicerunProjectsLocationsSessionsGetRequest(_messages.Message):
  r"""A DevicerunProjectsLocationsSessionsGetRequest object.

  Enums:
    ViewValueValuesEnum: Optional. The view of the session to return. If not
      set, the default BASIC view will be returned.

  Fields:
    name: Required. The name of the session. Format:
      `projects/{project}/locations/{location}/sessions/{session}`.
    view: Optional. The view of the session to return. If not set, the default
      BASIC view will be returned.
  """

  class ViewValueValuesEnum(_messages.Enum):
    r"""Optional. The view of the session to return. If not set, the default
    BASIC view will be returned.

    Values:
      SESSION_VIEW_UNSPECIFIED: The default / unset value. The API will
        default to the BASIC view.
      SESSION_VIEW_BASIC: Include basic view of the session but not the full
        contents. Only the uid/display_name/status/result of the session and
        its jobs/executions will be included. This is the default value (for
        GetSession).
      SESSION_VIEW_FULL: Include everything.
    """
    SESSION_VIEW_UNSPECIFIED = 0
    SESSION_VIEW_BASIC = 1
    SESSION_VIEW_FULL = 2

  name = _messages.StringField(1, required=True)
  view = _messages.EnumField('ViewValueValuesEnum', 2)


class DevicerunProjectsLocationsSessionsListRequest(_messages.Message):
  r"""A DevicerunProjectsLocationsSessionsListRequest object.

  Enums:
    ViewValueValuesEnum: Optional. The view of the sessions to return. If not
      set, the `BASIC` view will be returned.

  Fields:
    filter: Optional. The raw filter text to constrain the results.
    orderBy: Optional. The order to sort results by.
    pageSize: Optional. The maximum number of sessions to return. The server
      may return fewer items than this value. If unspecified, at most 20
      sessions will be returned. The maximum value is 100, values above will
      be coerced to 100.
    pageToken: Optional. A page token, received from a previous `ListSessions`
      call. Provide this to receive the subsequent page. When paginating, all
      other parameters provided to `ListSessions` must match the call that
      provided the page token.
    parent: Required. Parent value for ListSessionsRequest The parent of the
      collection of sessions. Format:
      `projects/{project}/locations/{location}`.
    view: Optional. The view of the sessions to return. If not set, the
      `BASIC` view will be returned.
  """

  class ViewValueValuesEnum(_messages.Enum):
    r"""Optional. The view of the sessions to return. If not set, the `BASIC`
    view will be returned.

    Values:
      SESSION_VIEW_UNSPECIFIED: The default / unset value. The API will
        default to the BASIC view.
      SESSION_VIEW_BASIC: Include basic view of the session but not the full
        contents. Only the uid/display_name/status/result of the session and
        its jobs/executions will be included. This is the default value (for
        GetSession).
      SESSION_VIEW_FULL: Include everything.
    """
    SESSION_VIEW_UNSPECIFIED = 0
    SESSION_VIEW_BASIC = 1
    SESSION_VIEW_FULL = 2

  filter = _messages.StringField(1)
  orderBy = _messages.StringField(2)
  pageSize = _messages.IntegerField(3, variant=_messages.Variant.INT32)
  pageToken = _messages.StringField(4)
  parent = _messages.StringField(5, required=True)
  view = _messages.EnumField('ViewValueValuesEnum', 6)


class DevicerunProjectsLocationsSoftwareVersionsGetRequest(_messages.Message):
  r"""A DevicerunProjectsLocationsSoftwareVersionsGetRequest object.

  Fields:
    name: Required. The name of the software version. Format:
      `projects/{project}/locations/global/softwareVersions/{software_version}
      `.
  """

  name = _messages.StringField(1, required=True)


class DevicerunProjectsLocationsSoftwareVersionsListRequest(_messages.Message):
  r"""A DevicerunProjectsLocationsSoftwareVersionsListRequest object.

  Fields:
    filter: Optional. An AIP-160 (https://google.aip.dev/160) filter
      expression restricting which software versions are returned. An empty
      filter returns all software versions. Filtering is supported over the
      `SoftwareVersion` fields, including nested fields via dot-path. Enum and
      string values must be double-quoted. Examples: * `software_type =
      "ANDROIDX_TEST_ORCHESTRATOR"` * `software_type =
      "ANDROIDX_TEST_ORCHESTRATOR" AND is_default = true` * `lifecycle.state =
      "ACTIVE"` * `version = "1.4.1"`
    pageSize: Optional. The maximum number of software versions to return. The
      server may return fewer items than this value.
    pageToken: Optional. A page token, received from a previous
      `ListSoftwareVersions` call. Provide this to receive the subsequent
      page. When paginating, all other parameters provided to
      `ListSoftwareVersions` must match the call that provided the page token.
    parent: Required. The parent of the collection of software versions.
      Format: `projects/{project}/locations/global`.
  """

  filter = _messages.StringField(1)
  pageSize = _messages.IntegerField(2, variant=_messages.Variant.INT32)
  pageToken = _messages.StringField(3)
  parent = _messages.StringField(4, required=True)


class Empty(_messages.Message):
  r"""A generic empty message that you can re-use to avoid defining duplicated
  empty messages in your APIs. A typical example is to use it as the request
  or the response type of an API method. For instance: service Foo { rpc
  Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }
  """



class ExecutionReport(_messages.Message):
  r"""The runtime information and result report of a single on-device
  execution attempt.

  Fields:
    displayName: Output only. The display_name set by users in the
      ExecutionConfig.
    endTime: Output only. The end time of the execution.
    id: Output only. The unique identifier of the execution.
    outputFiles: Output only. The output files of the execution.
    result: Output only. The result of the execution.
    startTime: Output only. The start time of the execution.
    status: Output only. The status of the execution.
    warnings: Output only. Non-fatal warnings collected during the execution.
  """

  displayName = _messages.StringField(1)
  endTime = _messages.StringField(2)
  id = _messages.StringField(3)
  outputFiles = _messages.MessageField('OutputFile', 4, repeated=True)
  result = _messages.MessageField('Result', 5)
  startTime = _messages.StringField(6)
  status = _messages.MessageField('Status', 7)
  warnings = _messages.MessageField('Warning', 8, repeated=True)


class GcsPath(_messages.Message):
  r"""A path to a file or directory in Google Cloud Storage.

  Fields:
    path: Required. The Google Cloud Storage path of the file or directory.
      Format: `gs:///`.
  """

  path = _messages.StringField(1)


class GoogleLongrunningCancelOperationRequest(_messages.Message):
  r"""The request message for Operations.CancelOperation."""


class GoogleLongrunningListOperationsResponse(_messages.Message):
  r"""The response message for Operations.ListOperations.

  Fields:
    nextPageToken: The standard List next-page token.
    operations: A list of operations that matches the specified filter in the
      request.
    unreachable: Unordered list. Unreachable resources. Populated when the
      request sets `ListOperationsRequest.return_partial_success` and reads
      across collections. For example, when attempting to list all resources
      across all supported locations.
  """

  nextPageToken = _messages.StringField(1)
  operations = _messages.MessageField('GoogleLongrunningOperation', 2, repeated=True)
  unreachable = _messages.StringField(3, repeated=True)


class GoogleLongrunningOperation(_messages.Message):
  r"""This resource represents a long-running operation that is the result of
  a network API call.

  Messages:
    MetadataValue: Service-specific metadata associated with the operation. It
      typically contains progress information and common metadata such as
      create time. Some services might not provide such metadata. Any method
      that returns a long-running operation should document the metadata type,
      if any.
    ResponseValue: The normal, successful response of the operation. If the
      original method returns no data on success, such as `Delete`, the
      response is `google.protobuf.Empty`. If the original method is standard
      `Get`/`Create`/`Update`, the response should be the resource. For other
      methods, the response should have the type `XxxResponse`, where `Xxx` is
      the original method name. For example, if the original method name is
      `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.

  Fields:
    done: If the value is `false`, it means the operation is still in
      progress. If `true`, the operation is completed, and either `error` or
      `response` is available.
    error: The error result of the operation in case of failure or
      cancellation.
    metadata: Service-specific metadata associated with the operation. It
      typically contains progress information and common metadata such as
      create time. Some services might not provide such metadata. Any method
      that returns a long-running operation should document the metadata type,
      if any.
    name: The server-assigned name, which is only unique within the same
      service that originally returns it. If you use the default HTTP mapping,
      the `name` should be a resource name ending with
      `operations/{unique_id}`.
    response: The normal, successful response of the operation. If the
      original method returns no data on success, such as `Delete`, the
      response is `google.protobuf.Empty`. If the original method is standard
      `Get`/`Create`/`Update`, the response should be the resource. For other
      methods, the response should have the type `XxxResponse`, where `Xxx` is
      the original method name. For example, if the original method name is
      `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
  """

  @encoding.MapUnrecognizedFields('additionalProperties')
  class MetadataValue(_messages.Message):
    r"""Service-specific metadata associated with the operation. It typically
    contains progress information and common metadata such as create time.
    Some services might not provide such metadata. Any method that returns a
    long-running operation should document the metadata type, if any.

    Messages:
      AdditionalProperty: An additional property for a MetadataValue object.

    Fields:
      additionalProperties: Properties of the object. Contains field @type
        with type URL.
    """

    class AdditionalProperty(_messages.Message):
      r"""An additional property for a MetadataValue object.

      Fields:
        key: Name of the additional property.
        value: A extra_types.JsonValue attribute.
      """

      key = _messages.StringField(1)
      value = _messages.MessageField('extra_types.JsonValue', 2)

    additionalProperties = _messages.MessageField('AdditionalProperty', 1, repeated=True)

  @encoding.MapUnrecognizedFields('additionalProperties')
  class ResponseValue(_messages.Message):
    r"""The normal, successful response of the operation. If the original
    method returns no data on success, such as `Delete`, the response is
    `google.protobuf.Empty`. If the original method is standard
    `Get`/`Create`/`Update`, the response should be the resource. For other
    methods, the response should have the type `XxxResponse`, where `Xxx` is
    the original method name. For example, if the original method name is
    `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.

    Messages:
      AdditionalProperty: An additional property for a ResponseValue object.

    Fields:
      additionalProperties: Properties of the object. Contains field @type
        with type URL.
    """

    class AdditionalProperty(_messages.Message):
      r"""An additional property for a ResponseValue object.

      Fields:
        key: Name of the additional property.
        value: A extra_types.JsonValue attribute.
      """

      key = _messages.StringField(1)
      value = _messages.MessageField('extra_types.JsonValue', 2)

    additionalProperties = _messages.MessageField('AdditionalProperty', 1, repeated=True)

  done = _messages.BooleanField(1)
  error = _messages.MessageField('GoogleRpcStatus', 2)
  metadata = _messages.MessageField('MetadataValue', 3)
  name = _messages.StringField(4)
  response = _messages.MessageField('ResponseValue', 5)


class GoogleRpcStatus(_messages.Message):
  r"""The `Status` type defines a logical error model that is suitable for
  different programming environments, including REST APIs and RPC APIs. It is
  used by [gRPC](https://github.com/grpc). Each `Status` message contains
  three pieces of data: error code, error message, and error details. You can
  find out more about this error model and how to work with it in the [API
  Design Guide](https://cloud.google.com/apis/design/errors).

  Messages:
    DetailsValueListEntry: A DetailsValueListEntry object.

  Fields:
    code: The status code, which should be an enum value of google.rpc.Code.
    details: A list of messages that carry the error details. There is a
      common set of message types for APIs to use.
    message: A developer-facing error message, which should be in English. Any
      user-facing error message should be localized and sent in the
      google.rpc.Status.details field, or localized by the client.
  """

  @encoding.MapUnrecognizedFields('additionalProperties')
  class DetailsValueListEntry(_messages.Message):
    r"""A DetailsValueListEntry object.

    Messages:
      AdditionalProperty: An additional property for a DetailsValueListEntry
        object.

    Fields:
      additionalProperties: Properties of the object. Contains field @type
        with type URL.
    """

    class AdditionalProperty(_messages.Message):
      r"""An additional property for a DetailsValueListEntry object.

      Fields:
        key: Name of the additional property.
        value: A extra_types.JsonValue attribute.
      """

      key = _messages.StringField(1)
      value = _messages.MessageField('extra_types.JsonValue', 2)

    additionalProperties = _messages.MessageField('AdditionalProperty', 1, repeated=True)

  code = _messages.IntegerField(1, variant=_messages.Variant.INT32)
  details = _messages.MessageField('DetailsValueListEntry', 2, repeated=True)
  message = _messages.StringField(3)


class InputFile(_messages.Message):
  r"""Input file.

  Fields:
    gcsInputFile: An input file in Google Cloud Storage.
  """

  gcsInputFile = _messages.MessageField('GcsPath', 1)


class IntRangeRequirement(_messages.Message):
  r"""Device dimension value that accepts a range of integer values. If
  `minimum` is not set, the range is open-ended on the lower side. If
  `maximum` is not set, the range is open-ended on the upper side. If both are
  set, the range is inclusive [minimum, maximum].

  Fields:
    maximum: Optional. The maximum value of the range (inclusive).
    minimum: Optional. The minimum value of the range (inclusive).
  """

  maximum = _messages.IntegerField(1, variant=_messages.Variant.INT32)
  minimum = _messages.IntegerField(2, variant=_messages.Variant.INT32)


class IntRequirement(_messages.Message):
  r"""Device dimension value that accepts an integer typed parameter as value.

  Fields:
    exact: The exact integer value.
    range: The range of integer values.
  """

  exact = _messages.IntegerField(1, variant=_messages.Variant.INT32)
  range = _messages.MessageField('IntRangeRequirement', 2)


class IosAppPrivacyReportDeviceAction(_messages.Message):
  r"""Collects the exported iOS App Privacy Report during the test run. When
  enabled, the iOS device records application activity (such as network
  access, domain requests, and sensitive resource access like photos, camera,
  or location) and exports Apple's official App Privacy Report. The report
  will be written to a file named `AppActivityReport.ndjson` in the execution
  output directory.
  """



class IosInstallPackagesDeviceAction(_messages.Message):
  r"""Installs iOS packages on the device.

  Fields:
    ipas: Required. Additional iOS packages (IPAs) to install on the device.
      Limits: - A maximum of 20 IPAs are allowed.
  """

  ipas = _messages.MessageField('InputFile', 1, repeated=True)


class IosPullFilesDeviceAction(_messages.Message):
  r"""Pulls directories and files from the iOS device sandbox at the end of
  the run.

  Fields:
    paths: Required. Absolute directory or file paths to pull from the device.
      Limits: - A maximum of 10 paths are allowed.
  """

  paths = _messages.MessageField('IosPullFilesDeviceActionPathConfig', 1, repeated=True)


class IosPullFilesDeviceActionPathConfig(_messages.Message):
  r"""The configuration of pulling a file or directory from the iOS device.

  Fields:
    bundleId: Required. The bundle ID of the application sandbox.
    devicePath: Required. The device path relative to the app sandbox, e.g.
      "/Documents/output/".
  """

  bundleId = _messages.StringField(1)
  devicePath = _messages.StringField(2)


class IosPushFilesDeviceAction(_messages.Message):
  r"""Pushes files to the iOS device sandbox at the beginning of the run.

  Fields:
    fileConfigs: Required. Configs of pushing files to the device. Limits: - A
      maximum of 50 files are allowed.
  """

  fileConfigs = _messages.MessageField('IosPushFilesDeviceActionFileConfig', 1, repeated=True)


class IosPushFilesDeviceActionFileConfig(_messages.Message):
  r"""The configuration of pushing a file to the iOS device.

  Fields:
    bundleId: Required. The bundle ID of the application sandbox.
    destinationPath: Required. The destination path relative to the app
      sandbox, e.g. "/Documents/file.txt".
    sourceFile: Required. The file to be pushed.
  """

  bundleId = _messages.StringField(1)
  destinationPath = _messages.StringField(2)
  sourceFile = _messages.MessageField('InputFile', 3)


class IosRecordVideoDeviceAction(_messages.Message):
  r"""Records a video of the iOS device screen during the run. The video will
  be written to a file named `video.mp4` in the execution output directory.

  Fields:
    discardOnPass: Optional. Whether to discard the video if the test passes.
      If not specified, the default is false (always keep the video).
  """

  discardOnPass = _messages.BooleanField(1)


class IosXcTest(_messages.Message):
  r"""The configuration of an iOS XCTest.

  Fields:
    testsZip: Required. The .zip containing the .xctestrun file and the
      contents of the DerivedData/Build/Products directory.
    xcTestTimeout: Optional. The timeout of the test. Default value: 5 min.
      Range: [1 min, 3 hours].
    xcodeVersion: Optional. The Xcode version that should be used for the
      test. If not set, a system-default Xcode version is used. The available
      Xcode versions can be retrieved from the catalog service.
    xctestrun: Optional. An .xctestrun file that will override the .xctestrun
      file in the tests zip.
  """

  testsZip = _messages.MessageField('InputFile', 1)
  xcTestTimeout = _messages.StringField(2)
  xcodeVersion = _messages.StringField(3)
  xctestrun = _messages.MessageField('InputFile', 4)


class IssueSummary(_messages.Message):
  r"""Describes the summary of an issue (error or warning) with structured
  details.

  Enums:
    TypeValueValuesEnum: Output only. The issue classification based on
      responsibility.

  Fields:
    message: Output only. Human-readable explanation of the issue in English.
    reason: Output only. The reason of the issue. This is a constant value
      that identifies the proximate cause of the issue. This should be at most
      63 characters and match a regular expression of `A-Z*[A-Z0-9]`, which
      represents UPPER_SNAKE_CASE.
    type: Output only. The issue classification based on responsibility.
  """

  class TypeValueValuesEnum(_messages.Enum):
    r"""Output only. The issue classification based on responsibility.

    Values:
      ISSUE_TYPE_UNSPECIFIED: Unspecified issue type. This value is unused.
      INFRA: Platform infrastructure or operational execution environment
        failure.
      CUSTOMER: Customer test script failure, malformed APK, or bad user
        configuration.
    """
    ISSUE_TYPE_UNSPECIFIED = 0
    INFRA = 1
    CUSTOMER = 2

  message = _messages.StringField(1)
  reason = _messages.StringField(2)
  type = _messages.EnumField('TypeValueValuesEnum', 3)


class JobAction(_messages.Message):
  r"""The action to be performed in a job.

  Fields:
    androidInstrumentationTest: Android instrumentation test.
    androidNativeBinary: Android native binary execution.
    iosXcTest: iOS XCTest.
  """

  androidInstrumentationTest = _messages.MessageField('AndroidInstrumentationTest', 1)
  androidNativeBinary = _messages.MessageField('AndroidNativeBinary', 2)
  iosXcTest = _messages.MessageField('IosXcTest', 3)


class JobConfig(_messages.Message):
  r"""The configuration of a job.

  Messages:
    LabelsValue: Optional. User-defined metadata for tracking or
      categorization. These labels do not affect job execution and are
      surfaced in the JobReport. Limits: - Maximum number of entries: 16. -
      Maximum key size: 32 bytes (UTF-8). - Maximum value size: 1024 bytes
      (UTF-8).

  Fields:
    action: Required. Job action.
    allocationConfig: Required. Allocation config.
    displayName: Optional. User-settable, human-readable name for the job. If
      set, it must be unique within the session. If not set, the display name
      will default to `job-`, where `` is the 0-based index of the job in the
      session formatted as three digits (e.g., job-000, job-001, ...). Maximum
      size is 63 bytes when encoded as UTF-8. If set, must match regex:
      `^A-Za-z0-9*$`.
    labels: Optional. User-defined metadata for tracking or categorization.
      These labels do not affect job execution and are surfaced in the
      JobReport. Limits: - Maximum number of entries: 16. - Maximum key size:
      32 bytes (UTF-8). - Maximum value size: 1024 bytes (UTF-8).
    settings: Optional. Job settings.
  """

  @encoding.MapUnrecognizedFields('additionalProperties')
  class LabelsValue(_messages.Message):
    r"""Optional. User-defined metadata for tracking or categorization. These
    labels do not affect job execution and are surfaced in the JobReport.
    Limits: - Maximum number of entries: 16. - Maximum key size: 32 bytes
    (UTF-8). - Maximum value size: 1024 bytes (UTF-8).

    Messages:
      AdditionalProperty: An additional property for a LabelsValue object.

    Fields:
      additionalProperties: Additional properties of type LabelsValue
    """

    class AdditionalProperty(_messages.Message):
      r"""An additional property for a LabelsValue object.

      Fields:
        key: Name of the additional property.
        value: A string attribute.
      """

      key = _messages.StringField(1)
      value = _messages.StringField(2)

    additionalProperties = _messages.MessageField('AdditionalProperty', 1, repeated=True)

  action = _messages.MessageField('JobAction', 1)
  allocationConfig = _messages.MessageField('AllocationConfig', 2)
  displayName = _messages.StringField(3)
  labels = _messages.MessageField('LabelsValue', 4)
  settings = _messages.MessageField('JobSettings', 5)


class JobReport(_messages.Message):
  r"""The runtime information and result report of a job.

  Messages:
    LabelsValue: Output only. The original labels provided by the user during
      job creation.

  Fields:
    displayName: Output only. The display_name set by users in the JobConfig.
    endTime: Output only. The end time of the job.
    executionReports: Output only. Reports of the execution attempts of the
      job.
    id: Output only. The unique identifier of the job.
    labels: Output only. The original labels provided by the user during job
      creation.
    outputFiles: Output only. The output files of the job.
    result: Output only. The result of the job.
    startTime: Output only. The start time of the job.
    status: Output only. The status of the job.
    warnings: Output only. Non-fatal warnings collected during the job.
  """

  @encoding.MapUnrecognizedFields('additionalProperties')
  class LabelsValue(_messages.Message):
    r"""Output only. The original labels provided by the user during job
    creation.

    Messages:
      AdditionalProperty: An additional property for a LabelsValue object.

    Fields:
      additionalProperties: Additional properties of type LabelsValue
    """

    class AdditionalProperty(_messages.Message):
      r"""An additional property for a LabelsValue object.

      Fields:
        key: Name of the additional property.
        value: A string attribute.
      """

      key = _messages.StringField(1)
      value = _messages.StringField(2)

    additionalProperties = _messages.MessageField('AdditionalProperty', 1, repeated=True)

  displayName = _messages.StringField(1)
  endTime = _messages.StringField(2)
  executionReports = _messages.MessageField('ExecutionReport', 3, repeated=True)
  id = _messages.StringField(4)
  labels = _messages.MessageField('LabelsValue', 5)
  outputFiles = _messages.MessageField('OutputFile', 6, repeated=True)
  result = _messages.MessageField('Result', 7)
  startTime = _messages.StringField(8)
  status = _messages.MessageField('Status', 9)
  warnings = _messages.MessageField('Warning', 10, repeated=True)


class JobSettings(_messages.Message):
  r"""Job settings to control the job execution.

  Fields:
    retrySettings: Optional. The retry settings of the job.
  """

  retrySettings = _messages.MessageField('RetrySettings', 1)


class LatLng(_messages.Message):
  r"""An object that represents a latitude/longitude pair. This is expressed
  as a pair of doubles to represent degrees latitude and degrees longitude.
  Unless specified otherwise, this object must conform to the WGS84 standard.
  Values must be within normalized ranges.

  Fields:
    latitude: The latitude in degrees. It must be in the range [-90.0, +90.0].
    longitude: The longitude in degrees. It must be in the range [-180.0,
      +180.0].
  """

  latitude = _messages.FloatField(1)
  longitude = _messages.FloatField(2)


class ListLocationsResponse(_messages.Message):
  r"""The response message for Locations.ListLocations.

  Fields:
    locations: A list of locations that matches the specified filter in the
      request.
    nextPageToken: The standard List next-page token.
  """

  locations = _messages.MessageField('Location', 1, repeated=True)
  nextPageToken = _messages.StringField(2)


class ListSessionsResponse(_messages.Message):
  r"""Response including listed sessions.

  Fields:
    nextPageToken: Token to receive the next page of sessions. This will be
      absent if the end of the response list has been reached.
    sessions: The list of sessions.
    unreachable: Unordered list. Sessions that could not be reached.
  """

  nextPageToken = _messages.StringField(1)
  sessions = _messages.MessageField('Session', 2, repeated=True)
  unreachable = _messages.StringField(3, repeated=True)


class Location(_messages.Message):
  r"""A resource that represents a Google Cloud location.

  Messages:
    LabelsValue: Cross-service attributes for the location. For example
      {"cloud.googleapis.com/region": "us-east1"}
    MetadataValue: Service-specific metadata. For example the available
      capacity at the given location.

  Fields:
    displayName: The friendly name for this location, typically a nearby city
      name. For example, "Tokyo".
    labels: Cross-service attributes for the location. For example
      {"cloud.googleapis.com/region": "us-east1"}
    locationId: The canonical id for this location. For example: `"us-east1"`.
    metadata: Service-specific metadata. For example the available capacity at
      the given location.
    name: Resource name for the location, which may vary between
      implementations. For example: `"projects/example-project/locations/us-
      east1"`
  """

  @encoding.MapUnrecognizedFields('additionalProperties')
  class LabelsValue(_messages.Message):
    r"""Cross-service attributes for the location. For example
    {"cloud.googleapis.com/region": "us-east1"}

    Messages:
      AdditionalProperty: An additional property for a LabelsValue object.

    Fields:
      additionalProperties: Additional properties of type LabelsValue
    """

    class AdditionalProperty(_messages.Message):
      r"""An additional property for a LabelsValue object.

      Fields:
        key: Name of the additional property.
        value: A string attribute.
      """

      key = _messages.StringField(1)
      value = _messages.StringField(2)

    additionalProperties = _messages.MessageField('AdditionalProperty', 1, repeated=True)

  @encoding.MapUnrecognizedFields('additionalProperties')
  class MetadataValue(_messages.Message):
    r"""Service-specific metadata. For example the available capacity at the
    given location.

    Messages:
      AdditionalProperty: An additional property for a MetadataValue object.

    Fields:
      additionalProperties: Properties of the object. Contains field @type
        with type URL.
    """

    class AdditionalProperty(_messages.Message):
      r"""An additional property for a MetadataValue object.

      Fields:
        key: Name of the additional property.
        value: A extra_types.JsonValue attribute.
      """

      key = _messages.StringField(1)
      value = _messages.MessageField('extra_types.JsonValue', 2)

    additionalProperties = _messages.MessageField('AdditionalProperty', 1, repeated=True)

  displayName = _messages.StringField(1)
  labels = _messages.MessageField('LabelsValue', 2)
  locationId = _messages.StringField(3)
  metadata = _messages.MessageField('MetadataValue', 4)
  name = _messages.StringField(5)


class OperationMetadata(_messages.Message):
  r"""Represents the metadata of the long-running operation.

  Fields:
    apiVersion: Output only. API version used to start the operation.
    createTime: Output only. The time the operation was created.
    endTime: Output only. The time the operation finished running.
    requestedCancellation: Output only. Identifies whether the user has
      requested cancellation of the operation. Operations that have been
      cancelled successfully have google.longrunning.Operation.error value
      with a google.rpc.Status.code of `1`, corresponding to `Code.CANCELLED`.
    statusMessage: Output only. Human-readable status of the operation, if
      any.
    target: Output only. Server-defined resource path for the target of the
      operation.
    verb: Output only. Name of the verb executed by the operation.
  """

  apiVersion = _messages.StringField(1)
  createTime = _messages.StringField(2)
  endTime = _messages.StringField(3)
  requestedCancellation = _messages.BooleanField(4)
  statusMessage = _messages.StringField(5)
  target = _messages.StringField(6)
  verb = _messages.StringField(7)


class OutputFile(_messages.Message):
  r"""Output file.

  Fields:
    gcsOutputFile: An output file in Google Cloud Storage.
  """

  gcsOutputFile = _messages.MessageField('GcsPath', 1)


class Result(_messages.Message):
  r"""The result of a session/job/execution.

  Enums:
    ResultTypeValueValuesEnum: Output only. The result type of the
      session/job/execution.

  Fields:
    cause: Output only. Detailed result cause diagnostics. Set if type is not
      PASSED.
    resultType: Output only. The result type of the session/job/execution.
  """

  class ResultTypeValueValuesEnum(_messages.Enum):
    r"""Output only. The result type of the session/job/execution.

    Values:
      RESULT_TYPE_UNSPECIFIED: Unknown result type.
      PASSED: Finished and passed.
      FAILED: Finished but failed. It is usually caused by the user config,
        problematic test cases, or real bugs of their apps/platform under
        test.
      ERROR: Unclassified error, can be caused by user config/tests/AUT,
        infra, or the tools that the infra is depending on.
      TIMED_OUT: Test timeout.
      CANCELLED: Test is aborted by user.
    """
    RESULT_TYPE_UNSPECIFIED = 0
    PASSED = 1
    FAILED = 2
    ERROR = 3
    TIMED_OUT = 4
    CANCELLED = 5

  cause = _messages.MessageField('ResultCause', 1)
  resultType = _messages.EnumField('ResultTypeValueValuesEnum', 2)


class ResultCause(_messages.Message):
  r"""Describes the cause of the non-passed result occurred during the
  execution.

  Fields:
    summary: Output only. Structured cause detail.
  """

  summary = _messages.MessageField('IssueSummary', 1)


class RetrySettings(_messages.Message):
  r"""Retry settings.

  Fields:
    flakyTestRetryStrategy: Optional. The default retry strategy. Allows an
      Execution to retry on test failures and infrastructure errors.
  """

  flakyTestRetryStrategy = _messages.MessageField('RetrySettingsFlakyTestRetryStrategy', 1)


class RetrySettingsFlakyTestRetryStrategy(_messages.Message):
  r"""Default retry strategy. It will retry on test failures for up to
  flaky_test_attempts (including the initial run). It also retries on infra
  issues for up to 2 attempts (including the initial run). So in total, an
  execution can run up to flaky_test_attempts * 2 times in the worst case.

  Enums:
    TestReductionModeValueValuesEnum: Optional. The mode of test reduction for
      retry. If the test runner doesn't support the specified test reduction
      mode, the request will be rejected with an `INVALID_ARGUMENT` error.

  Fields:
    flakyTestAttempts: Required. The total attempts for flaky tests, including
      the initial run. Default value: 1 (no retry). Range: [1, 5].
    parallelRetry: Optional. Whether to retry the test failures in parallel.
      By default, the test is retried sequentially. If true, when the initial
      attempt fails, (flaky_test_attempts - 1) attempts will be triggered at
      the same time to run in parallel.
    testReductionMode: Optional. The mode of test reduction for retry. If the
      test runner doesn't support the specified test reduction mode, the
      request will be rejected with an `INVALID_ARGUMENT` error.
  """

  class TestReductionModeValueValuesEnum(_messages.Enum):
    r"""Optional. The mode of test reduction for retry. If the test runner
    doesn't support the specified test reduction mode, the request will be
    rejected with an `INVALID_ARGUMENT` error.

    Values:
      TEST_REDUCTION_MODE_UNSPECIFIED: The test reduction mode is unspecified.
        Will default to `NO_REDUCTION`.
      NO_REDUCTION: Runs the same set of test cases of the previous attempt.
      REDUCE_TO_FAILED_TEST_CASES: Only runs the failed test cases of the
        previous attempt.
    """
    TEST_REDUCTION_MODE_UNSPECIFIED = 0
    NO_REDUCTION = 1
    REDUCE_TO_FAILED_TEST_CASES = 2

  flakyTestAttempts = _messages.IntegerField(1, variant=_messages.Variant.INT32)
  parallelRetry = _messages.BooleanField(2)
  testReductionMode = _messages.EnumField('TestReductionModeValueValuesEnum', 3)


class Session(_messages.Message):
  r"""A session resource in the AutomationSession API. At a high level,
  `Session` describes the configuration of one or multiple jobs, the state
  transitions it goes through, and the results.

  Fields:
    name: Identifier. The resource name of the session. Format:
      `projects/{project}/locations/{location}/sessions/{session}`.
    sessionConfig: Required. Configuration used to create the session.
    sessionReport: Output only. The runtime information and result report of
      the session.
  """

  name = _messages.StringField(1)
  sessionConfig = _messages.MessageField('SessionConfig', 2)
  sessionReport = _messages.MessageField('SessionReport', 3)


class SessionConfig(_messages.Message):
  r"""SessionConfig is used to create a session.

  Fields:
    displayName: Optional. User-settable, human-readable name for the session.
      Maximum size is 63 bytes when encoded as UTF-8. If set, must match
      regex: `^A-Za-z0-9*$`.
    jobConfigs: Required. Configs of the jobs in the session.
    notificationConfig: Optional. Notification config for the session.
    outputDirectoryConfig: Required. Output file directory config for the
      session.
  """

  displayName = _messages.StringField(1)
  jobConfigs = _messages.MessageField('JobConfig', 2, repeated=True)
  notificationConfig = _messages.MessageField('SessionConfigSessionNotificationConfig', 3)
  outputDirectoryConfig = _messages.MessageField('SessionConfigSessionOutputFileDirectoryConfig', 4)


class SessionConfigSessionNotificationConfig(_messages.Message):
  r"""Config to control session notification.

  Fields:
    pubsubTopic: Optional. The Pub/Sub topics to which session events are
      published. Format: `projects/{project}/topics/{topic}`. See https://clou
      d.google.com/pubsub/docs/admin#topic_and_subscription_name_restrictions
  """

  pubsubTopic = _messages.StringField(1, repeated=True)


class SessionConfigSessionOutputFileDirectoryConfig(_messages.Message):
  r"""Config to control session output file directory.

  Fields:
    gcsOutputDirectory: The Google Cloud Storage path of the output directory.
  """

  gcsOutputDirectory = _messages.MessageField('GcsPath', 1)


class SessionReport(_messages.Message):
  r"""The runtime information and result report of a session.

  Fields:
    endTime: Output only. The end time of the session.
    id: Output only. The unique identifier of the session.
    jobReports: Output only. Reports of the jobs in the session.
    result: Output only. The result of the session.
    startTime: Output only. The start time of the session.
    status: Output only. The status of the session.
  """

  endTime = _messages.StringField(1)
  id = _messages.StringField(2)
  jobReports = _messages.MessageField('JobReport', 3, repeated=True)
  result = _messages.MessageField('Result', 4)
  startTime = _messages.StringField(5)
  status = _messages.MessageField('Status', 6)


class StandardQueryParameters(_messages.Message):
  r"""Query parameters accepted by all methods.

  Enums:
    FXgafvValueValuesEnum: V1 error format.
    AltValueValuesEnum: Data format for response.

  Fields:
    f__xgafv: V1 error format.
    access_token: OAuth access token.
    alt: Data format for response.
    callback: JSONP
    fields: Selector specifying which fields to include in a partial response.
    key: API key. Your API key identifies your project and provides you with
      API access, quota, and reports. Required unless you provide an OAuth 2.0
      token.
    oauth_token: OAuth 2.0 token for the current user.
    prettyPrint: Returns response with indentations and line breaks.
    quotaUser: Available to use for quota purposes for server-side
      applications. Can be any arbitrary string assigned to a user, but should
      not exceed 40 characters.
    trace: A tracing token of the form "token:<tokenid>" to include in api
      requests.
    uploadType: Legacy upload protocol for media (e.g. "media", "multipart").
    upload_protocol: Upload protocol for media (e.g. "raw", "multipart").
  """

  class AltValueValuesEnum(_messages.Enum):
    r"""Data format for response.

    Values:
      json: Responses with Content-Type of application/json
      media: Media download with context-dependent Content-Type
      proto: Responses with Content-Type of application/x-protobuf
    """
    json = 0
    media = 1
    proto = 2

  class FXgafvValueValuesEnum(_messages.Enum):
    r"""V1 error format.

    Values:
      _1: v1 error format
      _2: v2 error format
    """
    _1 = 0
    _2 = 1

  f__xgafv = _messages.EnumField('FXgafvValueValuesEnum', 1)
  access_token = _messages.StringField(2)
  alt = _messages.EnumField('AltValueValuesEnum', 3, default='json')
  callback = _messages.StringField(4)
  fields = _messages.StringField(5)
  key = _messages.StringField(6)
  oauth_token = _messages.StringField(7)
  prettyPrint = _messages.BooleanField(8, default=True)
  quotaUser = _messages.StringField(9)
  trace = _messages.StringField(10)
  uploadType = _messages.StringField(11)
  upload_protocol = _messages.StringField(12)


class Status(_messages.Message):
  r"""The status of a session/job/execution.

  Enums:
    StatusTypeValueValuesEnum: Output only. The status type of the
      session/job/execution.

  Fields:
    progressMessages: Output only. Human-readable, detailed descriptions of
      the session/job/execution's progress. For example: "Provisioning a
      device", "Starting Test". Each message should contain only one line of
      text. During the course of execution new data may be appended to the end
      of progress_messages.
    statusType: Output only. The status type of the session/job/execution.
  """

  class StatusTypeValueValuesEnum(_messages.Enum):
    r"""Output only. The status type of the session/job/execution.

    Values:
      STATUS_TYPE_UNSPECIFIED: Unknown status type.
      PENDING: The session/job/execution is pending, not started yet.
      RUNNING: The session/job/execution is running.
      DONE: The session/job/execution is finished.
      SUSPENDED: The session/job/execution is suspended due to quota issues.
    """
    STATUS_TYPE_UNSPECIFIED = 0
    PENDING = 1
    RUNNING = 2
    DONE = 3
    SUSPENDED = 4

  progressMessages = _messages.StringField(1, repeated=True)
  statusType = _messages.EnumField('StatusTypeValueValuesEnum', 2)


class StringRequirement(_messages.Message):
  r"""Device dimension value that accepts a string typed parameter as value.

  Fields:
    exact: The exact string value.
    set: The set of string values.
  """

  exact = _messages.StringField(1)
  set = _messages.MessageField('StringSetRequirement', 2)


class StringSetRequirement(_messages.Message):
  r"""Device dimension value that accepts a set of string values.

  Fields:
    values: Required. A set of strings, where any of the values is considered
      a match.
  """

  values = _messages.StringField(1, repeated=True)


class Warning(_messages.Message):
  r"""Non-fatal operational anomaly, lint observation, or execution insight.

  Fields:
    summary: Output only. Detailed warning summary.
  """

  summary = _messages.MessageField('IssueSummary', 1)


encoding.AddCustomJsonFieldMapping(
    StandardQueryParameters, 'f__xgafv', '$.xgafv')
encoding.AddCustomJsonEnumMapping(
    StandardQueryParameters.FXgafvValueValuesEnum, '_1', '1')
encoding.AddCustomJsonEnumMapping(
    StandardQueryParameters.FXgafvValueValuesEnum, '_2', '2')
