go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/resultdb/proto/v1/test_result.pb.go (about)

     1  // Copyright 2019 The LUCI Authors.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  // Code generated by protoc-gen-go. DO NOT EDIT.
    16  // versions:
    17  // 	protoc-gen-go v1.31.0
    18  // 	protoc        v3.21.7
    19  // source: go.chromium.org/luci/resultdb/proto/v1/test_result.proto
    20  
    21  package resultpb
    22  
    23  import (
    24  	_ "google.golang.org/genproto/googleapis/api/annotations"
    25  	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
    26  	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
    27  	durationpb "google.golang.org/protobuf/types/known/durationpb"
    28  	structpb "google.golang.org/protobuf/types/known/structpb"
    29  	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
    30  	reflect "reflect"
    31  	sync "sync"
    32  )
    33  
    34  const (
    35  	// Verify that this generated code is sufficiently up-to-date.
    36  	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
    37  	// Verify that runtime/protoimpl is sufficiently up-to-date.
    38  	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
    39  )
    40  
    41  // Machine-readable status of a test result.
    42  type TestStatus int32
    43  
    44  const (
    45  	// Status was not specified.
    46  	// Not to be used in actual test results; serves as a default value for an
    47  	// unset field.
    48  	TestStatus_STATUS_UNSPECIFIED TestStatus = 0
    49  	// The test case has passed.
    50  	TestStatus_PASS TestStatus = 1
    51  	// The test case has failed.
    52  	// Suggests that the code under test is incorrect, but it is also possible
    53  	// that the test is incorrect or it is a flake.
    54  	TestStatus_FAIL TestStatus = 2
    55  	// The test case has crashed during execution.
    56  	// The outcome is inconclusive: the code under test might or might not be
    57  	// correct, but the test+code is incorrect.
    58  	TestStatus_CRASH TestStatus = 3
    59  	// The test case has started, but was aborted before finishing.
    60  	// A common reason: timeout.
    61  	TestStatus_ABORT TestStatus = 4
    62  	// The test case did not execute.
    63  	// Examples:
    64  	//   - The execution of the collection of test cases, such as a test
    65  	//     binary, was aborted prematurely and execution of some test cases was
    66  	//     skipped.
    67  	//   - The test harness configuration specified that the test case MUST be
    68  	//     skipped.
    69  	TestStatus_SKIP TestStatus = 5
    70  )
    71  
    72  // Enum value maps for TestStatus.
    73  var (
    74  	TestStatus_name = map[int32]string{
    75  		0: "STATUS_UNSPECIFIED",
    76  		1: "PASS",
    77  		2: "FAIL",
    78  		3: "CRASH",
    79  		4: "ABORT",
    80  		5: "SKIP",
    81  	}
    82  	TestStatus_value = map[string]int32{
    83  		"STATUS_UNSPECIFIED": 0,
    84  		"PASS":               1,
    85  		"FAIL":               2,
    86  		"CRASH":              3,
    87  		"ABORT":              4,
    88  		"SKIP":               5,
    89  	}
    90  )
    91  
    92  func (x TestStatus) Enum() *TestStatus {
    93  	p := new(TestStatus)
    94  	*p = x
    95  	return p
    96  }
    97  
    98  func (x TestStatus) String() string {
    99  	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
   100  }
   101  
   102  func (TestStatus) Descriptor() protoreflect.EnumDescriptor {
   103  	return file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_enumTypes[0].Descriptor()
   104  }
   105  
   106  func (TestStatus) Type() protoreflect.EnumType {
   107  	return &file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_enumTypes[0]
   108  }
   109  
   110  func (x TestStatus) Number() protoreflect.EnumNumber {
   111  	return protoreflect.EnumNumber(x)
   112  }
   113  
   114  // Deprecated: Use TestStatus.Descriptor instead.
   115  func (TestStatus) EnumDescriptor() ([]byte, []int) {
   116  	return file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_rawDescGZIP(), []int{0}
   117  }
   118  
   119  // Machine-readable reason that a test execution was skipped.
   120  // Only reasons actually used are listed here, if you need a new reason
   121  // please add it here and send a CL to the OWNERS.
   122  type SkipReason int32
   123  
   124  const (
   125  	// Skip reason was not specified.
   126  	// This represents an unset field which should be used for non-skip test
   127  	// result statuses.  It can also be used if none of the other statuses
   128  	// apply.
   129  	SkipReason_SKIP_REASON_UNSPECIFIED SkipReason = 0
   130  	// Disabled automatically in response to a test skipping policy that skips
   131  	// flaky tests.
   132  	// Used for ChromeOS CQ test filtering.
   133  	SkipReason_AUTOMATICALLY_DISABLED_FOR_FLAKINESS SkipReason = 1
   134  )
   135  
   136  // Enum value maps for SkipReason.
   137  var (
   138  	SkipReason_name = map[int32]string{
   139  		0: "SKIP_REASON_UNSPECIFIED",
   140  		1: "AUTOMATICALLY_DISABLED_FOR_FLAKINESS",
   141  	}
   142  	SkipReason_value = map[string]int32{
   143  		"SKIP_REASON_UNSPECIFIED":              0,
   144  		"AUTOMATICALLY_DISABLED_FOR_FLAKINESS": 1,
   145  	}
   146  )
   147  
   148  func (x SkipReason) Enum() *SkipReason {
   149  	p := new(SkipReason)
   150  	*p = x
   151  	return p
   152  }
   153  
   154  func (x SkipReason) String() string {
   155  	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
   156  }
   157  
   158  func (SkipReason) Descriptor() protoreflect.EnumDescriptor {
   159  	return file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_enumTypes[1].Descriptor()
   160  }
   161  
   162  func (SkipReason) Type() protoreflect.EnumType {
   163  	return &file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_enumTypes[1]
   164  }
   165  
   166  func (x SkipReason) Number() protoreflect.EnumNumber {
   167  	return protoreflect.EnumNumber(x)
   168  }
   169  
   170  // Deprecated: Use SkipReason.Descriptor instead.
   171  func (SkipReason) EnumDescriptor() ([]byte, []int) {
   172  	return file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_rawDescGZIP(), []int{1}
   173  }
   174  
   175  // Reason why a test variant was exonerated.
   176  type ExonerationReason int32
   177  
   178  const (
   179  	// Reason was not specified.
   180  	// Not to be used in actual test exonerations; serves as a default value for
   181  	// an unset field.
   182  	ExonerationReason_EXONERATION_REASON_UNSPECIFIED ExonerationReason = 0
   183  	// Similar unexpected results were observed on a mainline branch
   184  	// (i.e. against a build without unsubmitted changes applied).
   185  	// (For avoidance of doubt, this includes both flakily and
   186  	// deterministically occurring unexpected results.)
   187  	// Applies to unexpected results in presubmit/CQ runs only.
   188  	ExonerationReason_OCCURS_ON_MAINLINE ExonerationReason = 1
   189  	// Similar unexpected results were observed in presubmit run(s) for other,
   190  	// unrelated CL(s). (This is suggestive of the issue being present
   191  	// on mainline but is not confirmed as there are possible confounding
   192  	// factors, like how tests are run on CLs vs how tests are run on
   193  	// mainline branches.)
   194  	// Applies to unexpected results in presubmit/CQ runs only.
   195  	ExonerationReason_OCCURS_ON_OTHER_CLS ExonerationReason = 2
   196  	// The tests are not critical to the test subject (e.g. CL) passing.
   197  	// This could be because more data is being collected to determine if
   198  	// the tests are stable enough to be made critical (as is often the
   199  	// case for experimental test suites).
   200  	// If information exists indicating the tests are producing unexpected
   201  	// results, and the tests are not critical for that reason,
   202  	// prefer more specific reasons OCCURS_ON_MAINLINE or OCCURS_ON_OTHER_CLS.
   203  	ExonerationReason_NOT_CRITICAL ExonerationReason = 3
   204  	// The test result was an unexpected pass. (Note that such an exoneration is
   205  	// not automatically created for unexpected passes, unless the option is
   206  	// specified to ResultSink or the project manually creates one).
   207  	ExonerationReason_UNEXPECTED_PASS ExonerationReason = 4
   208  )
   209  
   210  // Enum value maps for ExonerationReason.
   211  var (
   212  	ExonerationReason_name = map[int32]string{
   213  		0: "EXONERATION_REASON_UNSPECIFIED",
   214  		1: "OCCURS_ON_MAINLINE",
   215  		2: "OCCURS_ON_OTHER_CLS",
   216  		3: "NOT_CRITICAL",
   217  		4: "UNEXPECTED_PASS",
   218  	}
   219  	ExonerationReason_value = map[string]int32{
   220  		"EXONERATION_REASON_UNSPECIFIED": 0,
   221  		"OCCURS_ON_MAINLINE":             1,
   222  		"OCCURS_ON_OTHER_CLS":            2,
   223  		"NOT_CRITICAL":                   3,
   224  		"UNEXPECTED_PASS":                4,
   225  	}
   226  )
   227  
   228  func (x ExonerationReason) Enum() *ExonerationReason {
   229  	p := new(ExonerationReason)
   230  	*p = x
   231  	return p
   232  }
   233  
   234  func (x ExonerationReason) String() string {
   235  	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
   236  }
   237  
   238  func (ExonerationReason) Descriptor() protoreflect.EnumDescriptor {
   239  	return file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_enumTypes[2].Descriptor()
   240  }
   241  
   242  func (ExonerationReason) Type() protoreflect.EnumType {
   243  	return &file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_enumTypes[2]
   244  }
   245  
   246  func (x ExonerationReason) Number() protoreflect.EnumNumber {
   247  	return protoreflect.EnumNumber(x)
   248  }
   249  
   250  // Deprecated: Use ExonerationReason.Descriptor instead.
   251  func (ExonerationReason) EnumDescriptor() ([]byte, []int) {
   252  	return file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_rawDescGZIP(), []int{2}
   253  }
   254  
   255  // A result of a functional test case.
   256  // Often a single test case is executed multiple times and has multiple results,
   257  // a single test suite has multiple test cases,
   258  // and the same test suite can be executed in different variants
   259  // (OS, GPU, compile flags, etc).
   260  //
   261  // This message does not specify the test id.
   262  // It should be available in the message that embeds this message.
   263  //
   264  // Next id: 17.
   265  type TestResult struct {
   266  	state         protoimpl.MessageState
   267  	sizeCache     protoimpl.SizeCache
   268  	unknownFields protoimpl.UnknownFields
   269  
   270  	// Can be used to refer to this test result, e.g. in ResultDB.GetTestResult
   271  	// RPC.
   272  	// Format:
   273  	// "invocations/{INVOCATION_ID}/tests/{URL_ESCAPED_TEST_ID}/results/{RESULT_ID}".
   274  	// where URL_ESCAPED_TEST_ID is test_id escaped with
   275  	// https://golang.org/pkg/net/url/#PathEscape See also https://aip.dev/122.
   276  	//
   277  	// Output only.
   278  	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
   279  	// Test id, a unique identifier of the test in a LUCI project.
   280  	// Regex: ^[[::print::]]{1,512}$
   281  	//
   282  	// If two tests have a common test id prefix that ends with a
   283  	// non-alphanumeric character, they considered a part of a group. Examples:
   284  	// - "a/b/c"
   285  	// - "a/b/d"
   286  	// - "a/b/e:x"
   287  	// - "a/b/e:y"
   288  	// - "a/f"
   289  	// This defines the following groups:
   290  	//   - All items belong to one group because of the common prefix "a/"
   291  	//   - Within that group, the first 4 form a sub-group because of the common
   292  	//     prefix "a/b/"
   293  	//   - Within that group, "a/b/e:x" and "a/b/e:y" form a sub-group because of
   294  	//     the common prefix "a/b/e:".
   295  	//
   296  	// This can be used in UI.
   297  	// LUCI does not interpret test ids in any other way.
   298  	TestId string `protobuf:"bytes,2,opt,name=test_id,json=testId,proto3" json:"test_id,omitempty"`
   299  	// Identifies a test result in a given invocation and test id.
   300  	// Regex: ^[a-z0-9\-_.]{1,32}$
   301  	ResultId string `protobuf:"bytes,3,opt,name=result_id,json=resultId,proto3" json:"result_id,omitempty"`
   302  	// Description of one specific way of running the test,
   303  	// e.g. a specific bucket, builder and a test suite.
   304  	Variant *Variant `protobuf:"bytes,4,opt,name=variant,proto3" json:"variant,omitempty"`
   305  	// Whether the result of test case execution is expected.
   306  	// In a typical Chromium CL, 99%+ of test results are expected.
   307  	// Users are typically interested only in the unexpected results.
   308  	//
   309  	// An unexpected result != test case failure. There are test cases that are
   310  	// expected to fail/skip/crash. The test harness compares the actual status
   311  	// with the expected one(s) and this field is the result of the comparison.
   312  	Expected bool `protobuf:"varint,5,opt,name=expected,proto3" json:"expected,omitempty"`
   313  	// Machine-readable status of the test case.
   314  	// MUST NOT be STATUS_UNSPECIFIED.
   315  	Status TestStatus `protobuf:"varint,6,opt,name=status,proto3,enum=luci.resultdb.v1.TestStatus" json:"status,omitempty"`
   316  	// Human-readable explanation of the result, in HTML.
   317  	// MUST be sanitized before rendering in the browser.
   318  	//
   319  	// The size of the summary must be equal to or smaller than 4096 bytes in
   320  	// UTF-8.
   321  	//
   322  	// Supports artifact embedding using custom tags:
   323  	//   - <text-artifact> renders contents of an artifact as text.
   324  	//     Usage:
   325  	//   - To embed result level artifact: <text-artifact
   326  	//     artifact-id="<artifact_id>">
   327  	//   - To embed invocation level artifact: <text-artifact
   328  	//     artifact-id="<artifact_id>" inv-level>
   329  	SummaryHtml string `protobuf:"bytes,7,opt,name=summary_html,json=summaryHtml,proto3" json:"summary_html,omitempty"`
   330  	// The point in time when the test case started to execute.
   331  	StartTime *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
   332  	// Duration of the test case execution.
   333  	// MUST be equal to or greater than 0.
   334  	Duration *durationpb.Duration `protobuf:"bytes,9,opt,name=duration,proto3" json:"duration,omitempty"`
   335  	// Metadata for this test result.
   336  	// It might describe this particular execution or the test case.
   337  	// A key can be repeated.
   338  	Tags []*StringPair `protobuf:"bytes,10,rep,name=tags,proto3" json:"tags,omitempty"`
   339  	// Hash of the variant.
   340  	// hex(sha256(sorted(”.join('%s:%s\n' for k, v in variant.items())))).
   341  	//
   342  	// Output only.
   343  	VariantHash string `protobuf:"bytes,12,opt,name=variant_hash,json=variantHash,proto3" json:"variant_hash,omitempty"`
   344  	// Information about the test at the time of its execution.
   345  	TestMetadata *TestMetadata `protobuf:"bytes,13,opt,name=test_metadata,json=testMetadata,proto3" json:"test_metadata,omitempty"`
   346  	// Information about the test failure. Only present if the test failed.
   347  	FailureReason *FailureReason `protobuf:"bytes,14,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"`
   348  	// Arbitrary JSON object that contains structured, domain-specific properties
   349  	// of the test result.
   350  	//
   351  	// The serialized size must be <= 4096 bytes.
   352  	Properties *structpb.Struct `protobuf:"bytes,15,opt,name=properties,proto3" json:"properties,omitempty"`
   353  	// Whether the test result has been masked so that it includes only metadata.
   354  	// The metadata fields for a TestResult are:
   355  	// * name
   356  	// * test_id
   357  	// * result_id
   358  	// * expected
   359  	// * status
   360  	// * start_time
   361  	// * duration
   362  	// * variant_hash
   363  	// * failure_reason.primary_error_message (truncated to 140 characters)
   364  	// * skip_reason
   365  	//
   366  	// Output only.
   367  	IsMasked bool `protobuf:"varint,16,opt,name=is_masked,json=isMasked,proto3" json:"is_masked,omitempty"`
   368  	// Reasoning behind a test skip, in machine-readable form.
   369  	// Used to assist downstream analyses, such as automatic bug-filing.
   370  	// MUST not be set unless status is SKIP.
   371  	SkipReason SkipReason `protobuf:"varint,18,opt,name=skip_reason,json=skipReason,proto3,enum=luci.resultdb.v1.SkipReason" json:"skip_reason,omitempty"`
   372  }
   373  
   374  func (x *TestResult) Reset() {
   375  	*x = TestResult{}
   376  	if protoimpl.UnsafeEnabled {
   377  		mi := &file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_msgTypes[0]
   378  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   379  		ms.StoreMessageInfo(mi)
   380  	}
   381  }
   382  
   383  func (x *TestResult) String() string {
   384  	return protoimpl.X.MessageStringOf(x)
   385  }
   386  
   387  func (*TestResult) ProtoMessage() {}
   388  
   389  func (x *TestResult) ProtoReflect() protoreflect.Message {
   390  	mi := &file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_msgTypes[0]
   391  	if protoimpl.UnsafeEnabled && x != nil {
   392  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   393  		if ms.LoadMessageInfo() == nil {
   394  			ms.StoreMessageInfo(mi)
   395  		}
   396  		return ms
   397  	}
   398  	return mi.MessageOf(x)
   399  }
   400  
   401  // Deprecated: Use TestResult.ProtoReflect.Descriptor instead.
   402  func (*TestResult) Descriptor() ([]byte, []int) {
   403  	return file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_rawDescGZIP(), []int{0}
   404  }
   405  
   406  func (x *TestResult) GetName() string {
   407  	if x != nil {
   408  		return x.Name
   409  	}
   410  	return ""
   411  }
   412  
   413  func (x *TestResult) GetTestId() string {
   414  	if x != nil {
   415  		return x.TestId
   416  	}
   417  	return ""
   418  }
   419  
   420  func (x *TestResult) GetResultId() string {
   421  	if x != nil {
   422  		return x.ResultId
   423  	}
   424  	return ""
   425  }
   426  
   427  func (x *TestResult) GetVariant() *Variant {
   428  	if x != nil {
   429  		return x.Variant
   430  	}
   431  	return nil
   432  }
   433  
   434  func (x *TestResult) GetExpected() bool {
   435  	if x != nil {
   436  		return x.Expected
   437  	}
   438  	return false
   439  }
   440  
   441  func (x *TestResult) GetStatus() TestStatus {
   442  	if x != nil {
   443  		return x.Status
   444  	}
   445  	return TestStatus_STATUS_UNSPECIFIED
   446  }
   447  
   448  func (x *TestResult) GetSummaryHtml() string {
   449  	if x != nil {
   450  		return x.SummaryHtml
   451  	}
   452  	return ""
   453  }
   454  
   455  func (x *TestResult) GetStartTime() *timestamppb.Timestamp {
   456  	if x != nil {
   457  		return x.StartTime
   458  	}
   459  	return nil
   460  }
   461  
   462  func (x *TestResult) GetDuration() *durationpb.Duration {
   463  	if x != nil {
   464  		return x.Duration
   465  	}
   466  	return nil
   467  }
   468  
   469  func (x *TestResult) GetTags() []*StringPair {
   470  	if x != nil {
   471  		return x.Tags
   472  	}
   473  	return nil
   474  }
   475  
   476  func (x *TestResult) GetVariantHash() string {
   477  	if x != nil {
   478  		return x.VariantHash
   479  	}
   480  	return ""
   481  }
   482  
   483  func (x *TestResult) GetTestMetadata() *TestMetadata {
   484  	if x != nil {
   485  		return x.TestMetadata
   486  	}
   487  	return nil
   488  }
   489  
   490  func (x *TestResult) GetFailureReason() *FailureReason {
   491  	if x != nil {
   492  		return x.FailureReason
   493  	}
   494  	return nil
   495  }
   496  
   497  func (x *TestResult) GetProperties() *structpb.Struct {
   498  	if x != nil {
   499  		return x.Properties
   500  	}
   501  	return nil
   502  }
   503  
   504  func (x *TestResult) GetIsMasked() bool {
   505  	if x != nil {
   506  		return x.IsMasked
   507  	}
   508  	return false
   509  }
   510  
   511  func (x *TestResult) GetSkipReason() SkipReason {
   512  	if x != nil {
   513  		return x.SkipReason
   514  	}
   515  	return SkipReason_SKIP_REASON_UNSPECIFIED
   516  }
   517  
   518  // Indicates the test subject (e.g. a CL) is absolved from blame
   519  // for an unexpected result of a test variant.
   520  // For example, the test variant fails both with and without CL, so it is not
   521  // CL's fault.
   522  type TestExoneration struct {
   523  	state         protoimpl.MessageState
   524  	sizeCache     protoimpl.SizeCache
   525  	unknownFields protoimpl.UnknownFields
   526  
   527  	// Can be used to refer to this test exoneration, e.g. in
   528  	// ResultDB.GetTestExoneration RPC.
   529  	// Format:
   530  	// invocations/{INVOCATION_ID}/tests/{URL_ESCAPED_TEST_ID}/exonerations/{EXONERATION_ID}.
   531  	// URL_ESCAPED_TEST_ID is test_variant.test_id escaped with
   532  	// https://golang.org/pkg/net/url/#PathEscape See also https://aip.dev/122.
   533  	//
   534  	// Output only.
   535  	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
   536  	// Test identifier, see TestResult.test_id.
   537  	TestId string `protobuf:"bytes,2,opt,name=test_id,json=testId,proto3" json:"test_id,omitempty"`
   538  	// Description of the variant of the test, see Variant type.
   539  	// Unlike TestResult.extra_variant_pairs, this one must be a full definition
   540  	// of the variant, i.e. it is not combined with Invocation.base_test_variant.
   541  	Variant *Variant `protobuf:"bytes,3,opt,name=variant,proto3" json:"variant,omitempty"`
   542  	// Identifies an exoneration in a given invocation and test id.
   543  	// It is server-generated.
   544  	ExonerationId string `protobuf:"bytes,4,opt,name=exoneration_id,json=exonerationId,proto3" json:"exoneration_id,omitempty"`
   545  	// Reasoning behind the exoneration, in HTML.
   546  	// MUST be sanitized before rendering in the browser.
   547  	ExplanationHtml string `protobuf:"bytes,5,opt,name=explanation_html,json=explanationHtml,proto3" json:"explanation_html,omitempty"`
   548  	// Hash of the variant.
   549  	// hex(sha256(sorted(”.join('%s:%s\n' for k, v in variant.items())))).
   550  	VariantHash string `protobuf:"bytes,6,opt,name=variant_hash,json=variantHash,proto3" json:"variant_hash,omitempty"`
   551  	// Reasoning behind the exoneration, in machine-readable form.
   552  	// Used to assist downstream analyses, such as automatic bug-filing.
   553  	// This allow detection of e.g. critical tests failing in presubmit,
   554  	// even if they are being exonerated because they fail on other CLs.
   555  	Reason ExonerationReason `protobuf:"varint,7,opt,name=reason,proto3,enum=luci.resultdb.v1.ExonerationReason" json:"reason,omitempty"`
   556  	// Whether the test exoneration has been masked so that it includes only
   557  	// metadata. The metadata fields for a TestExoneration are:
   558  	// * name
   559  	// * test_id
   560  	// * exoneration_id
   561  	// * variant_hash
   562  	// * explanation_html
   563  	// * reason
   564  	//
   565  	// Output only.
   566  	IsMasked bool `protobuf:"varint,8,opt,name=is_masked,json=isMasked,proto3" json:"is_masked,omitempty"`
   567  }
   568  
   569  func (x *TestExoneration) Reset() {
   570  	*x = TestExoneration{}
   571  	if protoimpl.UnsafeEnabled {
   572  		mi := &file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_msgTypes[1]
   573  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   574  		ms.StoreMessageInfo(mi)
   575  	}
   576  }
   577  
   578  func (x *TestExoneration) String() string {
   579  	return protoimpl.X.MessageStringOf(x)
   580  }
   581  
   582  func (*TestExoneration) ProtoMessage() {}
   583  
   584  func (x *TestExoneration) ProtoReflect() protoreflect.Message {
   585  	mi := &file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_msgTypes[1]
   586  	if protoimpl.UnsafeEnabled && x != nil {
   587  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   588  		if ms.LoadMessageInfo() == nil {
   589  			ms.StoreMessageInfo(mi)
   590  		}
   591  		return ms
   592  	}
   593  	return mi.MessageOf(x)
   594  }
   595  
   596  // Deprecated: Use TestExoneration.ProtoReflect.Descriptor instead.
   597  func (*TestExoneration) Descriptor() ([]byte, []int) {
   598  	return file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_rawDescGZIP(), []int{1}
   599  }
   600  
   601  func (x *TestExoneration) GetName() string {
   602  	if x != nil {
   603  		return x.Name
   604  	}
   605  	return ""
   606  }
   607  
   608  func (x *TestExoneration) GetTestId() string {
   609  	if x != nil {
   610  		return x.TestId
   611  	}
   612  	return ""
   613  }
   614  
   615  func (x *TestExoneration) GetVariant() *Variant {
   616  	if x != nil {
   617  		return x.Variant
   618  	}
   619  	return nil
   620  }
   621  
   622  func (x *TestExoneration) GetExonerationId() string {
   623  	if x != nil {
   624  		return x.ExonerationId
   625  	}
   626  	return ""
   627  }
   628  
   629  func (x *TestExoneration) GetExplanationHtml() string {
   630  	if x != nil {
   631  		return x.ExplanationHtml
   632  	}
   633  	return ""
   634  }
   635  
   636  func (x *TestExoneration) GetVariantHash() string {
   637  	if x != nil {
   638  		return x.VariantHash
   639  	}
   640  	return ""
   641  }
   642  
   643  func (x *TestExoneration) GetReason() ExonerationReason {
   644  	if x != nil {
   645  		return x.Reason
   646  	}
   647  	return ExonerationReason_EXONERATION_REASON_UNSPECIFIED
   648  }
   649  
   650  func (x *TestExoneration) GetIsMasked() bool {
   651  	if x != nil {
   652  		return x.IsMasked
   653  	}
   654  	return false
   655  }
   656  
   657  var File_go_chromium_org_luci_resultdb_proto_v1_test_result_proto protoreflect.FileDescriptor
   658  
   659  var file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_rawDesc = []byte{
   660  	0x0a, 0x38, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72,
   661  	0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x64, 0x62, 0x2f,
   662  	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65,
   663  	0x73, 0x75, 0x6c, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x6c, 0x75, 0x63, 0x69,
   664  	0x2e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x64, 0x62, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x67, 0x6f,
   665  	0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62,
   666  	0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67,
   667  	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64,
   668  	0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67,
   669  	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73,
   670  	0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f,
   671  	0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d,
   672  	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x33, 0x67, 0x6f,
   673  	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75,
   674  	0x63, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x64, 0x62, 0x2f, 0x70, 0x72, 0x6f, 0x74,
   675  	0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
   676  	0x6f, 0x1a, 0x3a, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f,
   677  	0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x64, 0x62,
   678  	0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d,
   679  	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3b, 0x67,
   680  	0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c,
   681  	0x75, 0x63, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x64, 0x62, 0x2f, 0x70, 0x72, 0x6f,
   682  	0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65,
   683  	0x61, 0x73, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb4, 0x06, 0x0a, 0x0a, 0x54,
   684  	0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1a, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
   685  	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe0, 0x41, 0x03, 0xe0, 0x41, 0x05, 0x52,
   686  	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x07, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64,
   687  	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x06, 0x74, 0x65, 0x73,
   688  	0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x64,
   689  	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe0, 0x41, 0x05, 0xe0, 0x41, 0x02, 0x52, 0x08,
   690  	0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x07, 0x76, 0x61, 0x72, 0x69,
   691  	0x61, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x69,
   692  	0x2e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x72,
   693  	0x69, 0x61, 0x6e, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61,
   694  	0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x08, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x05,
   695  	0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x08, 0x65, 0x78, 0x70, 0x65, 0x63,
   696  	0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20,
   697  	0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x72, 0x65, 0x73, 0x75, 0x6c,
   698  	0x74, 0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75,
   699  	0x73, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x26,
   700  	0x0a, 0x0c, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x68, 0x74, 0x6d, 0x6c, 0x18, 0x07,
   701  	0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x0b, 0x73, 0x75, 0x6d, 0x6d, 0x61,
   702  	0x72, 0x79, 0x48, 0x74, 0x6d, 0x6c, 0x12, 0x3e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f,
   703  	0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
   704  	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d,
   705  	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x09, 0x73, 0x74, 0x61,
   706  	0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69,
   707  	0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
   708  	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74,
   709  	0x69, 0x6f, 0x6e, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69,
   710  	0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b,
   711  	0x32, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x64, 0x62,
   712  	0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x42, 0x03,
   713  	0xe0, 0x41, 0x05, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x29, 0x0a, 0x0c, 0x76, 0x61, 0x72,
   714  	0x69, 0x61, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x42,
   715  	0x06, 0xe0, 0x41, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74,
   716  	0x48, 0x61, 0x73, 0x68, 0x12, 0x43, 0x0a, 0x0d, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74,
   717  	0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6c, 0x75,
   718  	0x63, 0x69, 0x2e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x54,
   719  	0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x74, 0x65, 0x73,
   720  	0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x46, 0x0a, 0x0e, 0x66, 0x61, 0x69,
   721  	0x6c, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28,
   722  	0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x64,
   723  	0x62, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x65, 0x61, 0x73,
   724  	0x6f, 0x6e, 0x52, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f,
   725  	0x6e, 0x12, 0x37, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18,
   726  	0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
   727  	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0a,
   728  	0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x09, 0x69, 0x73,
   729  	0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x65, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0,
   730  	0x41, 0x03, 0x52, 0x08, 0x69, 0x73, 0x4d, 0x61, 0x73, 0x6b, 0x65, 0x64, 0x12, 0x3d, 0x0a, 0x0b,
   731  	0x73, 0x6b, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x12, 0x20, 0x01, 0x28,
   732  	0x0e, 0x32, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x64,
   733  	0x62, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6b, 0x69, 0x70, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52,
   734  	0x0a, 0x73, 0x6b, 0x69, 0x70, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x4a, 0x04, 0x08, 0x0b, 0x10,
   735  	0x0c, 0x22, 0xe6, 0x02, 0x0a, 0x0f, 0x54, 0x65, 0x73, 0x74, 0x45, 0x78, 0x6f, 0x6e, 0x65, 0x72,
   736  	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
   737  	0x01, 0x28, 0x09, 0x42, 0x06, 0xe0, 0x41, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x04, 0x6e, 0x61, 0x6d,
   738  	0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01,
   739  	0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x07, 0x76, 0x61,
   740  	0x72, 0x69, 0x61, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x75,
   741  	0x63, 0x69, 0x2e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x56,
   742  	0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x52, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x12,
   743  	0x2d, 0x0a, 0x0e, 0x65, 0x78, 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
   744  	0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xe0, 0x41, 0x03, 0xe0, 0x41, 0x05, 0x52,
   745  	0x0d, 0x65, 0x78, 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e,
   746  	0x0a, 0x10, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x74,
   747  	0x6d, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x0f, 0x65,
   748  	0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x74, 0x6d, 0x6c, 0x12, 0x26,
   749  	0x0a, 0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x06,
   750  	0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 0x61,
   751  	0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e,
   752  	0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x72, 0x65,
   753  	0x73, 0x75, 0x6c, 0x74, 0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x6f, 0x6e, 0x65, 0x72,
   754  	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x42, 0x03, 0xe0, 0x41, 0x05,
   755  	0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6d,
   756  	0x61, 0x73, 0x6b, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0, 0x41, 0x03,
   757  	0x52, 0x08, 0x69, 0x73, 0x4d, 0x61, 0x73, 0x6b, 0x65, 0x64, 0x2a, 0x58, 0x0a, 0x0a, 0x54, 0x65,
   758  	0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54,
   759  	0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00,
   760  	0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x53, 0x53, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x41,
   761  	0x49, 0x4c, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x52, 0x41, 0x53, 0x48, 0x10, 0x03, 0x12,
   762  	0x09, 0x0a, 0x05, 0x41, 0x42, 0x4f, 0x52, 0x54, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x4b,
   763  	0x49, 0x50, 0x10, 0x05, 0x2a, 0x53, 0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x70, 0x52, 0x65, 0x61, 0x73,
   764  	0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x4b, 0x49, 0x50, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f,
   765  	0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12,
   766  	0x28, 0x0a, 0x24, 0x41, 0x55, 0x54, 0x4f, 0x4d, 0x41, 0x54, 0x49, 0x43, 0x41, 0x4c, 0x4c, 0x59,
   767  	0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x5f, 0x46, 0x4f, 0x52, 0x5f, 0x46, 0x4c,
   768  	0x41, 0x4b, 0x49, 0x4e, 0x45, 0x53, 0x53, 0x10, 0x01, 0x2a, 0x8f, 0x01, 0x0a, 0x11, 0x45, 0x78,
   769  	0x6f, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12,
   770  	0x22, 0x0a, 0x1e, 0x45, 0x58, 0x4f, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52,
   771  	0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45,
   772  	0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x43, 0x43, 0x55, 0x52, 0x53, 0x5f, 0x4f, 0x4e,
   773  	0x5f, 0x4d, 0x41, 0x49, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x4f,
   774  	0x43, 0x43, 0x55, 0x52, 0x53, 0x5f, 0x4f, 0x4e, 0x5f, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x5f, 0x43,
   775  	0x4c, 0x53, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x5f, 0x43, 0x52, 0x49, 0x54,
   776  	0x49, 0x43, 0x41, 0x4c, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e, 0x45, 0x58, 0x50, 0x45,
   777  	0x43, 0x54, 0x45, 0x44, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x10, 0x04, 0x42, 0x31, 0x5a, 0x2f, 0x67,
   778  	0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c,
   779  	0x75, 0x63, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x64, 0x62, 0x2f, 0x70, 0x72, 0x6f,
   780  	0x74, 0x6f, 0x2f, 0x76, 0x31, 0x3b, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x70, 0x62, 0x62, 0x06,
   781  	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
   782  }
   783  
   784  var (
   785  	file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_rawDescOnce sync.Once
   786  	file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_rawDescData = file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_rawDesc
   787  )
   788  
   789  func file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_rawDescGZIP() []byte {
   790  	file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_rawDescOnce.Do(func() {
   791  		file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_rawDescData = protoimpl.X.CompressGZIP(file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_rawDescData)
   792  	})
   793  	return file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_rawDescData
   794  }
   795  
   796  var file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
   797  var file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
   798  var file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_goTypes = []interface{}{
   799  	(TestStatus)(0),               // 0: luci.resultdb.v1.TestStatus
   800  	(SkipReason)(0),               // 1: luci.resultdb.v1.SkipReason
   801  	(ExonerationReason)(0),        // 2: luci.resultdb.v1.ExonerationReason
   802  	(*TestResult)(nil),            // 3: luci.resultdb.v1.TestResult
   803  	(*TestExoneration)(nil),       // 4: luci.resultdb.v1.TestExoneration
   804  	(*Variant)(nil),               // 5: luci.resultdb.v1.Variant
   805  	(*timestamppb.Timestamp)(nil), // 6: google.protobuf.Timestamp
   806  	(*durationpb.Duration)(nil),   // 7: google.protobuf.Duration
   807  	(*StringPair)(nil),            // 8: luci.resultdb.v1.StringPair
   808  	(*TestMetadata)(nil),          // 9: luci.resultdb.v1.TestMetadata
   809  	(*FailureReason)(nil),         // 10: luci.resultdb.v1.FailureReason
   810  	(*structpb.Struct)(nil),       // 11: google.protobuf.Struct
   811  }
   812  var file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_depIdxs = []int32{
   813  	5,  // 0: luci.resultdb.v1.TestResult.variant:type_name -> luci.resultdb.v1.Variant
   814  	0,  // 1: luci.resultdb.v1.TestResult.status:type_name -> luci.resultdb.v1.TestStatus
   815  	6,  // 2: luci.resultdb.v1.TestResult.start_time:type_name -> google.protobuf.Timestamp
   816  	7,  // 3: luci.resultdb.v1.TestResult.duration:type_name -> google.protobuf.Duration
   817  	8,  // 4: luci.resultdb.v1.TestResult.tags:type_name -> luci.resultdb.v1.StringPair
   818  	9,  // 5: luci.resultdb.v1.TestResult.test_metadata:type_name -> luci.resultdb.v1.TestMetadata
   819  	10, // 6: luci.resultdb.v1.TestResult.failure_reason:type_name -> luci.resultdb.v1.FailureReason
   820  	11, // 7: luci.resultdb.v1.TestResult.properties:type_name -> google.protobuf.Struct
   821  	1,  // 8: luci.resultdb.v1.TestResult.skip_reason:type_name -> luci.resultdb.v1.SkipReason
   822  	5,  // 9: luci.resultdb.v1.TestExoneration.variant:type_name -> luci.resultdb.v1.Variant
   823  	2,  // 10: luci.resultdb.v1.TestExoneration.reason:type_name -> luci.resultdb.v1.ExonerationReason
   824  	11, // [11:11] is the sub-list for method output_type
   825  	11, // [11:11] is the sub-list for method input_type
   826  	11, // [11:11] is the sub-list for extension type_name
   827  	11, // [11:11] is the sub-list for extension extendee
   828  	0,  // [0:11] is the sub-list for field type_name
   829  }
   830  
   831  func init() { file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_init() }
   832  func file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_init() {
   833  	if File_go_chromium_org_luci_resultdb_proto_v1_test_result_proto != nil {
   834  		return
   835  	}
   836  	file_go_chromium_org_luci_resultdb_proto_v1_common_proto_init()
   837  	file_go_chromium_org_luci_resultdb_proto_v1_test_metadata_proto_init()
   838  	file_go_chromium_org_luci_resultdb_proto_v1_failure_reason_proto_init()
   839  	if !protoimpl.UnsafeEnabled {
   840  		file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
   841  			switch v := v.(*TestResult); i {
   842  			case 0:
   843  				return &v.state
   844  			case 1:
   845  				return &v.sizeCache
   846  			case 2:
   847  				return &v.unknownFields
   848  			default:
   849  				return nil
   850  			}
   851  		}
   852  		file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
   853  			switch v := v.(*TestExoneration); i {
   854  			case 0:
   855  				return &v.state
   856  			case 1:
   857  				return &v.sizeCache
   858  			case 2:
   859  				return &v.unknownFields
   860  			default:
   861  				return nil
   862  			}
   863  		}
   864  	}
   865  	type x struct{}
   866  	out := protoimpl.TypeBuilder{
   867  		File: protoimpl.DescBuilder{
   868  			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
   869  			RawDescriptor: file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_rawDesc,
   870  			NumEnums:      3,
   871  			NumMessages:   2,
   872  			NumExtensions: 0,
   873  			NumServices:   0,
   874  		},
   875  		GoTypes:           file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_goTypes,
   876  		DependencyIndexes: file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_depIdxs,
   877  		EnumInfos:         file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_enumTypes,
   878  		MessageInfos:      file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_msgTypes,
   879  	}.Build()
   880  	File_go_chromium_org_luci_resultdb_proto_v1_test_result_proto = out.File
   881  	file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_rawDesc = nil
   882  	file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_goTypes = nil
   883  	file_go_chromium_org_luci_resultdb_proto_v1_test_result_proto_depIdxs = nil
   884  }