go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/analysis/proto/bq/test_verdict_row.pb.go (about) 1 // Copyright 2023 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/analysis/proto/bq/test_verdict_row.proto 20 21 package bqpb 22 23 import ( 24 v1 "go.chromium.org/luci/analysis/proto/v1" 25 _ "go.chromium.org/luci/common/bq/pb" 26 protoreflect "google.golang.org/protobuf/reflect/protoreflect" 27 protoimpl "google.golang.org/protobuf/runtime/protoimpl" 28 timestamppb "google.golang.org/protobuf/types/known/timestamppb" 29 reflect "reflect" 30 sync "sync" 31 ) 32 33 const ( 34 // Verify that this generated code is sufficiently up-to-date. 35 _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) 36 // Verify that runtime/protoimpl is sufficiently up-to-date. 37 _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) 38 ) 39 40 // Represents a test verdict exported to BigQuery. 41 // 42 // A test verdict summarises the results for a test variant 43 // (a way of running a test) in an invocation (a container of test 44 // results, such as a build). 45 // 46 // BigQuery tables using this schema will use the following settings: 47 // - Partition by TIMESTAMP_TRUNC(partition_time, DAY), 48 // retain data for 540 days. 49 // - Cluster by project, test_id. 50 // 51 // NextId: 17 52 type TestVerdictRow struct { 53 state protoimpl.MessageState 54 sizeCache protoimpl.SizeCache 55 unknownFields protoimpl.UnknownFields 56 57 // The LUCI Project. E.g. "chromium". 58 Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` 59 // Is a unique identifier of the test in a LUCI project. 60 // Refer to TestResult.test_id for details. 61 TestId string `protobuf:"bytes,2,opt,name=test_id,json=testId,proto3" json:"test_id,omitempty"` 62 // Describes one specific way of running the test, 63 // e.g. a specific bucket, builder and a test suite. 64 // 65 // This will be encoded as a JSON object like 66 // {"builder":"linux-rel","os":"Ubuntu-18.04",...} 67 // to take advantage of BigQuery's JSON support, so that 68 // the query will only be billed for the variant 69 // keys it reads. 70 // 71 // In the protocol buffer, it must be a string as per 72 // https://cloud.google.com/bigquery/docs/write-api#data_type_conversions 73 Variant string `protobuf:"bytes,3,opt,name=variant,proto3" json:"variant,omitempty"` 74 // A hash of the variant, encoded as lowercase hexadecimal characters. 75 // The computation is an implementation detail of ResultDB. 76 VariantHash string `protobuf:"bytes,4,opt,name=variant_hash,json=variantHash,proto3" json:"variant_hash,omitempty"` 77 // Invocation is the ResultDB invocation. 78 // 79 // This the top-level invocation for the test results of the verdict; 80 // individual test results may not have been directly uploaded to 81 // this invocation, but rather its included invocations. For example, 82 // the top-level invocation may be a build, which includes multiple 83 // invocations for swarming tasks within that build. The test results 84 // that form part of this verdict may actually have been uploaded to 85 // the invocations of those swarming tasks. 86 Invocation *TestVerdictRow_InvocationRecord `protobuf:"bytes,5,opt,name=invocation,proto3" json:"invocation,omitempty"` 87 // Partition_time is used to partition the table. 88 // It is the time when exported invocation was created in Spanner. 89 // Note: it is NOT the time when the row is inserted into BigQuery table. 90 // https://cloud.google.com/bigquery/docs/creating-column-partitions#limitations 91 // mentions "The partitioning column must be a top-level field." 92 // So we keep this column here instead of adding the CreateTime to InvocationRecord. 93 PartitionTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=partition_time,json=partitionTime,proto3" json:"partition_time,omitempty"` 94 // Status of the test verdict. E.g. EXPECTED, UNEXPECTED, FLAKY, 95 // UNEXPECTEDLY_SKIPPED, EXONERATED. 96 Status v1.TestVerdictStatus `protobuf:"varint,7,opt,name=status,proto3,enum=luci.analysis.v1.TestVerdictStatus" json:"status,omitempty"` 97 // The test results that are part of the verdict. Usually there is 98 // only one test result per verdict, but in case of retries there 99 // may be more. 100 Results []*TestVerdictRow_TestResult `protobuf:"bytes,8,rep,name=results,proto3" json:"results,omitempty"` 101 // The exoneration(s) recorded against the verdict. 102 // 103 // To determine if a verdict has an exoneration at all in a query, 104 // use `ARRAY_LENGTH(exonerations) > 0`. 105 Exonerations []*TestVerdictRow_Exoneration `protobuf:"bytes,9,rep,name=exonerations,proto3" json:"exonerations,omitempty"` 106 // Statistics about the test results that are part of the verdict. 107 Counts *TestVerdictRow_Counts `protobuf:"bytes,10,opt,name=counts,proto3" json:"counts,omitempty"` 108 // The buildbucket build the results were collected as part of, if any. 109 BuildbucketBuild *TestVerdictRow_BuildbucketBuild `protobuf:"bytes,11,opt,name=buildbucket_build,json=buildbucketBuild,proto3" json:"buildbucket_build,omitempty"` 110 // The original presubmit run the results were collected as part of, if any. 111 ChangeVerifierRun *TestVerdictRow_ChangeVerifierRun `protobuf:"bytes,12,opt,name=change_verifier_run,json=changeVerifierRun,proto3" json:"change_verifier_run,omitempty"` 112 // The code sources tested. Obtained from one of the verdict's test results. 113 // If the invocation which contained the test result 114 // specified that code sources directly, this is those sources. 115 // If the code sources were marked as are inherited from the including 116 // invocation, this is the resolved code sources (if they could be resolved). 117 // Unset otherwise. 118 Sources *v1.Sources `protobuf:"bytes,13,opt,name=sources,proto3" json:"sources,omitempty"` 119 // The branch in source control that was tested, if known. 120 // For example, the `refs/heads/main` branch in the `chromium/src` repo 121 // hosted by `chromium.googlesource.com`. 122 // This is a subset of the information in the `sources` field. 123 SourceRef *v1.SourceRef `protobuf:"bytes,15,opt,name=source_ref,json=sourceRef,proto3" json:"source_ref,omitempty"` 124 // Hash of the source_ref field, as 16 lowercase hexadecimal characters. 125 // Can be used to uniquely identify a branch in a source code 126 // version control system. 127 SourceRefHash string `protobuf:"bytes,16,opt,name=source_ref_hash,json=sourceRefHash,proto3" json:"source_ref_hash,omitempty"` 128 // Metadata of the test case, 129 // e.g. the original test name and test location. 130 TestMetadata *v1.TestMetadata `protobuf:"bytes,14,opt,name=test_metadata,json=testMetadata,proto3" json:"test_metadata,omitempty"` 131 } 132 133 func (x *TestVerdictRow) Reset() { 134 *x = TestVerdictRow{} 135 if protoimpl.UnsafeEnabled { 136 mi := &file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[0] 137 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 138 ms.StoreMessageInfo(mi) 139 } 140 } 141 142 func (x *TestVerdictRow) String() string { 143 return protoimpl.X.MessageStringOf(x) 144 } 145 146 func (*TestVerdictRow) ProtoMessage() {} 147 148 func (x *TestVerdictRow) ProtoReflect() protoreflect.Message { 149 mi := &file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[0] 150 if protoimpl.UnsafeEnabled && x != nil { 151 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 152 if ms.LoadMessageInfo() == nil { 153 ms.StoreMessageInfo(mi) 154 } 155 return ms 156 } 157 return mi.MessageOf(x) 158 } 159 160 // Deprecated: Use TestVerdictRow.ProtoReflect.Descriptor instead. 161 func (*TestVerdictRow) Descriptor() ([]byte, []int) { 162 return file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_rawDescGZIP(), []int{0} 163 } 164 165 func (x *TestVerdictRow) GetProject() string { 166 if x != nil { 167 return x.Project 168 } 169 return "" 170 } 171 172 func (x *TestVerdictRow) GetTestId() string { 173 if x != nil { 174 return x.TestId 175 } 176 return "" 177 } 178 179 func (x *TestVerdictRow) GetVariant() string { 180 if x != nil { 181 return x.Variant 182 } 183 return "" 184 } 185 186 func (x *TestVerdictRow) GetVariantHash() string { 187 if x != nil { 188 return x.VariantHash 189 } 190 return "" 191 } 192 193 func (x *TestVerdictRow) GetInvocation() *TestVerdictRow_InvocationRecord { 194 if x != nil { 195 return x.Invocation 196 } 197 return nil 198 } 199 200 func (x *TestVerdictRow) GetPartitionTime() *timestamppb.Timestamp { 201 if x != nil { 202 return x.PartitionTime 203 } 204 return nil 205 } 206 207 func (x *TestVerdictRow) GetStatus() v1.TestVerdictStatus { 208 if x != nil { 209 return x.Status 210 } 211 return v1.TestVerdictStatus(0) 212 } 213 214 func (x *TestVerdictRow) GetResults() []*TestVerdictRow_TestResult { 215 if x != nil { 216 return x.Results 217 } 218 return nil 219 } 220 221 func (x *TestVerdictRow) GetExonerations() []*TestVerdictRow_Exoneration { 222 if x != nil { 223 return x.Exonerations 224 } 225 return nil 226 } 227 228 func (x *TestVerdictRow) GetCounts() *TestVerdictRow_Counts { 229 if x != nil { 230 return x.Counts 231 } 232 return nil 233 } 234 235 func (x *TestVerdictRow) GetBuildbucketBuild() *TestVerdictRow_BuildbucketBuild { 236 if x != nil { 237 return x.BuildbucketBuild 238 } 239 return nil 240 } 241 242 func (x *TestVerdictRow) GetChangeVerifierRun() *TestVerdictRow_ChangeVerifierRun { 243 if x != nil { 244 return x.ChangeVerifierRun 245 } 246 return nil 247 } 248 249 func (x *TestVerdictRow) GetSources() *v1.Sources { 250 if x != nil { 251 return x.Sources 252 } 253 return nil 254 } 255 256 func (x *TestVerdictRow) GetSourceRef() *v1.SourceRef { 257 if x != nil { 258 return x.SourceRef 259 } 260 return nil 261 } 262 263 func (x *TestVerdictRow) GetSourceRefHash() string { 264 if x != nil { 265 return x.SourceRefHash 266 } 267 return "" 268 } 269 270 func (x *TestVerdictRow) GetTestMetadata() *v1.TestMetadata { 271 if x != nil { 272 return x.TestMetadata 273 } 274 return nil 275 } 276 277 type TestVerdictRow_InvocationRecord struct { 278 state protoimpl.MessageState 279 sizeCache protoimpl.SizeCache 280 unknownFields protoimpl.UnknownFields 281 282 // The ID of the invocation. 283 Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` 284 // Tags represents Invocation-level string key-value pairs. 285 // A key can be repeated. 286 Tags []*v1.StringPair `protobuf:"bytes,2,rep,name=tags,proto3" json:"tags,omitempty"` 287 // The LUCI Realm the invocation exists under. 288 // For example, "chromium:try". 289 Realm string `protobuf:"bytes,3,opt,name=realm,proto3" json:"realm,omitempty"` 290 // Arbitrary JSON object that contains structured, domain-specific properties 291 // of the invocation. Stored here stringified as this is the only protocol 292 // buffer type that maps to the JSON BigQuery type: 293 // https://cloud.google.com/bigquery/docs/write-api#data_type_conversions 294 Properties string `protobuf:"bytes,4,opt,name=properties,proto3" json:"properties,omitempty"` 295 } 296 297 func (x *TestVerdictRow_InvocationRecord) Reset() { 298 *x = TestVerdictRow_InvocationRecord{} 299 if protoimpl.UnsafeEnabled { 300 mi := &file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[1] 301 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 302 ms.StoreMessageInfo(mi) 303 } 304 } 305 306 func (x *TestVerdictRow_InvocationRecord) String() string { 307 return protoimpl.X.MessageStringOf(x) 308 } 309 310 func (*TestVerdictRow_InvocationRecord) ProtoMessage() {} 311 312 func (x *TestVerdictRow_InvocationRecord) ProtoReflect() protoreflect.Message { 313 mi := &file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[1] 314 if protoimpl.UnsafeEnabled && x != nil { 315 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 316 if ms.LoadMessageInfo() == nil { 317 ms.StoreMessageInfo(mi) 318 } 319 return ms 320 } 321 return mi.MessageOf(x) 322 } 323 324 // Deprecated: Use TestVerdictRow_InvocationRecord.ProtoReflect.Descriptor instead. 325 func (*TestVerdictRow_InvocationRecord) Descriptor() ([]byte, []int) { 326 return file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_rawDescGZIP(), []int{0, 0} 327 } 328 329 func (x *TestVerdictRow_InvocationRecord) GetId() string { 330 if x != nil { 331 return x.Id 332 } 333 return "" 334 } 335 336 func (x *TestVerdictRow_InvocationRecord) GetTags() []*v1.StringPair { 337 if x != nil { 338 return x.Tags 339 } 340 return nil 341 } 342 343 func (x *TestVerdictRow_InvocationRecord) GetRealm() string { 344 if x != nil { 345 return x.Realm 346 } 347 return "" 348 } 349 350 func (x *TestVerdictRow_InvocationRecord) GetProperties() string { 351 if x != nil { 352 return x.Properties 353 } 354 return "" 355 } 356 357 // ParentInvocationRecord for a test result is the immediate parent invocation 358 // that directly contains the test result. 359 type TestVerdictRow_ParentInvocationRecord struct { 360 state protoimpl.MessageState 361 sizeCache protoimpl.SizeCache 362 unknownFields protoimpl.UnknownFields 363 364 // The ID of the invocation. 365 Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` 366 } 367 368 func (x *TestVerdictRow_ParentInvocationRecord) Reset() { 369 *x = TestVerdictRow_ParentInvocationRecord{} 370 if protoimpl.UnsafeEnabled { 371 mi := &file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[2] 372 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 373 ms.StoreMessageInfo(mi) 374 } 375 } 376 377 func (x *TestVerdictRow_ParentInvocationRecord) String() string { 378 return protoimpl.X.MessageStringOf(x) 379 } 380 381 func (*TestVerdictRow_ParentInvocationRecord) ProtoMessage() {} 382 383 func (x *TestVerdictRow_ParentInvocationRecord) ProtoReflect() protoreflect.Message { 384 mi := &file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[2] 385 if protoimpl.UnsafeEnabled && x != nil { 386 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 387 if ms.LoadMessageInfo() == nil { 388 ms.StoreMessageInfo(mi) 389 } 390 return ms 391 } 392 return mi.MessageOf(x) 393 } 394 395 // Deprecated: Use TestVerdictRow_ParentInvocationRecord.ProtoReflect.Descriptor instead. 396 func (*TestVerdictRow_ParentInvocationRecord) Descriptor() ([]byte, []int) { 397 return file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_rawDescGZIP(), []int{0, 1} 398 } 399 400 func (x *TestVerdictRow_ParentInvocationRecord) GetId() string { 401 if x != nil { 402 return x.Id 403 } 404 return "" 405 } 406 407 // NextId: 13 408 type TestVerdictRow_TestResult struct { 409 state protoimpl.MessageState 410 sizeCache protoimpl.SizeCache 411 unknownFields protoimpl.UnknownFields 412 413 // Parent contains info of the result's immediate parent invocation. 414 Parent *TestVerdictRow_ParentInvocationRecord `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` 415 // The global identifier of a test result in ResultDB. 416 // Format: 417 // "invocations/{INVOCATION_ID}/tests/{URL_ESCAPED_TEST_ID}/results/{RESULT_ID}". 418 Name string `protobuf:"bytes,11,opt,name=name,proto3" json:"name,omitempty"` 419 // Identifies a test result in a given invocation and test id. 420 ResultId string `protobuf:"bytes,2,opt,name=result_id,json=resultId,proto3" json:"result_id,omitempty"` 421 // Expected is a flag indicating whether the result of test case execution is 422 // expected. Refer to TestResult.Expected for details. 423 Expected bool `protobuf:"varint,3,opt,name=expected,proto3" json:"expected,omitempty"` 424 // Status of the test result. 425 Status v1.TestResultStatus `protobuf:"varint,4,opt,name=status,proto3,enum=luci.analysis.v1.TestResultStatus" json:"status,omitempty"` 426 // A human-readable explanation of the result, in HTML. 427 // MUST be sanitized before rendering in the browser. 428 SummaryHtml string `protobuf:"bytes,5,opt,name=summary_html,json=summaryHtml,proto3" json:"summary_html,omitempty"` 429 // The point in time when the test case started to execute. 430 StartTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` 431 // Duration of the test case execution in seconds. 432 Duration float64 `protobuf:"fixed64,7,opt,name=duration,proto3" json:"duration,omitempty"` 433 // Tags contains metadata for this test result. 434 // It might describe this particular execution or the test case. 435 Tags []*v1.StringPair `protobuf:"bytes,8,rep,name=tags,proto3" json:"tags,omitempty"` 436 // Information about failed tests. 437 // e.g. the assertion failure message. 438 FailureReason *v1.FailureReason `protobuf:"bytes,9,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` 439 // Reasoning behind a test skip, in machine-readable form. 440 // Only set when status is SKIP. 441 // It's the string presentation of luci.analysis.v1.SkipReason when 442 // specified, "" when the skip reason is unspecified. 443 SkipReason string `protobuf:"bytes,12,opt,name=skip_reason,json=skipReason,proto3" json:"skip_reason,omitempty"` 444 // Arbitrary JSON object that contains structured, domain-specific properties 445 // of the test result. Stored here stringified as this is the only protocol 446 // buffer type that maps to the JSON BigQuery type: 447 // https://cloud.google.com/bigquery/docs/write-api#data_type_conversions 448 Properties string `protobuf:"bytes,10,opt,name=properties,proto3" json:"properties,omitempty"` 449 } 450 451 func (x *TestVerdictRow_TestResult) Reset() { 452 *x = TestVerdictRow_TestResult{} 453 if protoimpl.UnsafeEnabled { 454 mi := &file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[3] 455 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 456 ms.StoreMessageInfo(mi) 457 } 458 } 459 460 func (x *TestVerdictRow_TestResult) String() string { 461 return protoimpl.X.MessageStringOf(x) 462 } 463 464 func (*TestVerdictRow_TestResult) ProtoMessage() {} 465 466 func (x *TestVerdictRow_TestResult) ProtoReflect() protoreflect.Message { 467 mi := &file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[3] 468 if protoimpl.UnsafeEnabled && x != nil { 469 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 470 if ms.LoadMessageInfo() == nil { 471 ms.StoreMessageInfo(mi) 472 } 473 return ms 474 } 475 return mi.MessageOf(x) 476 } 477 478 // Deprecated: Use TestVerdictRow_TestResult.ProtoReflect.Descriptor instead. 479 func (*TestVerdictRow_TestResult) Descriptor() ([]byte, []int) { 480 return file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_rawDescGZIP(), []int{0, 2} 481 } 482 483 func (x *TestVerdictRow_TestResult) GetParent() *TestVerdictRow_ParentInvocationRecord { 484 if x != nil { 485 return x.Parent 486 } 487 return nil 488 } 489 490 func (x *TestVerdictRow_TestResult) GetName() string { 491 if x != nil { 492 return x.Name 493 } 494 return "" 495 } 496 497 func (x *TestVerdictRow_TestResult) GetResultId() string { 498 if x != nil { 499 return x.ResultId 500 } 501 return "" 502 } 503 504 func (x *TestVerdictRow_TestResult) GetExpected() bool { 505 if x != nil { 506 return x.Expected 507 } 508 return false 509 } 510 511 func (x *TestVerdictRow_TestResult) GetStatus() v1.TestResultStatus { 512 if x != nil { 513 return x.Status 514 } 515 return v1.TestResultStatus(0) 516 } 517 518 func (x *TestVerdictRow_TestResult) GetSummaryHtml() string { 519 if x != nil { 520 return x.SummaryHtml 521 } 522 return "" 523 } 524 525 func (x *TestVerdictRow_TestResult) GetStartTime() *timestamppb.Timestamp { 526 if x != nil { 527 return x.StartTime 528 } 529 return nil 530 } 531 532 func (x *TestVerdictRow_TestResult) GetDuration() float64 { 533 if x != nil { 534 return x.Duration 535 } 536 return 0 537 } 538 539 func (x *TestVerdictRow_TestResult) GetTags() []*v1.StringPair { 540 if x != nil { 541 return x.Tags 542 } 543 return nil 544 } 545 546 func (x *TestVerdictRow_TestResult) GetFailureReason() *v1.FailureReason { 547 if x != nil { 548 return x.FailureReason 549 } 550 return nil 551 } 552 553 func (x *TestVerdictRow_TestResult) GetSkipReason() string { 554 if x != nil { 555 return x.SkipReason 556 } 557 return "" 558 } 559 560 func (x *TestVerdictRow_TestResult) GetProperties() string { 561 if x != nil { 562 return x.Properties 563 } 564 return "" 565 } 566 567 type TestVerdictRow_Exoneration struct { 568 state protoimpl.MessageState 569 sizeCache protoimpl.SizeCache 570 unknownFields protoimpl.UnknownFields 571 572 // Reasoning behind exoneration, in HTML. 573 // MUST be sanitized before rendering in the browser. 574 ExplanationHtml string `protobuf:"bytes,1,opt,name=explanation_html,json=explanationHtml,proto3" json:"explanation_html,omitempty"` 575 // Reasoning behind the exoneration, in machine-readable form. 576 Reason v1.ExonerationReason `protobuf:"varint,2,opt,name=reason,proto3,enum=luci.analysis.v1.ExonerationReason" json:"reason,omitempty"` 577 } 578 579 func (x *TestVerdictRow_Exoneration) Reset() { 580 *x = TestVerdictRow_Exoneration{} 581 if protoimpl.UnsafeEnabled { 582 mi := &file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[4] 583 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 584 ms.StoreMessageInfo(mi) 585 } 586 } 587 588 func (x *TestVerdictRow_Exoneration) String() string { 589 return protoimpl.X.MessageStringOf(x) 590 } 591 592 func (*TestVerdictRow_Exoneration) ProtoMessage() {} 593 594 func (x *TestVerdictRow_Exoneration) ProtoReflect() protoreflect.Message { 595 mi := &file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[4] 596 if protoimpl.UnsafeEnabled && x != nil { 597 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 598 if ms.LoadMessageInfo() == nil { 599 ms.StoreMessageInfo(mi) 600 } 601 return ms 602 } 603 return mi.MessageOf(x) 604 } 605 606 // Deprecated: Use TestVerdictRow_Exoneration.ProtoReflect.Descriptor instead. 607 func (*TestVerdictRow_Exoneration) Descriptor() ([]byte, []int) { 608 return file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_rawDescGZIP(), []int{0, 3} 609 } 610 611 func (x *TestVerdictRow_Exoneration) GetExplanationHtml() string { 612 if x != nil { 613 return x.ExplanationHtml 614 } 615 return "" 616 } 617 618 func (x *TestVerdictRow_Exoneration) GetReason() v1.ExonerationReason { 619 if x != nil { 620 return x.Reason 621 } 622 return v1.ExonerationReason(0) 623 } 624 625 type TestVerdictRow_Counts struct { 626 state protoimpl.MessageState 627 sizeCache protoimpl.SizeCache 628 unknownFields protoimpl.UnknownFields 629 630 // The total number of unexpected test results in the verdict. 631 Unexpected int64 `protobuf:"varint,1,opt,name=unexpected,proto3" json:"unexpected,omitempty"` 632 // The total number of test results in the verdict. 633 Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` 634 // The total number of unexpected test results in the verdict 635 // that are not skips. 636 UnexpectedNonSkipped int64 `protobuf:"varint,3,opt,name=unexpected_non_skipped,json=unexpectedNonSkipped,proto3" json:"unexpected_non_skipped,omitempty"` 637 // The total number of unexpected test results in the verdict 638 // that are not skips and not passes. 639 UnexpectedNonSkippedNonPassed int64 `protobuf:"varint,4,opt,name=unexpected_non_skipped_non_passed,json=unexpectedNonSkippedNonPassed,proto3" json:"unexpected_non_skipped_non_passed,omitempty"` 640 // The total number of test results in the verdict that 641 // are not skips. 642 TotalNonSkipped int64 `protobuf:"varint,5,opt,name=total_non_skipped,json=totalNonSkipped,proto3" json:"total_non_skipped,omitempty"` 643 } 644 645 func (x *TestVerdictRow_Counts) Reset() { 646 *x = TestVerdictRow_Counts{} 647 if protoimpl.UnsafeEnabled { 648 mi := &file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[5] 649 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 650 ms.StoreMessageInfo(mi) 651 } 652 } 653 654 func (x *TestVerdictRow_Counts) String() string { 655 return protoimpl.X.MessageStringOf(x) 656 } 657 658 func (*TestVerdictRow_Counts) ProtoMessage() {} 659 660 func (x *TestVerdictRow_Counts) ProtoReflect() protoreflect.Message { 661 mi := &file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[5] 662 if protoimpl.UnsafeEnabled && x != nil { 663 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 664 if ms.LoadMessageInfo() == nil { 665 ms.StoreMessageInfo(mi) 666 } 667 return ms 668 } 669 return mi.MessageOf(x) 670 } 671 672 // Deprecated: Use TestVerdictRow_Counts.ProtoReflect.Descriptor instead. 673 func (*TestVerdictRow_Counts) Descriptor() ([]byte, []int) { 674 return file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_rawDescGZIP(), []int{0, 4} 675 } 676 677 func (x *TestVerdictRow_Counts) GetUnexpected() int64 { 678 if x != nil { 679 return x.Unexpected 680 } 681 return 0 682 } 683 684 func (x *TestVerdictRow_Counts) GetTotal() int64 { 685 if x != nil { 686 return x.Total 687 } 688 return 0 689 } 690 691 func (x *TestVerdictRow_Counts) GetUnexpectedNonSkipped() int64 { 692 if x != nil { 693 return x.UnexpectedNonSkipped 694 } 695 return 0 696 } 697 698 func (x *TestVerdictRow_Counts) GetUnexpectedNonSkippedNonPassed() int64 { 699 if x != nil { 700 return x.UnexpectedNonSkippedNonPassed 701 } 702 return 0 703 } 704 705 func (x *TestVerdictRow_Counts) GetTotalNonSkipped() int64 { 706 if x != nil { 707 return x.TotalNonSkipped 708 } 709 return 0 710 } 711 712 // Information about the buildbucket build which contained the test result. 713 type TestVerdictRow_BuildbucketBuild struct { 714 state protoimpl.MessageState 715 sizeCache protoimpl.SizeCache 716 unknownFields protoimpl.UnknownFields 717 718 // The identifier of the buildbucket build. 719 Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` 720 // The builder the build belongs to. 721 Builder *TestVerdictRow_BuildbucketBuild_Builder `protobuf:"bytes,2,opt,name=builder,proto3" json:"builder,omitempty"` 722 // The status of the build that contained this test result. Can be used 723 // to filter incomplete results (e.g. where build was cancelled or had 724 // an infra failure). Can also be used to filter builds with incomplete 725 // exonerations (e.g. build succeeded but some tests not exonerated). 726 // 727 // Notionally luci.analysis.v1.BuildStatus, but string so that we can chop 728 // off the BUILD_STATUS_ prefix that would otherwise appear on every value. 729 Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` 730 // The gardener rotations which monitor this build. 731 GardenerRotations []string `protobuf:"bytes,4,rep,name=gardener_rotations,json=gardenerRotations,proto3" json:"gardener_rotations,omitempty"` 732 } 733 734 func (x *TestVerdictRow_BuildbucketBuild) Reset() { 735 *x = TestVerdictRow_BuildbucketBuild{} 736 if protoimpl.UnsafeEnabled { 737 mi := &file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[6] 738 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 739 ms.StoreMessageInfo(mi) 740 } 741 } 742 743 func (x *TestVerdictRow_BuildbucketBuild) String() string { 744 return protoimpl.X.MessageStringOf(x) 745 } 746 747 func (*TestVerdictRow_BuildbucketBuild) ProtoMessage() {} 748 749 func (x *TestVerdictRow_BuildbucketBuild) ProtoReflect() protoreflect.Message { 750 mi := &file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[6] 751 if protoimpl.UnsafeEnabled && x != nil { 752 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 753 if ms.LoadMessageInfo() == nil { 754 ms.StoreMessageInfo(mi) 755 } 756 return ms 757 } 758 return mi.MessageOf(x) 759 } 760 761 // Deprecated: Use TestVerdictRow_BuildbucketBuild.ProtoReflect.Descriptor instead. 762 func (*TestVerdictRow_BuildbucketBuild) Descriptor() ([]byte, []int) { 763 return file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_rawDescGZIP(), []int{0, 5} 764 } 765 766 func (x *TestVerdictRow_BuildbucketBuild) GetId() int64 { 767 if x != nil { 768 return x.Id 769 } 770 return 0 771 } 772 773 func (x *TestVerdictRow_BuildbucketBuild) GetBuilder() *TestVerdictRow_BuildbucketBuild_Builder { 774 if x != nil { 775 return x.Builder 776 } 777 return nil 778 } 779 780 func (x *TestVerdictRow_BuildbucketBuild) GetStatus() string { 781 if x != nil { 782 return x.Status 783 } 784 return "" 785 } 786 787 func (x *TestVerdictRow_BuildbucketBuild) GetGardenerRotations() []string { 788 if x != nil { 789 return x.GardenerRotations 790 } 791 return nil 792 } 793 794 // Information about the LUCI Change Verifier run which the test result 795 // was a part of, if any. 796 type TestVerdictRow_ChangeVerifierRun struct { 797 state protoimpl.MessageState 798 sizeCache protoimpl.SizeCache 799 unknownFields protoimpl.UnknownFields 800 801 // Identity of the change verifier run that contains this test result. 802 // This should be unique per "CQ+1"/"CQ+2" attempt on gerrit. 803 // 804 // All test results for the same presubmit run will have one 805 // partition_time. 806 // 807 // The format of this value is: 808 // "{LUCI_PROJECT}/{LUCI_CV_ID}", e.g. 809 // "infra/8988819463854-1-f94732fe20056fd1". 810 Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` 811 // The mode of the presubmit run (if any). 812 // E.g. DRY_RUN, FULL_RUN, QUICK_DRY_RUN. 813 Mode v1.PresubmitRunMode `protobuf:"varint,2,opt,name=mode,proto3,enum=luci.analysis.v1.PresubmitRunMode" json:"mode,omitempty"` 814 // The presubmit run's ending status. 815 // Notionally luci.analysis.v1.PresubmitRunStatus, but string so that 816 // we can chop off the "PRESUBMIT_RUN_STATUS_" prefix and have 817 // only the status, e.g. SUCCEEDED, FAILED, CANCELED. 818 Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` 819 // Whether the build indicated by buildbucket_build was 820 // critical to the presubmit run succeeding. This is 821 // false for experimental tryjobs. 822 IsBuildCritical bool `protobuf:"varint,4,opt,name=is_build_critical,json=isBuildCritical,proto3" json:"is_build_critical,omitempty"` 823 } 824 825 func (x *TestVerdictRow_ChangeVerifierRun) Reset() { 826 *x = TestVerdictRow_ChangeVerifierRun{} 827 if protoimpl.UnsafeEnabled { 828 mi := &file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[7] 829 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 830 ms.StoreMessageInfo(mi) 831 } 832 } 833 834 func (x *TestVerdictRow_ChangeVerifierRun) String() string { 835 return protoimpl.X.MessageStringOf(x) 836 } 837 838 func (*TestVerdictRow_ChangeVerifierRun) ProtoMessage() {} 839 840 func (x *TestVerdictRow_ChangeVerifierRun) ProtoReflect() protoreflect.Message { 841 mi := &file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[7] 842 if protoimpl.UnsafeEnabled && x != nil { 843 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 844 if ms.LoadMessageInfo() == nil { 845 ms.StoreMessageInfo(mi) 846 } 847 return ms 848 } 849 return mi.MessageOf(x) 850 } 851 852 // Deprecated: Use TestVerdictRow_ChangeVerifierRun.ProtoReflect.Descriptor instead. 853 func (*TestVerdictRow_ChangeVerifierRun) Descriptor() ([]byte, []int) { 854 return file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_rawDescGZIP(), []int{0, 6} 855 } 856 857 func (x *TestVerdictRow_ChangeVerifierRun) GetId() string { 858 if x != nil { 859 return x.Id 860 } 861 return "" 862 } 863 864 func (x *TestVerdictRow_ChangeVerifierRun) GetMode() v1.PresubmitRunMode { 865 if x != nil { 866 return x.Mode 867 } 868 return v1.PresubmitRunMode(0) 869 } 870 871 func (x *TestVerdictRow_ChangeVerifierRun) GetStatus() string { 872 if x != nil { 873 return x.Status 874 } 875 return "" 876 } 877 878 func (x *TestVerdictRow_ChangeVerifierRun) GetIsBuildCritical() bool { 879 if x != nil { 880 return x.IsBuildCritical 881 } 882 return false 883 } 884 885 type TestVerdictRow_BuildbucketBuild_Builder struct { 886 state protoimpl.MessageState 887 sizeCache protoimpl.SizeCache 888 unknownFields protoimpl.UnknownFields 889 890 // The LUCI Project ID. 891 Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` 892 // The build bucket, e.g. "try". Unique within project. 893 Bucket string `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"` 894 // The builder name, e.g. "linux-rel". Unique within bucket. 895 Builder string `protobuf:"bytes,3,opt,name=builder,proto3" json:"builder,omitempty"` 896 } 897 898 func (x *TestVerdictRow_BuildbucketBuild_Builder) Reset() { 899 *x = TestVerdictRow_BuildbucketBuild_Builder{} 900 if protoimpl.UnsafeEnabled { 901 mi := &file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[8] 902 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 903 ms.StoreMessageInfo(mi) 904 } 905 } 906 907 func (x *TestVerdictRow_BuildbucketBuild_Builder) String() string { 908 return protoimpl.X.MessageStringOf(x) 909 } 910 911 func (*TestVerdictRow_BuildbucketBuild_Builder) ProtoMessage() {} 912 913 func (x *TestVerdictRow_BuildbucketBuild_Builder) ProtoReflect() protoreflect.Message { 914 mi := &file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[8] 915 if protoimpl.UnsafeEnabled && x != nil { 916 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 917 if ms.LoadMessageInfo() == nil { 918 ms.StoreMessageInfo(mi) 919 } 920 return ms 921 } 922 return mi.MessageOf(x) 923 } 924 925 // Deprecated: Use TestVerdictRow_BuildbucketBuild_Builder.ProtoReflect.Descriptor instead. 926 func (*TestVerdictRow_BuildbucketBuild_Builder) Descriptor() ([]byte, []int) { 927 return file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_rawDescGZIP(), []int{0, 5, 0} 928 } 929 930 func (x *TestVerdictRow_BuildbucketBuild_Builder) GetProject() string { 931 if x != nil { 932 return x.Project 933 } 934 return "" 935 } 936 937 func (x *TestVerdictRow_BuildbucketBuild_Builder) GetBucket() string { 938 if x != nil { 939 return x.Bucket 940 } 941 return "" 942 } 943 944 func (x *TestVerdictRow_BuildbucketBuild_Builder) GetBuilder() string { 945 if x != nil { 946 return x.Builder 947 } 948 return "" 949 } 950 951 var File_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto protoreflect.FileDescriptor 952 953 var file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_rawDesc = []byte{ 954 0x0a, 0x3d, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 955 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 956 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62, 0x71, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 957 0x72, 0x64, 0x69, 0x63, 0x74, 0x5f, 0x72, 0x6f, 0x77, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 958 0x10, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x62, 959 0x71, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 960 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 961 0x74, 0x6f, 0x1a, 0x33, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 962 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 963 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 964 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3b, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 965 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 966 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 967 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x2e, 0x70, 968 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 969 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 970 0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x6f, 0x75, 971 0x72, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x67, 0x6f, 0x2e, 0x63, 972 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 973 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 974 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 975 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x39, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 976 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 977 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x74, 978 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 979 0x6f, 0x1a, 0x2f, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 980 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x62, 981 0x71, 0x2f, 0x70, 0x62, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 982 0x74, 0x6f, 0x22, 0xe6, 0x13, 0x0a, 0x0e, 0x54, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x64, 0x69, 983 0x63, 0x74, 0x52, 0x6f, 0x77, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 984 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 985 0x17, 0x0a, 0x07, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 986 0x52, 0x06, 0x74, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x07, 0x76, 0x61, 0x72, 0x69, 987 0x61, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xe2, 0xbc, 0x24, 0x06, 0x0a, 988 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x52, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x12, 0x21, 989 0x0a, 0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, 990 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x48, 0x61, 0x73, 991 0x68, 0x12, 0x51, 0x0a, 0x0a, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 992 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 993 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x62, 0x71, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 994 0x64, 0x69, 0x63, 0x74, 0x52, 0x6f, 0x77, 0x2e, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 995 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0a, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, 996 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 997 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 998 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 999 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 1000 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 1001 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 1002 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x56, 1003 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 1004 0x61, 0x74, 0x75, 0x73, 0x12, 0x45, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 1005 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 1006 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x62, 0x71, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 1007 0x64, 0x69, 0x63, 0x74, 0x52, 0x6f, 0x77, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 1008 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x50, 0x0a, 0x0c, 0x65, 1009 0x78, 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 1010 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 1011 0x73, 0x2e, 0x62, 0x71, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 1012 0x52, 0x6f, 0x77, 0x2e, 0x45, 0x78, 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 1013 0x0c, 0x65, 0x78, 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3f, 0x0a, 1014 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 1015 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x62, 0x71, 1016 0x2e, 0x54, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x52, 0x6f, 0x77, 0x2e, 1017 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x5e, 1018 0x0a, 0x11, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x62, 0x75, 1019 0x69, 0x6c, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6c, 0x75, 0x63, 0x69, 1020 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x62, 0x71, 0x2e, 0x54, 0x65, 0x73, 1021 0x74, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x52, 0x6f, 0x77, 0x2e, 0x42, 0x75, 0x69, 0x6c, 1022 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x10, 0x62, 0x75, 1023 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x62, 1024 0x0a, 0x13, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 1025 0x72, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6c, 0x75, 1026 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x62, 0x71, 0x2e, 0x54, 1027 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x52, 0x6f, 0x77, 0x2e, 0x43, 0x68, 1028 0x61, 0x6e, 0x67, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x52, 1029 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 1030 0x75, 0x6e, 0x12, 0x33, 0x0a, 0x07, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x0d, 0x20, 1031 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 1032 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x07, 1033 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 1034 0x65, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 1035 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 1036 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x52, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 1037 0x52, 0x65, 0x66, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 1038 0x66, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x6f, 1039 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x48, 0x61, 0x73, 0x68, 0x12, 0x43, 0x0a, 0x0d, 0x74, 1040 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0e, 0x20, 0x01, 1041 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 1042 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 1043 0x74, 0x61, 0x52, 0x0c, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 1044 0x1a, 0x96, 0x01, 0x0a, 0x10, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 1045 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 1046 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 1047 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 1048 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 1049 0x72, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x6c, 0x6d, 1050 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x65, 0x61, 0x6c, 0x6d, 0x12, 0x2a, 0x0a, 1051 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 1052 0x09, 0x42, 0x0a, 0xe2, 0xbc, 0x24, 0x06, 0x0a, 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x52, 0x0a, 0x70, 1053 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x28, 0x0a, 0x16, 0x50, 0x61, 0x72, 1054 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 1055 0x6f, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 1056 0x02, 0x69, 0x64, 0x1a, 0xa7, 0x04, 0x0a, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 1057 0x6c, 0x74, 0x12, 0x4f, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 1058 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 1059 0x69, 0x73, 0x2e, 0x62, 0x71, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 1060 0x74, 0x52, 0x6f, 0x77, 0x2e, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x76, 0x6f, 0x63, 1061 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x06, 0x70, 0x61, 0x72, 1062 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 1063 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x75, 0x6c, 1064 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75, 1065 0x6c, 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 1066 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 1067 0x12, 0x3a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 1068 0x32, 0x22, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 1069 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53, 0x74, 1070 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0c, 1071 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x68, 0x74, 0x6d, 0x6c, 0x18, 0x05, 0x20, 0x01, 1072 0x28, 0x09, 0x52, 0x0b, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x48, 0x74, 0x6d, 0x6c, 0x12, 1073 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 1074 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 1075 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 1076 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x75, 1077 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x64, 0x75, 1078 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x08, 1079 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 1080 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x61, 1081 0x69, 0x72, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x46, 0x0a, 0x0e, 0x66, 0x61, 0x69, 0x6c, 1082 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 1083 0x32, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 1084 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 1085 0x6e, 0x52, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 1086 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 1087 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6b, 0x69, 0x70, 0x52, 0x65, 0x61, 0x73, 0x6f, 1088 0x6e, 0x12, 0x2a, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 1089 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xe2, 0xbc, 0x24, 0x06, 0x0a, 0x04, 0x4a, 0x53, 0x4f, 1090 0x4e, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x75, 0x0a, 1091 0x0b, 0x45, 0x78, 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, 1092 0x65, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x74, 0x6d, 0x6c, 1093 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 1094 0x69, 0x6f, 0x6e, 0x48, 0x74, 0x6d, 0x6c, 0x12, 0x3b, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 1095 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 1096 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x6f, 0x6e, 0x65, 1097 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 1098 0x61, 0x73, 0x6f, 0x6e, 0x1a, 0xea, 0x01, 0x0a, 0x06, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 1099 0x1e, 0x0a, 0x0a, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 1100 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 1101 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 1102 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x34, 0x0a, 0x16, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 1103 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x18, 1104 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 1105 0x64, 0x4e, 0x6f, 0x6e, 0x53, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x21, 0x75, 1106 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x6b, 1107 0x69, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 1108 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1d, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 1109 0x65, 0x64, 0x4e, 0x6f, 0x6e, 0x53, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x6f, 0x6e, 0x50, 1110 0x61, 0x73, 0x73, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6e, 1111 0x6f, 0x6e, 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 1112 0x52, 0x0f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4e, 0x6f, 0x6e, 0x53, 0x6b, 0x69, 0x70, 0x70, 0x65, 1113 0x64, 0x1a, 0x95, 0x02, 0x0a, 0x10, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 1114 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 1115 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x53, 0x0a, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 1116 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 1117 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x62, 0x71, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x56, 1118 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x52, 0x6f, 0x77, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x62, 1119 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 1120 0x65, 0x72, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, 1121 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 1122 0x74, 0x75, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x67, 0x61, 0x72, 0x64, 0x65, 0x6e, 0x65, 0x72, 0x5f, 1123 0x72, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 1124 0x11, 0x67, 0x61, 0x72, 0x64, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 1125 0x6e, 0x73, 0x1a, 0x55, 0x0a, 0x07, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x18, 0x0a, 1126 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 1127 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 1128 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 1129 0x18, 0x0a, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 1130 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x1a, 0x9f, 0x01, 0x0a, 0x11, 0x43, 0x68, 1131 0x61, 0x6e, 0x67, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x12, 1132 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 1133 0x36, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 1134 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 1135 0x2e, 0x50, 0x72, 0x65, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, 0x75, 0x6e, 0x4d, 0x6f, 0x64, 1136 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 1137 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 1138 0x2a, 0x0a, 0x11, 0x69, 0x73, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x72, 0x69, 0x74, 1139 0x69, 0x63, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, 0x73, 0x42, 0x75, 1140 0x69, 0x6c, 0x64, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x2d, 0x5a, 0x2b, 0x67, 1141 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 1142 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 1143 0x74, 0x6f, 0x2f, 0x62, 0x71, 0x3b, 0x62, 0x71, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 1144 0x6f, 0x33, 1145 } 1146 1147 var ( 1148 file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_rawDescOnce sync.Once 1149 file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_rawDescData = file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_rawDesc 1150 ) 1151 1152 func file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_rawDescGZIP() []byte { 1153 file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_rawDescOnce.Do(func() { 1154 file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_rawDescData = protoimpl.X.CompressGZIP(file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_rawDescData) 1155 }) 1156 return file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_rawDescData 1157 } 1158 1159 var file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes = make([]protoimpl.MessageInfo, 9) 1160 var file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_goTypes = []interface{}{ 1161 (*TestVerdictRow)(nil), // 0: luci.analysis.bq.TestVerdictRow 1162 (*TestVerdictRow_InvocationRecord)(nil), // 1: luci.analysis.bq.TestVerdictRow.InvocationRecord 1163 (*TestVerdictRow_ParentInvocationRecord)(nil), // 2: luci.analysis.bq.TestVerdictRow.ParentInvocationRecord 1164 (*TestVerdictRow_TestResult)(nil), // 3: luci.analysis.bq.TestVerdictRow.TestResult 1165 (*TestVerdictRow_Exoneration)(nil), // 4: luci.analysis.bq.TestVerdictRow.Exoneration 1166 (*TestVerdictRow_Counts)(nil), // 5: luci.analysis.bq.TestVerdictRow.Counts 1167 (*TestVerdictRow_BuildbucketBuild)(nil), // 6: luci.analysis.bq.TestVerdictRow.BuildbucketBuild 1168 (*TestVerdictRow_ChangeVerifierRun)(nil), // 7: luci.analysis.bq.TestVerdictRow.ChangeVerifierRun 1169 (*TestVerdictRow_BuildbucketBuild_Builder)(nil), // 8: luci.analysis.bq.TestVerdictRow.BuildbucketBuild.Builder 1170 (*timestamppb.Timestamp)(nil), // 9: google.protobuf.Timestamp 1171 (v1.TestVerdictStatus)(0), // 10: luci.analysis.v1.TestVerdictStatus 1172 (*v1.Sources)(nil), // 11: luci.analysis.v1.Sources 1173 (*v1.SourceRef)(nil), // 12: luci.analysis.v1.SourceRef 1174 (*v1.TestMetadata)(nil), // 13: luci.analysis.v1.TestMetadata 1175 (*v1.StringPair)(nil), // 14: luci.analysis.v1.StringPair 1176 (v1.TestResultStatus)(0), // 15: luci.analysis.v1.TestResultStatus 1177 (*v1.FailureReason)(nil), // 16: luci.analysis.v1.FailureReason 1178 (v1.ExonerationReason)(0), // 17: luci.analysis.v1.ExonerationReason 1179 (v1.PresubmitRunMode)(0), // 18: luci.analysis.v1.PresubmitRunMode 1180 } 1181 var file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_depIdxs = []int32{ 1182 1, // 0: luci.analysis.bq.TestVerdictRow.invocation:type_name -> luci.analysis.bq.TestVerdictRow.InvocationRecord 1183 9, // 1: luci.analysis.bq.TestVerdictRow.partition_time:type_name -> google.protobuf.Timestamp 1184 10, // 2: luci.analysis.bq.TestVerdictRow.status:type_name -> luci.analysis.v1.TestVerdictStatus 1185 3, // 3: luci.analysis.bq.TestVerdictRow.results:type_name -> luci.analysis.bq.TestVerdictRow.TestResult 1186 4, // 4: luci.analysis.bq.TestVerdictRow.exonerations:type_name -> luci.analysis.bq.TestVerdictRow.Exoneration 1187 5, // 5: luci.analysis.bq.TestVerdictRow.counts:type_name -> luci.analysis.bq.TestVerdictRow.Counts 1188 6, // 6: luci.analysis.bq.TestVerdictRow.buildbucket_build:type_name -> luci.analysis.bq.TestVerdictRow.BuildbucketBuild 1189 7, // 7: luci.analysis.bq.TestVerdictRow.change_verifier_run:type_name -> luci.analysis.bq.TestVerdictRow.ChangeVerifierRun 1190 11, // 8: luci.analysis.bq.TestVerdictRow.sources:type_name -> luci.analysis.v1.Sources 1191 12, // 9: luci.analysis.bq.TestVerdictRow.source_ref:type_name -> luci.analysis.v1.SourceRef 1192 13, // 10: luci.analysis.bq.TestVerdictRow.test_metadata:type_name -> luci.analysis.v1.TestMetadata 1193 14, // 11: luci.analysis.bq.TestVerdictRow.InvocationRecord.tags:type_name -> luci.analysis.v1.StringPair 1194 2, // 12: luci.analysis.bq.TestVerdictRow.TestResult.parent:type_name -> luci.analysis.bq.TestVerdictRow.ParentInvocationRecord 1195 15, // 13: luci.analysis.bq.TestVerdictRow.TestResult.status:type_name -> luci.analysis.v1.TestResultStatus 1196 9, // 14: luci.analysis.bq.TestVerdictRow.TestResult.start_time:type_name -> google.protobuf.Timestamp 1197 14, // 15: luci.analysis.bq.TestVerdictRow.TestResult.tags:type_name -> luci.analysis.v1.StringPair 1198 16, // 16: luci.analysis.bq.TestVerdictRow.TestResult.failure_reason:type_name -> luci.analysis.v1.FailureReason 1199 17, // 17: luci.analysis.bq.TestVerdictRow.Exoneration.reason:type_name -> luci.analysis.v1.ExonerationReason 1200 8, // 18: luci.analysis.bq.TestVerdictRow.BuildbucketBuild.builder:type_name -> luci.analysis.bq.TestVerdictRow.BuildbucketBuild.Builder 1201 18, // 19: luci.analysis.bq.TestVerdictRow.ChangeVerifierRun.mode:type_name -> luci.analysis.v1.PresubmitRunMode 1202 20, // [20:20] is the sub-list for method output_type 1203 20, // [20:20] is the sub-list for method input_type 1204 20, // [20:20] is the sub-list for extension type_name 1205 20, // [20:20] is the sub-list for extension extendee 1206 0, // [0:20] is the sub-list for field type_name 1207 } 1208 1209 func init() { file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_init() } 1210 func file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_init() { 1211 if File_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto != nil { 1212 return 1213 } 1214 if !protoimpl.UnsafeEnabled { 1215 file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { 1216 switch v := v.(*TestVerdictRow); i { 1217 case 0: 1218 return &v.state 1219 case 1: 1220 return &v.sizeCache 1221 case 2: 1222 return &v.unknownFields 1223 default: 1224 return nil 1225 } 1226 } 1227 file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { 1228 switch v := v.(*TestVerdictRow_InvocationRecord); i { 1229 case 0: 1230 return &v.state 1231 case 1: 1232 return &v.sizeCache 1233 case 2: 1234 return &v.unknownFields 1235 default: 1236 return nil 1237 } 1238 } 1239 file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { 1240 switch v := v.(*TestVerdictRow_ParentInvocationRecord); i { 1241 case 0: 1242 return &v.state 1243 case 1: 1244 return &v.sizeCache 1245 case 2: 1246 return &v.unknownFields 1247 default: 1248 return nil 1249 } 1250 } 1251 file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { 1252 switch v := v.(*TestVerdictRow_TestResult); i { 1253 case 0: 1254 return &v.state 1255 case 1: 1256 return &v.sizeCache 1257 case 2: 1258 return &v.unknownFields 1259 default: 1260 return nil 1261 } 1262 } 1263 file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { 1264 switch v := v.(*TestVerdictRow_Exoneration); i { 1265 case 0: 1266 return &v.state 1267 case 1: 1268 return &v.sizeCache 1269 case 2: 1270 return &v.unknownFields 1271 default: 1272 return nil 1273 } 1274 } 1275 file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { 1276 switch v := v.(*TestVerdictRow_Counts); i { 1277 case 0: 1278 return &v.state 1279 case 1: 1280 return &v.sizeCache 1281 case 2: 1282 return &v.unknownFields 1283 default: 1284 return nil 1285 } 1286 } 1287 file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { 1288 switch v := v.(*TestVerdictRow_BuildbucketBuild); i { 1289 case 0: 1290 return &v.state 1291 case 1: 1292 return &v.sizeCache 1293 case 2: 1294 return &v.unknownFields 1295 default: 1296 return nil 1297 } 1298 } 1299 file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { 1300 switch v := v.(*TestVerdictRow_ChangeVerifierRun); i { 1301 case 0: 1302 return &v.state 1303 case 1: 1304 return &v.sizeCache 1305 case 2: 1306 return &v.unknownFields 1307 default: 1308 return nil 1309 } 1310 } 1311 file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { 1312 switch v := v.(*TestVerdictRow_BuildbucketBuild_Builder); i { 1313 case 0: 1314 return &v.state 1315 case 1: 1316 return &v.sizeCache 1317 case 2: 1318 return &v.unknownFields 1319 default: 1320 return nil 1321 } 1322 } 1323 } 1324 type x struct{} 1325 out := protoimpl.TypeBuilder{ 1326 File: protoimpl.DescBuilder{ 1327 GoPackagePath: reflect.TypeOf(x{}).PkgPath(), 1328 RawDescriptor: file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_rawDesc, 1329 NumEnums: 0, 1330 NumMessages: 9, 1331 NumExtensions: 0, 1332 NumServices: 0, 1333 }, 1334 GoTypes: file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_goTypes, 1335 DependencyIndexes: file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_depIdxs, 1336 MessageInfos: file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_msgTypes, 1337 }.Build() 1338 File_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto = out.File 1339 file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_rawDesc = nil 1340 file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_goTypes = nil 1341 file_go_chromium_org_luci_analysis_proto_bq_test_verdict_row_proto_depIdxs = nil 1342 }