blob: f676f2c6c4d97d42d7086b74fd5b552d8109499b [file] [log] [blame]
// 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.
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.26.0
// protoc v3.21.9
// source: google/devtools/testing/v1/test_execution.proto
package testing
import (
context "context"
reflect "reflect"
sync "sync"
_ "google.golang.org/genproto/googleapis/api/annotations"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
durationpb "google.golang.org/protobuf/types/known/durationpb"
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// Specifies how to execute the test.
type OrchestratorOption int32
const (
// 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.
OrchestratorOption_ORCHESTRATOR_OPTION_UNSPECIFIED OrchestratorOption = 0
// Run test using orchestrator.
// ** Only compatible with AndroidJUnitRunner version 1.1 or higher! **
// Recommended.
OrchestratorOption_USE_ORCHESTRATOR OrchestratorOption = 1
// Run test without using orchestrator.
OrchestratorOption_DO_NOT_USE_ORCHESTRATOR OrchestratorOption = 2
)
// Enum value maps for OrchestratorOption.
var (
OrchestratorOption_name = map[int32]string{
0: "ORCHESTRATOR_OPTION_UNSPECIFIED",
1: "USE_ORCHESTRATOR",
2: "DO_NOT_USE_ORCHESTRATOR",
}
OrchestratorOption_value = map[string]int32{
"ORCHESTRATOR_OPTION_UNSPECIFIED": 0,
"USE_ORCHESTRATOR": 1,
"DO_NOT_USE_ORCHESTRATOR": 2,
}
)
func (x OrchestratorOption) Enum() *OrchestratorOption {
p := new(OrchestratorOption)
*p = x
return p
}
func (x OrchestratorOption) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (OrchestratorOption) Descriptor() protoreflect.EnumDescriptor {
return file_google_devtools_testing_v1_test_execution_proto_enumTypes[0].Descriptor()
}
func (OrchestratorOption) Type() protoreflect.EnumType {
return &file_google_devtools_testing_v1_test_execution_proto_enumTypes[0]
}
func (x OrchestratorOption) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use OrchestratorOption.Descriptor instead.
func (OrchestratorOption) EnumDescriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{0}
}
// The mode in which Robo should run.
type RoboMode int32
const (
// This means that the server should choose the mode.
// Recommended.
RoboMode_ROBO_MODE_UNSPECIFIED RoboMode = 0
// Runs Robo in UIAutomator-only mode without app resigning
RoboMode_ROBO_VERSION_1 RoboMode = 1
// Runs Robo in standard Espresso with UIAutomator fallback
RoboMode_ROBO_VERSION_2 RoboMode = 2
)
// Enum value maps for RoboMode.
var (
RoboMode_name = map[int32]string{
0: "ROBO_MODE_UNSPECIFIED",
1: "ROBO_VERSION_1",
2: "ROBO_VERSION_2",
}
RoboMode_value = map[string]int32{
"ROBO_MODE_UNSPECIFIED": 0,
"ROBO_VERSION_1": 1,
"ROBO_VERSION_2": 2,
}
)
func (x RoboMode) Enum() *RoboMode {
p := new(RoboMode)
*p = x
return p
}
func (x RoboMode) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (RoboMode) Descriptor() protoreflect.EnumDescriptor {
return file_google_devtools_testing_v1_test_execution_proto_enumTypes[1].Descriptor()
}
func (RoboMode) Type() protoreflect.EnumType {
return &file_google_devtools_testing_v1_test_execution_proto_enumTypes[1]
}
func (x RoboMode) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use RoboMode.Descriptor instead.
func (RoboMode) EnumDescriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{1}
}
// Actions which Robo can perform on UI elements.
type RoboActionType int32
const (
// DO NOT USE. For proto versioning only.
RoboActionType_ACTION_TYPE_UNSPECIFIED RoboActionType = 0
// Direct Robo to click on the specified element. No-op if specified element
// is not clickable.
RoboActionType_SINGLE_CLICK RoboActionType = 1
// Direct Robo to enter text on the specified element. No-op if specified
// element is not enabled or does not allow text entry.
RoboActionType_ENTER_TEXT RoboActionType = 2
// Direct Robo to ignore interactions with a specific element.
RoboActionType_IGNORE RoboActionType = 3
)
// Enum value maps for RoboActionType.
var (
RoboActionType_name = map[int32]string{
0: "ACTION_TYPE_UNSPECIFIED",
1: "SINGLE_CLICK",
2: "ENTER_TEXT",
3: "IGNORE",
}
RoboActionType_value = map[string]int32{
"ACTION_TYPE_UNSPECIFIED": 0,
"SINGLE_CLICK": 1,
"ENTER_TEXT": 2,
"IGNORE": 3,
}
)
func (x RoboActionType) Enum() *RoboActionType {
p := new(RoboActionType)
*p = x
return p
}
func (x RoboActionType) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (RoboActionType) Descriptor() protoreflect.EnumDescriptor {
return file_google_devtools_testing_v1_test_execution_proto_enumTypes[2].Descriptor()
}
func (RoboActionType) Type() protoreflect.EnumType {
return &file_google_devtools_testing_v1_test_execution_proto_enumTypes[2]
}
func (x RoboActionType) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use RoboActionType.Descriptor instead.
func (RoboActionType) EnumDescriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{2}
}
// The detailed reason that a Matrix was deemed INVALID.
type InvalidMatrixDetails int32
const (
// Do not use. For proto versioning only.
InvalidMatrixDetails_INVALID_MATRIX_DETAILS_UNSPECIFIED InvalidMatrixDetails = 0
// The matrix is INVALID, but there are no further details available.
InvalidMatrixDetails_DETAILS_UNAVAILABLE InvalidMatrixDetails = 1
// The input app APK could not be parsed.
InvalidMatrixDetails_MALFORMED_APK InvalidMatrixDetails = 2
// The input test APK could not be parsed.
InvalidMatrixDetails_MALFORMED_TEST_APK InvalidMatrixDetails = 3
// The AndroidManifest.xml could not be found.
InvalidMatrixDetails_NO_MANIFEST InvalidMatrixDetails = 4
// The APK manifest does not declare a package name.
InvalidMatrixDetails_NO_PACKAGE_NAME InvalidMatrixDetails = 5
// The APK application ID (aka package name) is invalid.
// See also
// https://developer.android.com/studio/build/application-id
InvalidMatrixDetails_INVALID_PACKAGE_NAME InvalidMatrixDetails = 31
// The test package and app package are the same.
InvalidMatrixDetails_TEST_SAME_AS_APP InvalidMatrixDetails = 6
// The test apk does not declare an instrumentation.
InvalidMatrixDetails_NO_INSTRUMENTATION InvalidMatrixDetails = 7
// The input app apk does not have a signature.
InvalidMatrixDetails_NO_SIGNATURE InvalidMatrixDetails = 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.1 or
// higher.
// Orchestrator can be disabled by using DO_NOT_USE_ORCHESTRATOR
// OrchestratorOption.
InvalidMatrixDetails_INSTRUMENTATION_ORCHESTRATOR_INCOMPATIBLE InvalidMatrixDetails = 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).
InvalidMatrixDetails_NO_TEST_RUNNER_CLASS InvalidMatrixDetails = 19
// A main launcher activity could not be found.
InvalidMatrixDetails_NO_LAUNCHER_ACTIVITY InvalidMatrixDetails = 8
// The app declares one or more permissions that are not allowed.
InvalidMatrixDetails_FORBIDDEN_PERMISSIONS InvalidMatrixDetails = 9
// There is a conflict in the provided robo_directives.
InvalidMatrixDetails_INVALID_ROBO_DIRECTIVES InvalidMatrixDetails = 10
// There is at least one invalid resource name in the provided
// robo directives
InvalidMatrixDetails_INVALID_RESOURCE_NAME InvalidMatrixDetails = 33
// Invalid definition of action in the robo directives
// (e.g. a click or ignore action includes an input text field)
InvalidMatrixDetails_INVALID_DIRECTIVE_ACTION InvalidMatrixDetails = 34
// There is no test loop intent filter, or the one that is given is
// not formatted correctly.
InvalidMatrixDetails_TEST_LOOP_INTENT_FILTER_NOT_FOUND InvalidMatrixDetails = 12
// The request contains a scenario label that was not declared in the
// manifest.
InvalidMatrixDetails_SCENARIO_LABEL_NOT_DECLARED InvalidMatrixDetails = 13
// There was an error when parsing a label's value.
InvalidMatrixDetails_SCENARIO_LABEL_MALFORMED InvalidMatrixDetails = 14
// The request contains a scenario number that was not declared in the
// manifest.
InvalidMatrixDetails_SCENARIO_NOT_DECLARED InvalidMatrixDetails = 15
// Device administrator applications are not allowed.
InvalidMatrixDetails_DEVICE_ADMIN_RECEIVER InvalidMatrixDetails = 17
// The zipped XCTest was malformed. The zip did not contain a single
// .xctestrun file and the contents of the DerivedData/Build/Products
// directory.
InvalidMatrixDetails_MALFORMED_XC_TEST_ZIP InvalidMatrixDetails = 11
// The zipped XCTest was built for the iOS simulator rather than for a
// physical device.
InvalidMatrixDetails_BUILT_FOR_IOS_SIMULATOR InvalidMatrixDetails = 24
// The .xctestrun file did not specify any test targets.
InvalidMatrixDetails_NO_TESTS_IN_XC_TEST_ZIP InvalidMatrixDetails = 25
// One or more of the test targets defined in the .xctestrun file specifies
// "UseDestinationArtifacts", which is disallowed.
InvalidMatrixDetails_USE_DESTINATION_ARTIFACTS InvalidMatrixDetails = 26
// XC tests which run on physical devices must have
// "IsAppHostedTestBundle" == "true" in the xctestrun file.
InvalidMatrixDetails_TEST_NOT_APP_HOSTED InvalidMatrixDetails = 28
// An Info.plist file in the XCTest zip could not be parsed.
InvalidMatrixDetails_PLIST_CANNOT_BE_PARSED InvalidMatrixDetails = 30
// The APK is marked as "testOnly".
// Deprecated and not currently used.
//
// Deprecated: Do not use.
InvalidMatrixDetails_TEST_ONLY_APK InvalidMatrixDetails = 21
// The input IPA could not be parsed.
InvalidMatrixDetails_MALFORMED_IPA InvalidMatrixDetails = 22
// The application doesn't register the game loop URL scheme.
InvalidMatrixDetails_MISSING_URL_SCHEME InvalidMatrixDetails = 35
// The iOS application bundle (.app) couldn't be processed.
InvalidMatrixDetails_MALFORMED_APP_BUNDLE InvalidMatrixDetails = 36
// APK contains no code.
// See also
// https://developer.android.com/guide/topics/manifest/application-element.html#code
InvalidMatrixDetails_NO_CODE_APK InvalidMatrixDetails = 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.
InvalidMatrixDetails_INVALID_INPUT_APK InvalidMatrixDetails = 27
// APK is built for a preview SDK which is unsupported
InvalidMatrixDetails_INVALID_APK_PREVIEW_SDK InvalidMatrixDetails = 29
// The matrix expanded to contain too many executions.
InvalidMatrixDetails_MATRIX_TOO_LARGE InvalidMatrixDetails = 37
// Not enough test quota to run the executions in this matrix.
InvalidMatrixDetails_TEST_QUOTA_EXCEEDED InvalidMatrixDetails = 39
// A required cloud service api is not activated.
// See:
// https://firebase.google.com/docs/test-lab/android/continuous#requirements
InvalidMatrixDetails_SERVICE_NOT_ACTIVATED InvalidMatrixDetails = 40
// There was an unknown permission issue running this test.
InvalidMatrixDetails_UNKNOWN_PERMISSION_ERROR InvalidMatrixDetails = 41
)
// Enum value maps for InvalidMatrixDetails.
var (
InvalidMatrixDetails_name = map[int32]string{
0: "INVALID_MATRIX_DETAILS_UNSPECIFIED",
1: "DETAILS_UNAVAILABLE",
2: "MALFORMED_APK",
3: "MALFORMED_TEST_APK",
4: "NO_MANIFEST",
5: "NO_PACKAGE_NAME",
31: "INVALID_PACKAGE_NAME",
6: "TEST_SAME_AS_APP",
7: "NO_INSTRUMENTATION",
20: "NO_SIGNATURE",
18: "INSTRUMENTATION_ORCHESTRATOR_INCOMPATIBLE",
19: "NO_TEST_RUNNER_CLASS",
8: "NO_LAUNCHER_ACTIVITY",
9: "FORBIDDEN_PERMISSIONS",
10: "INVALID_ROBO_DIRECTIVES",
33: "INVALID_RESOURCE_NAME",
34: "INVALID_DIRECTIVE_ACTION",
12: "TEST_LOOP_INTENT_FILTER_NOT_FOUND",
13: "SCENARIO_LABEL_NOT_DECLARED",
14: "SCENARIO_LABEL_MALFORMED",
15: "SCENARIO_NOT_DECLARED",
17: "DEVICE_ADMIN_RECEIVER",
11: "MALFORMED_XC_TEST_ZIP",
24: "BUILT_FOR_IOS_SIMULATOR",
25: "NO_TESTS_IN_XC_TEST_ZIP",
26: "USE_DESTINATION_ARTIFACTS",
28: "TEST_NOT_APP_HOSTED",
30: "PLIST_CANNOT_BE_PARSED",
21: "TEST_ONLY_APK",
22: "MALFORMED_IPA",
35: "MISSING_URL_SCHEME",
36: "MALFORMED_APP_BUNDLE",
23: "NO_CODE_APK",
27: "INVALID_INPUT_APK",
29: "INVALID_APK_PREVIEW_SDK",
37: "MATRIX_TOO_LARGE",
39: "TEST_QUOTA_EXCEEDED",
40: "SERVICE_NOT_ACTIVATED",
41: "UNKNOWN_PERMISSION_ERROR",
}
InvalidMatrixDetails_value = map[string]int32{
"INVALID_MATRIX_DETAILS_UNSPECIFIED": 0,
"DETAILS_UNAVAILABLE": 1,
"MALFORMED_APK": 2,
"MALFORMED_TEST_APK": 3,
"NO_MANIFEST": 4,
"NO_PACKAGE_NAME": 5,
"INVALID_PACKAGE_NAME": 31,
"TEST_SAME_AS_APP": 6,
"NO_INSTRUMENTATION": 7,
"NO_SIGNATURE": 20,
"INSTRUMENTATION_ORCHESTRATOR_INCOMPATIBLE": 18,
"NO_TEST_RUNNER_CLASS": 19,
"NO_LAUNCHER_ACTIVITY": 8,
"FORBIDDEN_PERMISSIONS": 9,
"INVALID_ROBO_DIRECTIVES": 10,
"INVALID_RESOURCE_NAME": 33,
"INVALID_DIRECTIVE_ACTION": 34,
"TEST_LOOP_INTENT_FILTER_NOT_FOUND": 12,
"SCENARIO_LABEL_NOT_DECLARED": 13,
"SCENARIO_LABEL_MALFORMED": 14,
"SCENARIO_NOT_DECLARED": 15,
"DEVICE_ADMIN_RECEIVER": 17,
"MALFORMED_XC_TEST_ZIP": 11,
"BUILT_FOR_IOS_SIMULATOR": 24,
"NO_TESTS_IN_XC_TEST_ZIP": 25,
"USE_DESTINATION_ARTIFACTS": 26,
"TEST_NOT_APP_HOSTED": 28,
"PLIST_CANNOT_BE_PARSED": 30,
"TEST_ONLY_APK": 21,
"MALFORMED_IPA": 22,
"MISSING_URL_SCHEME": 35,
"MALFORMED_APP_BUNDLE": 36,
"NO_CODE_APK": 23,
"INVALID_INPUT_APK": 27,
"INVALID_APK_PREVIEW_SDK": 29,
"MATRIX_TOO_LARGE": 37,
"TEST_QUOTA_EXCEEDED": 39,
"SERVICE_NOT_ACTIVATED": 40,
"UNKNOWN_PERMISSION_ERROR": 41,
}
)
func (x InvalidMatrixDetails) Enum() *InvalidMatrixDetails {
p := new(InvalidMatrixDetails)
*p = x
return p
}
func (x InvalidMatrixDetails) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (InvalidMatrixDetails) Descriptor() protoreflect.EnumDescriptor {
return file_google_devtools_testing_v1_test_execution_proto_enumTypes[3].Descriptor()
}
func (InvalidMatrixDetails) Type() protoreflect.EnumType {
return &file_google_devtools_testing_v1_test_execution_proto_enumTypes[3]
}
func (x InvalidMatrixDetails) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use InvalidMatrixDetails.Descriptor instead.
func (InvalidMatrixDetails) EnumDescriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{3}
}
// The state (i.e., progress) of a test execution or matrix.
type TestState int32
const (
// Do not use. For proto versioning only.
TestState_TEST_STATE_UNSPECIFIED TestState = 0
// The execution or matrix is being validated.
TestState_VALIDATING TestState = 8
// The execution or matrix is waiting for resources to become available.
TestState_PENDING TestState = 1
// The execution is currently being processed.
//
// Can only be set on an execution.
TestState_RUNNING TestState = 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.
TestState_FINISHED TestState = 3
// The execution or matrix has stopped because it encountered an
// infrastructure failure.
TestState_ERROR TestState = 4
// The execution was not run because it corresponds to a unsupported
// environment.
//
// Can only be set on an execution.
TestState_UNSUPPORTED_ENVIRONMENT TestState = 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.
TestState_INCOMPATIBLE_ENVIRONMENT TestState = 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.
TestState_INCOMPATIBLE_ARCHITECTURE TestState = 10
// The user cancelled the execution.
//
// Can only be set on an execution.
TestState_CANCELLED TestState = 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
TestState_INVALID TestState = 7
)
// Enum value maps for TestState.
var (
TestState_name = map[int32]string{
0: "TEST_STATE_UNSPECIFIED",
8: "VALIDATING",
1: "PENDING",
2: "RUNNING",
3: "FINISHED",
4: "ERROR",
5: "UNSUPPORTED_ENVIRONMENT",
9: "INCOMPATIBLE_ENVIRONMENT",
10: "INCOMPATIBLE_ARCHITECTURE",
6: "CANCELLED",
7: "INVALID",
}
TestState_value = map[string]int32{
"TEST_STATE_UNSPECIFIED": 0,
"VALIDATING": 8,
"PENDING": 1,
"RUNNING": 2,
"FINISHED": 3,
"ERROR": 4,
"UNSUPPORTED_ENVIRONMENT": 5,
"INCOMPATIBLE_ENVIRONMENT": 9,
"INCOMPATIBLE_ARCHITECTURE": 10,
"CANCELLED": 6,
"INVALID": 7,
}
)
func (x TestState) Enum() *TestState {
p := new(TestState)
*p = x
return p
}
func (x TestState) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (TestState) Descriptor() protoreflect.EnumDescriptor {
return file_google_devtools_testing_v1_test_execution_proto_enumTypes[4].Descriptor()
}
func (TestState) Type() protoreflect.EnumType {
return &file_google_devtools_testing_v1_test_execution_proto_enumTypes[4]
}
func (x TestState) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use TestState.Descriptor instead.
func (TestState) EnumDescriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{4}
}
// Outcome summary for a finished test matrix.
type OutcomeSummary int32
const (
// Do not use. For proto versioning only.
OutcomeSummary_OUTCOME_SUMMARY_UNSPECIFIED OutcomeSummary = 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.
OutcomeSummary_SUCCESS OutcomeSummary = 1
// A run failed, for instance:
// - One or more test case failed.
// - A test timed out.
// - The application under test crashed.
OutcomeSummary_FAILURE OutcomeSummary = 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.
OutcomeSummary_INCONCLUSIVE OutcomeSummary = 3
// All tests were skipped, for instance:
// - All device configurations were incompatible.
OutcomeSummary_SKIPPED OutcomeSummary = 4
)
// Enum value maps for OutcomeSummary.
var (
OutcomeSummary_name = map[int32]string{
0: "OUTCOME_SUMMARY_UNSPECIFIED",
1: "SUCCESS",
2: "FAILURE",
3: "INCONCLUSIVE",
4: "SKIPPED",
}
OutcomeSummary_value = map[string]int32{
"OUTCOME_SUMMARY_UNSPECIFIED": 0,
"SUCCESS": 1,
"FAILURE": 2,
"INCONCLUSIVE": 3,
"SKIPPED": 4,
}
)
func (x OutcomeSummary) Enum() *OutcomeSummary {
p := new(OutcomeSummary)
*p = x
return p
}
func (x OutcomeSummary) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (OutcomeSummary) Descriptor() protoreflect.EnumDescriptor {
return file_google_devtools_testing_v1_test_execution_proto_enumTypes[5].Descriptor()
}
func (OutcomeSummary) Type() protoreflect.EnumType {
return &file_google_devtools_testing_v1_test_execution_proto_enumTypes[5]
}
func (x OutcomeSummary) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use OutcomeSummary.Descriptor instead.
func (OutcomeSummary) EnumDescriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{5}
}
// Possible invalid request reasons.
type InvalidRequestDetail_Reason int32
const (
// No reason has been specified - the default.
InvalidRequestDetail_REASON_UNSPECIFIED InvalidRequestDetail_Reason = 0
// The request is not valid.
InvalidRequestDetail_REQUEST_INVALID InvalidRequestDetail_Reason = 1
// One or more of the resources specified in the request is too large.
InvalidRequestDetail_RESOURCE_TOO_BIG InvalidRequestDetail_Reason = 2
// One or more resources specified in the request cannot be found.
InvalidRequestDetail_RESOURCE_NOT_FOUND InvalidRequestDetail_Reason = 3
// This request is not (currently) supported.
InvalidRequestDetail_UNSUPPORTED InvalidRequestDetail_Reason = 4
// This request is not currently implemented.
InvalidRequestDetail_NOT_IMPLEMENTED InvalidRequestDetail_Reason = 5
)
// Enum value maps for InvalidRequestDetail_Reason.
var (
InvalidRequestDetail_Reason_name = map[int32]string{
0: "REASON_UNSPECIFIED",
1: "REQUEST_INVALID",
2: "RESOURCE_TOO_BIG",
3: "RESOURCE_NOT_FOUND",
4: "UNSUPPORTED",
5: "NOT_IMPLEMENTED",
}
InvalidRequestDetail_Reason_value = map[string]int32{
"REASON_UNSPECIFIED": 0,
"REQUEST_INVALID": 1,
"RESOURCE_TOO_BIG": 2,
"RESOURCE_NOT_FOUND": 3,
"UNSUPPORTED": 4,
"NOT_IMPLEMENTED": 5,
}
)
func (x InvalidRequestDetail_Reason) Enum() *InvalidRequestDetail_Reason {
p := new(InvalidRequestDetail_Reason)
*p = x
return p
}
func (x InvalidRequestDetail_Reason) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (InvalidRequestDetail_Reason) Descriptor() protoreflect.EnumDescriptor {
return file_google_devtools_testing_v1_test_execution_proto_enumTypes[6].Descriptor()
}
func (InvalidRequestDetail_Reason) Type() protoreflect.EnumType {
return &file_google_devtools_testing_v1_test_execution_proto_enumTypes[6]
}
func (x InvalidRequestDetail_Reason) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use InvalidRequestDetail_Reason.Descriptor instead.
func (InvalidRequestDetail_Reason) EnumDescriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{40, 0}
}
// TestMatrix captures all details about a test. It contains the environment
// configuration, test specification, test executions and overall state and
// outcome.
type TestMatrix struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Output only. Unique id set by the service.
TestMatrixId string `protobuf:"bytes,1,opt,name=test_matrix_id,json=testMatrixId,proto3" json:"test_matrix_id,omitempty"`
// The cloud project that owns the test matrix.
ProjectId string `protobuf:"bytes,7,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
// Information about the client which invoked the test.
ClientInfo *ClientInfo `protobuf:"bytes,10,opt,name=client_info,json=clientInfo,proto3" json:"client_info,omitempty"`
// Required. How to run the test.
TestSpecification *TestSpecification `protobuf:"bytes,3,opt,name=test_specification,json=testSpecification,proto3" json:"test_specification,omitempty"`
// Required. The devices the tests are being executed on.
EnvironmentMatrix *EnvironmentMatrix `protobuf:"bytes,4,opt,name=environment_matrix,json=environmentMatrix,proto3" json:"environment_matrix,omitempty"`
// Output only. The list of test executions that the service creates for
// this matrix.
TestExecutions []*TestExecution `protobuf:"bytes,5,rep,name=test_executions,json=testExecutions,proto3" json:"test_executions,omitempty"`
// Required. Where the results for the matrix are written.
ResultStorage *ResultStorage `protobuf:"bytes,6,opt,name=result_storage,json=resultStorage,proto3" json:"result_storage,omitempty"`
// Output only. Indicates the current progress of the test matrix.
State TestState `protobuf:"varint,8,opt,name=state,proto3,enum=google.devtools.testing.v1.TestState" json:"state,omitempty"`
// Output only. The time this test matrix was initially created.
Timestamp *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
// Output only. Describes why the matrix is considered invalid.
// Only useful for matrices in the INVALID state.
InvalidMatrixDetails InvalidMatrixDetails `protobuf:"varint,11,opt,name=invalid_matrix_details,json=invalidMatrixDetails,proto3,enum=google.devtools.testing.v1.InvalidMatrixDetails" json:"invalid_matrix_details,omitempty"`
// 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.
FlakyTestAttempts int32 `protobuf:"varint,13,opt,name=flaky_test_attempts,json=flakyTestAttempts,proto3" json:"flaky_test_attempts,omitempty"`
// Output Only. The overall outcome of the test.
// Only set when the test matrix state is FINISHED.
OutcomeSummary OutcomeSummary `protobuf:"varint,14,opt,name=outcome_summary,json=outcomeSummary,proto3,enum=google.devtools.testing.v1.OutcomeSummary" json:"outcome_summary,omitempty"`
// 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.
FailFast bool `protobuf:"varint,17,opt,name=fail_fast,json=failFast,proto3" json:"fail_fast,omitempty"`
}
func (x *TestMatrix) Reset() {
*x = TestMatrix{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *TestMatrix) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TestMatrix) ProtoMessage() {}
func (x *TestMatrix) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use TestMatrix.ProtoReflect.Descriptor instead.
func (*TestMatrix) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{0}
}
func (x *TestMatrix) GetTestMatrixId() string {
if x != nil {
return x.TestMatrixId
}
return ""
}
func (x *TestMatrix) GetProjectId() string {
if x != nil {
return x.ProjectId
}
return ""
}
func (x *TestMatrix) GetClientInfo() *ClientInfo {
if x != nil {
return x.ClientInfo
}
return nil
}
func (x *TestMatrix) GetTestSpecification() *TestSpecification {
if x != nil {
return x.TestSpecification
}
return nil
}
func (x *TestMatrix) GetEnvironmentMatrix() *EnvironmentMatrix {
if x != nil {
return x.EnvironmentMatrix
}
return nil
}
func (x *TestMatrix) GetTestExecutions() []*TestExecution {
if x != nil {
return x.TestExecutions
}
return nil
}
func (x *TestMatrix) GetResultStorage() *ResultStorage {
if x != nil {
return x.ResultStorage
}
return nil
}
func (x *TestMatrix) GetState() TestState {
if x != nil {
return x.State
}
return TestState_TEST_STATE_UNSPECIFIED
}
func (x *TestMatrix) GetTimestamp() *timestamppb.Timestamp {
if x != nil {
return x.Timestamp
}
return nil
}
func (x *TestMatrix) GetInvalidMatrixDetails() InvalidMatrixDetails {
if x != nil {
return x.InvalidMatrixDetails
}
return InvalidMatrixDetails_INVALID_MATRIX_DETAILS_UNSPECIFIED
}
func (x *TestMatrix) GetFlakyTestAttempts() int32 {
if x != nil {
return x.FlakyTestAttempts
}
return 0
}
func (x *TestMatrix) GetOutcomeSummary() OutcomeSummary {
if x != nil {
return x.OutcomeSummary
}
return OutcomeSummary_OUTCOME_SUMMARY_UNSPECIFIED
}
func (x *TestMatrix) GetFailFast() bool {
if x != nil {
return x.FailFast
}
return false
}
// A single test executed in a single environment.
type TestExecution struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Output only. Unique id set by the service.
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
// Output only. Id of the containing TestMatrix.
MatrixId string `protobuf:"bytes,9,opt,name=matrix_id,json=matrixId,proto3" json:"matrix_id,omitempty"`
// Output only. The cloud project that owns the test execution.
ProjectId string `protobuf:"bytes,10,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
// Output only. How to run the test.
TestSpecification *TestSpecification `protobuf:"bytes,3,opt,name=test_specification,json=testSpecification,proto3" json:"test_specification,omitempty"`
// Output only. Details about the shard.
Shard *Shard `protobuf:"bytes,12,opt,name=shard,proto3" json:"shard,omitempty"`
// Output only. How the host machine(s) are configured.
Environment *Environment `protobuf:"bytes,4,opt,name=environment,proto3" json:"environment,omitempty"`
// Output only. Indicates the current progress of the test execution
// (e.g., FINISHED).
State TestState `protobuf:"varint,5,opt,name=state,proto3,enum=google.devtools.testing.v1.TestState" json:"state,omitempty"`
// Output only. Where the results for this execution are written.
ToolResultsStep *ToolResultsStep `protobuf:"bytes,11,opt,name=tool_results_step,json=toolResultsStep,proto3" json:"tool_results_step,omitempty"`
// Output only. The time this test execution was initially created.
Timestamp *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
// Output only. Additional details about the running test.
TestDetails *TestDetails `protobuf:"bytes,8,opt,name=test_details,json=testDetails,proto3" json:"test_details,omitempty"`
}
func (x *TestExecution) Reset() {
*x = TestExecution{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *TestExecution) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TestExecution) ProtoMessage() {}
func (x *TestExecution) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use TestExecution.ProtoReflect.Descriptor instead.
func (*TestExecution) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{1}
}
func (x *TestExecution) GetId() string {
if x != nil {
return x.Id
}
return ""
}
func (x *TestExecution) GetMatrixId() string {
if x != nil {
return x.MatrixId
}
return ""
}
func (x *TestExecution) GetProjectId() string {
if x != nil {
return x.ProjectId
}
return ""
}
func (x *TestExecution) GetTestSpecification() *TestSpecification {
if x != nil {
return x.TestSpecification
}
return nil
}
func (x *TestExecution) GetShard() *Shard {
if x != nil {
return x.Shard
}
return nil
}
func (x *TestExecution) GetEnvironment() *Environment {
if x != nil {
return x.Environment
}
return nil
}
func (x *TestExecution) GetState() TestState {
if x != nil {
return x.State
}
return TestState_TEST_STATE_UNSPECIFIED
}
func (x *TestExecution) GetToolResultsStep() *ToolResultsStep {
if x != nil {
return x.ToolResultsStep
}
return nil
}
func (x *TestExecution) GetTimestamp() *timestamppb.Timestamp {
if x != nil {
return x.Timestamp
}
return nil
}
func (x *TestExecution) GetTestDetails() *TestDetails {
if x != nil {
return x.TestDetails
}
return nil
}
// A description of how to run the test.
type TestSpecification struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Max time a test execution is allowed to run before it is
// automatically cancelled.
// The default value is 5 min.
TestTimeout *durationpb.Duration `protobuf:"bytes,1,opt,name=test_timeout,json=testTimeout,proto3" json:"test_timeout,omitempty"`
// Test setup requirements.
//
// Types that are assignable to Setup:
//
// *TestSpecification_TestSetup
// *TestSpecification_IosTestSetup
Setup isTestSpecification_Setup `protobuf_oneof:"setup"`
// Required. The type of test to run.
//
// Types that are assignable to Test:
//
// *TestSpecification_AndroidInstrumentationTest
// *TestSpecification_AndroidRoboTest
// *TestSpecification_AndroidTestLoop
// *TestSpecification_IosXcTest
// *TestSpecification_IosTestLoop
Test isTestSpecification_Test `protobuf_oneof:"test"`
// Disables video recording. May reduce test latency.
DisableVideoRecording bool `protobuf:"varint,10,opt,name=disable_video_recording,json=disableVideoRecording,proto3" json:"disable_video_recording,omitempty"`
// Disables performance metrics recording. May reduce test latency.
DisablePerformanceMetrics bool `protobuf:"varint,11,opt,name=disable_performance_metrics,json=disablePerformanceMetrics,proto3" json:"disable_performance_metrics,omitempty"`
}
func (x *TestSpecification) Reset() {
*x = TestSpecification{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *TestSpecification) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TestSpecification) ProtoMessage() {}
func (x *TestSpecification) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use TestSpecification.ProtoReflect.Descriptor instead.
func (*TestSpecification) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{2}
}
func (x *TestSpecification) GetTestTimeout() *durationpb.Duration {
if x != nil {
return x.TestTimeout
}
return nil
}
func (m *TestSpecification) GetSetup() isTestSpecification_Setup {
if m != nil {
return m.Setup
}
return nil
}
func (x *TestSpecification) GetTestSetup() *TestSetup {
if x, ok := x.GetSetup().(*TestSpecification_TestSetup); ok {
return x.TestSetup
}
return nil
}
func (x *TestSpecification) GetIosTestSetup() *IosTestSetup {
if x, ok := x.GetSetup().(*TestSpecification_IosTestSetup); ok {
return x.IosTestSetup
}
return nil
}
func (m *TestSpecification) GetTest() isTestSpecification_Test {
if m != nil {
return m.Test
}
return nil
}
func (x *TestSpecification) GetAndroidInstrumentationTest() *AndroidInstrumentationTest {
if x, ok := x.GetTest().(*TestSpecification_AndroidInstrumentationTest); ok {
return x.AndroidInstrumentationTest
}
return nil
}
func (x *TestSpecification) GetAndroidRoboTest() *AndroidRoboTest {
if x, ok := x.GetTest().(*TestSpecification_AndroidRoboTest); ok {
return x.AndroidRoboTest
}
return nil
}
func (x *TestSpecification) GetAndroidTestLoop() *AndroidTestLoop {
if x, ok := x.GetTest().(*TestSpecification_AndroidTestLoop); ok {
return x.AndroidTestLoop
}
return nil
}
func (x *TestSpecification) GetIosXcTest() *IosXcTest {
if x, ok := x.GetTest().(*TestSpecification_IosXcTest); ok {
return x.IosXcTest
}
return nil
}
func (x *TestSpecification) GetIosTestLoop() *IosTestLoop {
if x, ok := x.GetTest().(*TestSpecification_IosTestLoop); ok {
return x.IosTestLoop
}
return nil
}
func (x *TestSpecification) GetDisableVideoRecording() bool {
if x != nil {
return x.DisableVideoRecording
}
return false
}
func (x *TestSpecification) GetDisablePerformanceMetrics() bool {
if x != nil {
return x.DisablePerformanceMetrics
}
return false
}
type isTestSpecification_Setup interface {
isTestSpecification_Setup()
}
type TestSpecification_TestSetup struct {
// Test setup requirements for Android e.g. files to install, bootstrap
// scripts.
TestSetup *TestSetup `protobuf:"bytes,6,opt,name=test_setup,json=testSetup,proto3,oneof"`
}
type TestSpecification_IosTestSetup struct {
// Test setup requirements for iOS.
IosTestSetup *IosTestSetup `protobuf:"bytes,14,opt,name=ios_test_setup,json=iosTestSetup,proto3,oneof"`
}
func (*TestSpecification_TestSetup) isTestSpecification_Setup() {}
func (*TestSpecification_IosTestSetup) isTestSpecification_Setup() {}
type isTestSpecification_Test interface {
isTestSpecification_Test()
}
type TestSpecification_AndroidInstrumentationTest struct {
// An Android instrumentation test.
AndroidInstrumentationTest *AndroidInstrumentationTest `protobuf:"bytes,2,opt,name=android_instrumentation_test,json=androidInstrumentationTest,proto3,oneof"`
}
type TestSpecification_AndroidRoboTest struct {
// An Android robo test.
AndroidRoboTest *AndroidRoboTest `protobuf:"bytes,3,opt,name=android_robo_test,json=androidRoboTest,proto3,oneof"`
}
type TestSpecification_AndroidTestLoop struct {
// An Android Application with a Test Loop.
AndroidTestLoop *AndroidTestLoop `protobuf:"bytes,9,opt,name=android_test_loop,json=androidTestLoop,proto3,oneof"`
}
type TestSpecification_IosXcTest struct {
// An iOS XCTest, via an .xctestrun file.
IosXcTest *IosXcTest `protobuf:"bytes,13,opt,name=ios_xc_test,json=iosXcTest,proto3,oneof"`
}
type TestSpecification_IosTestLoop struct {
// An iOS application with a test loop.
IosTestLoop *IosTestLoop `protobuf:"bytes,15,opt,name=ios_test_loop,json=iosTestLoop,proto3,oneof"`
}
func (*TestSpecification_AndroidInstrumentationTest) isTestSpecification_Test() {}
func (*TestSpecification_AndroidRoboTest) isTestSpecification_Test() {}
func (*TestSpecification_AndroidTestLoop) isTestSpecification_Test() {}
func (*TestSpecification_IosXcTest) isTestSpecification_Test() {}
func (*TestSpecification_IosTestLoop) isTestSpecification_Test() {}
type SystraceSetup struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Systrace duration in seconds.
// Should be between 1 and 30 seconds. 0 disables systrace.
DurationSeconds int32 `protobuf:"varint,1,opt,name=duration_seconds,json=durationSeconds,proto3" json:"duration_seconds,omitempty"`
}
func (x *SystraceSetup) Reset() {
*x = SystraceSetup{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SystraceSetup) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SystraceSetup) ProtoMessage() {}
func (x *SystraceSetup) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SystraceSetup.ProtoReflect.Descriptor instead.
func (*SystraceSetup) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{3}
}
func (x *SystraceSetup) GetDurationSeconds() int32 {
if x != nil {
return x.DurationSeconds
}
return 0
}
// A description of how to set up the Android device prior to running the test.
type TestSetup struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// List of files to push to the device before starting the test.
FilesToPush []*DeviceFile `protobuf:"bytes,1,rep,name=files_to_push,json=filesToPush,proto3" json:"files_to_push,omitempty"`
// 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.
DirectoriesToPull []string `protobuf:"bytes,2,rep,name=directories_to_pull,json=directoriesToPull,proto3" json:"directories_to_pull,omitempty"`
// APKs to install in addition to those being directly tested.
// Currently capped at 100.
AdditionalApks []*Apk `protobuf:"bytes,3,rep,name=additional_apks,json=additionalApks,proto3" json:"additional_apks,omitempty"`
// The device will be logged in on this account for the duration of the test.
Account *Account `protobuf:"bytes,4,opt,name=account,proto3" json:"account,omitempty"`
// 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.
NetworkProfile string `protobuf:"bytes,5,opt,name=network_profile,json=networkProfile,proto3" json:"network_profile,omitempty"`
// Environment variables to set for the test (only applicable for
// instrumentation tests).
EnvironmentVariables []*EnvironmentVariable `protobuf:"bytes,6,rep,name=environment_variables,json=environmentVariables,proto3" json:"environment_variables,omitempty"`
// Deprecated: Systrace uses Python 2 which has been sunset 2020-01-01.
// Support of Systrace may stop at any time, at which point no Systrace file
// will be provided in the results.
//
// 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.
//
// Deprecated: Do not use.
Systrace *SystraceSetup `protobuf:"bytes,9,opt,name=systrace,proto3" json:"systrace,omitempty"`
// Whether to prevent all runtime permissions to be granted at app install
DontAutograntPermissions bool `protobuf:"varint,23,opt,name=dont_autogrant_permissions,json=dontAutograntPermissions,proto3" json:"dont_autogrant_permissions,omitempty"`
}
func (x *TestSetup) Reset() {
*x = TestSetup{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *TestSetup) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TestSetup) ProtoMessage() {}
func (x *TestSetup) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use TestSetup.ProtoReflect.Descriptor instead.
func (*TestSetup) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{4}
}
func (x *TestSetup) GetFilesToPush() []*DeviceFile {
if x != nil {
return x.FilesToPush
}
return nil
}
func (x *TestSetup) GetDirectoriesToPull() []string {
if x != nil {
return x.DirectoriesToPull
}
return nil
}
func (x *TestSetup) GetAdditionalApks() []*Apk {
if x != nil {
return x.AdditionalApks
}
return nil
}
func (x *TestSetup) GetAccount() *Account {
if x != nil {
return x.Account
}
return nil
}
func (x *TestSetup) GetNetworkProfile() string {
if x != nil {
return x.NetworkProfile
}
return ""
}
func (x *TestSetup) GetEnvironmentVariables() []*EnvironmentVariable {
if x != nil {
return x.EnvironmentVariables
}
return nil
}
// Deprecated: Do not use.
func (x *TestSetup) GetSystrace() *SystraceSetup {
if x != nil {
return x.Systrace
}
return nil
}
func (x *TestSetup) GetDontAutograntPermissions() bool {
if x != nil {
return x.DontAutograntPermissions
}
return false
}
// A description of how to set up an iOS device prior to running the test.
type IosTestSetup struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// 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.
NetworkProfile string `protobuf:"bytes,1,opt,name=network_profile,json=networkProfile,proto3" json:"network_profile,omitempty"`
// iOS apps to install in addition to those being directly tested.
AdditionalIpas []*FileReference `protobuf:"bytes,2,rep,name=additional_ipas,json=additionalIpas,proto3" json:"additional_ipas,omitempty"`
// List of files to push to the device before starting the test.
PushFiles []*IosDeviceFile `protobuf:"bytes,3,rep,name=push_files,json=pushFiles,proto3" json:"push_files,omitempty"`
// 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 (such as
// /private/var/mobile/Media) or within an accessible directory inside the
// app's filesystem (such as /Documents) by specifying the bundle ID.
PullDirectories []*IosDeviceFile `protobuf:"bytes,4,rep,name=pull_directories,json=pullDirectories,proto3" json:"pull_directories,omitempty"`
}
func (x *IosTestSetup) Reset() {
*x = IosTestSetup{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *IosTestSetup) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*IosTestSetup) ProtoMessage() {}
func (x *IosTestSetup) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use IosTestSetup.ProtoReflect.Descriptor instead.
func (*IosTestSetup) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{5}
}
func (x *IosTestSetup) GetNetworkProfile() string {
if x != nil {
return x.NetworkProfile
}
return ""
}
func (x *IosTestSetup) GetAdditionalIpas() []*FileReference {
if x != nil {
return x.AdditionalIpas
}
return nil
}
func (x *IosTestSetup) GetPushFiles() []*IosDeviceFile {
if x != nil {
return x.PushFiles
}
return nil
}
func (x *IosTestSetup) GetPullDirectories() []*IosDeviceFile {
if x != nil {
return x.PullDirectories
}
return nil
}
// A key-value pair passed as an environment variable to the test.
type EnvironmentVariable struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Key for the environment variable.
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
// Value for the environment variable.
Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
}
func (x *EnvironmentVariable) Reset() {
*x = EnvironmentVariable{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *EnvironmentVariable) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*EnvironmentVariable) ProtoMessage() {}
func (x *EnvironmentVariable) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use EnvironmentVariable.ProtoReflect.Descriptor instead.
func (*EnvironmentVariable) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{6}
}
func (x *EnvironmentVariable) GetKey() string {
if x != nil {
return x.Key
}
return ""
}
func (x *EnvironmentVariable) GetValue() string {
if x != nil {
return x.Value
}
return ""
}
// Identifies an account and how to log into it.
type Account struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. The type of account, based what it's for (e.g. Google) and what
// its login mechanism is (e.g. username and password).
//
// Types that are assignable to AccountType:
//
// *Account_GoogleAuto
AccountType isAccount_AccountType `protobuf_oneof:"account_type"`
}
func (x *Account) Reset() {
*x = Account{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Account) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Account) ProtoMessage() {}
func (x *Account) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Account.ProtoReflect.Descriptor instead.
func (*Account) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{7}
}
func (m *Account) GetAccountType() isAccount_AccountType {
if m != nil {
return m.AccountType
}
return nil
}
func (x *Account) GetGoogleAuto() *GoogleAuto {
if x, ok := x.GetAccountType().(*Account_GoogleAuto); ok {
return x.GoogleAuto
}
return nil
}
type isAccount_AccountType interface {
isAccount_AccountType()
}
type Account_GoogleAuto struct {
// An automatic google login account.
GoogleAuto *GoogleAuto `protobuf:"bytes,1,opt,name=google_auto,json=googleAuto,proto3,oneof"`
}
func (*Account_GoogleAuto) isAccount_AccountType() {}
// 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.
type GoogleAuto struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *GoogleAuto) Reset() {
*x = GoogleAuto{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GoogleAuto) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GoogleAuto) ProtoMessage() {}
func (x *GoogleAuto) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GoogleAuto.ProtoReflect.Descriptor instead.
func (*GoogleAuto) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{8}
}
// An Android package file to install.
type Apk struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The path to an APK to be installed on the device before the test begins.
Location *FileReference `protobuf:"bytes,1,opt,name=location,proto3" json:"location,omitempty"`
// The java package for the APK to be installed.
// Value is determined by examining the application's manifest.
PackageName string `protobuf:"bytes,2,opt,name=package_name,json=packageName,proto3" json:"package_name,omitempty"`
}
func (x *Apk) Reset() {
*x = Apk{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Apk) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Apk) ProtoMessage() {}
func (x *Apk) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[9]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Apk.ProtoReflect.Descriptor instead.
func (*Apk) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{9}
}
func (x *Apk) GetLocation() *FileReference {
if x != nil {
return x.Location
}
return nil
}
func (x *Apk) GetPackageName() string {
if x != nil {
return x.PackageName
}
return ""
}
// 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.
type AppBundle struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. Bundle location information.
//
// Types that are assignable to Bundle:
//
// *AppBundle_BundleLocation
Bundle isAppBundle_Bundle `protobuf_oneof:"bundle"`
}
func (x *AppBundle) Reset() {
*x = AppBundle{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *AppBundle) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AppBundle) ProtoMessage() {}
func (x *AppBundle) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use AppBundle.ProtoReflect.Descriptor instead.
func (*AppBundle) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{10}
}
func (m *AppBundle) GetBundle() isAppBundle_Bundle {
if m != nil {
return m.Bundle
}
return nil
}
func (x *AppBundle) GetBundleLocation() *FileReference {
if x, ok := x.GetBundle().(*AppBundle_BundleLocation); ok {
return x.BundleLocation
}
return nil
}
type isAppBundle_Bundle interface {
isAppBundle_Bundle()
}
type AppBundle_BundleLocation struct {
// .aab file representing the app bundle under test.
BundleLocation *FileReference `protobuf:"bytes,1,opt,name=bundle_location,json=bundleLocation,proto3,oneof"`
}
func (*AppBundle_BundleLocation) isAppBundle_Bundle() {}
// A single device file description.
type DeviceFile struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required.
//
// Types that are assignable to DeviceFile:
//
// *DeviceFile_ObbFile
// *DeviceFile_RegularFile
DeviceFile isDeviceFile_DeviceFile `protobuf_oneof:"device_file"`
}
func (x *DeviceFile) Reset() {
*x = DeviceFile{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DeviceFile) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DeviceFile) ProtoMessage() {}
func (x *DeviceFile) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[11]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use DeviceFile.ProtoReflect.Descriptor instead.
func (*DeviceFile) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{11}
}
func (m *DeviceFile) GetDeviceFile() isDeviceFile_DeviceFile {
if m != nil {
return m.DeviceFile
}
return nil
}
func (x *DeviceFile) GetObbFile() *ObbFile {
if x, ok := x.GetDeviceFile().(*DeviceFile_ObbFile); ok {
return x.ObbFile
}
return nil
}
func (x *DeviceFile) GetRegularFile() *RegularFile {
if x, ok := x.GetDeviceFile().(*DeviceFile_RegularFile); ok {
return x.RegularFile
}
return nil
}
type isDeviceFile_DeviceFile interface {
isDeviceFile_DeviceFile()
}
type DeviceFile_ObbFile struct {
// A reference to an opaque binary blob file.
ObbFile *ObbFile `protobuf:"bytes,1,opt,name=obb_file,json=obbFile,proto3,oneof"`
}
type DeviceFile_RegularFile struct {
// A reference to a regular file.
RegularFile *RegularFile `protobuf:"bytes,2,opt,name=regular_file,json=regularFile,proto3,oneof"`
}
func (*DeviceFile_ObbFile) isDeviceFile_DeviceFile() {}
func (*DeviceFile_RegularFile) isDeviceFile_DeviceFile() {}
// An opaque binary blob file to install on the device before the test starts.
type ObbFile struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// 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.
ObbFileName string `protobuf:"bytes,1,opt,name=obb_file_name,json=obbFileName,proto3" json:"obb_file_name,omitempty"`
// Required. Opaque Binary Blob (OBB) file(s) to install on the device.
Obb *FileReference `protobuf:"bytes,2,opt,name=obb,proto3" json:"obb,omitempty"`
}
func (x *ObbFile) Reset() {
*x = ObbFile{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ObbFile) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ObbFile) ProtoMessage() {}
func (x *ObbFile) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[12]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ObbFile.ProtoReflect.Descriptor instead.
func (*ObbFile) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{12}
}
func (x *ObbFile) GetObbFileName() string {
if x != nil {
return x.ObbFileName
}
return ""
}
func (x *ObbFile) GetObb() *FileReference {
if x != nil {
return x.Obb
}
return nil
}
// A file or directory to install on the device before the test starts.
type RegularFile struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. The source file.
Content *FileReference `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"`
// 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.
DevicePath string `protobuf:"bytes,2,opt,name=device_path,json=devicePath,proto3" json:"device_path,omitempty"`
}
func (x *RegularFile) Reset() {
*x = RegularFile{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RegularFile) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RegularFile) ProtoMessage() {}
func (x *RegularFile) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[13]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RegularFile.ProtoReflect.Descriptor instead.
func (*RegularFile) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{13}
}
func (x *RegularFile) GetContent() *FileReference {
if x != nil {
return x.Content
}
return nil
}
func (x *RegularFile) GetDevicePath() string {
if x != nil {
return x.DevicePath
}
return ""
}
// A file or directory to install on the device before the test starts.
type IosDeviceFile struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The source file
Content *FileReference `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"`
// 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.
BundleId string `protobuf:"bytes,2,opt,name=bundle_id,json=bundleId,proto3" json:"bundle_id,omitempty"`
// Location of the file on the device, inside the app's sandboxed filesystem
DevicePath string `protobuf:"bytes,3,opt,name=device_path,json=devicePath,proto3" json:"device_path,omitempty"`
}
func (x *IosDeviceFile) Reset() {
*x = IosDeviceFile{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *IosDeviceFile) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*IosDeviceFile) ProtoMessage() {}
func (x *IosDeviceFile) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[14]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use IosDeviceFile.ProtoReflect.Descriptor instead.
func (*IosDeviceFile) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{14}
}
func (x *IosDeviceFile) GetContent() *FileReference {
if x != nil {
return x.Content
}
return nil
}
func (x *IosDeviceFile) GetBundleId() string {
if x != nil {
return x.BundleId
}
return ""
}
func (x *IosDeviceFile) GetDevicePath() string {
if x != nil {
return x.DevicePath
}
return ""
}
// 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.
type AndroidTestLoop struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. The Android package to test.
//
// Types that are assignable to AppUnderTest:
//
// *AndroidTestLoop_AppApk
// *AndroidTestLoop_AppBundle
AppUnderTest isAndroidTestLoop_AppUnderTest `protobuf_oneof:"app_under_test"`
// The java package for the application under test.
// The default is determined by examining the application's manifest.
AppPackageId string `protobuf:"bytes,2,opt,name=app_package_id,json=appPackageId,proto3" json:"app_package_id,omitempty"`
// The list of scenarios that should be run during the test.
// The default is all test loops, derived from the application's
// manifest.
Scenarios []int32 `protobuf:"varint,3,rep,packed,name=scenarios,proto3" json:"scenarios,omitempty"`
// 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.
ScenarioLabels []string `protobuf:"bytes,4,rep,name=scenario_labels,json=scenarioLabels,proto3" json:"scenario_labels,omitempty"`
}
func (x *AndroidTestLoop) Reset() {
*x = AndroidTestLoop{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *AndroidTestLoop) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AndroidTestLoop) ProtoMessage() {}
func (x *AndroidTestLoop) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[15]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use AndroidTestLoop.ProtoReflect.Descriptor instead.
func (*AndroidTestLoop) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{15}
}
func (m *AndroidTestLoop) GetAppUnderTest() isAndroidTestLoop_AppUnderTest {
if m != nil {
return m.AppUnderTest
}
return nil
}
func (x *AndroidTestLoop) GetAppApk() *FileReference {
if x, ok := x.GetAppUnderTest().(*AndroidTestLoop_AppApk); ok {
return x.AppApk
}
return nil
}
func (x *AndroidTestLoop) GetAppBundle() *AppBundle {
if x, ok := x.GetAppUnderTest().(*AndroidTestLoop_AppBundle); ok {
return x.AppBundle
}
return nil
}
func (x *AndroidTestLoop) GetAppPackageId() string {
if x != nil {
return x.AppPackageId
}
return ""
}
func (x *AndroidTestLoop) GetScenarios() []int32 {
if x != nil {
return x.Scenarios
}
return nil
}
func (x *AndroidTestLoop) GetScenarioLabels() []string {
if x != nil {
return x.ScenarioLabels
}
return nil
}
type isAndroidTestLoop_AppUnderTest interface {
isAndroidTestLoop_AppUnderTest()
}
type AndroidTestLoop_AppApk struct {
// The APK for the application under test.
AppApk *FileReference `protobuf:"bytes,1,opt,name=app_apk,json=appApk,proto3,oneof"`
}
type AndroidTestLoop_AppBundle struct {
// A multi-apk app bundle for the application under test.
AppBundle *AppBundle `protobuf:"bytes,5,opt,name=app_bundle,json=appBundle,proto3,oneof"`
}
func (*AndroidTestLoop_AppApk) isAndroidTestLoop_AppUnderTest() {}
func (*AndroidTestLoop_AppBundle) isAndroidTestLoop_AppUnderTest() {}
// 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.
type IosXcTest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// 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.
TestsZip *FileReference `protobuf:"bytes,1,opt,name=tests_zip,json=testsZip,proto3" json:"tests_zip,omitempty"`
// 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.
Xctestrun *FileReference `protobuf:"bytes,2,opt,name=xctestrun,proto3" json:"xctestrun,omitempty"`
// 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.
XcodeVersion string `protobuf:"bytes,3,opt,name=xcode_version,json=xcodeVersion,proto3" json:"xcode_version,omitempty"`
// Output only. The bundle id for the application under test.
AppBundleId string `protobuf:"bytes,4,opt,name=app_bundle_id,json=appBundleId,proto3" json:"app_bundle_id,omitempty"`
// 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.
TestSpecialEntitlements bool `protobuf:"varint,6,opt,name=test_special_entitlements,json=testSpecialEntitlements,proto3" json:"test_special_entitlements,omitempty"`
}
func (x *IosXcTest) Reset() {
*x = IosXcTest{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *IosXcTest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*IosXcTest) ProtoMessage() {}
func (x *IosXcTest) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[16]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use IosXcTest.ProtoReflect.Descriptor instead.
func (*IosXcTest) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{16}
}
func (x *IosXcTest) GetTestsZip() *FileReference {
if x != nil {
return x.TestsZip
}
return nil
}
func (x *IosXcTest) GetXctestrun() *FileReference {
if x != nil {
return x.Xctestrun
}
return nil
}
func (x *IosXcTest) GetXcodeVersion() string {
if x != nil {
return x.XcodeVersion
}
return ""
}
func (x *IosXcTest) GetAppBundleId() string {
if x != nil {
return x.AppBundleId
}
return ""
}
func (x *IosXcTest) GetTestSpecialEntitlements() bool {
if x != nil {
return x.TestSpecialEntitlements
}
return false
}
// 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.
type IosTestLoop struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. The .ipa of the application to test.
AppIpa *FileReference `protobuf:"bytes,1,opt,name=app_ipa,json=appIpa,proto3" json:"app_ipa,omitempty"`
// The list of scenarios that should be run during the test. Defaults to the
// single scenario 0 if unspecified.
Scenarios []int32 `protobuf:"varint,2,rep,packed,name=scenarios,proto3" json:"scenarios,omitempty"`
// Output only. The bundle id for the application under test.
AppBundleId string `protobuf:"bytes,3,opt,name=app_bundle_id,json=appBundleId,proto3" json:"app_bundle_id,omitempty"`
}
func (x *IosTestLoop) Reset() {
*x = IosTestLoop{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *IosTestLoop) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*IosTestLoop) ProtoMessage() {}
func (x *IosTestLoop) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[17]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use IosTestLoop.ProtoReflect.Descriptor instead.
func (*IosTestLoop) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{17}
}
func (x *IosTestLoop) GetAppIpa() *FileReference {
if x != nil {
return x.AppIpa
}
return nil
}
func (x *IosTestLoop) GetScenarios() []int32 {
if x != nil {
return x.Scenarios
}
return nil
}
func (x *IosTestLoop) GetAppBundleId() string {
if x != nil {
return x.AppBundleId
}
return ""
}
// 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 <https://developer.android.com/training/testing/fundamentals> for
// more information on types of Android tests.
type AndroidInstrumentationTest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required.
//
// Types that are assignable to AppUnderTest:
//
// *AndroidInstrumentationTest_AppApk
// *AndroidInstrumentationTest_AppBundle
AppUnderTest isAndroidInstrumentationTest_AppUnderTest `protobuf_oneof:"app_under_test"`
// Required. The APK containing the test code to be executed.
TestApk *FileReference `protobuf:"bytes,2,opt,name=test_apk,json=testApk,proto3" json:"test_apk,omitempty"`
// The java package for the application under test.
// The default value is determined by examining the application's manifest.
AppPackageId string `protobuf:"bytes,3,opt,name=app_package_id,json=appPackageId,proto3" json:"app_package_id,omitempty"`
// The java package for the test to be executed.
// The default value is determined by examining the application's manifest.
TestPackageId string `protobuf:"bytes,4,opt,name=test_package_id,json=testPackageId,proto3" json:"test_package_id,omitempty"`
// The InstrumentationTestRunner class.
// The default value is determined by examining the application's manifest.
TestRunnerClass string `protobuf:"bytes,5,opt,name=test_runner_class,json=testRunnerClass,proto3" json:"test_runner_class,omitempty"`
// 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.
TestTargets []string `protobuf:"bytes,6,rep,name=test_targets,json=testTargets,proto3" json:"test_targets,omitempty"`
// 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.1 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 OrchestratorOption `protobuf:"varint,7,opt,name=orchestrator_option,json=orchestratorOption,proto3,enum=google.devtools.testing.v1.OrchestratorOption" json:"orchestrator_option,omitempty"`
// The option to run tests in multiple shards in parallel.
ShardingOption *ShardingOption `protobuf:"bytes,9,opt,name=sharding_option,json=shardingOption,proto3" json:"sharding_option,omitempty"`
}
func (x *AndroidInstrumentationTest) Reset() {
*x = AndroidInstrumentationTest{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *AndroidInstrumentationTest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AndroidInstrumentationTest) ProtoMessage() {}
func (x *AndroidInstrumentationTest) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[18]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use AndroidInstrumentationTest.ProtoReflect.Descriptor instead.
func (*AndroidInstrumentationTest) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{18}
}
func (m *AndroidInstrumentationTest) GetAppUnderTest() isAndroidInstrumentationTest_AppUnderTest {
if m != nil {
return m.AppUnderTest
}
return nil
}
func (x *AndroidInstrumentationTest) GetAppApk() *FileReference {
if x, ok := x.GetAppUnderTest().(*AndroidInstrumentationTest_AppApk); ok {
return x.AppApk
}
return nil
}
func (x *AndroidInstrumentationTest) GetAppBundle() *AppBundle {
if x, ok := x.GetAppUnderTest().(*AndroidInstrumentationTest_AppBundle); ok {
return x.AppBundle
}
return nil
}
func (x *AndroidInstrumentationTest) GetTestApk() *FileReference {
if x != nil {
return x.TestApk
}
return nil
}
func (x *AndroidInstrumentationTest) GetAppPackageId() string {
if x != nil {
return x.AppPackageId
}
return ""
}
func (x *AndroidInstrumentationTest) GetTestPackageId() string {
if x != nil {
return x.TestPackageId
}
return ""
}
func (x *AndroidInstrumentationTest) GetTestRunnerClass() string {
if x != nil {
return x.TestRunnerClass
}
return ""
}
func (x *AndroidInstrumentationTest) GetTestTargets() []string {
if x != nil {
return x.TestTargets
}
return nil
}
func (x *AndroidInstrumentationTest) GetOrchestratorOption() OrchestratorOption {
if x != nil {
return x.OrchestratorOption
}
return OrchestratorOption_ORCHESTRATOR_OPTION_UNSPECIFIED
}
func (x *AndroidInstrumentationTest) GetShardingOption() *ShardingOption {
if x != nil {
return x.ShardingOption
}
return nil
}
type isAndroidInstrumentationTest_AppUnderTest interface {
isAndroidInstrumentationTest_AppUnderTest()
}
type AndroidInstrumentationTest_AppApk struct {
// The APK for the application under test.
AppApk *FileReference `protobuf:"bytes,1,opt,name=app_apk,json=appApk,proto3,oneof"`
}
type AndroidInstrumentationTest_AppBundle struct {
// A multi-apk app bundle for the application under test.
AppBundle *AppBundle `protobuf:"bytes,8,opt,name=app_bundle,json=appBundle,proto3,oneof"`
}
func (*AndroidInstrumentationTest_AppApk) isAndroidInstrumentationTest_AppUnderTest() {}
func (*AndroidInstrumentationTest_AppBundle) isAndroidInstrumentationTest_AppUnderTest() {}
// A test of an android application that explores the application on a virtual
// or physical Android Device, finding culprits and crashes as it goes.
type AndroidRoboTest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required.
//
// Types that are assignable to AppUnderTest:
//
// *AndroidRoboTest_AppApk
// *AndroidRoboTest_AppBundle
AppUnderTest isAndroidRoboTest_AppUnderTest `protobuf_oneof:"app_under_test"`
// The java package for the application under test.
// The default value is determined by examining the application's manifest.
AppPackageId string `protobuf:"bytes,2,opt,name=app_package_id,json=appPackageId,proto3" json:"app_package_id,omitempty"`
// The initial activity that should be used to start the app.
AppInitialActivity string `protobuf:"bytes,3,opt,name=app_initial_activity,json=appInitialActivity,proto3" json:"app_initial_activity,omitempty"`
// 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.
//
// Deprecated: Do not use.
MaxDepth int32 `protobuf:"varint,7,opt,name=max_depth,json=maxDepth,proto3" json:"max_depth,omitempty"`
// The max number of steps Robo can execute.
// Default is no limit.
//
// Deprecated: Do not use.
MaxSteps int32 `protobuf:"varint,8,opt,name=max_steps,json=maxSteps,proto3" json:"max_steps,omitempty"`
// 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.
RoboDirectives []*RoboDirective `protobuf:"bytes,11,rep,name=robo_directives,json=roboDirectives,proto3" json:"robo_directives,omitempty"`
// The mode in which Robo should run. Most clients should allow the server to
// populate this field automatically.
RoboMode RoboMode `protobuf:"varint,14,opt,name=robo_mode,json=roboMode,proto3,enum=google.devtools.testing.v1.RoboMode" json:"robo_mode,omitempty"`
// A JSON file with a sequence of actions Robo should perform as a prologue
// for the crawl.
RoboScript *FileReference `protobuf:"bytes,13,opt,name=robo_script,json=roboScript,proto3" json:"robo_script,omitempty"`
// 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).
StartingIntents []*RoboStartingIntent `protobuf:"bytes,15,rep,name=starting_intents,json=startingIntents,proto3" json:"starting_intents,omitempty"`
}
func (x *AndroidRoboTest) Reset() {
*x = AndroidRoboTest{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *AndroidRoboTest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AndroidRoboTest) ProtoMessage() {}
func (x *AndroidRoboTest) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[19]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use AndroidRoboTest.ProtoReflect.Descriptor instead.
func (*AndroidRoboTest) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{19}
}
func (m *AndroidRoboTest) GetAppUnderTest() isAndroidRoboTest_AppUnderTest {
if m != nil {
return m.AppUnderTest
}
return nil
}
func (x *AndroidRoboTest) GetAppApk() *FileReference {
if x, ok := x.GetAppUnderTest().(*AndroidRoboTest_AppApk); ok {
return x.AppApk
}
return nil
}
func (x *AndroidRoboTest) GetAppBundle() *AppBundle {
if x, ok := x.GetAppUnderTest().(*AndroidRoboTest_AppBundle); ok {
return x.AppBundle
}
return nil
}
func (x *AndroidRoboTest) GetAppPackageId() string {
if x != nil {
return x.AppPackageId
}
return ""
}
func (x *AndroidRoboTest) GetAppInitialActivity() string {
if x != nil {
return x.AppInitialActivity
}
return ""
}
// Deprecated: Do not use.
func (x *AndroidRoboTest) GetMaxDepth() int32 {
if x != nil {
return x.MaxDepth
}
return 0
}
// Deprecated: Do not use.
func (x *AndroidRoboTest) GetMaxSteps() int32 {
if x != nil {
return x.MaxSteps
}
return 0
}
func (x *AndroidRoboTest) GetRoboDirectives() []*RoboDirective {
if x != nil {
return x.RoboDirectives
}
return nil
}
func (x *AndroidRoboTest) GetRoboMode() RoboMode {
if x != nil {
return x.RoboMode
}
return RoboMode_ROBO_MODE_UNSPECIFIED
}
func (x *AndroidRoboTest) GetRoboScript() *FileReference {
if x != nil {
return x.RoboScript
}
return nil
}
func (x *AndroidRoboTest) GetStartingIntents() []*RoboStartingIntent {
if x != nil {
return x.StartingIntents
}
return nil
}
type isAndroidRoboTest_AppUnderTest interface {
isAndroidRoboTest_AppUnderTest()
}
type AndroidRoboTest_AppApk struct {
// The APK for the application under test.
AppApk *FileReference `protobuf:"bytes,1,opt,name=app_apk,json=appApk,proto3,oneof"`
}
type AndroidRoboTest_AppBundle struct {
// A multi-apk app bundle for the application under test.
AppBundle *AppBundle `protobuf:"bytes,16,opt,name=app_bundle,json=appBundle,proto3,oneof"`
}
func (*AndroidRoboTest_AppApk) isAndroidRoboTest_AppUnderTest() {}
func (*AndroidRoboTest_AppBundle) isAndroidRoboTest_AppUnderTest() {}
// 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.
type RoboDirective struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// 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
ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
// 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.
InputText string `protobuf:"bytes,2,opt,name=input_text,json=inputText,proto3" json:"input_text,omitempty"`
// Required. The type of action that Robo should perform on the specified
// element.
ActionType RoboActionType `protobuf:"varint,3,opt,name=action_type,json=actionType,proto3,enum=google.devtools.testing.v1.RoboActionType" json:"action_type,omitempty"`
}
func (x *RoboDirective) Reset() {
*x = RoboDirective{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RoboDirective) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RoboDirective) ProtoMessage() {}
func (x *RoboDirective) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[20]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RoboDirective.ProtoReflect.Descriptor instead.
func (*RoboDirective) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{20}
}
func (x *RoboDirective) GetResourceName() string {
if x != nil {
return x.ResourceName
}
return ""
}
func (x *RoboDirective) GetInputText() string {
if x != nil {
return x.InputText
}
return ""
}
func (x *RoboDirective) GetActionType() RoboActionType {
if x != nil {
return x.ActionType
}
return RoboActionType_ACTION_TYPE_UNSPECIFIED
}
// Message for specifying the start activities to crawl.
type RoboStartingIntent struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. Intent details to start an activity.
//
// Types that are assignable to StartingIntent:
//
// *RoboStartingIntent_LauncherActivity
// *RoboStartingIntent_StartActivity
StartingIntent isRoboStartingIntent_StartingIntent `protobuf_oneof:"starting_intent"`
// Timeout in seconds for each intent.
Timeout *durationpb.Duration `protobuf:"bytes,3,opt,name=timeout,proto3" json:"timeout,omitempty"`
}
func (x *RoboStartingIntent) Reset() {
*x = RoboStartingIntent{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RoboStartingIntent) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RoboStartingIntent) ProtoMessage() {}
func (x *RoboStartingIntent) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[21]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RoboStartingIntent.ProtoReflect.Descriptor instead.
func (*RoboStartingIntent) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{21}
}
func (m *RoboStartingIntent) GetStartingIntent() isRoboStartingIntent_StartingIntent {
if m != nil {
return m.StartingIntent
}
return nil
}
func (x *RoboStartingIntent) GetLauncherActivity() *LauncherActivityIntent {
if x, ok := x.GetStartingIntent().(*RoboStartingIntent_LauncherActivity); ok {
return x.LauncherActivity
}
return nil
}
func (x *RoboStartingIntent) GetStartActivity() *StartActivityIntent {
if x, ok := x.GetStartingIntent().(*RoboStartingIntent_StartActivity); ok {
return x.StartActivity
}
return nil
}
func (x *RoboStartingIntent) GetTimeout() *durationpb.Duration {
if x != nil {
return x.Timeout
}
return nil
}
type isRoboStartingIntent_StartingIntent interface {
isRoboStartingIntent_StartingIntent()
}
type RoboStartingIntent_LauncherActivity struct {
// An intent that starts the main launcher activity.
LauncherActivity *LauncherActivityIntent `protobuf:"bytes,1,opt,name=launcher_activity,json=launcherActivity,proto3,oneof"`
}
type RoboStartingIntent_StartActivity struct {
// An intent that starts an activity with specific details.
StartActivity *StartActivityIntent `protobuf:"bytes,2,opt,name=start_activity,json=startActivity,proto3,oneof"`
}
func (*RoboStartingIntent_LauncherActivity) isRoboStartingIntent_StartingIntent() {}
func (*RoboStartingIntent_StartActivity) isRoboStartingIntent_StartingIntent() {}
// Specifies an intent that starts the main launcher activity.
type LauncherActivityIntent struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *LauncherActivityIntent) Reset() {
*x = LauncherActivityIntent{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[22]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *LauncherActivityIntent) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*LauncherActivityIntent) ProtoMessage() {}
func (x *LauncherActivityIntent) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[22]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use LauncherActivityIntent.ProtoReflect.Descriptor instead.
func (*LauncherActivityIntent) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{22}
}
// A starting intent specified by an action, uri, and categories.
type StartActivityIntent struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Action name.
// Required for START_ACTIVITY.
Action string `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"`
// URI for the action.
Uri string `protobuf:"bytes,3,opt,name=uri,proto3" json:"uri,omitempty"`
// Intent categories to set on the intent.
Categories []string `protobuf:"bytes,4,rep,name=categories,proto3" json:"categories,omitempty"`
}
func (x *StartActivityIntent) Reset() {
*x = StartActivityIntent{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[23]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *StartActivityIntent) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StartActivityIntent) ProtoMessage() {}
func (x *StartActivityIntent) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[23]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use StartActivityIntent.ProtoReflect.Descriptor instead.
func (*StartActivityIntent) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{23}
}
func (x *StartActivityIntent) GetAction() string {
if x != nil {
return x.Action
}
return ""
}
func (x *StartActivityIntent) GetUri() string {
if x != nil {
return x.Uri
}
return ""
}
func (x *StartActivityIntent) GetCategories() []string {
if x != nil {
return x.Categories
}
return nil
}
// The matrix of environments in which the test is to be executed.
type EnvironmentMatrix struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. The environment matrix.
//
// Types that are assignable to EnvironmentMatrix:
//
// *EnvironmentMatrix_AndroidMatrix
// *EnvironmentMatrix_AndroidDeviceList
// *EnvironmentMatrix_IosDeviceList
EnvironmentMatrix isEnvironmentMatrix_EnvironmentMatrix `protobuf_oneof:"environment_matrix"`
}
func (x *EnvironmentMatrix) Reset() {
*x = EnvironmentMatrix{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[24]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *EnvironmentMatrix) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*EnvironmentMatrix) ProtoMessage() {}
func (x *EnvironmentMatrix) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[24]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use EnvironmentMatrix.ProtoReflect.Descriptor instead.
func (*EnvironmentMatrix) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{24}
}
func (m *EnvironmentMatrix) GetEnvironmentMatrix() isEnvironmentMatrix_EnvironmentMatrix {
if m != nil {
return m.EnvironmentMatrix
}
return nil
}
func (x *EnvironmentMatrix) GetAndroidMatrix() *AndroidMatrix {
if x, ok := x.GetEnvironmentMatrix().(*EnvironmentMatrix_AndroidMatrix); ok {
return x.AndroidMatrix
}
return nil
}
func (x *EnvironmentMatrix) GetAndroidDeviceList() *AndroidDeviceList {
if x, ok := x.GetEnvironmentMatrix().(*EnvironmentMatrix_AndroidDeviceList); ok {
return x.AndroidDeviceList
}
return nil
}
func (x *EnvironmentMatrix) GetIosDeviceList() *IosDeviceList {
if x, ok := x.GetEnvironmentMatrix().(*EnvironmentMatrix_IosDeviceList); ok {
return x.IosDeviceList
}
return nil
}
type isEnvironmentMatrix_EnvironmentMatrix interface {
isEnvironmentMatrix_EnvironmentMatrix()
}
type EnvironmentMatrix_AndroidMatrix struct {
// A matrix of Android devices.
AndroidMatrix *AndroidMatrix `protobuf:"bytes,1,opt,name=android_matrix,json=androidMatrix,proto3,oneof"`
}
type EnvironmentMatrix_AndroidDeviceList struct {
// A list of Android devices; the test will be run only on the specified
// devices.
AndroidDeviceList *AndroidDeviceList `protobuf:"bytes,2,opt,name=android_device_list,json=androidDeviceList,proto3,oneof"`
}
type EnvironmentMatrix_IosDeviceList struct {
// A list of iOS devices.
IosDeviceList *IosDeviceList `protobuf:"bytes,3,opt,name=ios_device_list,json=iosDeviceList,proto3,oneof"`
}
func (*EnvironmentMatrix_AndroidMatrix) isEnvironmentMatrix_EnvironmentMatrix() {}
func (*EnvironmentMatrix_AndroidDeviceList) isEnvironmentMatrix_EnvironmentMatrix() {}
func (*EnvironmentMatrix_IosDeviceList) isEnvironmentMatrix_EnvironmentMatrix() {}
// A list of Android device configurations in which the test is to be executed.
type AndroidDeviceList struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. A list of Android devices.
AndroidDevices []*AndroidDevice `protobuf:"bytes,1,rep,name=android_devices,json=androidDevices,proto3" json:"android_devices,omitempty"`
}
func (x *AndroidDeviceList) Reset() {
*x = AndroidDeviceList{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[25]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *AndroidDeviceList) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AndroidDeviceList) ProtoMessage() {}
func (x *AndroidDeviceList) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[25]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use AndroidDeviceList.ProtoReflect.Descriptor instead.
func (*AndroidDeviceList) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{25}
}
func (x *AndroidDeviceList) GetAndroidDevices() []*AndroidDevice {
if x != nil {
return x.AndroidDevices
}
return nil
}
// A list of iOS device configurations in which the test is to be executed.
type IosDeviceList struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. A list of iOS devices.
IosDevices []*IosDevice `protobuf:"bytes,1,rep,name=ios_devices,json=iosDevices,proto3" json:"ios_devices,omitempty"`
}
func (x *IosDeviceList) Reset() {
*x = IosDeviceList{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[26]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *IosDeviceList) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*IosDeviceList) ProtoMessage() {}
func (x *IosDeviceList) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[26]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use IosDeviceList.ProtoReflect.Descriptor instead.
func (*IosDeviceList) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{26}
}
func (x *IosDeviceList) GetIosDevices() []*IosDevice {
if x != nil {
return x.IosDevices
}
return nil
}
// 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.
type AndroidMatrix struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. The ids of the set of Android device to be used.
// Use the TestEnvironmentDiscoveryService to get supported options.
AndroidModelIds []string `protobuf:"bytes,1,rep,name=android_model_ids,json=androidModelIds,proto3" json:"android_model_ids,omitempty"`
// Required. The ids of the set of Android OS version to be used.
// Use the TestEnvironmentDiscoveryService to get supported options.
AndroidVersionIds []string `protobuf:"bytes,2,rep,name=android_version_ids,json=androidVersionIds,proto3" json:"android_version_ids,omitempty"`
// Required. The set of locales the test device will enable for testing.
// Use the TestEnvironmentDiscoveryService to get supported options.
Locales []string `protobuf:"bytes,3,rep,name=locales,proto3" json:"locales,omitempty"`
// Required. The set of orientations to test with.
// Use the TestEnvironmentDiscoveryService to get supported options.
Orientations []string `protobuf:"bytes,4,rep,name=orientations,proto3" json:"orientations,omitempty"`
}
func (x *AndroidMatrix) Reset() {
*x = AndroidMatrix{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[27]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *AndroidMatrix) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AndroidMatrix) ProtoMessage() {}
func (x *AndroidMatrix) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[27]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use AndroidMatrix.ProtoReflect.Descriptor instead.
func (*AndroidMatrix) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{27}
}
func (x *AndroidMatrix) GetAndroidModelIds() []string {
if x != nil {
return x.AndroidModelIds
}
return nil
}
func (x *AndroidMatrix) GetAndroidVersionIds() []string {
if x != nil {
return x.AndroidVersionIds
}
return nil
}
func (x *AndroidMatrix) GetLocales() []string {
if x != nil {
return x.Locales
}
return nil
}
func (x *AndroidMatrix) GetOrientations() []string {
if x != nil {
return x.Orientations
}
return nil
}
// Information about the client which invoked the test.
type ClientInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. Client name, such as gcloud.
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// The list of detailed information about client.
ClientInfoDetails []*ClientInfoDetail `protobuf:"bytes,2,rep,name=client_info_details,json=clientInfoDetails,proto3" json:"client_info_details,omitempty"`
}
func (x *ClientInfo) Reset() {
*x = ClientInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[28]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ClientInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ClientInfo) ProtoMessage() {}
func (x *ClientInfo) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[28]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ClientInfo.ProtoReflect.Descriptor instead.
func (*ClientInfo) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{28}
}
func (x *ClientInfo) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *ClientInfo) GetClientInfoDetails() []*ClientInfoDetail {
if x != nil {
return x.ClientInfoDetails
}
return nil
}
// Key-value pair of detailed information about the client which invoked the
// test. Examples: {'Version', '1.0'}, {'Release Track', 'BETA'}.
type ClientInfoDetail struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. The key of detailed client information.
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
// Required. The value of detailed client information.
Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
}
func (x *ClientInfoDetail) Reset() {
*x = ClientInfoDetail{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[29]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ClientInfoDetail) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ClientInfoDetail) ProtoMessage() {}
func (x *ClientInfoDetail) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[29]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ClientInfoDetail.ProtoReflect.Descriptor instead.
func (*ClientInfoDetail) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{29}
}
func (x *ClientInfoDetail) GetKey() string {
if x != nil {
return x.Key
}
return ""
}
func (x *ClientInfoDetail) GetValue() string {
if x != nil {
return x.Value
}
return ""
}
// Locations where the results of running the test are stored.
type ResultStorage struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required.
GoogleCloudStorage *GoogleCloudStorage `protobuf:"bytes,1,opt,name=google_cloud_storage,json=googleCloudStorage,proto3" json:"google_cloud_storage,omitempty"`
// 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 *ToolResultsHistory `protobuf:"bytes,5,opt,name=tool_results_history,json=toolResultsHistory,proto3" json:"tool_results_history,omitempty"`
// Output only. The tool results execution that results are written to.
ToolResultsExecution *ToolResultsExecution `protobuf:"bytes,6,opt,name=tool_results_execution,json=toolResultsExecution,proto3" json:"tool_results_execution,omitempty"`
// Output only. URL to the results in the Firebase Web Console.
ResultsUrl string `protobuf:"bytes,7,opt,name=results_url,json=resultsUrl,proto3" json:"results_url,omitempty"`
}
func (x *ResultStorage) Reset() {
*x = ResultStorage{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[30]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ResultStorage) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ResultStorage) ProtoMessage() {}
func (x *ResultStorage) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[30]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ResultStorage.ProtoReflect.Descriptor instead.
func (*ResultStorage) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{30}
}
func (x *ResultStorage) GetGoogleCloudStorage() *GoogleCloudStorage {
if x != nil {
return x.GoogleCloudStorage
}
return nil
}
func (x *ResultStorage) GetToolResultsHistory() *ToolResultsHistory {
if x != nil {
return x.ToolResultsHistory
}
return nil
}
func (x *ResultStorage) GetToolResultsExecution() *ToolResultsExecution {
if x != nil {
return x.ToolResultsExecution
}
return nil
}
func (x *ResultStorage) GetResultsUrl() string {
if x != nil {
return x.ResultsUrl
}
return ""
}
// Represents a tool results history resource.
type ToolResultsHistory struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. The cloud project that owns the tool results history.
ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
// Required. A tool results history ID.
HistoryId string `protobuf:"bytes,2,opt,name=history_id,json=historyId,proto3" json:"history_id,omitempty"`
}
func (x *ToolResultsHistory) Reset() {
*x = ToolResultsHistory{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[31]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ToolResultsHistory) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ToolResultsHistory) ProtoMessage() {}
func (x *ToolResultsHistory) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[31]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ToolResultsHistory.ProtoReflect.Descriptor instead.
func (*ToolResultsHistory) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{31}
}
func (x *ToolResultsHistory) GetProjectId() string {
if x != nil {
return x.ProjectId
}
return ""
}
func (x *ToolResultsHistory) GetHistoryId() string {
if x != nil {
return x.HistoryId
}
return ""
}
// Represents a tool results execution resource.
//
// This has the results of a TestMatrix.
type ToolResultsExecution struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Output only. The cloud project that owns the tool results execution.
ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
// Output only. A tool results history ID.
HistoryId string `protobuf:"bytes,2,opt,name=history_id,json=historyId,proto3" json:"history_id,omitempty"`
// Output only. A tool results execution ID.
ExecutionId string `protobuf:"bytes,3,opt,name=execution_id,json=executionId,proto3" json:"execution_id,omitempty"`
}
func (x *ToolResultsExecution) Reset() {
*x = ToolResultsExecution{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[32]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ToolResultsExecution) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ToolResultsExecution) ProtoMessage() {}
func (x *ToolResultsExecution) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[32]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ToolResultsExecution.ProtoReflect.Descriptor instead.
func (*ToolResultsExecution) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{32}
}
func (x *ToolResultsExecution) GetProjectId() string {
if x != nil {
return x.ProjectId
}
return ""
}
func (x *ToolResultsExecution) GetHistoryId() string {
if x != nil {
return x.HistoryId
}
return ""
}
func (x *ToolResultsExecution) GetExecutionId() string {
if x != nil {
return x.ExecutionId
}
return ""
}
// Represents a tool results step resource.
//
// This has the results of a TestExecution.
type ToolResultsStep struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Output only. The cloud project that owns the tool results step.
ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
// Output only. A tool results history ID.
HistoryId string `protobuf:"bytes,2,opt,name=history_id,json=historyId,proto3" json:"history_id,omitempty"`
// Output only. A tool results execution ID.
ExecutionId string `protobuf:"bytes,3,opt,name=execution_id,json=executionId,proto3" json:"execution_id,omitempty"`
// Output only. A tool results step ID.
StepId string `protobuf:"bytes,4,opt,name=step_id,json=stepId,proto3" json:"step_id,omitempty"`
}
func (x *ToolResultsStep) Reset() {
*x = ToolResultsStep{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[33]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ToolResultsStep) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ToolResultsStep) ProtoMessage() {}
func (x *ToolResultsStep) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[33]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ToolResultsStep.ProtoReflect.Descriptor instead.
func (*ToolResultsStep) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{33}
}
func (x *ToolResultsStep) GetProjectId() string {
if x != nil {
return x.ProjectId
}
return ""
}
func (x *ToolResultsStep) GetHistoryId() string {
if x != nil {
return x.HistoryId
}
return ""
}
func (x *ToolResultsStep) GetExecutionId() string {
if x != nil {
return x.ExecutionId
}
return ""
}
func (x *ToolResultsStep) GetStepId() string {
if x != nil {
return x.StepId
}
return ""
}
// A storage location within Google cloud storage (GCS).
type GoogleCloudStorage struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// 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.
GcsPath string `protobuf:"bytes,1,opt,name=gcs_path,json=gcsPath,proto3" json:"gcs_path,omitempty"`
}
func (x *GoogleCloudStorage) Reset() {
*x = GoogleCloudStorage{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[34]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GoogleCloudStorage) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GoogleCloudStorage) ProtoMessage() {}
func (x *GoogleCloudStorage) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[34]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GoogleCloudStorage.ProtoReflect.Descriptor instead.
func (*GoogleCloudStorage) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{34}
}
func (x *GoogleCloudStorage) GetGcsPath() string {
if x != nil {
return x.GcsPath
}
return ""
}
// A reference to a file, used for user inputs.
type FileReference struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. The file reference.
//
// Types that are assignable to File:
//
// *FileReference_GcsPath
File isFileReference_File `protobuf_oneof:"file"`
}
func (x *FileReference) Reset() {
*x = FileReference{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[35]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *FileReference) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*FileReference) ProtoMessage() {}
func (x *FileReference) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[35]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use FileReference.ProtoReflect.Descriptor instead.
func (*FileReference) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{35}
}
func (m *FileReference) GetFile() isFileReference_File {
if m != nil {
return m.File
}
return nil
}
func (x *FileReference) GetGcsPath() string {
if x, ok := x.GetFile().(*FileReference_GcsPath); ok {
return x.GcsPath
}
return ""
}
type isFileReference_File interface {
isFileReference_File()
}
type FileReference_GcsPath struct {
// 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)
GcsPath string `protobuf:"bytes,1,opt,name=gcs_path,json=gcsPath,proto3,oneof"`
}
func (*FileReference_GcsPath) isFileReference_File() {}
// The environment in which the test is run.
type Environment struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. The environment.
//
// Types that are assignable to Environment:
//
// *Environment_AndroidDevice
// *Environment_IosDevice
Environment isEnvironment_Environment `protobuf_oneof:"environment"`
}
func (x *Environment) Reset() {
*x = Environment{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[36]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Environment) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Environment) ProtoMessage() {}
func (x *Environment) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[36]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Environment.ProtoReflect.Descriptor instead.
func (*Environment) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{36}
}
func (m *Environment) GetEnvironment() isEnvironment_Environment {
if m != nil {
return m.Environment
}
return nil
}
func (x *Environment) GetAndroidDevice() *AndroidDevice {
if x, ok := x.GetEnvironment().(*Environment_AndroidDevice); ok {
return x.AndroidDevice
}
return nil
}
func (x *Environment) GetIosDevice() *IosDevice {
if x, ok := x.GetEnvironment().(*Environment_IosDevice); ok {
return x.IosDevice
}
return nil
}
type isEnvironment_Environment interface {
isEnvironment_Environment()
}
type Environment_AndroidDevice struct {
// An Android device which must be used with an Android test.
AndroidDevice *AndroidDevice `protobuf:"bytes,1,opt,name=android_device,json=androidDevice,proto3,oneof"`
}
type Environment_IosDevice struct {
// An iOS device which must be used with an iOS test.
IosDevice *IosDevice `protobuf:"bytes,2,opt,name=ios_device,json=iosDevice,proto3,oneof"`
}
func (*Environment_AndroidDevice) isEnvironment_Environment() {}
func (*Environment_IosDevice) isEnvironment_Environment() {}
// A single Android device.
type AndroidDevice struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. The id of the Android device to be used.
// Use the TestEnvironmentDiscoveryService to get supported options.
AndroidModelId string `protobuf:"bytes,1,opt,name=android_model_id,json=androidModelId,proto3" json:"android_model_id,omitempty"`
// Required. The id of the Android OS version to be used.
// Use the TestEnvironmentDiscoveryService to get supported options.
AndroidVersionId string `protobuf:"bytes,2,opt,name=android_version_id,json=androidVersionId,proto3" json:"android_version_id,omitempty"`
// Required. The locale the test device used for testing.
// Use the TestEnvironmentDiscoveryService to get supported options.
Locale string `protobuf:"bytes,3,opt,name=locale,proto3" json:"locale,omitempty"`
// Required. How the device is oriented during the test.
// Use the TestEnvironmentDiscoveryService to get supported options.
Orientation string `protobuf:"bytes,4,opt,name=orientation,proto3" json:"orientation,omitempty"`
}
func (x *AndroidDevice) Reset() {
*x = AndroidDevice{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[37]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *AndroidDevice) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AndroidDevice) ProtoMessage() {}
func (x *AndroidDevice) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[37]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use AndroidDevice.ProtoReflect.Descriptor instead.
func (*AndroidDevice) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{37}
}
func (x *AndroidDevice) GetAndroidModelId() string {
if x != nil {
return x.AndroidModelId
}
return ""
}
func (x *AndroidDevice) GetAndroidVersionId() string {
if x != nil {
return x.AndroidVersionId
}
return ""
}
func (x *AndroidDevice) GetLocale() string {
if x != nil {
return x.Locale
}
return ""
}
func (x *AndroidDevice) GetOrientation() string {
if x != nil {
return x.Orientation
}
return ""
}
// A single iOS device.
type IosDevice struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. The id of the iOS device to be used.
// Use the TestEnvironmentDiscoveryService to get supported options.
IosModelId string `protobuf:"bytes,1,opt,name=ios_model_id,json=iosModelId,proto3" json:"ios_model_id,omitempty"`
// Required. The id of the iOS major software version to be used.
// Use the TestEnvironmentDiscoveryService to get supported options.
IosVersionId string `protobuf:"bytes,2,opt,name=ios_version_id,json=iosVersionId,proto3" json:"ios_version_id,omitempty"`
// Required. The locale the test device used for testing.
// Use the TestEnvironmentDiscoveryService to get supported options.
Locale string `protobuf:"bytes,3,opt,name=locale,proto3" json:"locale,omitempty"`
// Required. How the device is oriented during the test.
// Use the TestEnvironmentDiscoveryService to get supported options.
Orientation string `protobuf:"bytes,4,opt,name=orientation,proto3" json:"orientation,omitempty"`
}
func (x *IosDevice) Reset() {
*x = IosDevice{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[38]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *IosDevice) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*IosDevice) ProtoMessage() {}
func (x *IosDevice) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[38]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use IosDevice.ProtoReflect.Descriptor instead.
func (*IosDevice) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{38}
}
func (x *IosDevice) GetIosModelId() string {
if x != nil {
return x.IosModelId
}
return ""
}
func (x *IosDevice) GetIosVersionId() string {
if x != nil {
return x.IosVersionId
}
return ""
}
func (x *IosDevice) GetLocale() string {
if x != nil {
return x.Locale
}
return ""
}
func (x *IosDevice) GetOrientation() string {
if x != nil {
return x.Orientation
}
return ""
}
// Additional details about the progress of the running test.
type TestDetails struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// 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.
ProgressMessages []string `protobuf:"bytes,3,rep,name=progress_messages,json=progressMessages,proto3" json:"progress_messages,omitempty"`
// Output only. If the TestState is ERROR, then this string will contain
// human-readable details about the error.
ErrorMessage string `protobuf:"bytes,4,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"`
}
func (x *TestDetails) Reset() {
*x = TestDetails{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[39]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *TestDetails) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TestDetails) ProtoMessage() {}
func (x *TestDetails) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[39]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use TestDetails.ProtoReflect.Descriptor instead.
func (*TestDetails) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{39}
}
func (x *TestDetails) GetProgressMessages() []string {
if x != nil {
return x.ProgressMessages
}
return nil
}
func (x *TestDetails) GetErrorMessage() string {
if x != nil {
return x.ErrorMessage
}
return ""
}
// Details behind an invalid request.
type InvalidRequestDetail struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The reason behind the error.
Reason InvalidRequestDetail_Reason `protobuf:"varint,1,opt,name=reason,proto3,enum=google.devtools.testing.v1.InvalidRequestDetail_Reason" json:"reason,omitempty"`
}
func (x *InvalidRequestDetail) Reset() {
*x = InvalidRequestDetail{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[40]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *InvalidRequestDetail) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*InvalidRequestDetail) ProtoMessage() {}
func (x *InvalidRequestDetail) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[40]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use InvalidRequestDetail.ProtoReflect.Descriptor instead.
func (*InvalidRequestDetail) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{40}
}
func (x *InvalidRequestDetail) GetReason() InvalidRequestDetail_Reason {
if x != nil {
return x.Reason
}
return InvalidRequestDetail_REASON_UNSPECIFIED
}
// Options for enabling sharding.
type ShardingOption struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Types that are assignable to Option:
//
// *ShardingOption_UniformSharding
// *ShardingOption_ManualSharding
Option isShardingOption_Option `protobuf_oneof:"option"`
}
func (x *ShardingOption) Reset() {
*x = ShardingOption{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[41]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ShardingOption) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ShardingOption) ProtoMessage() {}
func (x *ShardingOption) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[41]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ShardingOption.ProtoReflect.Descriptor instead.
func (*ShardingOption) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{41}
}
func (m *ShardingOption) GetOption() isShardingOption_Option {
if m != nil {
return m.Option
}
return nil
}
func (x *ShardingOption) GetUniformSharding() *UniformSharding {
if x, ok := x.GetOption().(*ShardingOption_UniformSharding); ok {
return x.UniformSharding
}
return nil
}
func (x *ShardingOption) GetManualSharding() *ManualSharding {
if x, ok := x.GetOption().(*ShardingOption_ManualSharding); ok {
return x.ManualSharding
}
return nil
}
type isShardingOption_Option interface {
isShardingOption_Option()
}
type ShardingOption_UniformSharding struct {
// Uniformly shards test cases given a total number of shards.
UniformSharding *UniformSharding `protobuf:"bytes,1,opt,name=uniform_sharding,json=uniformSharding,proto3,oneof"`
}
type ShardingOption_ManualSharding struct {
// Shards test cases into the specified groups of packages, classes, and/or
// methods.
ManualSharding *ManualSharding `protobuf:"bytes,2,opt,name=manual_sharding,json=manualSharding,proto3,oneof"`
}
func (*ShardingOption_UniformSharding) isShardingOption_Option() {}
func (*ShardingOption_ManualSharding) isShardingOption_Option() {}
// Uniformly shards test cases given a total number of shards.
//
// For instrumentation tests, it will be translated to "-e numShard" and "-e
// shardIndex" AndroidJUnitRunner arguments. With uniform sharding enabled,
// specifying either of these sharding arguments via `environment_variables` is
// invalid.
//
// Based on the sharding mechanism AndroidJUnitRunner uses, there is no
// guarantee that test cases will be distributed uniformly across all shards.
type UniformSharding struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. The total number of shards to create. This must always be a
// positive number that is no greater than the total number of test cases.
// When you select one or more physical devices, the number of shards must be
// <= 50. When you select one or more ARM virtual devices, it must be <= 100.
// When you select only x86 virtual devices, it must be <= 500.
NumShards int32 `protobuf:"varint,1,opt,name=num_shards,json=numShards,proto3" json:"num_shards,omitempty"`
}
func (x *UniformSharding) Reset() {
*x = UniformSharding{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[42]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *UniformSharding) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*UniformSharding) ProtoMessage() {}
func (x *UniformSharding) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[42]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use UniformSharding.ProtoReflect.Descriptor instead.
func (*UniformSharding) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{42}
}
func (x *UniformSharding) GetNumShards() int32 {
if x != nil {
return x.NumShards
}
return 0
}
// 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.
type ManualSharding struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. Group of packages, classes, and/or test methods to be run for
// each manually-created shard. You must specify at least one shard if this
// field is present. When you select one or more physical devices, the number
// of repeated test_targets_for_shard must be <= 50. When you select one or
// more ARM virtual devices, it must be <= 100. When you select only x86
// virtual devices, it must be <= 500.
TestTargetsForShard []*TestTargetsForShard `protobuf:"bytes,1,rep,name=test_targets_for_shard,json=testTargetsForShard,proto3" json:"test_targets_for_shard,omitempty"`
}
func (x *ManualSharding) Reset() {
*x = ManualSharding{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[43]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ManualSharding) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ManualSharding) ProtoMessage() {}
func (x *ManualSharding) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[43]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ManualSharding.ProtoReflect.Descriptor instead.
func (*ManualSharding) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{43}
}
func (x *ManualSharding) GetTestTargetsForShard() []*TestTargetsForShard {
if x != nil {
return x.TestTargetsForShard
}
return nil
}
// Test targets for a shard.
type TestTargetsForShard struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// 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 test_targets must be greater than 0.
TestTargets []string `protobuf:"bytes,1,rep,name=test_targets,json=testTargets,proto3" json:"test_targets,omitempty"`
}
func (x *TestTargetsForShard) Reset() {
*x = TestTargetsForShard{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[44]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *TestTargetsForShard) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TestTargetsForShard) ProtoMessage() {}
func (x *TestTargetsForShard) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[44]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use TestTargetsForShard.ProtoReflect.Descriptor instead.
func (*TestTargetsForShard) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{44}
}
func (x *TestTargetsForShard) GetTestTargets() []string {
if x != nil {
return x.TestTargets
}
return nil
}
// Output only. Details about the shard.
type Shard struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Output only. The index of the shard among all the shards.
ShardIndex int32 `protobuf:"varint,1,opt,name=shard_index,json=shardIndex,proto3" json:"shard_index,omitempty"`
// Output only. The total number of shards.
NumShards int32 `protobuf:"varint,2,opt,name=num_shards,json=numShards,proto3" json:"num_shards,omitempty"`
// Output only. Test targets for each shard. Only set for manual sharding.
TestTargetsForShard *TestTargetsForShard `protobuf:"bytes,3,opt,name=test_targets_for_shard,json=testTargetsForShard,proto3" json:"test_targets_for_shard,omitempty"`
}
func (x *Shard) Reset() {
*x = Shard{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[45]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Shard) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Shard) ProtoMessage() {}
func (x *Shard) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[45]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Shard.ProtoReflect.Descriptor instead.
func (*Shard) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{45}
}
func (x *Shard) GetShardIndex() int32 {
if x != nil {
return x.ShardIndex
}
return 0
}
func (x *Shard) GetNumShards() int32 {
if x != nil {
return x.NumShards
}
return 0
}
func (x *Shard) GetTestTargetsForShard() *TestTargetsForShard {
if x != nil {
return x.TestTargetsForShard
}
return nil
}
// Request to submit a matrix of tests for execution.
type CreateTestMatrixRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The GCE project under which this job will run.
ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
// The matrix of tests that the user wants to run.
TestMatrix *TestMatrix `protobuf:"bytes,2,opt,name=test_matrix,json=testMatrix,proto3" json:"test_matrix,omitempty"`
// 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.
RequestId string `protobuf:"bytes,3,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
}
func (x *CreateTestMatrixRequest) Reset() {
*x = CreateTestMatrixRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[46]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CreateTestMatrixRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CreateTestMatrixRequest) ProtoMessage() {}
func (x *CreateTestMatrixRequest) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[46]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use CreateTestMatrixRequest.ProtoReflect.Descriptor instead.
func (*CreateTestMatrixRequest) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{46}
}
func (x *CreateTestMatrixRequest) GetProjectId() string {
if x != nil {
return x.ProjectId
}
return ""
}
func (x *CreateTestMatrixRequest) GetTestMatrix() *TestMatrix {
if x != nil {
return x.TestMatrix
}
return nil
}
func (x *CreateTestMatrixRequest) GetRequestId() string {
if x != nil {
return x.RequestId
}
return ""
}
// Request to get the Test Matrix with the given id.
type GetTestMatrixRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Cloud project that owns the test matrix.
ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
// Unique test matrix id which was assigned by the service.
TestMatrixId string `protobuf:"bytes,2,opt,name=test_matrix_id,json=testMatrixId,proto3" json:"test_matrix_id,omitempty"`
}
func (x *GetTestMatrixRequest) Reset() {
*x = GetTestMatrixRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[47]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GetTestMatrixRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetTestMatrixRequest) ProtoMessage() {}
func (x *GetTestMatrixRequest) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[47]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GetTestMatrixRequest.ProtoReflect.Descriptor instead.
func (*GetTestMatrixRequest) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{47}
}
func (x *GetTestMatrixRequest) GetProjectId() string {
if x != nil {
return x.ProjectId
}
return ""
}
func (x *GetTestMatrixRequest) GetTestMatrixId() string {
if x != nil {
return x.TestMatrixId
}
return ""
}
// Request to stop running all of the tests in the specified matrix.
type CancelTestMatrixRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Cloud project that owns the test.
ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
// Test matrix that will be canceled.
TestMatrixId string `protobuf:"bytes,2,opt,name=test_matrix_id,json=testMatrixId,proto3" json:"test_matrix_id,omitempty"`
}
func (x *CancelTestMatrixRequest) Reset() {
*x = CancelTestMatrixRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[48]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CancelTestMatrixRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CancelTestMatrixRequest) ProtoMessage() {}
func (x *CancelTestMatrixRequest) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[48]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use CancelTestMatrixRequest.ProtoReflect.Descriptor instead.
func (*CancelTestMatrixRequest) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{48}
}
func (x *CancelTestMatrixRequest) GetProjectId() string {
if x != nil {
return x.ProjectId
}
return ""
}
func (x *CancelTestMatrixRequest) GetTestMatrixId() string {
if x != nil {
return x.TestMatrixId
}
return ""
}
// Response containing the current state of the specified test matrix.
type CancelTestMatrixResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The current rolled-up state of the test matrix.
// If this state is already final, then the cancelation request will
// have no effect.
TestState TestState `protobuf:"varint,1,opt,name=test_state,json=testState,proto3,enum=google.devtools.testing.v1.TestState" json:"test_state,omitempty"`
}
func (x *CancelTestMatrixResponse) Reset() {
*x = CancelTestMatrixResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[49]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CancelTestMatrixResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CancelTestMatrixResponse) ProtoMessage() {}
func (x *CancelTestMatrixResponse) ProtoReflect() protoreflect.Message {
mi := &file_google_devtools_testing_v1_test_execution_proto_msgTypes[49]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use CancelTestMatrixResponse.ProtoReflect.Descriptor instead.
func (*CancelTestMatrixResponse) Descriptor() ([]byte, []int) {
return file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP(), []int{49}
}
func (x *CancelTestMatrixResponse) GetTestState() TestState {
if x != nil {
return x.TestState
}
return TestState_TEST_STATE_UNSPECIFIED
}
var File_google_devtools_testing_v1_test_execution_proto protoreflect.FileDescriptor
var file_google_devtools_testing_v1_test_execution_proto_rawDesc = []byte{
0x0a, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c,
0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73,
0x74, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x12, 0x1a, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f,
0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x1a, 0x1c, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69,
0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfd, 0x06, 0x0a, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x4d,
0x61, 0x74, 0x72, 0x69, 0x78, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x61,
0x74, 0x72, 0x69, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74,
0x65, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70,
0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52,
0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x47, 0x0a, 0x0b, 0x63, 0x6c,
0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c,
0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69,
0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49,
0x6e, 0x66, 0x6f, 0x12, 0x5c, 0x0a, 0x12, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63,
0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c,
0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73,
0x74, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11,
0x74, 0x65, 0x73, 0x74, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x12, 0x5c, 0x0a, 0x12, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74,
0x5f, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e,
0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72,
0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x52, 0x11, 0x65, 0x6e,
0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x12,
0x52, 0x0a, 0x0f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f,
0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69,
0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74,
0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x74, 0x65, 0x73, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69,
0x6f, 0x6e, 0x73, 0x12, 0x50, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x74,
0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65,
0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53,
0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53, 0x74,
0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08,
0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65,
0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76,
0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61,
0x74, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18,
0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x66, 0x0a, 0x16,
0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x5f, 0x64,
0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74,
0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69,
0x64, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x14,
0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x44, 0x65, 0x74,
0x61, 0x69, 0x6c, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x66, 0x6c, 0x61, 0x6b, 0x79, 0x5f, 0x74, 0x65,
0x73, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28,
0x05, 0x52, 0x11, 0x66, 0x6c, 0x61, 0x6b, 0x79, 0x54, 0x65, 0x73, 0x74, 0x41, 0x74, 0x74, 0x65,
0x6d, 0x70, 0x74, 0x73, 0x12, 0x53, 0x0a, 0x0f, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x5f,
0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e,
0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x63, 0x6f,
0x6d, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x63, 0x6f,
0x6d, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x61, 0x69,
0x6c, 0x5f, 0x66, 0x61, 0x73, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x66, 0x61,
0x69, 0x6c, 0x46, 0x61, 0x73, 0x74, 0x22, 0xd9, 0x04, 0x0a, 0x0d, 0x54, 0x65, 0x73, 0x74, 0x45,
0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x74, 0x72,
0x69, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x74,
0x72, 0x69, 0x78, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65,
0x63, 0x74, 0x49, 0x64, 0x12, 0x5c, 0x0a, 0x12, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x65,
0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f,
0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65,
0x73, 0x74, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
0x11, 0x74, 0x65, 0x73, 0x74, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f,
0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53,
0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x49, 0x0a, 0x0b, 0x65,
0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f,
0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e,
0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72,
0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18,
0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64,
0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e,
0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74,
0x61, 0x74, 0x65, 0x12, 0x57, 0x0a, 0x11, 0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75,
0x6c, 0x74, 0x73, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73,
0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x6f, 0x6c,
0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x53, 0x74, 0x65, 0x70, 0x52, 0x0f, 0x74, 0x6f, 0x6f,
0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x53, 0x74, 0x65, 0x70, 0x12, 0x38, 0x0a, 0x09,
0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d,
0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x4a, 0x0a, 0x0c, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x64,
0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74,
0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x44, 0x65,
0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x0b, 0x74, 0x65, 0x73, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69,
0x6c, 0x73, 0x22, 0xbe, 0x06, 0x0a, 0x11, 0x54, 0x65, 0x73, 0x74, 0x53, 0x70, 0x65, 0x63, 0x69,
0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x0c, 0x74, 0x65, 0x73, 0x74,
0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x65, 0x73, 0x74, 0x54,
0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x46, 0x0a, 0x0a, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73,
0x65, 0x74, 0x75, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73,
0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x65, 0x74, 0x75,
0x70, 0x48, 0x00, 0x52, 0x09, 0x74, 0x65, 0x73, 0x74, 0x53, 0x65, 0x74, 0x75, 0x70, 0x12, 0x50,
0x0a, 0x0e, 0x69, 0x6f, 0x73, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x74, 0x75, 0x70,
0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67,
0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6f, 0x73, 0x54, 0x65, 0x73, 0x74, 0x53, 0x65, 0x74, 0x75, 0x70,
0x48, 0x00, 0x52, 0x0c, 0x69, 0x6f, 0x73, 0x54, 0x65, 0x73, 0x74, 0x53, 0x65, 0x74, 0x75, 0x70,
0x12, 0x7a, 0x0a, 0x1c, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74,
0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x65, 0x73, 0x74,
0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67,
0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x72,
0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x48, 0x01,
0x52, 0x1a, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d,
0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x12, 0x59, 0x0a, 0x11,
0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x5f, 0x72, 0x6f, 0x62, 0x6f, 0x5f, 0x74, 0x65, 0x73,
0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e,
0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x52, 0x6f, 0x62, 0x6f,
0x54, 0x65, 0x73, 0x74, 0x48, 0x01, 0x52, 0x0f, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x52,
0x6f, 0x62, 0x6f, 0x54, 0x65, 0x73, 0x74, 0x12, 0x59, 0x0a, 0x11, 0x61, 0x6e, 0x64, 0x72, 0x6f,
0x69, 0x64, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6c, 0x6f, 0x6f, 0x70, 0x18, 0x09, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74,
0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e,
0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4c, 0x6f, 0x6f, 0x70, 0x48,
0x01, 0x52, 0x0f, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4c, 0x6f,
0x6f, 0x70, 0x12, 0x47, 0x0a, 0x0b, 0x69, 0x6f, 0x73, 0x5f, 0x78, 0x63, 0x5f, 0x74, 0x65, 0x73,
0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e,
0x67, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6f, 0x73, 0x58, 0x63, 0x54, 0x65, 0x73, 0x74, 0x48, 0x01,
0x52, 0x09, 0x69, 0x6f, 0x73, 0x58, 0x63, 0x54, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x0d, 0x69,
0x6f, 0x73, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6c, 0x6f, 0x6f, 0x70, 0x18, 0x0f, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74,
0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e,
0x49, 0x6f, 0x73, 0x54, 0x65, 0x73, 0x74, 0x4c, 0x6f, 0x6f, 0x70, 0x48, 0x01, 0x52, 0x0b, 0x69,
0x6f, 0x73, 0x54, 0x65, 0x73, 0x74, 0x4c, 0x6f, 0x6f, 0x70, 0x12, 0x36, 0x0a, 0x17, 0x64, 0x69,
0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x5f, 0x72, 0x65, 0x63, 0x6f,
0x72, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x64, 0x69, 0x73,
0x61, 0x62, 0x6c, 0x65, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69,
0x6e, 0x67, 0x12, 0x3e, 0x0a, 0x1b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x65,
0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63,
0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65,
0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69,
0x63, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x73, 0x65, 0x74, 0x75, 0x70, 0x42, 0x06, 0x0a, 0x04, 0x74,
0x65, 0x73, 0x74, 0x22, 0x3a, 0x0a, 0x0d, 0x53, 0x79, 0x73, 0x74, 0x72, 0x61, 0x63, 0x65, 0x53,
0x65, 0x74, 0x75, 0x70, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f,
0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22,
0xa8, 0x04, 0x0a, 0x09, 0x54, 0x65, 0x73, 0x74, 0x53, 0x65, 0x74, 0x75, 0x70, 0x12, 0x4a, 0x0a,
0x0d, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x70, 0x75, 0x73, 0x68, 0x18, 0x01,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65,
0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76,
0x31, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x0b, 0x66, 0x69,
0x6c, 0x65, 0x73, 0x54, 0x6f, 0x50, 0x75, 0x73, 0x68, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x69, 0x72,
0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x70, 0x75, 0x6c, 0x6c,
0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72,
0x69, 0x65, 0x73, 0x54, 0x6f, 0x50, 0x75, 0x6c, 0x6c, 0x12, 0x48, 0x0a, 0x0f, 0x61, 0x64, 0x64,
0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x70, 0x6b, 0x73, 0x18, 0x03, 0x20, 0x03,
0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74,
0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e,
0x41, 0x70, 0x6b, 0x52, 0x0e, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x41,
0x70, 0x6b, 0x73, 0x12, 0x3d, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65,
0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76,
0x31, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75,
0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x70, 0x72,
0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6e, 0x65, 0x74,
0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x64, 0x0a, 0x15, 0x65,
0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61,
0x62, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73,
0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d,
0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x14, 0x65, 0x6e, 0x76,
0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65,
0x73, 0x12, 0x49, 0x0a, 0x08, 0x73, 0x79, 0x73, 0x74, 0x72, 0x61, 0x63, 0x65, 0x18, 0x09, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76,
0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31,
0x2e, 0x53, 0x79, 0x73, 0x74, 0x72, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x75, 0x70, 0x42, 0x02,
0x18, 0x01, 0x52, 0x08, 0x73, 0x79, 0x73, 0x74, 0x72, 0x61, 0x63, 0x65, 0x12, 0x3c, 0x0a, 0x1a,
0x64, 0x6f, 0x6e, 0x74, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x70,
0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08,
0x52, 0x18, 0x64, 0x6f, 0x6e, 0x74, 0x41, 0x75, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x50,
0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xab, 0x02, 0x0a, 0x0c, 0x49,
0x6f, 0x73, 0x54, 0x65, 0x73, 0x74, 0x53, 0x65, 0x74, 0x75, 0x70, 0x12, 0x27, 0x0a, 0x0f, 0x6e,
0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x6f,
0x66, 0x69, 0x6c, 0x65, 0x12, 0x52, 0x0a, 0x0f, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e,
0x61, 0x6c, 0x5f, 0x69, 0x70, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e,
0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52,
0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0e, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69,
0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x70, 0x61, 0x73, 0x12, 0x48, 0x0a, 0x0a, 0x70, 0x75, 0x73, 0x68,
0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74,
0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6f, 0x73, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x09, 0x70, 0x75, 0x73, 0x68, 0x46, 0x69, 0x6c,
0x65, 0x73, 0x12, 0x54, 0x0a, 0x10, 0x70, 0x75, 0x6c, 0x6c, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63,
0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74,
0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6f, 0x73, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x0f, 0x70, 0x75, 0x6c, 0x6c, 0x44, 0x69, 0x72,
0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x22, 0x3d, 0x0a, 0x13, 0x45, 0x6e, 0x76, 0x69,
0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12,
0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x64, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75,
0x6e, 0x74, 0x12, 0x49, 0x0a, 0x0b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x61, 0x75, 0x74,
0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e,
0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x48,
0x00, 0x52, 0x0a, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x42, 0x0e, 0x0a,
0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x0c, 0x0a,
0x0a, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x22, 0x6f, 0x0a, 0x03, 0x41,
0x70, 0x6b, 0x12, 0x45, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65,
0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76,
0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52,
0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x63,
0x6b, 0x61, 0x67, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x09,
0x41, 0x70, 0x70, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x54, 0x0a, 0x0f, 0x62, 0x75, 0x6e,
0x64, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74,
0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e,
0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52,
0x0e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42,
0x08, 0x0a, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x22, 0xab, 0x01, 0x0a, 0x0a, 0x44, 0x65,
0x76, 0x69, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x08, 0x6f, 0x62, 0x62, 0x5f,
0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73,
0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x62, 0x46, 0x69, 0x6c, 0x65, 0x48,
0x00, 0x52, 0x07, 0x6f, 0x62, 0x62, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x4c, 0x0a, 0x0c, 0x72, 0x65,
0x67, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f,
0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65,
0x67, 0x75, 0x6c, 0x61, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x65, 0x67,
0x75, 0x6c, 0x61, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69,
0x63, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x6a, 0x0a, 0x07, 0x4f, 0x62, 0x62, 0x46, 0x69,
0x6c, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x6f, 0x62, 0x62, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e,
0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x62, 0x62, 0x46, 0x69,
0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x03, 0x6f, 0x62, 0x62, 0x18, 0x02, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76,
0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31,
0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x03,
0x6f, 0x62, 0x62, 0x22, 0x73, 0x0a, 0x0b, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x46, 0x69,
0x6c, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76,
0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31,
0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07,
0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63,
0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65,
0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x22, 0x92, 0x01, 0x0a, 0x0d, 0x49, 0x6f, 0x73,
0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x63, 0x6f,
0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65,
0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x66,
0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12,
0x1b, 0x0a, 0x09, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01,
0x28, 0x09, 0x52, 0x08, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b,
0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28,
0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x22, 0x9e, 0x02,
0x0a, 0x0f, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x54, 0x65, 0x73, 0x74, 0x4c, 0x6f, 0x6f,
0x70, 0x12, 0x44, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x5f, 0x61, 0x70, 0x6b, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74,
0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e,
0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52,
0x06, 0x61, 0x70, 0x70, 0x41, 0x70, 0x6b, 0x12, 0x46, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x5f, 0x62,
0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65,
0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x42, 0x75, 0x6e, 0x64,
0x6c, 0x65, 0x48, 0x00, 0x52, 0x09, 0x61, 0x70, 0x70, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12,
0x24, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x69,
0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x70, 0x70, 0x50, 0x61, 0x63, 0x6b,
0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x63, 0x65, 0x6e, 0x61, 0x72, 0x69,
0x6f, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x73, 0x63, 0x65, 0x6e, 0x61, 0x72,
0x69, 0x6f, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x63, 0x65, 0x6e, 0x61, 0x72, 0x69, 0x6f, 0x5f,
0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x63,
0x65, 0x6e, 0x61, 0x72, 0x69, 0x6f, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x42, 0x10, 0x0a, 0x0e,
0x61, 0x70, 0x70, 0x5f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x22, 0xa1,
0x02, 0x0a, 0x09, 0x49, 0x6f, 0x73, 0x58, 0x63, 0x54, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x09,
0x74, 0x65, 0x73, 0x74, 0x73, 0x5f, 0x7a, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c,
0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c,
0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x74, 0x65, 0x73, 0x74,
0x73, 0x5a, 0x69, 0x70, 0x12, 0x47, 0x0a, 0x09, 0x78, 0x63, 0x74, 0x65, 0x73, 0x74, 0x72, 0x75,
0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e,
0x67, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
0x63, 0x65, 0x52, 0x09, 0x78, 0x63, 0x74, 0x65, 0x73, 0x74, 0x72, 0x75, 0x6e, 0x12, 0x23, 0x0a,
0x0d, 0x78, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03,
0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x78, 0x63, 0x6f, 0x64, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69,
0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x70, 0x70, 0x5f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65,
0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x42, 0x75,
0x6e, 0x64, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x19, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73,
0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65,
0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x74, 0x65, 0x73, 0x74, 0x53,
0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
0x74, 0x73, 0x22, 0x93, 0x01, 0x0a, 0x0b, 0x49, 0x6f, 0x73, 0x54, 0x65, 0x73, 0x74, 0x4c, 0x6f,
0x6f, 0x70, 0x12, 0x42, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x70, 0x61, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76,
0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31,
0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06,
0x61, 0x70, 0x70, 0x49, 0x70, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x63, 0x65, 0x6e, 0x61, 0x72,
0x69, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x73, 0x63, 0x65, 0x6e, 0x61,
0x72, 0x69, 0x6f, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x70, 0x70, 0x5f, 0x62, 0x75, 0x6e, 0x64,
0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x70, 0x70,
0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x49, 0x64, 0x22, 0xd5, 0x04, 0x0a, 0x1a, 0x41, 0x6e, 0x64,
0x72, 0x6f, 0x69, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x5f, 0x61,
0x70, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69,
0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65,
0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x06, 0x61, 0x70, 0x70, 0x41, 0x70, 0x6b, 0x12, 0x46, 0x0a,
0x0a, 0x61, 0x70, 0x70, 0x5f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f,
0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41,
0x70, 0x70, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x09, 0x61, 0x70, 0x70, 0x42,
0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x44, 0x0a, 0x08, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x70,
0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e,
0x67, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
0x63, 0x65, 0x52, 0x07, 0x74, 0x65, 0x73, 0x74, 0x41, 0x70, 0x6b, 0x12, 0x24, 0x0a, 0x0e, 0x61,
0x70, 0x70, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x70, 0x70, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x49,
0x64, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67,
0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x65, 0x73, 0x74,
0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x73,
0x74, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x05,
0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x65, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72,
0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x61,
0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x65, 0x73,
0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x5f, 0x0a, 0x13, 0x6f, 0x72, 0x63, 0x68,
0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18,
0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64,
0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e,
0x76, 0x31, 0x2e, 0x4f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x4f,
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61,
0x74, 0x6f, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x53, 0x0a, 0x0f, 0x73, 0x68, 0x61,
0x72, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74,
0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e,
0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e,
0x73, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x10,
0x0a, 0x0e, 0x61, 0x70, 0x70, 0x5f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x73, 0x74,
0x22, 0x89, 0x05, 0x0a, 0x0f, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x52, 0x6f, 0x62, 0x6f,
0x54, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x5f, 0x61, 0x70, 0x6b, 0x18,
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64,
0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e,
0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
0x48, 0x00, 0x52, 0x06, 0x61, 0x70, 0x70, 0x41, 0x70, 0x6b, 0x12, 0x46, 0x0a, 0x0a, 0x61, 0x70,
0x70, 0x5f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73,
0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x42,
0x75, 0x6e, 0x64, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x09, 0x61, 0x70, 0x70, 0x42, 0x75, 0x6e, 0x64,
0x6c, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67,
0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x70, 0x70, 0x50,
0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x70, 0x70, 0x5f,
0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79,
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x61, 0x70, 0x70, 0x49, 0x6e, 0x69, 0x74, 0x69,
0x61, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x1f, 0x0a, 0x09, 0x6d, 0x61,
0x78, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02, 0x18,
0x01, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x44, 0x65, 0x70, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x09, 0x6d,
0x61, 0x78, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02,
0x18, 0x01, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x74, 0x65, 0x70, 0x73, 0x12, 0x52, 0x0a, 0x0f,
0x72, 0x6f, 0x62, 0x6f, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x18,
0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64,
0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e,
0x76, 0x31, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65,
0x52, 0x0e, 0x72, 0x6f, 0x62, 0x6f, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73,
0x12, 0x41, 0x0a, 0x09, 0x72, 0x6f, 0x62, 0x6f, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0e, 0x20,
0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76,
0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31,
0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x72, 0x6f, 0x62, 0x6f, 0x4d,
0x6f, 0x64, 0x65, 0x12, 0x4a, 0x0a, 0x0b, 0x72, 0x6f, 0x62, 0x6f, 0x5f, 0x73, 0x63, 0x72, 0x69,
0x70, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69,
0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65,
0x6e, 0x63, 0x65, 0x52, 0x0a, 0x72, 0x6f, 0x62, 0x6f, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x12,
0x59, 0x0a, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65,
0x6e, 0x74, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74,
0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x53, 0x74, 0x61, 0x72, 0x74,
0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74,
0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x10, 0x0a, 0x0e, 0x61, 0x70,
0x70, 0x5f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x22, 0xa0, 0x01, 0x0a,
0x0d, 0x52, 0x6f, 0x62, 0x6f, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x23,
0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e,
0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x65, 0x78,
0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x65,
0x78, 0x74, 0x12, 0x4b, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70,
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e,
0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54,
0x79, 0x70, 0x65, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22,
0x99, 0x02, 0x0a, 0x12, 0x52, 0x6f, 0x62, 0x6f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67,
0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x61, 0x0a, 0x11, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68,
0x65, 0x72, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f,
0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4c,
0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x49,
0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65,
0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x58, 0x0a, 0x0e, 0x73, 0x74, 0x61,
0x72, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f,
0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53,
0x74, 0x61, 0x72, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x49, 0x6e, 0x74, 0x65,
0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76,
0x69, 0x74, 0x79, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x03,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72,
0x74, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x18, 0x0a, 0x16, 0x4c,
0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x49,
0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x5f, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x74, 0x41, 0x63,
0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06,
0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x63,
0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28,
0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f,
0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x65,
0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x22, 0xb3, 0x02, 0x0a, 0x11, 0x45, 0x6e, 0x76, 0x69, 0x72,
0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x12, 0x52, 0x0a, 0x0e,
0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x5f, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65,
0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76,
0x31, 0x2e, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x48,
0x00, 0x52, 0x0d, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78,
0x12, 0x5f, 0x0a, 0x13, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x5f, 0x64, 0x65, 0x76, 0x69,
0x63, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e,
0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6e, 0x64, 0x72, 0x6f,
0x69, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x11,
0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73,
0x74, 0x12, 0x53, 0x0a, 0x0f, 0x69, 0x6f, 0x73, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f,
0x6c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73,
0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6f, 0x73, 0x44, 0x65, 0x76, 0x69, 0x63,
0x65, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x69, 0x6f, 0x73, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x14, 0x0a, 0x12, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f,
0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x67, 0x0a, 0x11,
0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73,
0x74, 0x12, 0x52, 0x0a, 0x0f, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x5f, 0x64, 0x65, 0x76,
0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73,
0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x44,
0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x0e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x44, 0x65,
0x76, 0x69, 0x63, 0x65, 0x73, 0x22, 0x57, 0x0a, 0x0d, 0x49, 0x6f, 0x73, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x0b, 0x69, 0x6f, 0x73, 0x5f, 0x64, 0x65,
0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65,
0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6f, 0x73, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x52, 0x0a, 0x69, 0x6f, 0x73, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x22, 0xa9,
0x01, 0x0a, 0x0d, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78,
0x12, 0x2a, 0x0a, 0x11, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x65,
0x6c, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x6e, 0x64,
0x72, 0x6f, 0x69, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x49, 0x64, 0x73, 0x12, 0x2e, 0x0a, 0x13,
0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f,
0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x61, 0x6e, 0x64, 0x72, 0x6f,
0x69, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07,
0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6c,
0x6f, 0x63, 0x61, 0x6c, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x72,
0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x7e, 0x0a, 0x0a, 0x43, 0x6c,
0x69, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x5c, 0x0a, 0x13,
0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x5f, 0x64, 0x65, 0x74, 0x61,
0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74,
0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66,
0x6f, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x11, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49,
0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x3a, 0x0a, 0x10, 0x43, 0x6c,
0x69, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x10,
0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,
0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xdc, 0x02, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x75, 0x6c,
0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x60, 0x0a, 0x14, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67,
0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x53,
0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x12, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x6c,
0x6f, 0x75, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x60, 0x0a, 0x14, 0x74, 0x6f,
0x6f, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x68, 0x69, 0x73, 0x74, 0x6f,
0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69,
0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x12, 0x74, 0x6f, 0x6f, 0x6c, 0x52, 0x65,
0x73, 0x75, 0x6c, 0x74, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x66, 0x0a, 0x16,
0x74, 0x6f, 0x6f, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x65, 0x78, 0x65,
0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74,
0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x6f, 0x6c, 0x52, 0x65,
0x73, 0x75, 0x6c, 0x74, 0x73, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14,
0x74, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x45, 0x78, 0x65, 0x63, 0x75,
0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f,
0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x75, 0x6c,
0x74, 0x73, 0x55, 0x72, 0x6c, 0x22, 0x52, 0x0a, 0x12, 0x54, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73,
0x75, 0x6c, 0x74, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x70,
0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x69,
0x73, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x77, 0x0a, 0x14, 0x54, 0x6f, 0x6f,
0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f,
0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64,
0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02,
0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x12,
0x21, 0x0a, 0x0c, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18,
0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e,
0x49, 0x64, 0x22, 0x8b, 0x01, 0x0a, 0x0f, 0x54, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c,
0x74, 0x73, 0x53, 0x74, 0x65, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63,
0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a,
0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79,
0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x68, 0x69, 0x73, 0x74, 0x6f,
0x72, 0x79, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f,
0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x78, 0x65, 0x63,
0x75, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x74, 0x65, 0x70, 0x5f,
0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x65, 0x70, 0x49, 0x64,
0x22, 0x2f, 0x0a, 0x12, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x53,
0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x63, 0x73, 0x5f, 0x70, 0x61,
0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x63, 0x73, 0x50, 0x61, 0x74,
0x68, 0x22, 0x34, 0x0a, 0x0d, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
0x63, 0x65, 0x12, 0x1b, 0x0a, 0x08, 0x67, 0x63, 0x73, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x67, 0x63, 0x73, 0x50, 0x61, 0x74, 0x68, 0x42,
0x06, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x22, 0xb8, 0x01, 0x0a, 0x0b, 0x45, 0x6e, 0x76, 0x69,
0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x52, 0x0a, 0x0e, 0x61, 0x6e, 0x64, 0x72, 0x6f,
0x69, 0x64, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c,
0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6e, 0x64,
0x72, 0x6f, 0x69, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x61, 0x6e,
0x64, 0x72, 0x6f, 0x69, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x46, 0x0a, 0x0a, 0x69,
0x6f, 0x73, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c,
0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6f, 0x73,
0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x48, 0x00, 0x52, 0x09, 0x69, 0x6f, 0x73, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65,
0x6e, 0x74, 0x22, 0xa1, 0x01, 0x0a, 0x0d, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x44, 0x65,
0x76, 0x69, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x5f,
0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e,
0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x2c,
0x0a, 0x12, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, 0x6e, 0x64, 0x72,
0x6f, 0x69, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06,
0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x6f,
0x63, 0x61, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x72, 0x69, 0x65, 0x6e,
0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8d, 0x01, 0x0a, 0x09, 0x49, 0x6f, 0x73, 0x44, 0x65,
0x76, 0x69, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x69, 0x6f, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x65,
0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6f, 0x73, 0x4d,
0x6f, 0x64, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x6f, 0x73, 0x5f, 0x76, 0x65,
0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
0x69, 0x6f, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06,
0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x6f,
0x63, 0x61, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x72, 0x69, 0x65, 0x6e,
0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5f, 0x0a, 0x0b, 0x54, 0x65, 0x73, 0x74, 0x44, 0x65,
0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73,
0x73, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09,
0x52, 0x10, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73,
0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72,
0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xf3, 0x01, 0x0a, 0x14, 0x49, 0x6e, 0x76, 0x61,
0x6c, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c,
0x12, 0x4f, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e,
0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f,
0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e,
0x76, 0x61, 0x6c, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x65, 0x74, 0x61,
0x69, 0x6c, 0x2e, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f,
0x6e, 0x22, 0x89, 0x01, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x12,
0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49,
0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f,
0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x52, 0x45, 0x53,
0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x4f, 0x4f, 0x5f, 0x42, 0x49, 0x47, 0x10, 0x02, 0x12,
0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f,
0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x55, 0x50,
0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x4e, 0x4f, 0x54, 0x5f,
0x49, 0x4d, 0x50, 0x4c, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x45, 0x44, 0x10, 0x05, 0x22, 0xcb, 0x01,
0x0a, 0x0e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
0x12, 0x58, 0x0a, 0x10, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x72,
0x64, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73,
0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x53,
0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x69, 0x66, 0x6f,
0x72, 0x6d, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x55, 0x0a, 0x0f, 0x6d, 0x61,
0x6e, 0x75, 0x61, 0x6c, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76,
0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31,
0x2e, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x48,
0x00, 0x52, 0x0e, 0x6d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e,
0x67, 0x42, 0x08, 0x0a, 0x06, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x30, 0x0a, 0x0f, 0x55,
0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1d,
0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01,
0x28, 0x05, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x22, 0x76, 0x0a,
0x0e, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x53, 0x68, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12,
0x64, 0x0a, 0x16, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x5f,
0x66, 0x6f, 0x72, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c,
0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73,
0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64,
0x52, 0x13, 0x74, 0x65, 0x73, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x46, 0x6f, 0x72,
0x53, 0x68, 0x61, 0x72, 0x64, 0x22, 0x38, 0x0a, 0x13, 0x54, 0x65, 0x73, 0x74, 0x54, 0x61, 0x72,
0x67, 0x65, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x21, 0x0a, 0x0c,
0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03,
0x28, 0x09, 0x52, 0x0b, 0x74, 0x65, 0x73, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x22,
0xad, 0x01, 0x0a, 0x05, 0x53, 0x68, 0x61, 0x72, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x68, 0x61,
0x72, 0x64, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a,
0x73, 0x68, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75,
0x6d, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09,
0x6e, 0x75, 0x6d, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73, 0x12, 0x64, 0x0a, 0x16, 0x74, 0x65, 0x73,
0x74, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x73, 0x68,
0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74,
0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65,
0x74, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x13, 0x74, 0x65, 0x73, 0x74,
0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x64, 0x22,
0xa0, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x61,
0x74, 0x72, 0x69, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70,
0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x47, 0x0a, 0x0b, 0x74, 0x65,
0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c,
0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73,
0x74, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x52, 0x0a, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x61, 0x74,
0x72, 0x69, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69,
0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x49, 0x64, 0x22, 0x5b, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x61, 0x74,
0x72, 0x69, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72,
0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x65, 0x73,
0x74, 0x5f, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
0x09, 0x52, 0x0c, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x49, 0x64, 0x22,
0x5e, 0x0a, 0x17, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x61, 0x74,
0x72, 0x69, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72,
0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x65, 0x73,
0x74, 0x5f, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
0x09, 0x52, 0x0c, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x49, 0x64, 0x22,
0x60, 0x0a, 0x18, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x61, 0x74,
0x72, 0x69, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0a, 0x74,
0x65, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32,
0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c,
0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73,
0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74,
0x65, 0x2a, 0x6c, 0x0a, 0x12, 0x4f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x6f,
0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x1f, 0x4f, 0x52, 0x43, 0x48, 0x45,
0x53, 0x54, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55,
0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10,
0x55, 0x53, 0x45, 0x5f, 0x4f, 0x52, 0x43, 0x48, 0x45, 0x53, 0x54, 0x52, 0x41, 0x54, 0x4f, 0x52,
0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x4f, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x55, 0x53, 0x45,
0x5f, 0x4f, 0x52, 0x43, 0x48, 0x45, 0x53, 0x54, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x10, 0x02, 0x2a,
0x4d, 0x0a, 0x08, 0x52, 0x6f, 0x62, 0x6f, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x52,
0x4f, 0x42, 0x4f, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49,
0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x52, 0x4f, 0x42, 0x4f, 0x5f, 0x56,
0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x31, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x52, 0x4f,
0x42, 0x4f, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x32, 0x10, 0x02, 0x2a, 0x5b,
0x0a, 0x0e, 0x52, 0x6f, 0x62, 0x6f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65,
0x12, 0x1b, 0x0a, 0x17, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f,
0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x10, 0x0a,
0x0c, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x5f, 0x43, 0x4c, 0x49, 0x43, 0x4b, 0x10, 0x01, 0x12,
0x0e, 0x0a, 0x0a, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x45, 0x58, 0x54, 0x10, 0x02, 0x12,
0x0a, 0x0a, 0x06, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x10, 0x03, 0x2a, 0xa4, 0x08, 0x0a, 0x14,
0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x44, 0x65, 0x74,
0x61, 0x69, 0x6c, 0x73, 0x12, 0x26, 0x0a, 0x22, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f,
0x4d, 0x41, 0x54, 0x52, 0x49, 0x58, 0x5f, 0x44, 0x45, 0x54, 0x41, 0x49, 0x4c, 0x53, 0x5f, 0x55,
0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13,
0x44, 0x45, 0x54, 0x41, 0x49, 0x4c, 0x53, 0x5f, 0x55, 0x4e, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41,
0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x41, 0x4c, 0x46, 0x4f, 0x52, 0x4d,
0x45, 0x44, 0x5f, 0x41, 0x50, 0x4b, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x4d, 0x41, 0x4c, 0x46,
0x4f, 0x52, 0x4d, 0x45, 0x44, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x41, 0x50, 0x4b, 0x10, 0x03,
0x12, 0x0f, 0x0a, 0x0b, 0x4e, 0x4f, 0x5f, 0x4d, 0x41, 0x4e, 0x49, 0x46, 0x45, 0x53, 0x54, 0x10,
0x04, 0x12, 0x13, 0x0a, 0x0f, 0x4e, 0x4f, 0x5f, 0x50, 0x41, 0x43, 0x4b, 0x41, 0x47, 0x45, 0x5f,
0x4e, 0x41, 0x4d, 0x45, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49,
0x44, 0x5f, 0x50, 0x41, 0x43, 0x4b, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x1f,
0x12, 0x14, 0x0a, 0x10, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x53, 0x41, 0x4d, 0x45, 0x5f, 0x41, 0x53,
0x5f, 0x41, 0x50, 0x50, 0x10, 0x06, 0x12, 0x16, 0x0a, 0x12, 0x4e, 0x4f, 0x5f, 0x49, 0x4e, 0x53,
0x54, 0x52, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x07, 0x12, 0x10,
0x0a, 0x0c, 0x4e, 0x4f, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x10, 0x14,
0x12, 0x2d, 0x0a, 0x29, 0x49, 0x4e, 0x53, 0x54, 0x52, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x41, 0x54,
0x49, 0x4f, 0x4e, 0x5f, 0x4f, 0x52, 0x43, 0x48, 0x45, 0x53, 0x54, 0x52, 0x41, 0x54, 0x4f, 0x52,
0x5f, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x54, 0x49, 0x42, 0x4c, 0x45, 0x10, 0x12, 0x12,
0x18, 0x0a, 0x14, 0x4e, 0x4f, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x45,
0x52, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x10, 0x13, 0x12, 0x18, 0x0a, 0x14, 0x4e, 0x4f, 0x5f,
0x4c, 0x41, 0x55, 0x4e, 0x43, 0x48, 0x45, 0x52, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49, 0x54,
0x59, 0x10, 0x08, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x4f, 0x52, 0x42, 0x49, 0x44, 0x44, 0x45, 0x4e,
0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x09, 0x12, 0x1b,
0x0a, 0x17, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x52, 0x4f, 0x42, 0x4f, 0x5f, 0x44,
0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x56, 0x45, 0x53, 0x10, 0x0a, 0x12, 0x19, 0x0a, 0x15, 0x49,
0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f,
0x4e, 0x41, 0x4d, 0x45, 0x10, 0x21, 0x12, 0x1c, 0x0a, 0x18, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49,
0x44, 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49,
0x4f, 0x4e, 0x10, 0x22, 0x12, 0x25, 0x0a, 0x21, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x4c, 0x4f, 0x4f,
0x50, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x5f,
0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x0c, 0x12, 0x1f, 0x0a, 0x1b, 0x53,
0x43, 0x45, 0x4e, 0x41, 0x52, 0x49, 0x4f, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x4e, 0x4f,
0x54, 0x5f, 0x44, 0x45, 0x43, 0x4c, 0x41, 0x52, 0x45, 0x44, 0x10, 0x0d, 0x12, 0x1c, 0x0a, 0x18,
0x53, 0x43, 0x45, 0x4e, 0x41, 0x52, 0x49, 0x4f, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x4d,
0x41, 0x4c, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x44, 0x10, 0x0e, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x43,
0x45, 0x4e, 0x41, 0x52, 0x49, 0x4f, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x44, 0x45, 0x43, 0x4c, 0x41,
0x52, 0x45, 0x44, 0x10, 0x0f, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f,
0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x52, 0x10, 0x11,
0x12, 0x19, 0x0a, 0x15, 0x4d, 0x41, 0x4c, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x44, 0x5f, 0x58, 0x43,
0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x5a, 0x49, 0x50, 0x10, 0x0b, 0x12, 0x1b, 0x0a, 0x17, 0x42,
0x55, 0x49, 0x4c, 0x54, 0x5f, 0x46, 0x4f, 0x52, 0x5f, 0x49, 0x4f, 0x53, 0x5f, 0x53, 0x49, 0x4d,
0x55, 0x4c, 0x41, 0x54, 0x4f, 0x52, 0x10, 0x18, 0x12, 0x1b, 0x0a, 0x17, 0x4e, 0x4f, 0x5f, 0x54,
0x45, 0x53, 0x54, 0x53, 0x5f, 0x49, 0x4e, 0x5f, 0x58, 0x43, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f,
0x5a, 0x49, 0x50, 0x10, 0x19, 0x12, 0x1d, 0x0a, 0x19, 0x55, 0x53, 0x45, 0x5f, 0x44, 0x45, 0x53,
0x54, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x52, 0x54, 0x49, 0x46, 0x41, 0x43,
0x54, 0x53, 0x10, 0x1a, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x4e, 0x4f, 0x54,
0x5f, 0x41, 0x50, 0x50, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x1c, 0x12, 0x1a, 0x0a,
0x16, 0x50, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x43, 0x41, 0x4e, 0x4e, 0x4f, 0x54, 0x5f, 0x42, 0x45,
0x5f, 0x50, 0x41, 0x52, 0x53, 0x45, 0x44, 0x10, 0x1e, 0x12, 0x15, 0x0a, 0x0d, 0x54, 0x45, 0x53,
0x54, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x5f, 0x41, 0x50, 0x4b, 0x10, 0x15, 0x1a, 0x02, 0x08, 0x01,
0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x41, 0x4c, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x44, 0x5f, 0x49, 0x50,
0x41, 0x10, 0x16, 0x12, 0x16, 0x0a, 0x12, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x5f, 0x55,
0x52, 0x4c, 0x5f, 0x53, 0x43, 0x48, 0x45, 0x4d, 0x45, 0x10, 0x23, 0x12, 0x18, 0x0a, 0x14, 0x4d,
0x41, 0x4c, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x44, 0x5f, 0x41, 0x50, 0x50, 0x5f, 0x42, 0x55, 0x4e,
0x44, 0x4c, 0x45, 0x10, 0x24, 0x12, 0x0f, 0x0a, 0x0b, 0x4e, 0x4f, 0x5f, 0x43, 0x4f, 0x44, 0x45,
0x5f, 0x41, 0x50, 0x4b, 0x10, 0x17, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49,
0x44, 0x5f, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x5f, 0x41, 0x50, 0x4b, 0x10, 0x1b, 0x12, 0x1b, 0x0a,
0x17, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x50, 0x4b, 0x5f, 0x50, 0x52, 0x45,
0x56, 0x49, 0x45, 0x57, 0x5f, 0x53, 0x44, 0x4b, 0x10, 0x1d, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x41,
0x54, 0x52, 0x49, 0x58, 0x5f, 0x54, 0x4f, 0x4f, 0x5f, 0x4c, 0x41, 0x52, 0x47, 0x45, 0x10, 0x25,
0x12, 0x17, 0x0a, 0x13, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x51, 0x55, 0x4f, 0x54, 0x41, 0x5f, 0x45,
0x58, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0x27, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x45, 0x52,
0x56, 0x49, 0x43, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x41, 0x54,
0x45, 0x44, 0x10, 0x28, 0x12, 0x1c, 0x0a, 0x18, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f,
0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52,
0x10, 0x29, 0x2a, 0xe0, 0x01, 0x0a, 0x09, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65,
0x12, 0x1a, 0x0a, 0x16, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55,
0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a,
0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x08, 0x12, 0x0b, 0x0a, 0x07,
0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x4e,
0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x48,
0x45, 0x44, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12,
0x1b, 0x0a, 0x17, 0x55, 0x4e, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x5f, 0x45,
0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x1c, 0x0a, 0x18,
0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x54, 0x49, 0x42, 0x4c, 0x45, 0x5f, 0x45, 0x4e, 0x56,
0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x09, 0x12, 0x1d, 0x0a, 0x19, 0x49, 0x4e,
0x43, 0x4f, 0x4d, 0x50, 0x41, 0x54, 0x49, 0x42, 0x4c, 0x45, 0x5f, 0x41, 0x52, 0x43, 0x48, 0x49,
0x54, 0x45, 0x43, 0x54, 0x55, 0x52, 0x45, 0x10, 0x0a, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e,
0x43, 0x45, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x56, 0x41,
0x4c, 0x49, 0x44, 0x10, 0x07, 0x2a, 0x6a, 0x0a, 0x0e, 0x4f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65,
0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x1b, 0x4f, 0x55, 0x54, 0x43, 0x4f,
0x4d, 0x45, 0x5f, 0x53, 0x55, 0x4d, 0x4d, 0x41, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45,
0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43,
0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45,
0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x4e, 0x43, 0x4f, 0x4e, 0x43, 0x4c, 0x55, 0x53, 0x49,
0x56, 0x45, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x4b, 0x49, 0x50, 0x50, 0x45, 0x44, 0x10,
0x04, 0x32, 0xc0, 0x05, 0x0a, 0x14, 0x54, 0x65, 0x73, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74,
0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xac, 0x01, 0x0a, 0x10, 0x43,
0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x12,
0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c,
0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65,
0x61, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65,
0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76,
0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3b, 0x82, 0xd3,
0xe4, 0x93, 0x02, 0x35, 0x22, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63,
0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f,
0x74, 0x65, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x63, 0x65, 0x73, 0x3a, 0x0b, 0x74, 0x65,
0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x47, 0x65,
0x74, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x12, 0x30, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65,
0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74,
0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e,
0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4d,
0x61, 0x74, 0x72, 0x69, 0x78, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f,
0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f,
0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x61, 0x74,
0x72, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x72,
0x69, 0x78, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xc5, 0x01, 0x0a, 0x10, 0x43, 0x61, 0x6e, 0x63, 0x65,
0x6c, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x12, 0x33, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65,
0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x54,
0x65, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f,
0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61,
0x6e, 0x63, 0x65, 0x6c, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x46, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x22, 0x3e,
0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72,
0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x61,
0x74, 0x72, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74,
0x72, 0x69, 0x78, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x1a, 0x83,
0x01, 0xca, 0x41, 0x16, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0xd2, 0x41, 0x67, 0x68, 0x74, 0x74,
0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61,
0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f,
0x75, 0x64, 0x2d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2c, 0x68, 0x74, 0x74, 0x70,
0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70,
0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f, 0x75,
0x64, 0x2d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2d,
0x6f, 0x6e, 0x6c, 0x79, 0x42, 0x79, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74,
0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x42, 0x12, 0x54, 0x65, 0x73, 0x74, 0x45, 0x78, 0x65, 0x63,
0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x41, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61,
0x70, 0x69, 0x73, 0x2f, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x74, 0x65, 0x73,
0x74, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x3b, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x62,
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_google_devtools_testing_v1_test_execution_proto_rawDescOnce sync.Once
file_google_devtools_testing_v1_test_execution_proto_rawDescData = file_google_devtools_testing_v1_test_execution_proto_rawDesc
)
func file_google_devtools_testing_v1_test_execution_proto_rawDescGZIP() []byte {
file_google_devtools_testing_v1_test_execution_proto_rawDescOnce.Do(func() {
file_google_devtools_testing_v1_test_execution_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_devtools_testing_v1_test_execution_proto_rawDescData)
})
return file_google_devtools_testing_v1_test_execution_proto_rawDescData
}
var file_google_devtools_testing_v1_test_execution_proto_enumTypes = make([]protoimpl.EnumInfo, 7)
var file_google_devtools_testing_v1_test_execution_proto_msgTypes = make([]protoimpl.MessageInfo, 50)
var file_google_devtools_testing_v1_test_execution_proto_goTypes = []interface{}{
(OrchestratorOption)(0), // 0: google.devtools.testing.v1.OrchestratorOption
(RoboMode)(0), // 1: google.devtools.testing.v1.RoboMode
(RoboActionType)(0), // 2: google.devtools.testing.v1.RoboActionType
(InvalidMatrixDetails)(0), // 3: google.devtools.testing.v1.InvalidMatrixDetails
(TestState)(0), // 4: google.devtools.testing.v1.TestState
(OutcomeSummary)(0), // 5: google.devtools.testing.v1.OutcomeSummary
(InvalidRequestDetail_Reason)(0), // 6: google.devtools.testing.v1.InvalidRequestDetail.Reason
(*TestMatrix)(nil), // 7: google.devtools.testing.v1.TestMatrix
(*TestExecution)(nil), // 8: google.devtools.testing.v1.TestExecution
(*TestSpecification)(nil), // 9: google.devtools.testing.v1.TestSpecification
(*SystraceSetup)(nil), // 10: google.devtools.testing.v1.SystraceSetup
(*TestSetup)(nil), // 11: google.devtools.testing.v1.TestSetup
(*IosTestSetup)(nil), // 12: google.devtools.testing.v1.IosTestSetup
(*EnvironmentVariable)(nil), // 13: google.devtools.testing.v1.EnvironmentVariable
(*Account)(nil), // 14: google.devtools.testing.v1.Account
(*GoogleAuto)(nil), // 15: google.devtools.testing.v1.GoogleAuto
(*Apk)(nil), // 16: google.devtools.testing.v1.Apk
(*AppBundle)(nil), // 17: google.devtools.testing.v1.AppBundle
(*DeviceFile)(nil), // 18: google.devtools.testing.v1.DeviceFile
(*ObbFile)(nil), // 19: google.devtools.testing.v1.ObbFile
(*RegularFile)(nil), // 20: google.devtools.testing.v1.RegularFile
(*IosDeviceFile)(nil), // 21: google.devtools.testing.v1.IosDeviceFile
(*AndroidTestLoop)(nil), // 22: google.devtools.testing.v1.AndroidTestLoop
(*IosXcTest)(nil), // 23: google.devtools.testing.v1.IosXcTest
(*IosTestLoop)(nil), // 24: google.devtools.testing.v1.IosTestLoop
(*AndroidInstrumentationTest)(nil), // 25: google.devtools.testing.v1.AndroidInstrumentationTest
(*AndroidRoboTest)(nil), // 26: google.devtools.testing.v1.AndroidRoboTest
(*RoboDirective)(nil), // 27: google.devtools.testing.v1.RoboDirective
(*RoboStartingIntent)(nil), // 28: google.devtools.testing.v1.RoboStartingIntent
(*LauncherActivityIntent)(nil), // 29: google.devtools.testing.v1.LauncherActivityIntent
(*StartActivityIntent)(nil), // 30: google.devtools.testing.v1.StartActivityIntent
(*EnvironmentMatrix)(nil), // 31: google.devtools.testing.v1.EnvironmentMatrix
(*AndroidDeviceList)(nil), // 32: google.devtools.testing.v1.AndroidDeviceList
(*IosDeviceList)(nil), // 33: google.devtools.testing.v1.IosDeviceList
(*AndroidMatrix)(nil), // 34: google.devtools.testing.v1.AndroidMatrix
(*ClientInfo)(nil), // 35: google.devtools.testing.v1.ClientInfo
(*ClientInfoDetail)(nil), // 36: google.devtools.testing.v1.ClientInfoDetail
(*ResultStorage)(nil), // 37: google.devtools.testing.v1.ResultStorage
(*ToolResultsHistory)(nil), // 38: google.devtools.testing.v1.ToolResultsHistory
(*ToolResultsExecution)(nil), // 39: google.devtools.testing.v1.ToolResultsExecution
(*ToolResultsStep)(nil), // 40: google.devtools.testing.v1.ToolResultsStep
(*GoogleCloudStorage)(nil), // 41: google.devtools.testing.v1.GoogleCloudStorage
(*FileReference)(nil), // 42: google.devtools.testing.v1.FileReference
(*Environment)(nil), // 43: google.devtools.testing.v1.Environment
(*AndroidDevice)(nil), // 44: google.devtools.testing.v1.AndroidDevice
(*IosDevice)(nil), // 45: google.devtools.testing.v1.IosDevice
(*TestDetails)(nil), // 46: google.devtools.testing.v1.TestDetails
(*InvalidRequestDetail)(nil), // 47: google.devtools.testing.v1.InvalidRequestDetail
(*ShardingOption)(nil), // 48: google.devtools.testing.v1.ShardingOption
(*UniformSharding)(nil), // 49: google.devtools.testing.v1.UniformSharding
(*ManualSharding)(nil), // 50: google.devtools.testing.v1.ManualSharding
(*TestTargetsForShard)(nil), // 51: google.devtools.testing.v1.TestTargetsForShard
(*Shard)(nil), // 52: google.devtools.testing.v1.Shard
(*CreateTestMatrixRequest)(nil), // 53: google.devtools.testing.v1.CreateTestMatrixRequest
(*GetTestMatrixRequest)(nil), // 54: google.devtools.testing.v1.GetTestMatrixRequest
(*CancelTestMatrixRequest)(nil), // 55: google.devtools.testing.v1.CancelTestMatrixRequest
(*CancelTestMatrixResponse)(nil), // 56: google.devtools.testing.v1.CancelTestMatrixResponse
(*timestamppb.Timestamp)(nil), // 57: google.protobuf.Timestamp
(*durationpb.Duration)(nil), // 58: google.protobuf.Duration
}
var file_google_devtools_testing_v1_test_execution_proto_depIdxs = []int32{
35, // 0: google.devtools.testing.v1.TestMatrix.client_info:type_name -> google.devtools.testing.v1.ClientInfo
9, // 1: google.devtools.testing.v1.TestMatrix.test_specification:type_name -> google.devtools.testing.v1.TestSpecification
31, // 2: google.devtools.testing.v1.TestMatrix.environment_matrix:type_name -> google.devtools.testing.v1.EnvironmentMatrix
8, // 3: google.devtools.testing.v1.TestMatrix.test_executions:type_name -> google.devtools.testing.v1.TestExecution
37, // 4: google.devtools.testing.v1.TestMatrix.result_storage:type_name -> google.devtools.testing.v1.ResultStorage
4, // 5: google.devtools.testing.v1.TestMatrix.state:type_name -> google.devtools.testing.v1.TestState
57, // 6: google.devtools.testing.v1.TestMatrix.timestamp:type_name -> google.protobuf.Timestamp
3, // 7: google.devtools.testing.v1.TestMatrix.invalid_matrix_details:type_name -> google.devtools.testing.v1.InvalidMatrixDetails
5, // 8: google.devtools.testing.v1.TestMatrix.outcome_summary:type_name -> google.devtools.testing.v1.OutcomeSummary
9, // 9: google.devtools.testing.v1.TestExecution.test_specification:type_name -> google.devtools.testing.v1.TestSpecification
52, // 10: google.devtools.testing.v1.TestExecution.shard:type_name -> google.devtools.testing.v1.Shard
43, // 11: google.devtools.testing.v1.TestExecution.environment:type_name -> google.devtools.testing.v1.Environment
4, // 12: google.devtools.testing.v1.TestExecution.state:type_name -> google.devtools.testing.v1.TestState
40, // 13: google.devtools.testing.v1.TestExecution.tool_results_step:type_name -> google.devtools.testing.v1.ToolResultsStep
57, // 14: google.devtools.testing.v1.TestExecution.timestamp:type_name -> google.protobuf.Timestamp
46, // 15: google.devtools.testing.v1.TestExecution.test_details:type_name -> google.devtools.testing.v1.TestDetails
58, // 16: google.devtools.testing.v1.TestSpecification.test_timeout:type_name -> google.protobuf.Duration
11, // 17: google.devtools.testing.v1.TestSpecification.test_setup:type_name -> google.devtools.testing.v1.TestSetup
12, // 18: google.devtools.testing.v1.TestSpecification.ios_test_setup:type_name -> google.devtools.testing.v1.IosTestSetup
25, // 19: google.devtools.testing.v1.TestSpecification.android_instrumentation_test:type_name -> google.devtools.testing.v1.AndroidInstrumentationTest
26, // 20: google.devtools.testing.v1.TestSpecification.android_robo_test:type_name -> google.devtools.testing.v1.AndroidRoboTest
22, // 21: google.devtools.testing.v1.TestSpecification.android_test_loop:type_name -> google.devtools.testing.v1.AndroidTestLoop
23, // 22: google.devtools.testing.v1.TestSpecification.ios_xc_test:type_name -> google.devtools.testing.v1.IosXcTest
24, // 23: google.devtools.testing.v1.TestSpecification.ios_test_loop:type_name -> google.devtools.testing.v1.IosTestLoop
18, // 24: google.devtools.testing.v1.TestSetup.files_to_push:type_name -> google.devtools.testing.v1.DeviceFile
16, // 25: google.devtools.testing.v1.TestSetup.additional_apks:type_name -> google.devtools.testing.v1.Apk
14, // 26: google.devtools.testing.v1.TestSetup.account:type_name -> google.devtools.testing.v1.Account
13, // 27: google.devtools.testing.v1.TestSetup.environment_variables:type_name -> google.devtools.testing.v1.EnvironmentVariable
10, // 28: google.devtools.testing.v1.TestSetup.systrace:type_name -> google.devtools.testing.v1.SystraceSetup
42, // 29: google.devtools.testing.v1.IosTestSetup.additional_ipas:type_name -> google.devtools.testing.v1.FileReference
21, // 30: google.devtools.testing.v1.IosTestSetup.push_files:type_name -> google.devtools.testing.v1.IosDeviceFile
21, // 31: google.devtools.testing.v1.IosTestSetup.pull_directories:type_name -> google.devtools.testing.v1.IosDeviceFile
15, // 32: google.devtools.testing.v1.Account.google_auto:type_name -> google.devtools.testing.v1.GoogleAuto
42, // 33: google.devtools.testing.v1.Apk.location:type_name -> google.devtools.testing.v1.FileReference
42, // 34: google.devtools.testing.v1.AppBundle.bundle_location:type_name -> google.devtools.testing.v1.FileReference
19, // 35: google.devtools.testing.v1.DeviceFile.obb_file:type_name -> google.devtools.testing.v1.ObbFile
20, // 36: google.devtools.testing.v1.DeviceFile.regular_file:type_name -> google.devtools.testing.v1.RegularFile
42, // 37: google.devtools.testing.v1.ObbFile.obb:type_name -> google.devtools.testing.v1.FileReference
42, // 38: google.devtools.testing.v1.RegularFile.content:type_name -> google.devtools.testing.v1.FileReference
42, // 39: google.devtools.testing.v1.IosDeviceFile.content:type_name -> google.devtools.testing.v1.FileReference
42, // 40: google.devtools.testing.v1.AndroidTestLoop.app_apk:type_name -> google.devtools.testing.v1.FileReference
17, // 41: google.devtools.testing.v1.AndroidTestLoop.app_bundle:type_name -> google.devtools.testing.v1.AppBundle
42, // 42: google.devtools.testing.v1.IosXcTest.tests_zip:type_name -> google.devtools.testing.v1.FileReference
42, // 43: google.devtools.testing.v1.IosXcTest.xctestrun:type_name -> google.devtools.testing.v1.FileReference
42, // 44: google.devtools.testing.v1.IosTestLoop.app_ipa:type_name -> google.devtools.testing.v1.FileReference
42, // 45: google.devtools.testing.v1.AndroidInstrumentationTest.app_apk:type_name -> google.devtools.testing.v1.FileReference
17, // 46: google.devtools.testing.v1.AndroidInstrumentationTest.app_bundle:type_name -> google.devtools.testing.v1.AppBundle
42, // 47: google.devtools.testing.v1.AndroidInstrumentationTest.test_apk:type_name -> google.devtools.testing.v1.FileReference
0, // 48: google.devtools.testing.v1.AndroidInstrumentationTest.orchestrator_option:type_name -> google.devtools.testing.v1.OrchestratorOption
48, // 49: google.devtools.testing.v1.AndroidInstrumentationTest.sharding_option:type_name -> google.devtools.testing.v1.ShardingOption
42, // 50: google.devtools.testing.v1.AndroidRoboTest.app_apk:type_name -> google.devtools.testing.v1.FileReference
17, // 51: google.devtools.testing.v1.AndroidRoboTest.app_bundle:type_name -> google.devtools.testing.v1.AppBundle
27, // 52: google.devtools.testing.v1.AndroidRoboTest.robo_directives:type_name -> google.devtools.testing.v1.RoboDirective
1, // 53: google.devtools.testing.v1.AndroidRoboTest.robo_mode:type_name -> google.devtools.testing.v1.RoboMode
42, // 54: google.devtools.testing.v1.AndroidRoboTest.robo_script:type_name -> google.devtools.testing.v1.FileReference
28, // 55: google.devtools.testing.v1.AndroidRoboTest.starting_intents:type_name -> google.devtools.testing.v1.RoboStartingIntent
2, // 56: google.devtools.testing.v1.RoboDirective.action_type:type_name -> google.devtools.testing.v1.RoboActionType
29, // 57: google.devtools.testing.v1.RoboStartingIntent.launcher_activity:type_name -> google.devtools.testing.v1.LauncherActivityIntent
30, // 58: google.devtools.testing.v1.RoboStartingIntent.start_activity:type_name -> google.devtools.testing.v1.StartActivityIntent
58, // 59: google.devtools.testing.v1.RoboStartingIntent.timeout:type_name -> google.protobuf.Duration
34, // 60: google.devtools.testing.v1.EnvironmentMatrix.android_matrix:type_name -> google.devtools.testing.v1.AndroidMatrix
32, // 61: google.devtools.testing.v1.EnvironmentMatrix.android_device_list:type_name -> google.devtools.testing.v1.AndroidDeviceList
33, // 62: google.devtools.testing.v1.EnvironmentMatrix.ios_device_list:type_name -> google.devtools.testing.v1.IosDeviceList
44, // 63: google.devtools.testing.v1.AndroidDeviceList.android_devices:type_name -> google.devtools.testing.v1.AndroidDevice
45, // 64: google.devtools.testing.v1.IosDeviceList.ios_devices:type_name -> google.devtools.testing.v1.IosDevice
36, // 65: google.devtools.testing.v1.ClientInfo.client_info_details:type_name -> google.devtools.testing.v1.ClientInfoDetail
41, // 66: google.devtools.testing.v1.ResultStorage.google_cloud_storage:type_name -> google.devtools.testing.v1.GoogleCloudStorage
38, // 67: google.devtools.testing.v1.ResultStorage.tool_results_history:type_name -> google.devtools.testing.v1.ToolResultsHistory
39, // 68: google.devtools.testing.v1.ResultStorage.tool_results_execution:type_name -> google.devtools.testing.v1.ToolResultsExecution
44, // 69: google.devtools.testing.v1.Environment.android_device:type_name -> google.devtools.testing.v1.AndroidDevice
45, // 70: google.devtools.testing.v1.Environment.ios_device:type_name -> google.devtools.testing.v1.IosDevice
6, // 71: google.devtools.testing.v1.InvalidRequestDetail.reason:type_name -> google.devtools.testing.v1.InvalidRequestDetail.Reason
49, // 72: google.devtools.testing.v1.ShardingOption.uniform_sharding:type_name -> google.devtools.testing.v1.UniformSharding
50, // 73: google.devtools.testing.v1.ShardingOption.manual_sharding:type_name -> google.devtools.testing.v1.ManualSharding
51, // 74: google.devtools.testing.v1.ManualSharding.test_targets_for_shard:type_name -> google.devtools.testing.v1.TestTargetsForShard
51, // 75: google.devtools.testing.v1.Shard.test_targets_for_shard:type_name -> google.devtools.testing.v1.TestTargetsForShard
7, // 76: google.devtools.testing.v1.CreateTestMatrixRequest.test_matrix:type_name -> google.devtools.testing.v1.TestMatrix
4, // 77: google.devtools.testing.v1.CancelTestMatrixResponse.test_state:type_name -> google.devtools.testing.v1.TestState
53, // 78: google.devtools.testing.v1.TestExecutionService.CreateTestMatrix:input_type -> google.devtools.testing.v1.CreateTestMatrixRequest
54, // 79: google.devtools.testing.v1.TestExecutionService.GetTestMatrix:input_type -> google.devtools.testing.v1.GetTestMatrixRequest
55, // 80: google.devtools.testing.v1.TestExecutionService.CancelTestMatrix:input_type -> google.devtools.testing.v1.CancelTestMatrixRequest
7, // 81: google.devtools.testing.v1.TestExecutionService.CreateTestMatrix:output_type -> google.devtools.testing.v1.TestMatrix
7, // 82: google.devtools.testing.v1.TestExecutionService.GetTestMatrix:output_type -> google.devtools.testing.v1.TestMatrix
56, // 83: google.devtools.testing.v1.TestExecutionService.CancelTestMatrix:output_type -> google.devtools.testing.v1.CancelTestMatrixResponse
81, // [81:84] is the sub-list for method output_type
78, // [78:81] is the sub-list for method input_type
78, // [78:78] is the sub-list for extension type_name
78, // [78:78] is the sub-list for extension extendee
0, // [0:78] is the sub-list for field type_name
}
func init() { file_google_devtools_testing_v1_test_execution_proto_init() }
func file_google_devtools_testing_v1_test_execution_proto_init() {
if File_google_devtools_testing_v1_test_execution_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_google_devtools_testing_v1_test_execution_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TestMatrix); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TestExecution); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TestSpecification); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SystraceSetup); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TestSetup); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*IosTestSetup); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*EnvironmentVariable); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Account); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GoogleAuto); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Apk); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AppBundle); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DeviceFile); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ObbFile); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RegularFile); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*IosDeviceFile); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AndroidTestLoop); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*IosXcTest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*IosTestLoop); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AndroidInstrumentationTest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AndroidRoboTest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RoboDirective); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RoboStartingIntent); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*LauncherActivityIntent); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*StartActivityIntent); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*EnvironmentMatrix); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AndroidDeviceList); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*IosDeviceList); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AndroidMatrix); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ClientInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ClientInfoDetail); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ResultStorage); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ToolResultsHistory); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ToolResultsExecution); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ToolResultsStep); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GoogleCloudStorage); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*FileReference); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Environment); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AndroidDevice); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*IosDevice); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TestDetails); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*InvalidRequestDetail); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ShardingOption); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UniformSharding); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ManualSharding); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TestTargetsForShard); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Shard); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CreateTestMatrixRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetTestMatrixRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CancelTestMatrixRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CancelTestMatrixResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[2].OneofWrappers = []interface{}{
(*TestSpecification_TestSetup)(nil),
(*TestSpecification_IosTestSetup)(nil),
(*TestSpecification_AndroidInstrumentationTest)(nil),
(*TestSpecification_AndroidRoboTest)(nil),
(*TestSpecification_AndroidTestLoop)(nil),
(*TestSpecification_IosXcTest)(nil),
(*TestSpecification_IosTestLoop)(nil),
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[7].OneofWrappers = []interface{}{
(*Account_GoogleAuto)(nil),
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[10].OneofWrappers = []interface{}{
(*AppBundle_BundleLocation)(nil),
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[11].OneofWrappers = []interface{}{
(*DeviceFile_ObbFile)(nil),
(*DeviceFile_RegularFile)(nil),
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[15].OneofWrappers = []interface{}{
(*AndroidTestLoop_AppApk)(nil),
(*AndroidTestLoop_AppBundle)(nil),
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[18].OneofWrappers = []interface{}{
(*AndroidInstrumentationTest_AppApk)(nil),
(*AndroidInstrumentationTest_AppBundle)(nil),
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[19].OneofWrappers = []interface{}{
(*AndroidRoboTest_AppApk)(nil),
(*AndroidRoboTest_AppBundle)(nil),
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[21].OneofWrappers = []interface{}{
(*RoboStartingIntent_LauncherActivity)(nil),
(*RoboStartingIntent_StartActivity)(nil),
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[24].OneofWrappers = []interface{}{
(*EnvironmentMatrix_AndroidMatrix)(nil),
(*EnvironmentMatrix_AndroidDeviceList)(nil),
(*EnvironmentMatrix_IosDeviceList)(nil),
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[35].OneofWrappers = []interface{}{
(*FileReference_GcsPath)(nil),
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[36].OneofWrappers = []interface{}{
(*Environment_AndroidDevice)(nil),
(*Environment_IosDevice)(nil),
}
file_google_devtools_testing_v1_test_execution_proto_msgTypes[41].OneofWrappers = []interface{}{
(*ShardingOption_UniformSharding)(nil),
(*ShardingOption_ManualSharding)(nil),
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_google_devtools_testing_v1_test_execution_proto_rawDesc,
NumEnums: 7,
NumMessages: 50,
NumExtensions: 0,
NumServices: 1,
},
GoTypes: file_google_devtools_testing_v1_test_execution_proto_goTypes,
DependencyIndexes: file_google_devtools_testing_v1_test_execution_proto_depIdxs,
EnumInfos: file_google_devtools_testing_v1_test_execution_proto_enumTypes,
MessageInfos: file_google_devtools_testing_v1_test_execution_proto_msgTypes,
}.Build()
File_google_devtools_testing_v1_test_execution_proto = out.File
file_google_devtools_testing_v1_test_execution_proto_rawDesc = nil
file_google_devtools_testing_v1_test_execution_proto_goTypes = nil
file_google_devtools_testing_v1_test_execution_proto_depIdxs = nil
}
// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConnInterface
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion6
// TestExecutionServiceClient is the client API for TestExecutionService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type TestExecutionServiceClient interface {
// 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.
CreateTestMatrix(ctx context.Context, in *CreateTestMatrixRequest, opts ...grpc.CallOption) (*TestMatrix, error)
// 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
GetTestMatrix(ctx context.Context, in *GetTestMatrixRequest, opts ...grpc.CallOption) (*TestMatrix, error)
// 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
CancelTestMatrix(ctx context.Context, in *CancelTestMatrixRequest, opts ...grpc.CallOption) (*CancelTestMatrixResponse, error)
}
type testExecutionServiceClient struct {
cc grpc.ClientConnInterface
}
func NewTestExecutionServiceClient(cc grpc.ClientConnInterface) TestExecutionServiceClient {
return &testExecutionServiceClient{cc}
}
func (c *testExecutionServiceClient) CreateTestMatrix(ctx context.Context, in *CreateTestMatrixRequest, opts ...grpc.CallOption) (*TestMatrix, error) {
out := new(TestMatrix)
err := c.cc.Invoke(ctx, "/google.devtools.testing.v1.TestExecutionService/CreateTestMatrix", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *testExecutionServiceClient) GetTestMatrix(ctx context.Context, in *GetTestMatrixRequest, opts ...grpc.CallOption) (*TestMatrix, error) {
out := new(TestMatrix)
err := c.cc.Invoke(ctx, "/google.devtools.testing.v1.TestExecutionService/GetTestMatrix", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *testExecutionServiceClient) CancelTestMatrix(ctx context.Context, in *CancelTestMatrixRequest, opts ...grpc.CallOption) (*CancelTestMatrixResponse, error) {
out := new(CancelTestMatrixResponse)
err := c.cc.Invoke(ctx, "/google.devtools.testing.v1.TestExecutionService/CancelTestMatrix", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// TestExecutionServiceServer is the server API for TestExecutionService service.
type TestExecutionServiceServer interface {
// 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.
CreateTestMatrix(context.Context, *CreateTestMatrixRequest) (*TestMatrix, error)
// 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
GetTestMatrix(context.Context, *GetTestMatrixRequest) (*TestMatrix, error)
// 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
CancelTestMatrix(context.Context, *CancelTestMatrixRequest) (*CancelTestMatrixResponse, error)
}
// UnimplementedTestExecutionServiceServer can be embedded to have forward compatible implementations.
type UnimplementedTestExecutionServiceServer struct {
}
func (*UnimplementedTestExecutionServiceServer) CreateTestMatrix(context.Context, *CreateTestMatrixRequest) (*TestMatrix, error) {
return nil, status.Errorf(codes.Unimplemented, "method CreateTestMatrix not implemented")
}
func (*UnimplementedTestExecutionServiceServer) GetTestMatrix(context.Context, *GetTestMatrixRequest) (*TestMatrix, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetTestMatrix not implemented")
}
func (*UnimplementedTestExecutionServiceServer) CancelTestMatrix(context.Context, *CancelTestMatrixRequest) (*CancelTestMatrixResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method CancelTestMatrix not implemented")
}
func RegisterTestExecutionServiceServer(s *grpc.Server, srv TestExecutionServiceServer) {
s.RegisterService(&_TestExecutionService_serviceDesc, srv)
}
func _TestExecutionService_CreateTestMatrix_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CreateTestMatrixRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(TestExecutionServiceServer).CreateTestMatrix(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/google.devtools.testing.v1.TestExecutionService/CreateTestMatrix",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(TestExecutionServiceServer).CreateTestMatrix(ctx, req.(*CreateTestMatrixRequest))
}
return interceptor(ctx, in, info, handler)
}
func _TestExecutionService_GetTestMatrix_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetTestMatrixRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(TestExecutionServiceServer).GetTestMatrix(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/google.devtools.testing.v1.TestExecutionService/GetTestMatrix",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(TestExecutionServiceServer).GetTestMatrix(ctx, req.(*GetTestMatrixRequest))
}
return interceptor(ctx, in, info, handler)
}
func _TestExecutionService_CancelTestMatrix_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CancelTestMatrixRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(TestExecutionServiceServer).CancelTestMatrix(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/google.devtools.testing.v1.TestExecutionService/CancelTestMatrix",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(TestExecutionServiceServer).CancelTestMatrix(ctx, req.(*CancelTestMatrixRequest))
}
return interceptor(ctx, in, info, handler)
}
var _TestExecutionService_serviceDesc = grpc.ServiceDesc{
ServiceName: "google.devtools.testing.v1.TestExecutionService",
HandlerType: (*TestExecutionServiceServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "CreateTestMatrix",
Handler: _TestExecutionService_CreateTestMatrix_Handler,
},
{
MethodName: "GetTestMatrix",
Handler: _TestExecutionService_GetTestMatrix_Handler,
},
{
MethodName: "CancelTestMatrix",
Handler: _TestExecutionService_CancelTestMatrix_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "google/devtools/testing/v1/test_execution.proto",
}