| // Copyright 2023 Google LLC |
| // |
| // 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. |
| |
| syntax = "proto3"; |
| |
| package google.devtools.testing.v1; |
| |
| import "google/api/annotations.proto"; |
| import "google/api/client.proto"; |
| import "google/api/field_behavior.proto"; |
| import "google/protobuf/duration.proto"; |
| import "google/protobuf/timestamp.proto"; |
| import "google/type/date.proto"; |
| |
| option go_package = "google.golang.org/genproto/googleapis/devtools/testing/v1;testing"; |
| option java_multiple_files = true; |
| option java_outer_classname = "TestEnvironmentDiscoveryProto"; |
| option java_package = "com.google.devtools.testing.v1"; |
| |
| // Service for discovering environments supported by the TestExecutionService. |
| // |
| // Over time the TestService may add or remove devices or configuration options |
| // (e.g., when new devices and APIs are released). Clients should check here |
| // periodically to discover what options are supported. |
| // |
| // It defines the following resource model: |
| // |
| // - The API a collection of [TestEnvironmentCatalog] |
| // [google.devtools.test.v1.TestEnvironmentCatalog] resources, named |
| // `testEnvironmentCatalog/*` |
| // |
| // - Each TestEnvironmentCatalog resource describes a set of supported |
| // environments. |
| // |
| // - An [AndroidDeviceCatalog][google.devtools.test.v1.AndroidDeviceCatalog] |
| // describes supported Android devices. It contains lists of supported |
| // [AndroidModels][google.devtools.test.v1.AndroidModel] and |
| // [AndroidVersions][google.devtools.test.v1.AndroidVersion] along with a |
| // [AndroidRuntimeConfiguration][google.devtools.test.v1.AndroidRuntimeConfiguration]. |
| // Each AndroidModel contains a list of Versions it supports. All |
| // models support all locales and orientations described by the |
| // AndroidRuntimeConfiguration |
| // |
| // - An [IosDeviceCatalog][google.devtools.test.v1.IosDeviceCatalog] |
| // describes supported iOS devices. It contains lists of supported |
| // [IosModels][google.devtools.test.v1.IosModel] and |
| // [IosVersions][google.devtools.test.v1.IosVersion] along with a |
| // [IosRuntimeConfiguration][google.devtools.test.v1.IosRuntimeConfiguration]. |
| // Each IosModel contains a list of Versions it supports. All |
| // models support all locales and orientations described by the |
| // IosRuntimeConfiguration. |
| service TestEnvironmentDiscoveryService { |
| option (google.api.default_host) = "testing.googleapis.com"; |
| option (google.api.oauth_scopes) = |
| "https://www.googleapis.com/auth/cloud-platform," |
| "https://www.googleapis.com/auth/cloud-platform.read-only"; |
| |
| // Gets the catalog of supported test environments. |
| // |
| // May return any of the following canonical error codes: |
| // |
| // - INVALID_ARGUMENT - if the request is malformed |
| // - NOT_FOUND - if the environment type does not exist |
| // - INTERNAL - if an internal error occurred |
| rpc GetTestEnvironmentCatalog(GetTestEnvironmentCatalogRequest) |
| returns (TestEnvironmentCatalog) { |
| option (google.api.http) = { |
| get: "/v1/testEnvironmentCatalog/{environment_type}" |
| }; |
| } |
| } |
| |
| // A single device IP block |
| message DeviceIpBlock { |
| // An IP address block in CIDR notation eg: 34.68.194.64/29 |
| string block = 1; |
| |
| // Whether this block is used by physical or virtual devices |
| DeviceForm form = 2; |
| |
| // The date this block was added to Firebase Test Lab |
| google.type.Date added_date = 3; |
| } |
| |
| // Request to list the currently supported values for an environment type. |
| message GetTestEnvironmentCatalogRequest { |
| // Types of environments the Test API supports. |
| enum EnvironmentType { |
| // Do not use. For proto versioning only. |
| ENVIRONMENT_TYPE_UNSPECIFIED = 0; |
| |
| // A device running a version of the Android OS. |
| ANDROID = 1; |
| |
| // A device running a version of iOS. |
| IOS = 3; |
| |
| // A network configuration to use when running a test. |
| NETWORK_CONFIGURATION = 4; |
| |
| // The software environment provided by TestExecutionService. |
| PROVIDED_SOFTWARE = 5; |
| |
| // The IP blocks used by devices in the test environment. |
| DEVICE_IP_BLOCKS = 6; |
| } |
| |
| // Required. The type of environment that should be listed. |
| EnvironmentType environment_type = 1; |
| |
| // For authorization, the cloud project requesting the TestEnvironmentCatalog. |
| string project_id = 2; |
| } |
| |
| // A description of a test environment. |
| message TestEnvironmentCatalog { |
| // Output only. |
| oneof environment_catalog { |
| // Supported Android devices. |
| AndroidDeviceCatalog android_device_catalog = 1; |
| |
| // Supported iOS devices. |
| IosDeviceCatalog ios_device_catalog = 3; |
| |
| // Supported network configurations. |
| NetworkConfigurationCatalog network_configuration_catalog = 4; |
| |
| // The software test environment provided by TestExecutionService. |
| ProvidedSoftwareCatalog software_catalog = 5; |
| |
| // The IP blocks used by devices in the test environment. |
| DeviceIpBlockCatalog device_ip_block_catalog = 6; |
| } |
| } |
| |
| // List of IP blocks used by the Firebase Test Lab |
| message DeviceIpBlockCatalog { |
| // The device IP blocks used by Firebase Test Lab |
| repeated DeviceIpBlock ip_blocks = 1; |
| } |
| |
| // The currently supported Android devices. |
| message AndroidDeviceCatalog { |
| // The set of supported Android device models. |
| repeated AndroidModel models = 1; |
| |
| // The set of supported Android OS versions. |
| repeated AndroidVersion versions = 2; |
| |
| // The set of supported runtime configurations. |
| AndroidRuntimeConfiguration runtime_configuration = 3; |
| } |
| |
| // Android configuration that can be selected at the time a test is run. |
| message AndroidRuntimeConfiguration { |
| // The set of available locales. |
| repeated Locale locales = 1; |
| |
| // The set of available orientations. |
| repeated Orientation orientations = 2; |
| } |
| |
| // A description of an Android device tests may be run on. |
| message AndroidModel { |
| // The unique opaque id for this model. |
| // Use this for invoking the TestExecutionService. |
| string id = 1; |
| |
| // The human-readable marketing name for this device model. |
| // Examples: "Nexus 5", "Galaxy S5". |
| string name = 2; |
| |
| // The manufacturer of this device. |
| string manufacturer = 3; |
| |
| // The company that this device is branded with. |
| // Example: "Google", "Samsung". |
| string brand = 9; |
| |
| // The name of the industrial design. |
| // This corresponds to android.os.Build.DEVICE. |
| string codename = 10; |
| |
| // Whether this device is virtual or physical. |
| DeviceForm form = 4; |
| |
| // Whether this device is a phone, tablet, wearable, etc. |
| DeviceFormFactor form_factor = 16; |
| |
| // Version-specific information of an Android model. |
| repeated PerAndroidVersionInfo per_version_info = 21; |
| |
| // Screen size in the horizontal (X) dimension measured in pixels. |
| int32 screen_x = 5; |
| |
| // Screen size in the vertical (Y) dimension measured in pixels. |
| int32 screen_y = 6; |
| |
| // Screen density in DPI. |
| // This corresponds to ro.sf.lcd_density |
| int32 screen_density = 12; |
| |
| // True if and only if tests with this model are recorded by stitching |
| // together screenshots. See use_low_spec_video_recording in device config. |
| bool low_fps_video_recording = 17; |
| |
| // The set of Android versions this device supports. |
| repeated string supported_version_ids = 7; |
| |
| // The list of supported ABIs for this device. |
| // This corresponds to either android.os.Build.SUPPORTED_ABIS (for API level |
| // 21 and above) or android.os.Build.CPU_ABI/CPU_ABI2. |
| // The most preferred ABI is the first element in the list. |
| // |
| // Elements are optionally prefixed by "version_id:" (where version_id is |
| // the id of an AndroidVersion), denoting an ABI that is supported only on |
| // a particular version. |
| repeated string supported_abis = 11; |
| |
| // Tags for this dimension. |
| // Examples: "default", "preview", "deprecated". |
| repeated string tags = 8; |
| |
| // URL of a thumbnail image (photo) of the device. |
| string thumbnail_url = 19; |
| } |
| |
| // A version of the Android OS. |
| message AndroidVersion { |
| // An opaque id for this Android version. |
| // Use this id to invoke the TestExecutionService. |
| string id = 1; |
| |
| // A string representing this version of the Android OS. |
| // Examples: "4.3", "4.4". |
| string version_string = 2; |
| |
| // The API level for this Android version. |
| // Examples: 18, 19. |
| int32 api_level = 3; |
| |
| // The code name for this Android version. |
| // Examples: "JellyBean", "KitKat". |
| string code_name = 4; |
| |
| // The date this Android version became available in the market. |
| google.type.Date release_date = 5; |
| |
| // Market share for this version. |
| Distribution distribution = 6; |
| |
| // Tags for this dimension. |
| // Examples: "default", "preview", "deprecated". |
| repeated string tags = 7; |
| } |
| |
| // A version-specific information of an Android model. |
| message PerAndroidVersionInfo { |
| // An Android version. |
| string version_id = 1; |
| |
| // The number of online devices for an Android version. |
| DeviceCapacity device_capacity = 2; |
| |
| // Output only. The estimated wait time for a single interactive device |
| // session using Direct Access. |
| google.protobuf.Duration interactive_device_availability_estimate = 3 |
| [(google.api.field_behavior) = OUTPUT_ONLY]; |
| |
| // Output only. Identifies supported clients for DirectAccess for this Android |
| // version. |
| DirectAccessVersionInfo direct_access_version_info = 4 |
| [(google.api.field_behavior) = OUTPUT_ONLY]; |
| } |
| |
| // Denotes whether Direct Access is supported, and by which client versions. |
| // |
| // DirectAccessService is currently available as a preview to select developers. |
| // You can register today on behalf of you and your team at |
| // https://developer.android.com/studio/preview/android-device-streaming |
| message DirectAccessVersionInfo { |
| // Whether direct access is supported at all. Clients are expected to |
| // filter down the device list to only android models and versions which |
| // support Direct Access when that is the user intent. |
| bool direct_access_supported = 1; |
| |
| // Output only. Indicates client-device compatibility, where a device is known |
| // to work only with certain workarounds implemented in the Android Studio |
| // client. Expected format "major.minor.micro.patch", e.g. |
| // "5921.22.2211.8881706". |
| string minimum_android_studio_version = 2; |
| } |
| |
| // Data about the relative number of devices running a |
| // given configuration of the Android platform. |
| message Distribution { |
| // Output only. The time this distribution was measured. |
| google.protobuf.Timestamp measurement_time = 1; |
| |
| // Output only. The estimated fraction (0-1) of the total market with this |
| // configuration. |
| double market_share = 2; |
| } |
| |
| // The currently supported iOS devices. |
| message IosDeviceCatalog { |
| // The set of supported iOS device models. |
| repeated IosModel models = 1; |
| |
| // The set of supported iOS software versions. |
| repeated IosVersion versions = 2; |
| |
| // The set of supported Xcode versions. |
| repeated XcodeVersion xcode_versions = 4; |
| |
| // The set of supported runtime configurations. |
| IosRuntimeConfiguration runtime_configuration = 3; |
| } |
| |
| // iOS configuration that can be selected at the time a test is run. |
| message IosRuntimeConfiguration { |
| // The set of available locales. |
| repeated Locale locales = 1; |
| |
| // The set of available orientations. |
| repeated Orientation orientations = 2; |
| } |
| |
| // A description of an iOS device tests may be run on. |
| message IosModel { |
| // The unique opaque id for this model. |
| // Use this for invoking the TestExecutionService. |
| string id = 1; |
| |
| // The human-readable name for this device model. |
| // Examples: "iPhone 4s", "iPad Mini 2". |
| string name = 2; |
| |
| // The set of iOS major software versions this device supports. |
| repeated string supported_version_ids = 3; |
| |
| // Tags for this dimension. |
| // Examples: "default", "preview", "deprecated". |
| repeated string tags = 4; |
| |
| // Device capabilities. |
| // Copied from |
| // https://developer.apple.com/library/archive/documentation/DeviceInformation/Reference/iOSDeviceCompatibility/DeviceCompatibilityMatrix/DeviceCompatibilityMatrix.html |
| repeated string device_capabilities = 5; |
| |
| // Screen size in the horizontal (X) dimension measured in pixels. |
| int32 screen_x = 7; |
| |
| // Screen size in the vertical (Y) dimension measured in pixels. |
| int32 screen_y = 8; |
| |
| // Screen density in DPI. |
| int32 screen_density = 9; |
| |
| // Whether this device is a phone, tablet, wearable, etc. |
| DeviceFormFactor form_factor = 6; |
| |
| // Version-specific information of an iOS model. |
| repeated PerIosVersionInfo per_version_info = 14; |
| } |
| |
| // An iOS version. |
| message IosVersion { |
| // An opaque id for this iOS version. |
| // Use this id to invoke the TestExecutionService. |
| string id = 1; |
| |
| // An integer representing the major iOS version. |
| // Examples: "8", "9". |
| int32 major_version = 2; |
| |
| // An integer representing the minor iOS version. |
| // Examples: "1", "2". |
| int32 minor_version = 4; |
| |
| // Tags for this dimension. |
| // Examples: "default", "preview", "deprecated". |
| repeated string tags = 3; |
| |
| // The available Xcode versions for this version. |
| repeated string supported_xcode_version_ids = 5; |
| } |
| |
| // A version-specific information of an iOS model. |
| message PerIosVersionInfo { |
| // An iOS version. |
| string version_id = 1; |
| |
| // The number of online devices for an iOS version. |
| DeviceCapacity device_capacity = 2; |
| } |
| |
| // A location/region designation for language. |
| message Locale { |
| // The id for this locale. |
| // Example: "en_US". |
| string id = 1; |
| |
| // A human-friendly name for this language/locale. |
| // Example: "English". |
| string name = 2; |
| |
| // A human-friendly string representing the region for this |
| // locale. Example: "United States". Not present for every locale. |
| string region = 3; |
| |
| // Tags for this dimension. |
| // Example: "default". |
| repeated string tags = 4; |
| } |
| |
| // Screen orientation of the device. |
| message Orientation { |
| // The id for this orientation. |
| // Example: "portrait". |
| string id = 1; |
| |
| // A human-friendly name for this orientation. |
| // Example: "portrait". |
| string name = 2; |
| |
| // Tags for this dimension. |
| // Example: "default". |
| repeated string tags = 3; |
| } |
| |
| // An Xcode version that an iOS version is compatible with. |
| message XcodeVersion { |
| // The id for this version. |
| // Example: "9.2". |
| string version = 1; |
| |
| // Tags for this Xcode version. |
| // Example: "default". |
| repeated string tags = 2; |
| } |
| |
| message NetworkConfigurationCatalog { |
| repeated NetworkConfiguration configurations = 1; |
| } |
| |
| message NetworkConfiguration { |
| // The unique opaque id for this network traffic configuration. |
| string id = 1; |
| |
| // The emulation rule applying to the upload traffic. |
| TrafficRule up_rule = 2; |
| |
| // The emulation rule applying to the download traffic. |
| TrafficRule down_rule = 3; |
| } |
| |
| // Network emulation parameters. |
| message TrafficRule { |
| // Packet delay, must be >= 0. |
| google.protobuf.Duration delay = 1; |
| |
| // Packet loss ratio (0.0 - 1.0). |
| float packet_loss_ratio = 2; |
| |
| // Packet duplication ratio (0.0 - 1.0). |
| float packet_duplication_ratio = 3; |
| |
| // Bandwidth in kbits/second. |
| float bandwidth = 4; |
| |
| // Burst size in kbits. |
| float burst = 5; |
| } |
| |
| // The currently provided software environment on the devices under test. |
| message ProvidedSoftwareCatalog { |
| // Deprecated: Use AndroidX Test Orchestrator going forward. |
| // |
| // A string representing the current version of Android Test Orchestrator |
| // that is used in the environment. The package is available at |
| // https://maven.google.com/web/index.html#com.android.support.test:orchestrator. |
| string orchestrator_version = 1 [deprecated = true]; |
| |
| // A string representing the current version of AndroidX Test Orchestrator |
| // that is used in the environment. The package is available at |
| // https://maven.google.com/web/index.html#androidx.test:orchestrator. |
| string androidx_orchestrator_version = 2; |
| } |
| |
| // Whether the device is physical or virtual. |
| enum DeviceForm { |
| // Do not use. For proto versioning only. |
| DEVICE_FORM_UNSPECIFIED = 0; |
| |
| // Android virtual device using Compute Engine native virtualization. Firebase |
| // Test Lab only. |
| VIRTUAL = 1; |
| |
| // Actual hardware. |
| PHYSICAL = 2; |
| |
| // Android virtual device using emulator in nested virtualization. Equivalent |
| // to Android Studio. |
| EMULATOR = 3; |
| } |
| |
| // The form factor of a device. |
| enum DeviceFormFactor { |
| // Do not use. For proto versioning only. |
| DEVICE_FORM_FACTOR_UNSPECIFIED = 0; |
| |
| // This device has the shape of a phone. |
| PHONE = 1; |
| |
| // This device has the shape of a tablet. |
| TABLET = 2; |
| |
| // This device has the shape of a watch or other wearable. |
| WEARABLE = 3; |
| } |
| |
| // Capacity based on the number of online devices in the lab. |
| // |
| // Important: device capacity does not directly reflect the length of the |
| // queue at a moment in time. It does not take into account current traffic or |
| // the state of the devices. |
| // |
| // For physical devices, the number is the average of online devices in the last |
| // 30 days. |
| enum DeviceCapacity { |
| // The value of device capacity is unknown or unset. |
| DEVICE_CAPACITY_UNSPECIFIED = 0; |
| |
| // 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. |
| DEVICE_CAPACITY_HIGH = 1; |
| |
| // 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). |
| DEVICE_CAPACITY_MEDIUM = 2; |
| |
| // 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. |
| DEVICE_CAPACITY_LOW = 3; |
| |
| // Devices that are completely missing from the lab. |
| // |
| // 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. |
| DEVICE_CAPACITY_NONE = 4; |
| } |