summaryrefslogtreecommitdiff
path: root/third_party/googleapis/google/devtools/testing/v1/test_execution.proto
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/googleapis/google/devtools/testing/v1/test_execution.proto')
-rw-r--r--third_party/googleapis/google/devtools/testing/v1/test_execution.proto1268
1 files changed, 1268 insertions, 0 deletions
diff --git a/third_party/googleapis/google/devtools/testing/v1/test_execution.proto b/third_party/googleapis/google/devtools/testing/v1/test_execution.proto
new file mode 100644
index 0000000..57c580f
--- /dev/null
+++ b/third_party/googleapis/google/devtools/testing/v1/test_execution.proto
@@ -0,0 +1,1268 @@
+// 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/protobuf/duration.proto";
+import "google/protobuf/timestamp.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 = "TestExecutionProto";
+option java_package = "com.google.devtools.testing.v1";
+
+// A service for requesting test executions and querying their status.
+//
+// This service is part of Firebase Test Lab. To learn about how to use the
+// product, and how to integrate it with your system,
+// visit https://firebase.google.com/docs/test-lab.
+//
+// Each test execution will wait for available capacity. It will then be
+// invoked as described. The test may be invoked multiple times if an
+// infrastructure failure is detected. Results and other files generated by
+// the test will be stored in an external storage system.
+//
+// The TestExecutionService models this behavior using two resource types:
+//
+// - TestMatrix: a group of one or more TestExecutions, built by taking a
+// product of values over a pre-defined set of axes. In the case of Android
+// Tests, for example, device model and OS version are two axes of the matrix.
+//
+// - TestExecution: a single execution of one or more test targets on a
+// single device. These are created automatically when a TestMatrix is
+// created.
+//
+// This service returns any error codes from the canonical error space (i.e.
+// google.rpc.Code). The errors which may be returned are specified on each
+// method. In addition, any method may return UNAVAILABLE or INTERNAL.
+service TestExecutionService {
+ 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";
+
+ // Creates and runs a matrix of tests according to the given specifications.
+ // Unsupported environments will be returned in the state UNSUPPORTED.
+ // A test matrix is limited to use at most 2000 devices in parallel.
+ //
+ // May return any of the following canonical error codes:
+ //
+ // - PERMISSION_DENIED - if the user is not authorized to write to project
+ // - INVALID_ARGUMENT - if the request is malformed or if the matrix tries
+ // to use too many simultaneous devices.
+ rpc CreateTestMatrix(CreateTestMatrixRequest) returns (TestMatrix) {
+ option (google.api.http) = {
+ post: "/v1/projects/{project_id}/testMatrices"
+ body: "test_matrix"
+ };
+ }
+
+ // Checks the status of a test matrix.
+ //
+ // May return any of the following canonical error codes:
+ //
+ // - PERMISSION_DENIED - if the user is not authorized to read project
+ // - INVALID_ARGUMENT - if the request is malformed
+ // - NOT_FOUND - if the Test Matrix does not exist
+ rpc GetTestMatrix(GetTestMatrixRequest) returns (TestMatrix) {
+ option (google.api.http) = {
+ get: "/v1/projects/{project_id}/testMatrices/{test_matrix_id}"
+ };
+ }
+
+ // Cancels unfinished test executions in a test matrix.
+ // This call returns immediately and cancellation proceeds asynchronously.
+ // If the matrix is already final, this operation will have no effect.
+ //
+ // May return any of the following canonical error codes:
+ //
+ // - PERMISSION_DENIED - if the user is not authorized to read project
+ // - INVALID_ARGUMENT - if the request is malformed
+ // - NOT_FOUND - if the Test Matrix does not exist
+ rpc CancelTestMatrix(CancelTestMatrixRequest) returns (CancelTestMatrixResponse) {
+ option (google.api.http) = {
+ post: "/v1/projects/{project_id}/testMatrices/{test_matrix_id}:cancel"
+ };
+ }
+}
+
+// TestMatrix captures all details about a test. It contains the environment
+// configuration, test specification, test executions and overall state and
+// outcome.
+message TestMatrix {
+ // Output only. Unique id set by the service.
+ string test_matrix_id = 1;
+
+ // The cloud project that owns the test matrix.
+ string project_id = 7;
+
+ // Information about the client which invoked the test.
+ ClientInfo client_info = 10;
+
+ // Required. How to run the test.
+ TestSpecification test_specification = 3;
+
+ // Required. The devices the tests are being executed on.
+ EnvironmentMatrix environment_matrix = 4;
+
+ // Output only. The list of test executions that the service creates for
+ // this matrix.
+ repeated TestExecution test_executions = 5;
+
+ // Required. Where the results for the matrix are written.
+ ResultStorage result_storage = 6;
+
+ // Output only. Indicates the current progress of the test matrix.
+ TestState state = 8;
+
+ // Output only. The time this test matrix was initially created.
+ google.protobuf.Timestamp timestamp = 9;
+
+ // Output only. Describes why the matrix is considered invalid.
+ // Only useful for matrices in the INVALID state.
+ InvalidMatrixDetails invalid_matrix_details = 11;
+
+ // The number of times a TestExecution should be re-attempted if one or more
+ // of its test cases fail for any reason.
+ // The maximum number of reruns allowed is 10.
+ //
+ // Default is 0, which implies no reruns.
+ int32 flaky_test_attempts = 13;
+
+ // Output Only. The overall outcome of the test.
+ // Only set when the test matrix state is FINISHED.
+ OutcomeSummary outcome_summary = 14;
+
+ // If true, only a single attempt at most will be made to run each
+ // execution/shard in the matrix. Flaky test attempts are not affected.
+ //
+ // Normally, 2 or more attempts are made if a potential infrastructure issue
+ // is detected.
+ //
+ // This feature is for latency sensitive workloads. The incidence of
+ // execution failures may be significantly greater for fail-fast matrices
+ // and support is more limited because of that expectation.
+ bool fail_fast = 17;
+}
+
+// A single test executed in a single environment.
+message TestExecution {
+ // Output only. Unique id set by the service.
+ string id = 1;
+
+ // Output only. Id of the containing TestMatrix.
+ string matrix_id = 9;
+
+ // Output only. The cloud project that owns the test execution.
+ string project_id = 10;
+
+ // Output only. How to run the test.
+ TestSpecification test_specification = 3;
+
+ // Output only. Details about the shard.
+ Shard shard = 12;
+
+ // Output only. How the host machine(s) are configured.
+ Environment environment = 4;
+
+ // Output only. Indicates the current progress of the test execution
+ // (e.g., FINISHED).
+ TestState state = 5;
+
+ // Output only. Where the results for this execution are written.
+ ToolResultsStep tool_results_step = 11;
+
+ // Output only. The time this test execution was initially created.
+ google.protobuf.Timestamp timestamp = 7;
+
+ // Output only. Additional details about the running test.
+ TestDetails test_details = 8;
+}
+
+// A description of how to run the test.
+message TestSpecification {
+ // Max time a test execution is allowed to run before it is
+ // automatically cancelled.
+ // The default value is 5 min.
+ google.protobuf.Duration test_timeout = 1;
+
+ // Test setup requirements.
+ oneof setup {
+ // Test setup requirements for Android e.g. files to install, bootstrap
+ // scripts.
+ TestSetup test_setup = 6;
+
+ // Test setup requirements for iOS.
+ IosTestSetup ios_test_setup = 14;
+ }
+
+ // Required. The type of test to run.
+ oneof test {
+ // An Android instrumentation test.
+ AndroidInstrumentationTest android_instrumentation_test = 2;
+
+ // An Android robo test.
+ AndroidRoboTest android_robo_test = 3;
+
+ // An Android Application with a Test Loop.
+ AndroidTestLoop android_test_loop = 9;
+
+ // An iOS XCTest, via an .xctestrun file.
+ IosXcTest ios_xc_test = 13;
+
+ // An iOS application with a test loop.
+ IosTestLoop ios_test_loop = 15;
+ }
+
+ // Disables video recording. May reduce test latency.
+ bool disable_video_recording = 10;
+
+ // Disables performance metrics recording. May reduce test latency.
+ bool disable_performance_metrics = 11;
+}
+
+message SystraceSetup {
+ // Systrace duration in seconds.
+ // Should be between 1 and 30 seconds. 0 disables systrace.
+ int32 duration_seconds = 1;
+}
+
+// A description of how to set up the Android device prior to running the test.
+message TestSetup {
+ // List of files to push to the device before starting the test.
+ repeated DeviceFile files_to_push = 1;
+
+ // List of directories on the device to upload to GCS at the end of the test;
+ // they must be absolute paths under /sdcard, /storage or /data/local/tmp.
+ // Path names are restricted to characters a-z A-Z 0-9 _ - . + and /
+ //
+ // Note: The paths /sdcard and /data will be made available and treated as
+ // implicit path substitutions. E.g. if /sdcard on a particular device does
+ // not map to external storage, the system will replace it with the external
+ // storage path prefix for that device.
+ repeated string directories_to_pull = 2;
+
+ // APKs to install in addition to those being directly tested.
+ // Currently capped at 100.
+ repeated Apk additional_apks = 3;
+
+ // The device will be logged in on this account for the duration of the test.
+ Account account = 4;
+
+ // The network traffic profile used for running the test.
+ // Available network profiles can be queried by using the
+ // NETWORK_CONFIGURATION environment type when calling
+ // TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
+ string network_profile = 5;
+
+ // Environment variables to set for the test (only applicable for
+ // instrumentation tests).
+ repeated EnvironmentVariable environment_variables = 6;
+
+ // Systrace configuration for the run.
+ // If set a systrace will be taken, starting on test start and lasting for the
+ // configured duration. The systrace file thus obtained is put in the results
+ // bucket together with the other artifacts from the run.
+ SystraceSetup systrace = 9;
+
+ // Whether to prevent all runtime permissions to be granted at app install
+ bool dont_autogrant_permissions = 23;
+}
+
+// A description of how to set up an iOS device prior to running the test.
+message IosTestSetup {
+ // The network traffic profile used for running the test.
+ // Available network profiles can be queried by using the
+ // NETWORK_CONFIGURATION environment type when calling
+ // TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
+ string network_profile = 1;
+
+ // iOS apps to install in addition to those being directly tested.
+ repeated FileReference additional_ipas = 2;
+
+ // List of files to push to the device before starting the test.
+ repeated IosDeviceFile push_files = 3;
+
+ // List of directories on the device to upload to Cloud Storage at the end of
+ // the test.
+ //
+ // Directories should either be in a shared directory
+ // (e.g. /private/var/mobile/Media) or within an accessible directory inside
+ // the app's filesystem (e.g. /Documents) by specifying the bundle id.
+ repeated IosDeviceFile pull_directories = 4;
+}
+
+// A key-value pair passed as an environment variable to the test.
+message EnvironmentVariable {
+ // Key for the environment variable.
+ string key = 1;
+
+ // Value for the environment variable.
+ string value = 2;
+}
+
+// Identifies an account and how to log into it.
+message Account {
+ // Required. The type of account, based what it's for (e.g. Google) and what
+ // its login mechanism is (e.g. username and password).
+ oneof account_type {
+ // An automatic google login account.
+ GoogleAuto google_auto = 1;
+ }
+}
+
+// Enables automatic Google account login.
+// If set, the service automatically generates a Google test account and adds
+// it to the device, before executing the test. Note that test accounts might be
+// reused.
+// Many applications show their full set of functionalities when an account is
+// present on the device. Logging into the device with these generated accounts
+// allows testing more functionalities.
+message GoogleAuto {
+
+}
+
+// An Android package file to install.
+message Apk {
+ // The path to an APK to be installed on the device before the test begins.
+ FileReference location = 1;
+
+ // The java package for the APK to be installed.
+ // Value is determined by examining the application's manifest.
+ string package_name = 2;
+}
+
+// An Android App Bundle file format, containing a BundleConfig.pb file,
+// a base module directory, zero or more dynamic feature module directories.
+// <p>See https://developer.android.com/guide/app-bundle/build for guidance on
+// building App Bundles.
+message AppBundle {
+ // Required. Bundle location information.
+ oneof bundle {
+ // .aab file representing the app bundle under test.
+ FileReference bundle_location = 1;
+ }
+}
+
+// A single device file description.
+message DeviceFile {
+ // Required.
+ oneof device_file {
+ // A reference to an opaque binary blob file.
+ ObbFile obb_file = 1;
+
+ // A reference to a regular file.
+ RegularFile regular_file = 2;
+ }
+}
+
+// An opaque binary blob file to install on the device before the test starts.
+message ObbFile {
+ // Required. OBB file name which must conform to the format as specified by
+ // Android
+ // e.g. [main|patch].0300110.com.example.android.obb
+ // which will be installed into
+ // \<shared-storage\>/Android/obb/\<package-name\>/
+ // on the device.
+ string obb_file_name = 1;
+
+ // Required. Opaque Binary Blob (OBB) file(s) to install on the device.
+ FileReference obb = 2;
+}
+
+// A file or directory to install on the device before the test starts.
+message RegularFile {
+ // Required. The source file.
+ FileReference content = 1;
+
+ // Required. Where to put the content on the device. Must be an absolute,
+ // allowlisted path. If the file exists, it will be replaced.
+ // The following device-side directories and any of their subdirectories are
+ // allowlisted:
+ // <p>${EXTERNAL_STORAGE}, /sdcard, or /storage</p>
+ // <p>${ANDROID_DATA}/local/tmp, or /data/local/tmp</p>
+ // <p>Specifying a path outside of these directory trees is invalid.
+ //
+ // <p> The paths /sdcard and /data will be made available and treated as
+ // implicit path substitutions. E.g. if /sdcard on a particular device does
+ // not map to external storage, the system will replace it with the external
+ // storage path prefix for that device and copy the file there.
+ //
+ // <p> It is strongly advised to use the <a href=
+ // "http://developer.android.com/reference/android/os/Environment.html">
+ // Environment API</a> in app and test code to access files on the device in a
+ // portable way.
+ string device_path = 2;
+}
+
+// A file or directory to install on the device before the test starts.
+message IosDeviceFile {
+ // The source file
+ FileReference content = 1;
+
+ // The bundle id of the app where this file lives.
+ //
+ // iOS apps sandbox their own filesystem, so app files must specify which app
+ // installed on the device.
+ string bundle_id = 2;
+
+ // Location of the file on the device, inside the app's sandboxed filesystem
+ string device_path = 3;
+}
+
+// A test of an Android Application with a Test Loop.
+// The intent \<intent-name\> will be implicitly added, since Games is the only
+// user of this api, for the time being.
+message AndroidTestLoop {
+ // Required. The Android package to test.
+ oneof app_under_test {
+ // The APK for the application under test.
+ FileReference app_apk = 1;
+
+ // A multi-apk app bundle for the application under test.
+ AppBundle app_bundle = 5;
+ }
+
+ // The java package for the application under test.
+ // The default is determined by examining the application's manifest.
+ string app_package_id = 2;
+
+ // The list of scenarios that should be run during the test.
+ // The default is all test loops, derived from the application's
+ // manifest.
+ repeated int32 scenarios = 3;
+
+ // The list of scenario labels that should be run during the test.
+ // The scenario labels should map to labels defined in the application's
+ // manifest. For example, player_experience and
+ // com.google.test.loops.player_experience add all of the loops labeled in the
+ // manifest with the com.google.test.loops.player_experience name to the
+ // execution.
+ // Scenarios can also be specified in the scenarios field.
+ repeated string scenario_labels = 4;
+}
+
+// A test of an iOS application that uses the XCTest framework.
+// Xcode supports the option to "build for testing", which generates an
+// .xctestrun file that contains a test specification (arguments, test methods,
+// etc). This test type accepts a zip file containing the .xctestrun file and
+// the corresponding contents of the Build/Products directory that contains all
+// the binaries needed to run the tests.
+message IosXcTest {
+ // Required. The .zip containing the .xctestrun file and the contents of the
+ // DerivedData/Build/Products directory.
+ // The .xctestrun file in this zip is ignored if the xctestrun field is
+ // specified.
+ FileReference tests_zip = 1;
+
+ // An .xctestrun file that will override the .xctestrun file in the
+ // tests zip. Because the .xctestrun file contains environment variables along
+ // with test methods to run and/or ignore, this can be useful for sharding
+ // tests. Default is taken from the tests zip.
+ FileReference xctestrun = 2;
+
+ // The Xcode version that should be used for the test.
+ // Use the TestEnvironmentDiscoveryService to get supported options.
+ // Defaults to the latest Xcode version Firebase Test Lab supports.
+ string xcode_version = 3;
+
+ // Output only. The bundle id for the application under test.
+ string app_bundle_id = 4;
+
+ // The option to test special app entitlements. Setting this would re-sign the
+ // app having special entitlements with an explicit application-identifier.
+ // Currently supports testing aps-environment entitlement.
+ bool test_special_entitlements = 6;
+}
+
+// A test of an iOS application that implements one or more game loop scenarios.
+// This test type accepts an archived application (.ipa file) and a list of
+// integer scenarios that will be executed on the app sequentially.
+message IosTestLoop {
+ // Required. The .ipa of the application to test.
+ FileReference app_ipa = 1;
+
+ // The list of scenarios that should be run during the test. Defaults to the
+ // single scenario 0 if unspecified.
+ repeated int32 scenarios = 2;
+
+ // Output only. The bundle id for the application under test.
+ string app_bundle_id = 3;
+}
+
+// A test of an Android application that can control an Android component
+// independently of its normal lifecycle.
+// Android instrumentation tests run an application APK and test APK inside the
+// same process on a virtual or physical AndroidDevice. They also specify
+// a test runner class, such as com.google.GoogleTestRunner, which can vary
+// on the specific instrumentation framework chosen.
+//
+// See <http://developer.android.com/tools/testing/testing_android.html> for
+// more information on types of Android tests.
+message AndroidInstrumentationTest {
+ // Required.
+ oneof app_under_test {
+ // The APK for the application under test.
+ FileReference app_apk = 1;
+
+ // A multi-apk app bundle for the application under test.
+ AppBundle app_bundle = 8;
+ }
+
+ // Required. The APK containing the test code to be executed.
+ FileReference test_apk = 2;
+
+ // The java package for the application under test.
+ // The default value is determined by examining the application's manifest.
+ string app_package_id = 3;
+
+ // The java package for the test to be executed.
+ // The default value is determined by examining the application's manifest.
+ string test_package_id = 4;
+
+ // The InstrumentationTestRunner class.
+ // The default value is determined by examining the application's manifest.
+ string test_runner_class = 5;
+
+ // Each target must be fully qualified with the package name or class name,
+ // in one of these formats:
+ // - "package package_name"
+ // - "class package_name.class_name"
+ // - "class package_name.class_name#method_name"
+ //
+ // If empty, all targets in the module will be run.
+ repeated string test_targets = 6;
+
+ // The option of whether running each test within its own invocation of
+ // instrumentation with Android Test Orchestrator or not.
+ // ** Orchestrator is only compatible with AndroidJUnitRunner version 1.0 or
+ // higher! **
+ // Orchestrator offers the following benefits:
+ // - No shared state
+ // - Crashes are isolated
+ // - Logs are scoped per test
+ //
+ // See
+ // <https://developer.android.com/training/testing/junit-runner.html#using-android-test-orchestrator>
+ // for more information about Android Test Orchestrator.
+ //
+ // If not set, the test will be run without the orchestrator.
+ OrchestratorOption orchestrator_option = 7;
+
+ // The option to run tests in multiple shards in parallel.
+ ShardingOption sharding_option = 9;
+}
+
+// A test of an android application that explores the application on a virtual
+// or physical Android Device, finding culprits and crashes as it goes.
+// Next tag: 30
+message AndroidRoboTest {
+ // Required.
+ oneof app_under_test {
+ // The APK for the application under test.
+ FileReference app_apk = 1;
+
+ // A multi-apk app bundle for the application under test.
+ AppBundle app_bundle = 16;
+ }
+
+ // The java package for the application under test.
+ // The default value is determined by examining the application's manifest.
+ string app_package_id = 2;
+
+ // The initial activity that should be used to start the app.
+ string app_initial_activity = 3;
+
+ // The max depth of the traversal stack Robo can explore. Needs to be at least
+ // 2 to make Robo explore the app beyond the first activity.
+ // Default is 50.
+ int32 max_depth = 7 [deprecated = true];
+
+ // The max number of steps Robo can execute.
+ // Default is no limit.
+ int32 max_steps = 8 [deprecated = true];
+
+ // A set of directives Robo should apply during the crawl.
+ // This allows users to customize the crawl. For example, the username and
+ // password for a test account can be provided.
+ repeated RoboDirective robo_directives = 11;
+
+ // A JSON file with a sequence of actions Robo should perform as a prologue
+ // for the crawl.
+ FileReference robo_script = 13;
+
+ // The intents used to launch the app for the crawl.
+ // If none are provided, then the main launcher activity is launched.
+ // If some are provided, then only those provided are launched (the main
+ // launcher activity must be provided explicitly).
+ repeated RoboStartingIntent starting_intents = 15;
+}
+
+// Directs Robo to interact with a specific UI element if it is encountered
+// during the crawl. Currently, Robo can perform text entry or element click.
+message RoboDirective {
+ // Required. The android resource name of the target UI element.
+ // For example,
+ // in Java: R.string.foo
+ // in xml: @string/foo
+ // Only the "foo" part is needed.
+ // Reference doc:
+ // https://developer.android.com/guide/topics/resources/accessing-resources.html
+ string resource_name = 1;
+
+ // The text that Robo is directed to set. If left empty, the directive will be
+ // treated as a CLICK on the element matching the resource_name.
+ string input_text = 2;
+
+ // Required. The type of action that Robo should perform on the specified
+ // element.
+ RoboActionType action_type = 3;
+}
+
+// Message for specifying the start activities to crawl.
+message RoboStartingIntent {
+ // Required. Intent details to start an activity.
+ oneof starting_intent {
+ // An intent that starts the main launcher activity.
+ LauncherActivityIntent launcher_activity = 1;
+
+ // An intent that starts an activity with specific details.
+ StartActivityIntent start_activity = 2;
+ }
+
+ // Timeout in seconds for each intent.
+ google.protobuf.Duration timeout = 3;
+}
+
+// Specifies an intent that starts the main launcher activity.
+message LauncherActivityIntent {
+
+}
+
+// A starting intent specified by an action, uri, and categories.
+message StartActivityIntent {
+ // Action name.
+ // Required for START_ACTIVITY.
+ string action = 2;
+
+ // URI for the action.
+ string uri = 3;
+
+ // Intent categories to set on the intent.
+ repeated string categories = 4;
+}
+
+// The matrix of environments in which the test is to be executed.
+message EnvironmentMatrix {
+ // Required. The environment matrix.
+ oneof environment_matrix {
+ // A matrix of Android devices.
+ AndroidMatrix android_matrix = 1;
+
+ // A list of Android devices; the test will be run only on the specified
+ // devices.
+ AndroidDeviceList android_device_list = 2;
+
+ // A list of iOS devices.
+ IosDeviceList ios_device_list = 3;
+ }
+}
+
+// A list of Android device configurations in which the test is to be executed.
+message AndroidDeviceList {
+ // Required. A list of Android devices.
+ repeated AndroidDevice android_devices = 1;
+}
+
+// Specifies how to execute the test.
+enum OrchestratorOption {
+ // Default value: the server will choose the mode. Currently implies that
+ // the test will run without the orchestrator. In the future,
+ // all instrumentation tests will be run with the orchestrator.
+ // Using the orchestrator is highly encouraged because of all the benefits it
+ // offers.
+ ORCHESTRATOR_OPTION_UNSPECIFIED = 0;
+
+ // Run test using orchestrator.
+ // ** Only compatible with AndroidJUnitRunner version 1.0 or higher! **
+ // Recommended.
+ USE_ORCHESTRATOR = 1;
+
+ // Run test without using orchestrator.
+ DO_NOT_USE_ORCHESTRATOR = 2;
+}
+
+// A list of iOS device configurations in which the test is to be executed.
+message IosDeviceList {
+ // Required. A list of iOS devices.
+ repeated IosDevice ios_devices = 1;
+}
+
+// A set of Android device configuration permutations is defined by the
+// the cross-product of the given axes. Internally, the given AndroidMatrix
+// will be expanded into a set of AndroidDevices.
+//
+// Only supported permutations will be instantiated. Invalid permutations
+// (e.g., incompatible models/versions) are ignored.
+message AndroidMatrix {
+ // Required. The ids of the set of Android device to be used.
+ // Use the TestEnvironmentDiscoveryService to get supported options.
+ repeated string android_model_ids = 1;
+
+ // Required. The ids of the set of Android OS version to be used.
+ // Use the TestEnvironmentDiscoveryService to get supported options.
+ repeated string android_version_ids = 2;
+
+ // Required. The set of locales the test device will enable for testing.
+ // Use the TestEnvironmentDiscoveryService to get supported options.
+ repeated string locales = 3;
+
+ // Required. The set of orientations to test with.
+ // Use the TestEnvironmentDiscoveryService to get supported options.
+ repeated string orientations = 4;
+}
+
+// Information about the client which invoked the test.
+message ClientInfo {
+ // Required. Client name, such as gcloud.
+ string name = 1;
+
+ // The list of detailed information about client.
+ repeated ClientInfoDetail client_info_details = 2;
+}
+
+// Key-value pair of detailed information about the client which invoked the
+// test. Examples: {'Version', '1.0'}, {'Release Track', 'BETA'}.
+message ClientInfoDetail {
+ // Required. The key of detailed client information.
+ string key = 1;
+
+ // Required. The value of detailed client information.
+ string value = 2;
+}
+
+// Locations where the results of running the test are stored.
+message ResultStorage {
+ // Required.
+ GoogleCloudStorage google_cloud_storage = 1;
+
+ // The tool results history that contains the tool results execution that
+ // results are written to.
+ //
+ // If not provided, the service will choose an appropriate value.
+ ToolResultsHistory tool_results_history = 5;
+
+ // Output only. The tool results execution that results are written to.
+ ToolResultsExecution tool_results_execution = 6;
+
+ // Output only. URL to the results in the Firebase Web Console.
+ string results_url = 7;
+}
+
+// Represents a tool results history resource.
+message ToolResultsHistory {
+ // Required. The cloud project that owns the tool results history.
+ string project_id = 1;
+
+ // Required. A tool results history ID.
+ string history_id = 2;
+}
+
+// Represents a tool results execution resource.
+//
+// This has the results of a TestMatrix.
+message ToolResultsExecution {
+ // Output only. The cloud project that owns the tool results execution.
+ string project_id = 1;
+
+ // Output only. A tool results history ID.
+ string history_id = 2;
+
+ // Output only. A tool results execution ID.
+ string execution_id = 3;
+}
+
+// Represents a tool results step resource.
+//
+// This has the results of a TestExecution.
+message ToolResultsStep {
+ // Output only. The cloud project that owns the tool results step.
+ string project_id = 1;
+
+ // Output only. A tool results history ID.
+ string history_id = 2;
+
+ // Output only. A tool results execution ID.
+ string execution_id = 3;
+
+ // Output only. A tool results step ID.
+ string step_id = 4;
+}
+
+// A storage location within Google cloud storage (GCS).
+message GoogleCloudStorage {
+ // Required. The path to a directory in GCS that will
+ // eventually contain the results for this test.
+ // The requesting user must have write access on the bucket in the supplied
+ // path.
+ string gcs_path = 1;
+}
+
+// Actions which Robo can perform on UI elements.
+enum RoboActionType {
+ // DO NOT USE. For proto versioning only.
+ ACTION_TYPE_UNSPECIFIED = 0;
+
+ // Direct Robo to click on the specified element. No-op if specified element
+ // is not clickable.
+ SINGLE_CLICK = 1;
+
+ // Direct Robo to enter text on the specified element. No-op if specified
+ // element is not enabled or does not allow text entry.
+ ENTER_TEXT = 2;
+
+ // Direct Robo to ignore interactions with a specific element.
+ IGNORE = 3;
+}
+
+// A reference to a file, used for user inputs.
+message FileReference {
+ // Required. The file reference.
+ oneof file {
+ // A path to a file in Google Cloud Storage.
+ // Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
+ // These paths are expected to be url encoded (percent encoding)
+ string gcs_path = 1;
+ }
+}
+
+// The environment in which the test is run.
+message Environment {
+ // Required. The environment.
+ oneof environment {
+ // An Android device which must be used with an Android test.
+ AndroidDevice android_device = 1;
+
+ // An iOS device which must be used with an iOS test.
+ IosDevice ios_device = 2;
+ }
+}
+
+// A single Android device.
+message AndroidDevice {
+ // Required. The id of the Android device to be used.
+ // Use the TestEnvironmentDiscoveryService to get supported options.
+ string android_model_id = 1;
+
+ // Required. The id of the Android OS version to be used.
+ // Use the TestEnvironmentDiscoveryService to get supported options.
+ string android_version_id = 2;
+
+ // Required. The locale the test device used for testing.
+ // Use the TestEnvironmentDiscoveryService to get supported options.
+ string locale = 3;
+
+ // Required. How the device is oriented during the test.
+ // Use the TestEnvironmentDiscoveryService to get supported options.
+ string orientation = 4;
+}
+
+// A single iOS device.
+message IosDevice {
+ // Required. The id of the iOS device to be used.
+ // Use the TestEnvironmentDiscoveryService to get supported options.
+ string ios_model_id = 1;
+
+ // Required. The id of the iOS major software version to be used.
+ // Use the TestEnvironmentDiscoveryService to get supported options.
+ string ios_version_id = 2;
+
+ // Required. The locale the test device used for testing.
+ // Use the TestEnvironmentDiscoveryService to get supported options.
+ string locale = 3;
+
+ // Required. How the device is oriented during the test.
+ // Use the TestEnvironmentDiscoveryService to get supported options.
+ string orientation = 4;
+}
+
+// Additional details about the progress of the running test.
+message TestDetails {
+ // Output only. Human-readable, detailed descriptions of the test's progress.
+ // For example: "Provisioning a device", "Starting Test".
+ //
+ // During the course of execution new data may be appended
+ // to the end of progress_messages.
+ repeated string progress_messages = 3;
+
+ // Output only. If the TestState is ERROR, then this string will contain
+ // human-readable details about the error.
+ string error_message = 4;
+}
+
+// Details behind an invalid request.
+message InvalidRequestDetail {
+ // Possible invalid request reasons.
+ enum Reason {
+ // No reason has been specified - the default.
+ REASON_UNSPECIFIED = 0;
+
+ // The request is not valid.
+ REQUEST_INVALID = 1;
+
+ // One or more of the resources specified in the request is too large.
+ RESOURCE_TOO_BIG = 2;
+
+ // One or more resources specified in the request cannot be found.
+ RESOURCE_NOT_FOUND = 3;
+
+ // This request is not (currently) supported.
+ UNSUPPORTED = 4;
+
+ // This request is not currently implemented.
+ NOT_IMPLEMENTED = 5;
+ }
+
+ // The reason behind the error.
+ Reason reason = 1;
+}
+
+// Options for enabling sharding.
+message ShardingOption {
+ oneof option {
+ // Uniformly shards test cases given a total number of shards.
+ UniformSharding uniform_sharding = 1;
+
+ // Shards test cases into the specified groups of packages, classes, and/or
+ // methods.
+ ManualSharding manual_sharding = 2;
+ }
+}
+
+// Uniformly shards test cases given a total number of shards.
+//
+// For Instrumentation test, it will be translated to "-e numShard" "-e
+// shardIndex" AndroidJUnitRunner arguments. With uniform sharding enabled,
+// specifying these sharding arguments via environment_variables is invalid.
+message UniformSharding {
+ // Required. Total number of shards. When any physical devices are selected,
+ // the number must be >= 1 and <= 50. When no physical devices are selected,
+ // the number must be >= 1 and <= 500.
+ int32 num_shards = 1;
+}
+
+// Shards test cases into the specified groups of packages, classes, and/or
+// methods.
+//
+// With manual sharding enabled, specifying test targets via
+// environment_variables or in InstrumentationTest is invalid.
+message ManualSharding {
+ // Required. Group of packages, classes, and/or test methods to be run for
+ // each shard. When any physical devices are selected, the number of
+ // test_targets_for_shard must be >= 1 and <= 50. When no physical devices are
+ // selected, the number must be >= 1 and <= 500.
+ repeated TestTargetsForShard test_targets_for_shard = 1;
+}
+
+// Test targets for a shard.
+message TestTargetsForShard {
+ // Group of packages, classes, and/or test methods to be run for each shard.
+ // The targets need to be specified in AndroidJUnitRunner argument format. For
+ // example, "package com.my.packages" "class com.my.package.MyClass".
+ //
+ // The number of shard_test_targets must be greater than 0.
+ repeated string test_targets = 1;
+}
+
+// Output only. Details about the shard.
+message Shard {
+ // Output only. The index of the shard among all the shards.
+ int32 shard_index = 1;
+
+ // Output only. The total number of shards.
+ int32 num_shards = 2;
+
+ // Output only. Test targets for each shard.
+ TestTargetsForShard test_targets_for_shard = 3;
+}
+
+// Request to submit a matrix of tests for execution.
+message CreateTestMatrixRequest {
+ // The GCE project under which this job will run.
+ string project_id = 1;
+
+ // The matrix of tests that the user wants to run.
+ TestMatrix test_matrix = 2;
+
+ // A string id used to detect duplicated requests.
+ // Ids are automatically scoped to a project, so
+ // users should ensure the ID is unique per-project.
+ // A UUID is recommended.
+ //
+ // Optional, but strongly recommended.
+ string request_id = 3;
+}
+
+// Request to get the Test Matrix with the given id.
+message GetTestMatrixRequest {
+ // Cloud project that owns the test matrix.
+ string project_id = 1;
+
+ // Unique test matrix id which was assigned by the service.
+ string test_matrix_id = 2;
+}
+
+// Request to stop running all of the tests in the specified matrix.
+message CancelTestMatrixRequest {
+ // Cloud project that owns the test.
+ string project_id = 1;
+
+ // Test matrix that will be canceled.
+ string test_matrix_id = 2;
+}
+
+// Response containing the current state of the specified test matrix.
+message CancelTestMatrixResponse {
+ // The current rolled-up state of the test matrix.
+ // If this state is already final, then the cancelation request will
+ // have no effect.
+ TestState test_state = 1;
+}
+
+// The detailed reason that a Matrix was deemed INVALID.
+enum InvalidMatrixDetails {
+ // Do not use. For proto versioning only.
+ INVALID_MATRIX_DETAILS_UNSPECIFIED = 0;
+
+ // The matrix is INVALID, but there are no further details available.
+ DETAILS_UNAVAILABLE = 1;
+
+ // The input app APK could not be parsed.
+ MALFORMED_APK = 2;
+
+ // The input test APK could not be parsed.
+ MALFORMED_TEST_APK = 3;
+
+ // The AndroidManifest.xml could not be found.
+ NO_MANIFEST = 4;
+
+ // The APK manifest does not declare a package name.
+ NO_PACKAGE_NAME = 5;
+
+ // The APK application ID (aka package name) is invalid.
+ // See also
+ // https://developer.android.com/studio/build/application-id
+ INVALID_PACKAGE_NAME = 31;
+
+ // The test package and app package are the same.
+ TEST_SAME_AS_APP = 6;
+
+ // The test apk does not declare an instrumentation.
+ NO_INSTRUMENTATION = 7;
+
+ // The input app apk does not have a signature.
+ NO_SIGNATURE = 20;
+
+ // The test runner class specified by user or in the test APK's manifest file
+ // is not compatible with Android Test Orchestrator.
+ // Orchestrator is only compatible with AndroidJUnitRunner version 1.0 or
+ // higher.
+ // Orchestrator can be disabled by using DO_NOT_USE_ORCHESTRATOR
+ // OrchestratorOption.
+ INSTRUMENTATION_ORCHESTRATOR_INCOMPATIBLE = 18;
+
+ // The test APK does not contain the test runner class specified by user or in
+ // the manifest file.
+ // This can be caused by either of the following reasons:
+ // - the user provided a runner class name that's incorrect, or
+ // - the test runner isn't built into the test APK (might be in the app APK
+ // instead).
+ NO_TEST_RUNNER_CLASS = 19;
+
+ // A main launcher activity could not be found.
+ NO_LAUNCHER_ACTIVITY = 8;
+
+ // The app declares one or more permissions that are not allowed.
+ FORBIDDEN_PERMISSIONS = 9;
+
+ // There is a conflict in the provided robo_directives.
+ INVALID_ROBO_DIRECTIVES = 10;
+
+ // There is at least one invalid resource name in the provided
+ // robo directives
+ INVALID_RESOURCE_NAME = 33;
+
+ // Invalid definition of action in the robo directives
+ // (e.g. a click or ignore action includes an input text field)
+ INVALID_DIRECTIVE_ACTION = 34;
+
+ // There is no test loop intent filter, or the one that is given is
+ // not formatted correctly.
+ TEST_LOOP_INTENT_FILTER_NOT_FOUND = 12;
+
+ // The request contains a scenario label that was not declared in the
+ // manifest.
+ SCENARIO_LABEL_NOT_DECLARED = 13;
+
+ // There was an error when parsing a label's value.
+ SCENARIO_LABEL_MALFORMED = 14;
+
+ // The request contains a scenario number that was not declared in the
+ // manifest.
+ SCENARIO_NOT_DECLARED = 15;
+
+ // Device administrator applications are not allowed.
+ DEVICE_ADMIN_RECEIVER = 17;
+
+ // The zipped XCTest was malformed. The zip did not contain a single
+ // .xctestrun file and the contents of the DerivedData/Build/Products
+ // directory.
+ MALFORMED_XC_TEST_ZIP = 11;
+
+ // The zipped XCTest was built for the iOS simulator rather than for a
+ // physical device.
+ BUILT_FOR_IOS_SIMULATOR = 24;
+
+ // The .xctestrun file did not specify any test targets.
+ NO_TESTS_IN_XC_TEST_ZIP = 25;
+
+ // One or more of the test targets defined in the .xctestrun file specifies
+ // "UseDestinationArtifacts", which is disallowed.
+ USE_DESTINATION_ARTIFACTS = 26;
+
+ // XC tests which run on physical devices must have
+ // "IsAppHostedTestBundle" == "true" in the xctestrun file.
+ TEST_NOT_APP_HOSTED = 28;
+
+ // An Info.plist file in the XCTest zip could not be parsed.
+ PLIST_CANNOT_BE_PARSED = 30;
+
+ // The APK is marked as "testOnly".
+ // Deprecated and not currently used.
+ TEST_ONLY_APK = 21 [deprecated = true];
+
+ // The input IPA could not be parsed.
+ MALFORMED_IPA = 22;
+
+ // The application doesn't register the game loop URL scheme.
+ MISSING_URL_SCHEME = 35;
+
+ // The iOS application bundle (.app) couldn't be processed.
+ MALFORMED_APP_BUNDLE = 36;
+
+ // APK contains no code.
+ // See also
+ // https://developer.android.com/guide/topics/manifest/application-element.html#code
+ NO_CODE_APK = 23;
+
+ // Either the provided input APK path was malformed,
+ // the APK file does not exist, or the user does not have permission to
+ // access the APK file.
+ INVALID_INPUT_APK = 27;
+
+ // APK is built for a preview SDK which is unsupported
+ INVALID_APK_PREVIEW_SDK = 29;
+}
+
+// The state (i.e., progress) of a test execution or matrix.
+enum TestState {
+ // Do not use. For proto versioning only.
+ TEST_STATE_UNSPECIFIED = 0;
+
+ // The execution or matrix is being validated.
+ VALIDATING = 8;
+
+ // The execution or matrix is waiting for resources to become available.
+ PENDING = 1;
+
+ // The execution is currently being processed.
+ //
+ // Can only be set on an execution.
+ RUNNING = 2;
+
+ // The execution or matrix has terminated normally.
+ //
+ // On a matrix this means that the matrix level processing completed normally,
+ // but individual executions may be in an ERROR state.
+ FINISHED = 3;
+
+ // The execution or matrix has stopped because it encountered an
+ // infrastructure failure.
+ ERROR = 4;
+
+ // The execution was not run because it corresponds to a unsupported
+ // environment.
+ //
+ // Can only be set on an execution.
+ UNSUPPORTED_ENVIRONMENT = 5;
+
+ // The execution was not run because the provided inputs are incompatible with
+ // the requested environment.
+ //
+ // Example: requested AndroidVersion is lower than APK's minSdkVersion
+ //
+ // Can only be set on an execution.
+ INCOMPATIBLE_ENVIRONMENT = 9;
+
+ // The execution was not run because the provided inputs are incompatible with
+ // the requested architecture.
+ //
+ // Example: requested device does not support running the native code in
+ // the supplied APK
+ //
+ // Can only be set on an execution.
+ INCOMPATIBLE_ARCHITECTURE = 10;
+
+ // The user cancelled the execution.
+ //
+ // Can only be set on an execution.
+ CANCELLED = 6;
+
+ // The execution or matrix was not run because the provided inputs are not
+ // valid.
+ //
+ // Examples: input file is not of the expected type, is malformed/corrupt, or
+ // was flagged as malware
+ INVALID = 7;
+}
+
+// Outcome summary for a finished test matrix.
+enum OutcomeSummary {
+ // Do not use. For proto versioning only.
+ OUTCOME_SUMMARY_UNSPECIFIED = 0;
+
+ // The test matrix run was successful, for instance:
+ // - All the test cases passed.
+ // - Robo did not detect a crash of the application under test.
+ SUCCESS = 1;
+
+ // A run failed, for instance:
+ // - One or more test case failed.
+ // - A test timed out.
+ // - The application under test crashed.
+ FAILURE = 2;
+
+ // Something unexpected happened. The run should still be considered
+ // unsuccessful but this is likely a transient problem and re-running the
+ // test might be successful.
+ INCONCLUSIVE = 3;
+
+ // All tests were skipped, for instance:
+ // - All device configurations were incompatible.
+ SKIPPED = 4;
+}