// Copyright 2022 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.27.1
// 	protoc        v3.17.1
// source: test_platform/skylab_test_runner/cft_request.proto

package skylab_test_runner

import (
	api1 "go.chromium.org/chromiumos/config/go/build/api"
	api "go.chromium.org/chromiumos/config/go/test/api"
	api2 "go.chromium.org/chromiumos/config/go/test/lab/api"
	test_platform "go.chromium.org/chromiumos/infra/proto/go/test_platform"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
	reflect "reflect"
	sync "sync"
)

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)
)

// CFTTestRequest represents a request for running an individual test suite via
// CFT workflow in skylab_test_runner recipe.
type CFTTestRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Primary Dut info
	PrimaryDut *CFTTestRequest_Device `protobuf:"bytes,1,opt,name=primary_dut,json=primaryDut,proto3" json:"primary_dut,omitempty"`
	// Companion Duts info
	CompanionDuts []*CFTTestRequest_Device `protobuf:"bytes,2,rep,name=companion_duts,json=companionDuts,proto3" json:"companion_duts,omitempty"`
	// Test suites to run by tag or explicit list of tests.
	TestSuites []*api.TestSuite `protobuf:"bytes,3,rep,name=test_suites,json=testSuites,proto3" json:"test_suites,omitempty"`
	// Provision/Test execution will need to be invoked before this.
	// Currently CTR do not take any deadline. But in future, if it does, this should be passed in.
	Deadline *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=deadline,proto3" json:"deadline,omitempty"`
	// The UID of the individual CTP request which kicked off this test run.
	// Note that distinct requests inside a multi-request CTP build will have
	// different UIDs.
	ParentRequestUid string `protobuf:"bytes,5,opt,name=parent_request_uid,json=parentRequestUid,proto3" json:"parent_request_uid,omitempty"`
	// The buildbucket ID of the CTP build that sent this test_runner request.
	ParentBuildId int64 `protobuf:"varint,6,opt,name=parent_build_id,json=parentBuildId,proto3" json:"parent_build_id,omitempty"`
	// AutotestKeyvals are (key, value) pairs that will be added to all
	// autotest tasks run.
	AutotestKeyvals map[string]string `protobuf:"bytes,7,rep,name=autotest_keyvals,json=autotestKeyvals,proto3" json:"autotest_keyvals,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// TestExecutionBehavior specifies how tests should be run.
	// This can include information about whether the tests should run and
	// if failures should be exonerated.
	DefaultTestExecutionBehavior test_platform.Request_Params_TestExecutionBehavior `protobuf:"varint,8,opt,name=default_test_execution_behavior,json=defaultTestExecutionBehavior,proto3,enum=test_platform.Request_Params_TestExecutionBehavior" json:"default_test_execution_behavior,omitempty"`
	// Container metadata to be used in test execution.
	ContainerMetadata *api1.ContainerMetadata `protobuf:"bytes,9,opt,name=container_metadata,json=containerMetadata,proto3" json:"container_metadata,omitempty"`
}

func (x *CFTTestRequest) Reset() {
	*x = CFTTestRequest{}
	if protoimpl.UnsafeEnabled {
		mi := &file_test_platform_skylab_test_runner_cft_request_proto_msgTypes[0]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *CFTTestRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CFTTestRequest) ProtoMessage() {}

func (x *CFTTestRequest) ProtoReflect() protoreflect.Message {
	mi := &file_test_platform_skylab_test_runner_cft_request_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 CFTTestRequest.ProtoReflect.Descriptor instead.
func (*CFTTestRequest) Descriptor() ([]byte, []int) {
	return file_test_platform_skylab_test_runner_cft_request_proto_rawDescGZIP(), []int{0}
}

func (x *CFTTestRequest) GetPrimaryDut() *CFTTestRequest_Device {
	if x != nil {
		return x.PrimaryDut
	}
	return nil
}

func (x *CFTTestRequest) GetCompanionDuts() []*CFTTestRequest_Device {
	if x != nil {
		return x.CompanionDuts
	}
	return nil
}

func (x *CFTTestRequest) GetTestSuites() []*api.TestSuite {
	if x != nil {
		return x.TestSuites
	}
	return nil
}

func (x *CFTTestRequest) GetDeadline() *timestamppb.Timestamp {
	if x != nil {
		return x.Deadline
	}
	return nil
}

func (x *CFTTestRequest) GetParentRequestUid() string {
	if x != nil {
		return x.ParentRequestUid
	}
	return ""
}

func (x *CFTTestRequest) GetParentBuildId() int64 {
	if x != nil {
		return x.ParentBuildId
	}
	return 0
}

func (x *CFTTestRequest) GetAutotestKeyvals() map[string]string {
	if x != nil {
		return x.AutotestKeyvals
	}
	return nil
}

func (x *CFTTestRequest) GetDefaultTestExecutionBehavior() test_platform.Request_Params_TestExecutionBehavior {
	if x != nil {
		return x.DefaultTestExecutionBehavior
	}
	return test_platform.Request_Params_TestExecutionBehavior(0)
}

func (x *CFTTestRequest) GetContainerMetadata() *api1.ContainerMetadata {
	if x != nil {
		return x.ContainerMetadata
	}
	return nil
}

type CFTTestRequest_Device struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// DUT model to be provisioned.
	DutModel *api2.DutModel `protobuf:"bytes,1,opt,name=dut_model,json=dutModel,proto3" json:"dut_model,omitempty"`
	// Provision state for this device.
	ProvisionState *api.ProvisionState `protobuf:"bytes,2,opt,name=provision_state,json=provisionState,proto3" json:"provision_state,omitempty"`
	// ContainerMetadataKey is the key to search in the ContainerMetadata map
	// defined in container_metadata.proto
	ContainerMetadataKey string `protobuf:"bytes,3,opt,name=container_metadata_key,json=containerMetadataKey,proto3" json:"container_metadata_key,omitempty"`
}

func (x *CFTTestRequest_Device) Reset() {
	*x = CFTTestRequest_Device{}
	if protoimpl.UnsafeEnabled {
		mi := &file_test_platform_skylab_test_runner_cft_request_proto_msgTypes[2]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *CFTTestRequest_Device) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CFTTestRequest_Device) ProtoMessage() {}

func (x *CFTTestRequest_Device) ProtoReflect() protoreflect.Message {
	mi := &file_test_platform_skylab_test_runner_cft_request_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 CFTTestRequest_Device.ProtoReflect.Descriptor instead.
func (*CFTTestRequest_Device) Descriptor() ([]byte, []int) {
	return file_test_platform_skylab_test_runner_cft_request_proto_rawDescGZIP(), []int{0, 1}
}

func (x *CFTTestRequest_Device) GetDutModel() *api2.DutModel {
	if x != nil {
		return x.DutModel
	}
	return nil
}

func (x *CFTTestRequest_Device) GetProvisionState() *api.ProvisionState {
	if x != nil {
		return x.ProvisionState
	}
	return nil
}

func (x *CFTTestRequest_Device) GetContainerMetadataKey() string {
	if x != nil {
		return x.ContainerMetadataKey
	}
	return ""
}

var File_test_platform_skylab_test_runner_cft_request_proto protoreflect.FileDescriptor

var file_test_platform_skylab_test_runner_cft_request_proto_rawDesc = []byte{
	0x0a, 0x32, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f,
	0x73, 0x6b, 0x79, 0x6c, 0x61, 0x62, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x6e,
	0x65, 0x72, 0x2f, 0x63, 0x66, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x12, 0x20, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66,
	0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x6b, 0x79, 0x6c, 0x61, 0x62, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f,
	0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 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, 0x1a, 0x1b, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c,
	0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73,
	0x2f, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73,
	0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
	0x24, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2f, 0x74, 0x65, 0x73, 0x74,
	0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f,
	0x73, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x6c, 0x61, 0x62, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64,
	0x75, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2d, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69,
	0x75, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63,
	0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
	0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf2, 0x07, 0x0a, 0x0e, 0x43, 0x46, 0x54, 0x54,
	0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x58, 0x0a, 0x0b, 0x70, 0x72,
	0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x64, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x37, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e,
	0x73, 0x6b, 0x79, 0x6c, 0x61, 0x62, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x6e,
	0x65, 0x72, 0x2e, 0x43, 0x46, 0x54, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
	0x74, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72,
	0x79, 0x44, 0x75, 0x74, 0x12, 0x5e, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x69, 0x6f,
	0x6e, 0x5f, 0x64, 0x75, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74,
	0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x6b, 0x79,
	0x6c, 0x61, 0x62, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x2e,
	0x43, 0x46, 0x54, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44,
	0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x69, 0x6f, 0x6e,
	0x44, 0x75, 0x74, 0x73, 0x12, 0x3f, 0x0a, 0x0b, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x75, 0x69,
	0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e,
	0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x52, 0x0a, 0x74, 0x65, 0x73, 0x74, 0x53,
	0x75, 0x69, 0x74, 0x65, 0x73, 0x12, 0x36, 0x0a, 0x08, 0x64, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e,
	0x65, 0x18, 0x04, 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, 0x08, 0x64, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x2c, 0x0a,
	0x12, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f,
	0x75, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x61, 0x72, 0x65, 0x6e,
	0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x55, 0x69, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x70,
	0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x06,
	0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x75, 0x69, 0x6c,
	0x64, 0x49, 0x64, 0x12, 0x70, 0x0a, 0x10, 0x61, 0x75, 0x74, 0x6f, 0x74, 0x65, 0x73, 0x74, 0x5f,
	0x6b, 0x65, 0x79, 0x76, 0x61, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e,
	0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x6b,
	0x79, 0x6c, 0x61, 0x62, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72,
	0x2e, 0x43, 0x46, 0x54, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e,
	0x41, 0x75, 0x74, 0x6f, 0x74, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x76, 0x61, 0x6c, 0x73, 0x45,
	0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x61, 0x75, 0x74, 0x6f, 0x74, 0x65, 0x73, 0x74, 0x4b, 0x65,
	0x79, 0x76, 0x61, 0x6c, 0x73, 0x12, 0x7a, 0x0a, 0x1f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
	0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
	0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33,
	0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x52,
	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x54, 0x65,
	0x73, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x65, 0x68, 0x61, 0x76,
	0x69, 0x6f, 0x72, 0x52, 0x1c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x65, 0x73, 0x74,
	0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f,
	0x72, 0x12, 0x56, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x6d,
	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e,
	0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64,
	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x65,
	0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65,
	0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x42, 0x0a, 0x14, 0x41, 0x75, 0x74,
	0x6f, 0x74, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x76, 0x61, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72,
	0x79, 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, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xcc, 0x01,
	0x0a, 0x06, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3e, 0x0a, 0x09, 0x64, 0x75, 0x74, 0x5f,
	0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x6c, 0x61,
	0x62, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x75, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x08,
	0x64, 0x75, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x4c, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x76,
	0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x23, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x74,
	0x65, 0x73, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f,
	0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f,
	0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69,
	0x6e, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6b, 0x65, 0x79,
	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65,
	0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x42, 0x4c, 0x5a, 0x4a,
	0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
	0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61,
	0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70,
	0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x73, 0x6b, 0x79, 0x6c, 0x61, 0x62, 0x5f, 0x74,
	0x65, 0x73, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x33,
}

var (
	file_test_platform_skylab_test_runner_cft_request_proto_rawDescOnce sync.Once
	file_test_platform_skylab_test_runner_cft_request_proto_rawDescData = file_test_platform_skylab_test_runner_cft_request_proto_rawDesc
)

func file_test_platform_skylab_test_runner_cft_request_proto_rawDescGZIP() []byte {
	file_test_platform_skylab_test_runner_cft_request_proto_rawDescOnce.Do(func() {
		file_test_platform_skylab_test_runner_cft_request_proto_rawDescData = protoimpl.X.CompressGZIP(file_test_platform_skylab_test_runner_cft_request_proto_rawDescData)
	})
	return file_test_platform_skylab_test_runner_cft_request_proto_rawDescData
}

var file_test_platform_skylab_test_runner_cft_request_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
var file_test_platform_skylab_test_runner_cft_request_proto_goTypes = []interface{}{
	(*CFTTestRequest)(nil),        // 0: test_platform.skylab_test_runner.CFTTestRequest
	nil,                           // 1: test_platform.skylab_test_runner.CFTTestRequest.AutotestKeyvalsEntry
	(*CFTTestRequest_Device)(nil), // 2: test_platform.skylab_test_runner.CFTTestRequest.Device
	(*api.TestSuite)(nil),         // 3: chromiumos.test.api.TestSuite
	(*timestamppb.Timestamp)(nil), // 4: google.protobuf.Timestamp
	(test_platform.Request_Params_TestExecutionBehavior)(0), // 5: test_platform.Request.Params.TestExecutionBehavior
	(*api1.ContainerMetadata)(nil),                          // 6: chromiumos.build.api.ContainerMetadata
	(*api2.DutModel)(nil),                                   // 7: chromiumos.test.lab.api.DutModel
	(*api.ProvisionState)(nil),                              // 8: chromiumos.test.api.ProvisionState
}
var file_test_platform_skylab_test_runner_cft_request_proto_depIdxs = []int32{
	2, // 0: test_platform.skylab_test_runner.CFTTestRequest.primary_dut:type_name -> test_platform.skylab_test_runner.CFTTestRequest.Device
	2, // 1: test_platform.skylab_test_runner.CFTTestRequest.companion_duts:type_name -> test_platform.skylab_test_runner.CFTTestRequest.Device
	3, // 2: test_platform.skylab_test_runner.CFTTestRequest.test_suites:type_name -> chromiumos.test.api.TestSuite
	4, // 3: test_platform.skylab_test_runner.CFTTestRequest.deadline:type_name -> google.protobuf.Timestamp
	1, // 4: test_platform.skylab_test_runner.CFTTestRequest.autotest_keyvals:type_name -> test_platform.skylab_test_runner.CFTTestRequest.AutotestKeyvalsEntry
	5, // 5: test_platform.skylab_test_runner.CFTTestRequest.default_test_execution_behavior:type_name -> test_platform.Request.Params.TestExecutionBehavior
	6, // 6: test_platform.skylab_test_runner.CFTTestRequest.container_metadata:type_name -> chromiumos.build.api.ContainerMetadata
	7, // 7: test_platform.skylab_test_runner.CFTTestRequest.Device.dut_model:type_name -> chromiumos.test.lab.api.DutModel
	8, // 8: test_platform.skylab_test_runner.CFTTestRequest.Device.provision_state:type_name -> chromiumos.test.api.ProvisionState
	9, // [9:9] is the sub-list for method output_type
	9, // [9:9] is the sub-list for method input_type
	9, // [9:9] is the sub-list for extension type_name
	9, // [9:9] is the sub-list for extension extendee
	0, // [0:9] is the sub-list for field type_name
}

func init() { file_test_platform_skylab_test_runner_cft_request_proto_init() }
func file_test_platform_skylab_test_runner_cft_request_proto_init() {
	if File_test_platform_skylab_test_runner_cft_request_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_test_platform_skylab_test_runner_cft_request_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CFTTestRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_platform_skylab_test_runner_cft_request_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CFTTestRequest_Device); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_test_platform_skylab_test_runner_cft_request_proto_rawDesc,
			NumEnums:      0,
			NumMessages:   3,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_test_platform_skylab_test_runner_cft_request_proto_goTypes,
		DependencyIndexes: file_test_platform_skylab_test_runner_cft_request_proto_depIdxs,
		MessageInfos:      file_test_platform_skylab_test_runner_cft_request_proto_msgTypes,
	}.Build()
	File_test_platform_skylab_test_runner_cft_request_proto = out.File
	file_test_platform_skylab_test_runner_cft_request_proto_rawDesc = nil
	file_test_platform_skylab_test_runner_cft_request_proto_goTypes = nil
	file_test_platform_skylab_test_runner_cft_request_proto_depIdxs = nil
}
