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

package phosphorus

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	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

// Values should be consistent with https://aip.dev/216
type RunTestResponse_State int32

const (
	// Should not be used.
	RunTestResponse_STATE_UNSPECIFIED RunTestResponse_State = 0
	// The test succeeded.
	//
	// Some test failures may not be detectable during execution. These
	// failures will be detected when parsing results off the test logs in a
	// later step of test_runner.
	RunTestResponse_SUCCEEDED RunTestResponse_State = 1
	// The test failed.
	RunTestResponse_FAILED RunTestResponse_State = 2
	// The test hit the requested timeout.
	RunTestResponse_TIMED_OUT RunTestResponse_State = 3
	// The test was aborted externally.
	RunTestResponse_ABORTED RunTestResponse_State = 4
)

var RunTestResponse_State_name = map[int32]string{
	0: "STATE_UNSPECIFIED",
	1: "SUCCEEDED",
	2: "FAILED",
	3: "TIMED_OUT",
	4: "ABORTED",
}

var RunTestResponse_State_value = map[string]int32{
	"STATE_UNSPECIFIED": 0,
	"SUCCEEDED":         1,
	"FAILED":            2,
	"TIMED_OUT":         3,
	"ABORTED":           4,
}

func (x RunTestResponse_State) String() string {
	return proto.EnumName(RunTestResponse_State_name, int32(x))
}

func (RunTestResponse_State) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_c8a06e1d821d63d9, []int{1, 0}
}

// RunTestRequest defines the input of `phosphorus runtest`.
type RunTestRequest struct {
	Config *Config `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"`
	// A test may use more than one DUT at once.
	DutHostnames []string `protobuf:"bytes,2,rep,name=dut_hostnames,json=dutHostnames,proto3" json:"dut_hostnames,omitempty"`
	// Types that are valid to be assigned to Test:
	//	*RunTestRequest_Autotest_
	Test        isRunTestRequest_Test       `protobuf_oneof:"test"`
	Environment *RunTestRequest_Environment `protobuf:"bytes,4,opt,name=environment,proto3" json:"environment,omitempty"`
	// Hard deadline for execution.
	//
	// All test execution should abort beyond this deadline.
	Deadline             *timestamp.Timestamp `protobuf:"bytes,5,opt,name=deadline,proto3" json:"deadline,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

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

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

var xxx_messageInfo_RunTestRequest proto.InternalMessageInfo

func (m *RunTestRequest) GetConfig() *Config {
	if m != nil {
		return m.Config
	}
	return nil
}

func (m *RunTestRequest) GetDutHostnames() []string {
	if m != nil {
		return m.DutHostnames
	}
	return nil
}

type isRunTestRequest_Test interface {
	isRunTestRequest_Test()
}

type RunTestRequest_Autotest_ struct {
	Autotest *RunTestRequest_Autotest `protobuf:"bytes,3,opt,name=autotest,proto3,oneof"`
}

func (*RunTestRequest_Autotest_) isRunTestRequest_Test() {}

func (m *RunTestRequest) GetTest() isRunTestRequest_Test {
	if m != nil {
		return m.Test
	}
	return nil
}

func (m *RunTestRequest) GetAutotest() *RunTestRequest_Autotest {
	if x, ok := m.GetTest().(*RunTestRequest_Autotest_); ok {
		return x.Autotest
	}
	return nil
}

func (m *RunTestRequest) GetEnvironment() *RunTestRequest_Environment {
	if m != nil {
		return m.Environment
	}
	return nil
}

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

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

// Autotest describes the DUT-agnostic parameters of an autotest test run.
type RunTestRequest_Autotest struct {
	// Test name as given in the control file.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Args to pass into the test run (meaning depends on the test).
	TestArgs string `protobuf:"bytes,2,opt,name=test_args,json=testArgs,proto3" json:"test_args,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.
	DisplayName string `protobuf:"bytes,3,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
	// True for client-side tests, false for server-side tests.
	IsClientTest bool `protobuf:"varint,4,opt,name=is_client_test,json=isClientTest,proto3" json:"is_client_test,omitempty"`
	// Key:value pairs added to the autoserv command. These are metadata which
	// should not affect code execution.
	Keyvals              map[string]string `protobuf:"bytes,5,rep,name=keyvals,proto3" json:"keyvals,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 *RunTestRequest_Autotest) Reset()         { *m = RunTestRequest_Autotest{} }
func (m *RunTestRequest_Autotest) String() string { return proto.CompactTextString(m) }
func (*RunTestRequest_Autotest) ProtoMessage()    {}
func (*RunTestRequest_Autotest) Descriptor() ([]byte, []int) {
	return fileDescriptor_c8a06e1d821d63d9, []int{0, 0}
}

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

var xxx_messageInfo_RunTestRequest_Autotest proto.InternalMessageInfo

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

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

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

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

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

// remote test drive-agnostic environment variables and similar parameters
type RunTestRequest_Environment struct {
	// Directory in Google Storage (bucket or subdirectory) in which
	// synchronous log-data will be offloaded. Reused across tasks.
	// ex. "gs://chromeos-autotest-results/sync-offloads-testing"
	GsRootDir            string   `protobuf:"bytes,2,opt,name=gs_root_dir,json=gsRootDir,proto3" json:"gs_root_dir,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_RunTestRequest_Environment proto.InternalMessageInfo

func (m *RunTestRequest_Environment) GetGsRootDir() string {
	if m != nil {
		return m.GsRootDir
	}
	return ""
}

// RunTestResponse defines the output of `phosphorus runtest`.
type RunTestResponse struct {
	// `phosphorus runtest` exits with exit code 0 unless there is an
	// infrastructure failure. When the exit code is 0, `state` indicates the
	// best known state of the test execution (see comments on State enum).
	State RunTestResponse_State `protobuf:"varint,1,opt,name=state,proto3,enum=test_platform.phosphorus.RunTestResponse_State" json:"state,omitempty"`
	// Absolute path to the test results directory created by `runtest`.
	// Must be inside config.task.results_dir (the overall results directory).
	ResultsDir           string   `protobuf:"bytes,2,opt,name=results_dir,json=resultsDir,proto3" json:"results_dir,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_RunTestResponse proto.InternalMessageInfo

func (m *RunTestResponse) GetState() RunTestResponse_State {
	if m != nil {
		return m.State
	}
	return RunTestResponse_STATE_UNSPECIFIED
}

func (m *RunTestResponse) GetResultsDir() string {
	if m != nil {
		return m.ResultsDir
	}
	return ""
}

func init() {
	proto.RegisterEnum("test_platform.phosphorus.RunTestResponse_State", RunTestResponse_State_name, RunTestResponse_State_value)
	proto.RegisterType((*RunTestRequest)(nil), "test_platform.phosphorus.RunTestRequest")
	proto.RegisterType((*RunTestRequest_Autotest)(nil), "test_platform.phosphorus.RunTestRequest.Autotest")
	proto.RegisterMapType((map[string]string)(nil), "test_platform.phosphorus.RunTestRequest.Autotest.KeyvalsEntry")
	proto.RegisterType((*RunTestRequest_Environment)(nil), "test_platform.phosphorus.RunTestRequest.Environment")
	proto.RegisterType((*RunTestResponse)(nil), "test_platform.phosphorus.RunTestResponse")
}

func init() {
	proto.RegisterFile("test_platform/phosphorus/runtest.proto", fileDescriptor_c8a06e1d821d63d9)
}

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