// Code generated by protoc-gen-go. DO NOT EDIT.
// source: testplans/test_level_tweak.proto

package testplans

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

type HwTestSuiteType int32

const (
	HwTestSuiteType_HW_TEST_SUITE_TYPE_UNSPECIFIED HwTestSuiteType = 0
	HwTestSuiteType_TAST                           HwTestSuiteType = 1
	HwTestSuiteType_AUTOTEST                       HwTestSuiteType = 2
)

var HwTestSuiteType_name = map[int32]string{
	0: "HW_TEST_SUITE_TYPE_UNSPECIFIED",
	1: "TAST",
	2: "AUTOTEST",
}

var HwTestSuiteType_value = map[string]int32{
	"HW_TEST_SUITE_TYPE_UNSPECIFIED": 0,
	"TAST":                           1,
	"AUTOTEST":                       2,
}

func (x HwTestSuiteType) String() string {
	return proto.EnumName(HwTestSuiteType_name, int32(x))
}

func (HwTestSuiteType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_cad0eb223f0e78bd, []int{0}
}

// An individual Chrome OS test; an element of a test suite.
type Test struct {
	// A test name, e.g. media_recorder_encode_accel_used_h264
	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_Test proto.InternalMessageInfo

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

type TestLevelTweak struct {
	// The Chrome OS builds to which to apply these test level tweaks.
	//
	// Types that are valid to be assigned to TweakTarget:
	//	*TestLevelTweak_BuildTarget
	//	*TestLevelTweak_AllBuildTargets
	TweakTarget isTestLevelTweak_TweakTarget `protobuf_oneof:"TweakTarget"`
	// Type of hardware test suite to which this tweak applies.
	HwTestSuiteType HwTestSuiteType `protobuf:"varint,3,opt,name=hw_test_suite_type,json=hwTestSuiteType,proto3,enum=testplans.HwTestSuiteType" json:"hw_test_suite_type,omitempty"`
	// Tests that should be overriden to be critical.
	// Only valid for Tast suites.
	PromoteToCriticalTests []*Test `protobuf:"bytes,4,rep,name=promote_to_critical_tests,json=promoteToCriticalTests,proto3" json:"promote_to_critical_tests,omitempty"`
	// Tests that should be overriden to only be informational.
	// Only valid for Tast suites.
	DemoteToInformationalTests []*Test `protobuf:"bytes,5,rep,name=demote_to_informational_tests,json=demoteToInformationalTests,proto3" json:"demote_to_informational_tests,omitempty"`
	// Tests that should be overriden to be disabled.
	// Valid for Tast and Autotest suites.
	DisableTests         []*Test  `protobuf:"bytes,6,rep,name=disable_tests,json=disableTests,proto3" json:"disable_tests,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_TestLevelTweak proto.InternalMessageInfo

type isTestLevelTweak_TweakTarget interface {
	isTestLevelTweak_TweakTarget()
}

type TestLevelTweak_BuildTarget struct {
	BuildTarget *chromiumos.BuildTarget `protobuf:"bytes,1,opt,name=build_target,json=buildTarget,proto3,oneof"`
}

type TestLevelTweak_AllBuildTargets struct {
	AllBuildTargets *wrappers.BoolValue `protobuf:"bytes,2,opt,name=all_build_targets,json=allBuildTargets,proto3,oneof"`
}

func (*TestLevelTweak_BuildTarget) isTestLevelTweak_TweakTarget() {}

func (*TestLevelTweak_AllBuildTargets) isTestLevelTweak_TweakTarget() {}

func (m *TestLevelTweak) GetTweakTarget() isTestLevelTweak_TweakTarget {
	if m != nil {
		return m.TweakTarget
	}
	return nil
}

func (m *TestLevelTweak) GetBuildTarget() *chromiumos.BuildTarget {
	if x, ok := m.GetTweakTarget().(*TestLevelTweak_BuildTarget); ok {
		return x.BuildTarget
	}
	return nil
}

func (m *TestLevelTweak) GetAllBuildTargets() *wrappers.BoolValue {
	if x, ok := m.GetTweakTarget().(*TestLevelTweak_AllBuildTargets); ok {
		return x.AllBuildTargets
	}
	return nil
}

func (m *TestLevelTweak) GetHwTestSuiteType() HwTestSuiteType {
	if m != nil {
		return m.HwTestSuiteType
	}
	return HwTestSuiteType_HW_TEST_SUITE_TYPE_UNSPECIFIED
}

func (m *TestLevelTweak) GetPromoteToCriticalTests() []*Test {
	if m != nil {
		return m.PromoteToCriticalTests
	}
	return nil
}

func (m *TestLevelTweak) GetDemoteToInformationalTests() []*Test {
	if m != nil {
		return m.DemoteToInformationalTests
	}
	return nil
}

func (m *TestLevelTweak) GetDisableTests() []*Test {
	if m != nil {
		return m.DisableTests
	}
	return nil
}

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

// Top-level config message for test level tweaks.
type TestLevelTweakCfg struct {
	TestLevelTweaks      []*TestLevelTweak `protobuf:"bytes,1,rep,name=test_level_tweaks,json=testLevelTweaks,proto3" json:"test_level_tweaks,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

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

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

var xxx_messageInfo_TestLevelTweakCfg proto.InternalMessageInfo

func (m *TestLevelTweakCfg) GetTestLevelTweaks() []*TestLevelTweak {
	if m != nil {
		return m.TestLevelTweaks
	}
	return nil
}

func init() {
	proto.RegisterEnum("testplans.HwTestSuiteType", HwTestSuiteType_name, HwTestSuiteType_value)
	proto.RegisterType((*Test)(nil), "testplans.Test")
	proto.RegisterType((*TestLevelTweak)(nil), "testplans.TestLevelTweak")
	proto.RegisterType((*TestLevelTweakCfg)(nil), "testplans.TestLevelTweakCfg")
}

func init() { proto.RegisterFile("testplans/test_level_tweak.proto", fileDescriptor_cad0eb223f0e78bd) }

var fileDescriptor_cad0eb223f0e78bd = []byte{
	// 475 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0xdf, 0x6f, 0xda, 0x30,
	0x10, 0xc7, 0x4b, 0x61, 0x55, 0x6b, 0x68, 0x01, 0x3f, 0xac, 0x34, 0xd2, 0x2a, 0xc4, 0x13, 0xda,
	0x43, 0x22, 0xd1, 0xed, 0x6d, 0x2f, 0x85, 0x65, 0x83, 0x69, 0x3f, 0xaa, 0x60, 0x36, 0xad, 0x2f,
	0x96, 0x03, 0x26, 0x44, 0x73, 0x72, 0x91, 0xed, 0x0c, 0xf5, 0x1f, 0xdc, 0xdf, 0x35, 0xd9, 0xa1,
	0x21, 0xa0, 0xbe, 0xe5, 0xee, 0xbe, 0xdf, 0xcf, 0x5d, 0xce, 0x87, 0xfa, 0x9a, 0x2b, 0x9d, 0x09,
	0x96, 0x2a, 0xcf, 0x7c, 0x51, 0xc1, 0xff, 0x72, 0x41, 0xf5, 0x96, 0xb3, 0x3f, 0x6e, 0x26, 0x41,
	0x03, 0xbe, 0x28, 0x15, 0xce, 0xf5, 0x72, 0x23, 0x21, 0x89, 0xf3, 0x04, 0x94, 0xb7, 0x84, 0x24,
	0x81, 0xb4, 0xd0, 0x38, 0xb7, 0x11, 0x40, 0x24, 0xb8, 0x67, 0xa3, 0x30, 0x5f, 0x7b, 0x5b, 0xc9,
	0xb2, 0x8c, 0x4b, 0x55, 0xd4, 0x07, 0x0e, 0x6a, 0x10, 0xae, 0x34, 0xc6, 0xa8, 0x91, 0xb2, 0x84,
	0xf7, 0x6a, 0xfd, 0xda, 0xf0, 0x22, 0xb0, 0xdf, 0x83, 0x7f, 0x75, 0x74, 0x65, 0x8a, 0x5f, 0x4d,
	0x67, 0x62, 0x1a, 0xe3, 0x0f, 0xa8, 0x15, 0xe6, 0xb1, 0x58, 0x51, 0xcd, 0x64, 0xc4, 0xb5, 0x95,
	0x37, 0x47, 0xd7, 0xee, 0xbe, 0xbd, 0x3b, 0x36, 0x75, 0x62, 0xcb, 0xd3, 0x93, 0xa0, 0x19, 0xee,
	0x43, 0x3c, 0x45, 0x5d, 0x26, 0x04, 0xad, 0x12, 0x54, 0xef, 0xd4, 0x22, 0x1c, 0xb7, 0x18, 0xd4,
	0x7d, 0x1e, 0xd4, 0x1d, 0x03, 0x88, 0x9f, 0x4c, 0xe4, 0x7c, 0x7a, 0x12, 0xb4, 0x99, 0x10, 0x15,
	0xae, 0xc2, 0x9f, 0x11, 0xde, 0x6c, 0xa9, 0xdd, 0x8b, 0xca, 0x63, 0xcd, 0xa9, 0x7e, 0xca, 0x78,
	0xaf, 0xde, 0xaf, 0x0d, 0xaf, 0x46, 0x8e, 0x5b, 0xee, 0xc5, 0x9d, 0x6e, 0xcd, 0x0f, 0xcc, 0x8d,
	0x84, 0x3c, 0x65, 0x3c, 0x68, 0x6f, 0x0e, 0x13, 0xf8, 0x0b, 0xba, 0xc9, 0x24, 0x24, 0x60, 0x10,
	0x40, 0x97, 0x32, 0xd6, 0xf1, 0x92, 0x09, 0x4b, 0x56, 0xbd, 0x46, 0xbf, 0x3e, 0x6c, 0x8e, 0xda,
	0x15, 0x9e, 0x31, 0x07, 0xaf, 0x77, 0x0e, 0x02, 0x93, 0x9d, 0xde, 0xa4, 0x15, 0x0e, 0xd0, 0x9b,
	0x15, 0x7f, 0x46, 0xc5, 0xe9, 0x1a, 0x64, 0xc2, 0x74, 0x0c, 0x69, 0xc9, 0x7b, 0xf5, 0x32, 0xcf,
	0x29, 0x5c, 0x04, 0x66, 0x55, 0x4f, 0xc1, 0x7c, 0x87, 0x2e, 0x57, 0xb1, 0x62, 0xa1, 0xe0, 0x3b,
	0xc6, 0xd9, 0xcb, 0x8c, 0xd6, 0x4e, 0x65, 0x5d, 0xe3, 0x4b, 0xd4, 0xb4, 0xef, 0x55, 0xac, 0x6b,
	0xf0, 0x88, 0xba, 0x87, 0xef, 0x38, 0x59, 0x47, 0xd8, 0x47, 0xdd, 0xe3, 0xbb, 0x52, 0xbd, 0x9a,
	0xa5, 0xdf, 0x1c, 0xd1, 0xf7, 0xc6, 0xa0, 0xad, 0x0f, 0x62, 0xf5, 0xf6, 0x1b, 0x6a, 0x1f, 0x2d,
	0x19, 0x0f, 0xd0, 0xed, 0xf4, 0x17, 0x25, 0xfe, 0x9c, 0xd0, 0xf9, 0x62, 0x46, 0x7c, 0x4a, 0x7e,
	0x3f, 0xf8, 0x74, 0xf1, 0x7d, 0xfe, 0xe0, 0x4f, 0x66, 0x9f, 0x66, 0xfe, 0xc7, 0xce, 0x09, 0x3e,
	0x47, 0x0d, 0x72, 0x3f, 0x27, 0x9d, 0x1a, 0x6e, 0xa1, 0xf3, 0xfb, 0x05, 0xf9, 0x61, 0xe4, 0x9d,
	0xd3, 0xf1, 0xfb, 0xc7, 0xbb, 0x08, 0xca, 0x73, 0x72, 0x41, 0x46, 0x5e, 0xe5, 0xb4, 0xe3, 0x74,
	0x2d, 0x59, 0x71, 0xcb, 0x5e, 0x04, 0x5e, 0x39, 0x65, 0x78, 0x66, 0x73, 0x77, 0xff, 0x03, 0x00,
	0x00, 0xff, 0xff, 0x05, 0x99, 0x7d, 0x6a, 0x35, 0x03, 0x00, 0x00,
}
