// Copyright 2021 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/devtools/testing/v1/test_execution.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; import "google/type/date.proto"; import "google/api/client.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; // 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. // e.g. https://lh3.googleusercontent.com/90WcauuJiCYABEl8U0lcZeuS5STUbf2yW... 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; } // 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; } // 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 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 { // 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; // 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; }