// Code generated by protoc-gen-go. DO NOT EDIT.
// source: test_platform/skylab_test_runner/request.proto

package skylab_test_runner

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	test_platform "go.chromium.org/chromiumos/infra/proto/go/test_platform"
	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

// Request represents a request for running an individual test via the
// skylab_test_runner recipe.
type Request struct {
	Prejob *Request_Prejob `protobuf:"bytes,1,opt,name=prejob,proto3" json:"prejob,omitempty"`
	Test   *Request_Test   `protobuf:"bytes,2,opt,name=test,proto3" json:"test,omitempty"`
	// Soft deadline for test_runner execution.
	//
	// All prejob or test execution should abort beyond this deadline.
	// Clean up actions may execute beyond the deadline.
	Deadline             *timestamp.Timestamp `protobuf:"bytes,3,opt,name=deadline,proto3" json:"deadline,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_0203b6078e3ef1f3, []int{0}
}

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) GetPrejob() *Request_Prejob {
	if m != nil {
		return m.Prejob
	}
	return nil
}

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

func (m *Request) GetDeadline() *timestamp.Timestamp {
	if m != nil {
		return m.Deadline
	}
	return nil
}

// Prejob defines parameters that affect the steps before the actual test
// (e.g. provision).
type Request_Prejob struct {
	SoftwareDependencies []*test_platform.Request_Params_SoftwareDependency `protobuf:"bytes,1,rep,name=software_dependencies,json=softwareDependencies,proto3" json:"software_dependencies,omitempty"` // Deprecated: Do not use.
	// Mutable software prerequisites. Are installed before running the test if
	// necessary. E.g. {"cros-version" : "reef-release/R77-12345.0.0"}
	ProvisionableLabels  map[string]string `protobuf:"bytes,2,rep,name=provisionable_labels,json=provisionableLabels,proto3" json:"provisionable_labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

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

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

var xxx_messageInfo_Request_Prejob proto.InternalMessageInfo

// Deprecated: Do not use.
func (m *Request_Prejob) GetSoftwareDependencies() []*test_platform.Request_Params_SoftwareDependency {
	if m != nil {
		return m.SoftwareDependencies
	}
	return nil
}

func (m *Request_Prejob) GetProvisionableLabels() map[string]string {
	if m != nil {
		return m.ProvisionableLabels
	}
	return nil
}

// Test describes which test harness and which test(s) to run.
type Request_Test struct {
	// Types that are valid to be assigned to Harness:
	//	*Request_Test_Autotest_
	Harness              isRequest_Test_Harness       `protobuf_oneof:"harness"`
	Offload              *Request_Test_OffloadOptions `protobuf:"bytes,2,opt,name=offload,proto3" json:"offload,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
	XXX_unrecognized     []byte                       `json:"-"`
	XXX_sizecache        int32                        `json:"-"`
}

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

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

var xxx_messageInfo_Request_Test proto.InternalMessageInfo

type isRequest_Test_Harness interface {
	isRequest_Test_Harness()
}

type Request_Test_Autotest_ struct {
	Autotest *Request_Test_Autotest `protobuf:"bytes,1,opt,name=autotest,proto3,oneof"`
}

func (*Request_Test_Autotest_) isRequest_Test_Harness() {}

func (m *Request_Test) GetHarness() isRequest_Test_Harness {
	if m != nil {
		return m.Harness
	}
	return nil
}

func (m *Request_Test) GetAutotest() *Request_Test_Autotest {
	if x, ok := m.GetHarness().(*Request_Test_Autotest_); ok {
		return x.Autotest
	}
	return nil
}

func (m *Request_Test) GetOffload() *Request_Test_OffloadOptions {
	if m != nil {
		return m.Offload
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*Request_Test) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*Request_Test_Autotest_)(nil),
	}
}

type Request_Test_Autotest struct {
	Name     string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	TestArgs string `protobuf:"bytes,2,opt,name=test_args,json=testArgs,proto3" json:"test_args,omitempty"`
	// Keyvals are key:value pairs added to the autoserv command.
	Keyvals map[string]string `protobuf:"bytes,3,rep,name=keyvals,proto3" json:"keyvals,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// If true, run the test as a client-side test: the test logic is
	// executed in its entirety on the DUT itself.
	// Otherwise, run the test as a server-side test: the test logic is
	// executed on the drone server and interacts with the DUT as an external
	// object.
	IsClientTest bool `protobuf:"varint,4,opt,name=is_client_test,json=isClientTest,proto3" json:"is_client_test,omitempty"`
	// Name to be used to display this test's output artifacts, e.g. logs,
	// results etc. By default display_name is the same as name.
	//
	// display_name is especially useful when using test_args to distinguish
	// between multiple instances of the same test in a request.
	DisplayName          string   `protobuf:"bytes,5,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_Request_Test_Autotest proto.InternalMessageInfo

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

func (m *Request_Test_Autotest) GetTestArgs() string {
	if m != nil {
		return m.TestArgs
	}
	return ""
}

func (m *Request_Test_Autotest) GetKeyvals() map[string]string {
	if m != nil {
		return m.Keyvals
	}
	return nil
}

func (m *Request_Test_Autotest) GetIsClientTest() bool {
	if m != nil {
		return m.IsClientTest
	}
	return false
}

func (m *Request_Test_Autotest) GetDisplayName() string {
	if m != nil {
		return m.DisplayName
	}
	return ""
}

// User-specified options for how results are served to clients
type Request_Test_OffloadOptions struct {
	// If this test needs synchronous offloading of results to Google Storage
	SynchronousGsEnable  bool     `protobuf:"varint,1,opt,name=synchronous_gs_enable,json=synchronousGsEnable,proto3" json:"synchronous_gs_enable,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_Request_Test_OffloadOptions proto.InternalMessageInfo

func (m *Request_Test_OffloadOptions) GetSynchronousGsEnable() bool {
	if m != nil {
		return m.SynchronousGsEnable
	}
	return false
}

func init() {
	proto.RegisterType((*Request)(nil), "test_platform.skylab_test_runner.Request")
	proto.RegisterType((*Request_Prejob)(nil), "test_platform.skylab_test_runner.Request.Prejob")
	proto.RegisterMapType((map[string]string)(nil), "test_platform.skylab_test_runner.Request.Prejob.ProvisionableLabelsEntry")
	proto.RegisterType((*Request_Test)(nil), "test_platform.skylab_test_runner.Request.Test")
	proto.RegisterType((*Request_Test_Autotest)(nil), "test_platform.skylab_test_runner.Request.Test.Autotest")
	proto.RegisterMapType((map[string]string)(nil), "test_platform.skylab_test_runner.Request.Test.Autotest.KeyvalsEntry")
	proto.RegisterType((*Request_Test_OffloadOptions)(nil), "test_platform.skylab_test_runner.Request.Test.OffloadOptions")
}

func init() {
	proto.RegisterFile("test_platform/skylab_test_runner/request.proto", fileDescriptor_0203b6078e3ef1f3)
}

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