// 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;
}