// Code generated by protoc-gen-go. DO NOT EDIT.
// source: test/rtd/v1/invocation.proto

package rtd

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	api "go.chromium.org/chromiumos/config/go/api"
	lab "go.chromium.org/chromiumos/infra/proto/go/lab"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Input to a Remote Test Driver invocation.
//
// TODO(crbug.com/1051691): Link to a reference implementation of Remote Test
// Server & Remote Test Driver.
type Invocation struct {
	// Progress sink to be used to report progress of the Remote Test Driver
	// invocation to the surrounding Remote Test Server.
	ProgressSinkClientConfig *ProgressSinkClientConfig `protobuf:"bytes,1,opt,name=progress_sink_client_config,json=progressSinkClientConfig,proto3" json:"progress_sink_client_config,omitempty"`
	// Set of DUTs used for each of the requests in this invocation.
	Duts []*DUT `protobuf:"bytes,2,rep,name=duts,proto3" json:"duts,omitempty"`
	// Smallest unit of an invocation request for which results MUST be reported.
	//
	// An invocation MUST execute all requests serially in-order. This assumption
	// is necessary for future support of test sequences in test plans.
	Requests []*Request `protobuf:"bytes,3,rep,name=requests,proto3" json:"requests,omitempty"`
	// Configuration information for using Test Lab Services to interact
	// with DUTs and their peripherals.
	TestLabServicesConfig *TLSClientConfig `protobuf:"bytes,4,opt,name=test_lab_services_config,json=testLabServicesConfig,proto3" json:"test_lab_services_config,omitempty"`
	XXX_NoUnkeyedLiteral  struct{}         `json:"-"`
	XXX_unrecognized      []byte           `json:"-"`
	XXX_sizecache         int32            `json:"-"`
}

func (m *Invocation) Reset()         { *m = Invocation{} }
func (m *Invocation) String() string { return proto.CompactTextString(m) }
func (*Invocation) ProtoMessage()    {}
func (*Invocation) Descriptor() ([]byte, []int) {
	return fileDescriptor_8ce9aeaf734a34de, []int{0}
}

func (m *Invocation) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Invocation.Unmarshal(m, b)
}
func (m *Invocation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Invocation.Marshal(b, m, deterministic)
}
func (m *Invocation) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Invocation.Merge(m, src)
}
func (m *Invocation) XXX_Size() int {
	return xxx_messageInfo_Invocation.Size(m)
}
func (m *Invocation) XXX_DiscardUnknown() {
	xxx_messageInfo_Invocation.DiscardUnknown(m)
}

var xxx_messageInfo_Invocation proto.InternalMessageInfo

func (m *Invocation) GetProgressSinkClientConfig() *ProgressSinkClientConfig {
	if m != nil {
		return m.ProgressSinkClientConfig
	}
	return nil
}

func (m *Invocation) GetDuts() []*DUT {
	if m != nil {
		return m.Duts
	}
	return nil
}

func (m *Invocation) GetRequests() []*Request {
	if m != nil {
		return m.Requests
	}
	return nil
}

func (m *Invocation) GetTestLabServicesConfig() *TLSClientConfig {
	if m != nil {
		return m.TestLabServicesConfig
	}
	return nil
}

// Contains all configuration data required to interact with a single device
// under test during a test invocation.
type DUT struct {
	// Peripherals information about the lab deployment of the device.
	Peripherals *lab.Peripherals `protobuf:"bytes,1,opt,name=peripherals,proto3" json:"peripherals,omitempty"`
	// The relationship between topology and features is described at
	// https://chromium.googlesource.com/chromiumos/config/+/master/proto/api/hardware_topology.md
	HardwareTopology *api.HardwareTopology `protobuf:"bytes,2,opt,name=hardware_topology,json=hardwareTopology,proto3" json:"hardware_topology,omitempty"`
	HardwareFeatures *api.HardwareFeatures `protobuf:"bytes,3,opt,name=hardware_features,json=hardwareFeatures,proto3" json:"hardware_features,omitempty"`
	// Name for the DUT for using Test Lab Services to interact with the
	// device and its peripherals.
	//
	// The RTD MUST pass this to Test Lab Service RPCs that act on a particular
	// DUT. See the tls.OpenDutPortRequest message for an example of where
	// this is used.
	TlsDutName           string   `protobuf:"bytes,4,opt,name=tls_dut_name,json=tlsDutName,proto3" json:"tls_dut_name,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *DUT) Reset()         { *m = DUT{} }
func (m *DUT) String() string { return proto.CompactTextString(m) }
func (*DUT) ProtoMessage()    {}
func (*DUT) Descriptor() ([]byte, []int) {
	return fileDescriptor_8ce9aeaf734a34de, []int{1}
}

func (m *DUT) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DUT.Unmarshal(m, b)
}
func (m *DUT) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DUT.Marshal(b, m, deterministic)
}
func (m *DUT) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DUT.Merge(m, src)
}
func (m *DUT) XXX_Size() int {
	return xxx_messageInfo_DUT.Size(m)
}
func (m *DUT) XXX_DiscardUnknown() {
	xxx_messageInfo_DUT.DiscardUnknown(m)
}

var xxx_messageInfo_DUT proto.InternalMessageInfo

func (m *DUT) GetPeripherals() *lab.Peripherals {
	if m != nil {
		return m.Peripherals
	}
	return nil
}

func (m *DUT) GetHardwareTopology() *api.HardwareTopology {
	if m != nil {
		return m.HardwareTopology
	}
	return nil
}

func (m *DUT) GetHardwareFeatures() *api.HardwareFeatures {
	if m != nil {
		return m.HardwareFeatures
	}
	return nil
}

func (m *DUT) GetTlsDutName() string {
	if m != nil {
		return m.TlsDutName
	}
	return ""
}

// Request for execution of a single test.metadata.Test
type Request struct {
	// name MUST be unique across all requests in this invocation.
	//
	// Remote Test Drivers are recommended to use name as the opaque tag
	// required by the Test Lab Services API. Thus, name SHOULD be unique across
	// all invocations to simplify analytics. UUIDs are recommended.
	//
	// See also:
	//   Test Lab Services API: tls/README.md
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// The test to execute, identified by the test.metadata.Test.name field.
	//
	// Note that the request does not contain a reference to the Remote Test
	// Driver to use, as the request is an input to the Remote Test Driver
	// invocation.
	Test string `protobuf:"bytes,2,opt,name=test,proto3" json:"test,omitempty"`
	// Environment configuration set by the Remote Test Server for a specific
	// request of the Remote Test Driver.
	Environment          *Request_Environment `protobuf:"bytes,3,opt,name=environment,proto3" json:"environment,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *Request) Reset()         { *m = Request{} }
func (m *Request) String() string { return proto.CompactTextString(m) }
func (*Request) ProtoMessage()    {}
func (*Request) Descriptor() ([]byte, []int) {
	return fileDescriptor_8ce9aeaf734a34de, []int{2}
}

func (m *Request) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Request.Unmarshal(m, b)
}
func (m *Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Request.Marshal(b, m, deterministic)
}
func (m *Request) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Request.Merge(m, src)
}
func (m *Request) XXX_Size() int {
	return xxx_messageInfo_Request.Size(m)
}
func (m *Request) XXX_DiscardUnknown() {
	xxx_messageInfo_Request.DiscardUnknown(m)
}

var xxx_messageInfo_Request proto.InternalMessageInfo

func (m *Request) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *Request) GetTest() string {
	if m != nil {
		return m.Test
	}
	return ""
}

func (m *Request) GetEnvironment() *Request_Environment {
	if m != nil {
		return m.Environment
	}
	return nil
}

// Per-request Remote Test Server environment configuration.
type Request_Environment struct {
	// Absolute path to a directory for writing arbitrary files.
	//
	// This directory MUST be created by Remote Test Server prior to the Remote
	// Test Driver invocation.
	//
	// * Remote Test Drivers SHOULD use
	// test.invocation.ProgressClient.ReportLog() to report logs.
	// * Remote Test Drivers SHOULD use
	// test.invocation.ProgressClient.ArchiveArtifact() to archive critical
	// artifacts.
	//
	// Remote Test Servers may archive the work_dir contents to non-ephemeral
	// storage as a best effort asynchronous task.
	WorkDir string `protobuf:"bytes,1,opt,name=work_dir,json=workDir,proto3" json:"work_dir,omitempty"`
	// Absolute path to a directory for writing temporary files.
	//
	// This directory MUST be created by Remote Test Server prior to the Remote
	// Test Driver invocation.
	//
	// Remote Test Drivers MUST use this directory for temporary files and MUST
	// NOT attempt to use defaults like /tmp or the TMP environment variable.
	//
	// See also: Environment.work_dir
	TempDir              string   `protobuf:"bytes,2,opt,name=temp_dir,json=tempDir,proto3" json:"temp_dir,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Request_Environment) Reset()         { *m = Request_Environment{} }
func (m *Request_Environment) String() string { return proto.CompactTextString(m) }
func (*Request_Environment) ProtoMessage()    {}
func (*Request_Environment) Descriptor() ([]byte, []int) {
	return fileDescriptor_8ce9aeaf734a34de, []int{2, 0}
}

func (m *Request_Environment) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Request_Environment.Unmarshal(m, b)
}
func (m *Request_Environment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Request_Environment.Marshal(b, m, deterministic)
}
func (m *Request_Environment) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Request_Environment.Merge(m, src)
}
func (m *Request_Environment) XXX_Size() int {
	return xxx_messageInfo_Request_Environment.Size(m)
}
func (m *Request_Environment) XXX_DiscardUnknown() {
	xxx_messageInfo_Request_Environment.DiscardUnknown(m)
}

var xxx_messageInfo_Request_Environment proto.InternalMessageInfo

func (m *Request_Environment) GetWorkDir() string {
	if m != nil {
		return m.WorkDir
	}
	return ""
}

func (m *Request_Environment) GetTempDir() string {
	if m != nil {
		return m.TempDir
	}
	return ""
}

// Configuration information required for using Test Lab & Wiring Services.
type TLSClientConfig struct {
	// Address where Test Lab Services is reachable.
	// This should be an IPv4 or IPv6 address to avoid name
	// resolution issues.
	// IPv4 addresses will be in standard dotted decimal notation.
	// IPv6 addresses will be formatted according to RFC4291, Section
	// 2.2, 1. (no zero compression)
	// If this is a hostname, the RTS should ensure that the hostname
	// can be resolved by the RTD via standard name resolution
	// facilities.
	TlsAddress string `protobuf:"bytes,1,opt,name=tls_address,json=tlsAddress,proto3" json:"tls_address,omitempty"`
	// Port on the tls_address where the service is reachable.
	TlsPort int32 `protobuf:"varint,2,opt,name=tls_port,json=tlsPort,proto3" json:"tls_port,omitempty"`
	// Address where Test Lab Services Wiring is reachable.
	// This has the same format as tls_address.
	TlwAddress string `protobuf:"bytes,3,opt,name=tlw_address,json=tlwAddress,proto3" json:"tlw_address,omitempty"`
	// Port on the tlw_address where the service is reachable.
	TlwPort              int32    `protobuf:"varint,4,opt,name=tlw_port,json=tlwPort,proto3" json:"tlw_port,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *TLSClientConfig) Reset()         { *m = TLSClientConfig{} }
func (m *TLSClientConfig) String() string { return proto.CompactTextString(m) }
func (*TLSClientConfig) ProtoMessage()    {}
func (*TLSClientConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_8ce9aeaf734a34de, []int{3}
}

func (m *TLSClientConfig) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TLSClientConfig.Unmarshal(m, b)
}
func (m *TLSClientConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TLSClientConfig.Marshal(b, m, deterministic)
}
func (m *TLSClientConfig) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TLSClientConfig.Merge(m, src)
}
func (m *TLSClientConfig) XXX_Size() int {
	return xxx_messageInfo_TLSClientConfig.Size(m)
}
func (m *TLSClientConfig) XXX_DiscardUnknown() {
	xxx_messageInfo_TLSClientConfig.DiscardUnknown(m)
}

var xxx_messageInfo_TLSClientConfig proto.InternalMessageInfo

func (m *TLSClientConfig) GetTlsAddress() string {
	if m != nil {
		return m.TlsAddress
	}
	return ""
}

func (m *TLSClientConfig) GetTlsPort() int32 {
	if m != nil {
		return m.TlsPort
	}
	return 0
}

func (m *TLSClientConfig) GetTlwAddress() string {
	if m != nil {
		return m.TlwAddress
	}
	return ""
}

func (m *TLSClientConfig) GetTlwPort() int32 {
	if m != nil {
		return m.TlwPort
	}
	return 0
}

func init() {
	proto.RegisterType((*Invocation)(nil), "test.rtd.v1.Invocation")
	proto.RegisterType((*DUT)(nil), "test.rtd.v1.DUT")
	proto.RegisterType((*Request)(nil), "test.rtd.v1.Request")
	proto.RegisterType((*Request_Environment)(nil), "test.rtd.v1.Request.Environment")
	proto.RegisterType((*TLSClientConfig)(nil), "test.rtd.v1.TLSClientConfig")
}

func init() { proto.RegisterFile("test/rtd/v1/invocation.proto", fileDescriptor_8ce9aeaf734a34de) }

var fileDescriptor_8ce9aeaf734a34de = []byte{
	// 560 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0xdf, 0x6e, 0xd3, 0x30,
	0x14, 0xc6, 0xd5, 0x3f, 0xd0, 0xcd, 0x41, 0xa2, 0x58, 0x4c, 0x0a, 0x65, 0x12, 0x55, 0x35, 0xc4,
	0x6e, 0x70, 0x58, 0xb9, 0x42, 0xbb, 0x62, 0x2d, 0x08, 0xa4, 0x09, 0x55, 0x69, 0x7b, 0xc3, 0x4d,
	0xe4, 0x36, 0x6e, 0x6a, 0x35, 0x89, 0xc3, 0xb1, 0xd3, 0x88, 0x27, 0x40, 0x3c, 0x06, 0xaf, 0xc1,
	0xd3, 0x21, 0x3b, 0x4e, 0x9b, 0x8c, 0x21, 0x71, 0x97, 0x9c, 0xef, 0xf7, 0x7d, 0x39, 0x3e, 0xa7,
	0x2e, 0x3a, 0x57, 0x4c, 0x2a, 0x0f, 0x54, 0xe8, 0xed, 0xaf, 0x3c, 0x9e, 0xee, 0xc5, 0x9a, 0x2a,
	0x2e, 0x52, 0x92, 0x81, 0x50, 0x02, 0x3b, 0x5a, 0x25, 0xa0, 0x42, 0xb2, 0xbf, 0x1a, 0x9c, 0xc5,
	0x74, 0xe5, 0x65, 0x0c, 0x78, 0xb6, 0x65, 0x40, 0x63, 0x59, 0x32, 0x83, 0x41, 0x3d, 0x21, 0x03,
	0x11, 0x01, 0x93, 0x95, 0xf6, 0x7a, 0xbd, 0x05, 0x91, 0xf0, 0x3c, 0x11, 0xd2, 0x5b, 0x8b, 0x74,
	0xc3, 0x23, 0x8f, 0x66, 0xdc, 0xdb, 0x52, 0x08, 0x0b, 0x0a, 0x2c, 0x50, 0x22, 0x13, 0xb1, 0x88,
	0xbe, 0x5b, 0xfc, 0xe2, 0x7e, 0xbc, 0x49, 0x8d, 0x7e, 0xb5, 0x11, 0xfa, 0x7c, 0xe8, 0x14, 0x87,
	0xe8, 0x79, 0xf5, 0xd5, 0x40, 0xf2, 0x74, 0x17, 0xac, 0x63, 0xce, 0x52, 0x15, 0x94, 0x01, 0x6e,
	0x6b, 0xd8, 0xba, 0x74, 0xc6, 0x2f, 0x49, 0xed, 0x24, 0x64, 0x66, 0xf9, 0x39, 0x4f, 0x77, 0x13,
	0x43, 0x4f, 0x0c, 0xec, 0xbb, 0xd9, 0x3f, 0x14, 0x7c, 0x81, 0xba, 0x61, 0xae, 0xa4, 0xdb, 0x1e,
	0x76, 0x2e, 0x9d, 0x71, 0xbf, 0x11, 0x37, 0x5d, 0x2e, 0x7c, 0xa3, 0xe2, 0x37, 0xe8, 0x04, 0xd8,
	0xb7, 0x9c, 0x49, 0x25, 0xdd, 0x8e, 0x21, 0x9f, 0x36, 0x48, 0xbf, 0x14, 0xfd, 0x03, 0x85, 0x97,
	0xc8, 0xd5, 0x40, 0x10, 0xd3, 0x55, 0x20, 0x19, 0xec, 0xf9, 0x9a, 0xc9, 0xaa, 0xf5, 0xae, 0x69,
	0xfd, 0xbc, 0x91, 0xb0, 0xb8, 0x9d, 0x37, 0x3a, 0x3e, 0xd3, 0xe2, 0x2d, 0x5d, 0xcd, 0xad, 0xb7,
	0x2c, 0x8f, 0x7e, 0xb4, 0x51, 0x67, 0xba, 0x5c, 0xe0, 0x31, 0x72, 0x6a, 0x1b, 0xb3, 0xc3, 0xe8,
	0x93, 0x98, 0xae, 0xc8, 0xec, 0x58, 0xf7, 0xeb, 0x10, 0x5e, 0xa0, 0x27, 0x7f, 0x2d, 0xc8, 0x6d,
	0x1b, 0xe7, 0x2b, 0x72, 0xdc, 0x10, 0x29, 0xbb, 0x24, 0x34, 0xe3, 0xe4, 0x93, 0xe5, 0x17, 0x16,
	0xf7, 0xfb, 0xdb, 0x3b, 0x95, 0x46, 0xea, 0x86, 0x51, 0x95, 0x03, 0xd3, 0x33, 0xfa, 0x9f, 0xd4,
	0x8f, 0x16, 0x3f, 0xa6, 0x56, 0x15, 0x3c, 0x44, 0x8f, 0x54, 0x2c, 0x83, 0x30, 0x57, 0x41, 0x4a,
	0x13, 0x66, 0x46, 0x76, 0xea, 0x23, 0x15, 0xcb, 0x69, 0xae, 0xbe, 0xd0, 0x84, 0x8d, 0x7e, 0xb7,
	0x50, 0xcf, 0x8e, 0x1d, 0x63, 0xd4, 0x35, 0x54, 0xcb, 0x50, 0xe6, 0x59, 0xd7, 0xf4, 0x08, 0xcd,
	0x01, 0x4f, 0x7d, 0xf3, 0x8c, 0x6f, 0x90, 0xc3, 0xd2, 0x3d, 0x07, 0x91, 0x26, 0x2c, 0x55, 0xb6,
	0xcb, 0xe1, 0x7d, 0x9b, 0x24, 0x1f, 0x8e, 0x9c, 0x5f, 0x37, 0x0d, 0x26, 0xc8, 0xa9, 0x69, 0xf8,
	0x19, 0x3a, 0x29, 0x04, 0xec, 0x82, 0x90, 0x83, 0xfd, 0x7c, 0x4f, 0xbf, 0x4f, 0x39, 0x68, 0x49,
	0xb1, 0x24, 0x33, 0x52, 0xd9, 0x45, 0x4f, 0xbf, 0x4f, 0x39, 0x8c, 0x7e, 0xb6, 0xd0, 0xe3, 0x3b,
	0x1b, 0xc7, 0x2f, 0x90, 0xa3, 0x8f, 0x4c, 0xc3, 0x50, 0xff, 0x50, 0x6d, 0x98, 0x3e, 0xf1, 0xfb,
	0xb2, 0x62, 0xf2, 0x62, 0x19, 0x64, 0x02, 0xca, 0x53, 0x3d, 0xf0, 0x7b, 0x2a, 0x96, 0x33, 0x01,
	0xaa, 0xf4, 0x16, 0x07, 0x6f, 0xa7, 0xf2, 0x16, 0x0d, 0x6f, 0x51, 0x7a, 0xbb, 0x95, 0xb7, 0xd0,
	0xde, 0x9b, 0xeb, 0xaf, 0xef, 0x22, 0x71, 0xd8, 0x14, 0x11, 0x10, 0x79, 0xb5, 0xeb, 0xca, 0xd3,
	0x0d, 0x50, 0xcf, 0x5c, 0x50, 0x2f, 0x12, 0x5e, 0xed, 0x3f, 0xe1, 0x1a, 0x54, 0xb8, 0x7a, 0x68,
	0x94, 0xb7, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x19, 0xa0, 0xe2, 0x7a, 0x6f, 0x04, 0x00, 0x00,
}
