blob: 4a31c7d5d70bf1935e1315c784cdd187fe40bec5 [file] [log] [blame]
// Copyright 2019 The LUCI Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package luci.resultdb.v1;
import "google/api/field_behavior.proto";
import "google/protobuf/field_mask.proto";
import "go.chromium.org/luci/resultdb/proto/v1/artifact.proto";
import "go.chromium.org/luci/resultdb/proto/v1/invocation.proto";
import "go.chromium.org/luci/resultdb/proto/v1/predicate.proto";
import "go.chromium.org/luci/resultdb/proto/v1/test_result.proto";
import "go.chromium.org/luci/resultdb/proto/v1/test_variant.proto";
option go_package = "go.chromium.org/luci/resultdb/proto/v1;resultpb";
// Service to read test results.
service ResultDB {
// Retrieves an invocation.
rpc GetInvocation(GetInvocationRequest) returns (Invocation) {};
// == Test results ===========================================================
// Retrieves a test result.
rpc GetTestResult(GetTestResultRequest) returns (TestResult) {};
// Retrieves test results for a parent invocation.
//
// Note: response does not contain test results of included invocations.
// Use QueryTestResults instead.
rpc ListTestResults(ListTestResultsRequest)
returns (ListTestResultsResponse) {};
// Retrieves a test exoneration.
rpc GetTestExoneration(GetTestExonerationRequest) returns (TestExoneration) {
};
// Retrieves test exonerations for a parent invocation.
//
// Note: response does not contain test results of included invocations.
// Use QueryTestExonerations instead.
rpc ListTestExonerations(ListTestExonerationsRequest)
returns (ListTestExonerationsResponse) {};
// Retrieves test results from an invocation, recursively.
// Supports invocation inclusions.
// Supports advanced filtering.
// Examples: go/resultdb-rpc#querytestresults
rpc QueryTestResults(QueryTestResultsRequest)
returns (QueryTestResultsResponse) {};
// Retrieves test exonerations from an invocation.
// Supports invocation inclusions.
// Supports advanced filtering.
rpc QueryTestExonerations(QueryTestExonerationsRequest)
returns (QueryTestExonerationsResponse) {};
// Retrieves the test result statistics of an invocation.
// Currently supports total number of test results belong to the invocation,
// directly and indirectly.
rpc QueryTestResultStatistics(QueryTestResultStatisticsRequest)
returns (QueryTestResultStatisticsResponse) {};
// == Artifacts =============================================================
// Retrieves an artifact.
rpc GetArtifact(GetArtifactRequest) returns (Artifact) {};
// Retrieves artifacts for a parent invocation/testResult.
//
// Note: if the parent is an invocation, the response does not contain
// artifacts of included invocations. Use QueryArtifacts instead.
rpc ListArtifacts(ListArtifactsRequest) returns (ListArtifactsResponse) {};
// Retrieves artifacts from an invocation, recursively.
// Can retrieve artifacts of test results included in the invocation
// directly or indirectly.
// Supports invocation inclusions.
rpc QueryArtifacts(QueryArtifactsRequest) returns (QueryArtifactsResponse) {};
// Retrieves test variants from an invocation, recursively.
// Supports invocation inclusions.
rpc QueryTestVariants(QueryTestVariantsRequest) returns (QueryTestVariantsResponse) {};
// Retrieves test variants from a single invocation, matching the specified
// test IDs and hashes.
rpc BatchGetTestVariants(BatchGetTestVariantsRequest) returns (BatchGetTestVariantsResponse) {};
}
// A request message for GetInvocation RPC.
message GetInvocationRequest {
// The name of the invocation to request, see Invocation.name.
string name = 1 [ (google.api.field_behavior) = REQUIRED ];
}
// A request message for GetTestResult RPC.
message GetTestResultRequest {
// The name of the test result to request, see TestResult.name.
string name = 1 [ (google.api.field_behavior) = REQUIRED ];
}
// A request message for ListTestResults RPC.
message ListTestResultsRequest {
// Name of the invocation, e.g. "invocations/{id}".
string invocation = 1 [ (google.api.field_behavior) = REQUIRED ];
// The maximum number of test results to return.
//
// The service may return fewer than this value.
// If unspecified, at most 100 test results will be returned.
// The maximum value is 1000; values above 1000 will be coerced to 1000.
int32 page_size = 2;
// A page token, received from a previous `ListTestResults` call.
// Provide this to retrieve the subsequent page.
//
// When paginating, all other parameters provided to `ListTestResults` MUST
// match the call that provided the page token.
string page_token = 3;
// Fields to include in the response.
// If not set, the default mask is used where summary_html and tags are
// excluded.
// Test result names will always be included even if "name" is not a part of
// the mask.
google.protobuf.FieldMask read_mask = 4;
}
// A response message for ListTestResults RPC.
message ListTestResultsResponse {
// The test results from the specified invocation.
repeated TestResult test_results = 1;
// A token, which can be sent as `page_token` to retrieve the next page.
// If this field is omitted, there were no subsequent pages at the time of
// request.
// If the invocation is not finalized, more results may appear later.
string next_page_token = 2;
}
// A request message for GetTestExoneration RPC.
message GetTestExonerationRequest {
// The name of the test exoneration to request, see TestExoneration.name.
string name = 1;
}
// A request message for ListTestExonerations RPC.
message ListTestExonerationsRequest {
// Name of the invocation, e.g. "invocations/{id}".
string invocation = 1 [ (google.api.field_behavior) = REQUIRED ];
// The maximum number of test exonerations to return.
//
// The service may return fewer than this value.
// If unspecified, at most 100 test exonerations will be returned.
// The maximum value is 1000; values above 1000 will be coerced to 1000.
int32 page_size = 2;
// A page token, received from a previous `ListTestExonerations` call.
// Provide this to retrieve the subsequent page.
//
// When paginating, all other parameters provided to `ListTestExonerations`
// MUST match the call that provided the page token.
string page_token = 3;
}
// A response message for ListTestExonerations RPC.
message ListTestExonerationsResponse {
// The test exonerations from the specified invocation.
repeated TestExoneration test_exonerations = 1;
// A token, which can be sent as `page_token` to retrieve the next page.
// If this field is omitted, there were no subsequent pages at the time of
// request.
// If the invocation is not finalized, more results may appear later.
string next_page_token = 2;
}
// A request message for QueryTestResults RPC.
message QueryTestResultsRequest {
// Retrieve test results included in these invocations, directly or indirectly
// (via Invocation.included_invocations).
//
// Specifying multiple invocations is equivalent to querying one invocation
// that includes these.
repeated string invocations = 1;
// A test result in the response must satisfy this predicate.
TestResultPredicate predicate = 2;
// The maximum number of test results to return.
//
// The service may return fewer than this value.
// If unspecified, at most 100 test results will be returned.
// The maximum value is 1000; values above 1000 will be coerced to 1000.
int32 page_size = 4;
// A page token, received from a previous `QueryTestResults` call.
// Provide this to retrieve the subsequent page.
//
// When paginating, all other parameters provided to `QueryTestResults` MUST
// match the call that provided the page token.
string page_token = 5;
// Fields to include in the response.
// If not set, the default mask is used where summary_html and tags are
// excluded.
// Test result names will always be included even if "name" is not a part of
// the mask.
google.protobuf.FieldMask read_mask = 6;
}
// A response message for QueryTestResults RPC.
message QueryTestResultsResponse {
// Matched test results.
// Ordered by parent invocation ID, test ID and result ID.
repeated TestResult test_results = 1;
// A token, which can be sent as `page_token` to retrieve the next page.
// If this field is omitted, there were no subsequent pages at the time of
// request.
string next_page_token = 2;
}
// A request message for QueryTestExonerations RPC.
message QueryTestExonerationsRequest {
// Retrieve test exonerations included in these invocations, directly or
// indirectly (via Invocation.included_invocations).
//
// Specifying multiple invocations is equivalent to querying one invocation
// that includes these.
repeated string invocations = 1;
// A test exoneration in the response must satisfy this predicate.
TestExonerationPredicate predicate = 2
[ (google.api.field_behavior) = REQUIRED ];
// The maximum number of test exonerations to return.
//
// The service may return fewer than this value.
// If unspecified, at most 100 test exonerations will be returned.
// The maximum value is 1000; values above 1000 will be coerced to 1000.
int32 page_size = 4;
// A page token, received from a previous `QueryTestExonerations` call.
// Provide this to retrieve the subsequent page.
//
// When paginating, all other parameters provided to `QueryTestExonerations`
// MUST match the call that provided the page token.
string page_token = 5;
}
// A response message for QueryTestExonerations RPC.
message QueryTestExonerationsResponse {
// The test exonerations matching the predicate.
// Ordered by parent invocation ID, test ID and exoneration ID.
repeated TestExoneration test_exonerations = 1;
// A token, which can be sent as `page_token` to retrieve the next page.
// If this field is omitted, there were no subsequent pages at the time of
// request.
string next_page_token = 2;
}
// A request message for QueryTestResultStatistics RPC.
message QueryTestResultStatisticsRequest {
// Retrieve statistics of test result belong to these invocations,
// directly or indirectly (via Invocation.included_invocations).
//
// Specifying multiple invocations is equivalent to requesting one invocation
// that includes these.
repeated string invocations = 1;
}
// A response message for QueryTestResultStatistics RPC.
message QueryTestResultStatisticsResponse {
// Total number of test results.
int64 total_test_results = 1;
}
// A request message for GetArtifact RPC.
message GetArtifactRequest {
// The name of the artifact to request, see Artifact.name.
string name = 1 [ (google.api.field_behavior) = REQUIRED ];
}
// A request message for ListArtifacts RPC.
message ListArtifactsRequest {
// Name of the parent, e.g. an invocation (see Invocation.name) or
// a test result (see TestResult.name).
string parent = 1 [ (google.api.field_behavior) = REQUIRED ];
// The maximum number of artifacts to return.
//
// The service may return fewer than this value.
// If unspecified, at most 100 artifacts will be returned.
// The maximum value is 1000; values above 1000 will be coerced to 1000.
int32 page_size = 2;
// A page token, received from a previous `ListArtifacts` call.
// Provide this to retrieve the subsequent page.
//
// When paginating, all other parameters provided to `ListArtifacts` MUST
// match the call that provided the page token.
string page_token = 3;
}
// A response message for ListArtifacts RPC.
message ListArtifactsResponse {
// The artifacts from the specified parent.
repeated Artifact artifacts = 1;
// A token, which can be sent as `page_token` to retrieve the next page.
// If this field is omitted, there were no subsequent pages at the time of
// request.
// If the invocation is not finalized, more results may appear later.
string next_page_token = 2;
}
// A request message for QueryArtifacts RPC.
message QueryArtifactsRequest {
// Retrieve artifacts included in these invocations, directly or indirectly
// (via Invocation.included_invocations and via contained test results).
//
// Specifying multiple invocations is equivalent to querying one invocation
// that includes these.
repeated string invocations = 1;
// An artifact in the response must satisfy this predicate.
ArtifactPredicate predicate = 2;
// The maximum number of artifacts to return.
//
// The service may return fewer than this value.
// If unspecified, at most 100 artifacts will be returned.
// The maximum value is 1000; values above 1000 will be coerced to 1000.
int32 page_size = 4;
// A page token, received from a previous `QueryArtifacts` call.
// Provide this to retrieve the subsequent page.
//
// When paginating, all other parameters provided to `QueryArtifacts` MUST
// match the call that provided the page token.
string page_token = 5;
}
// A response message for QueryArtifacts RPC.
message QueryArtifactsResponse {
// Matched artifacts.
// First invocation-level artifacts, then test-result-level artifacts
// ordered by parent invocation ID, test ID and artifact ID.
repeated Artifact artifacts = 1;
// A token, which can be sent as `page_token` to retrieve the next page.
// If this field is omitted, there were no subsequent pages at the time of
// request.
string next_page_token = 2;
}
// A request message for QueryTestVariants RPC.
// Next id: 9.
message QueryTestVariantsRequest {
// Retrieve test variants included in these invocations, directly or indirectly
// (via Invocation.included_invocations).
//
// Specifying multiple invocations is equivalent to querying one invocation
// that includes these.
repeated string invocations = 2;
// A test variant must satisfy this predicate.
TestVariantPredicate predicate = 6;
// The maximum number of test results to be included in a test variant.
//
// If a test variant has more results than the limit, the remaining results
// will not be returned.
// If unspecified, at most 10 results will be included in a test variant.
// The maximum value is 100; values above 100 will be coerced to 100.
int32 result_limit = 8;
// The maximum number of test variants to return.
//
// The service may return fewer than this value.
// If unspecified, at most 100 test variants will be returned.
// The maximum value is 10,000; values above 10,000 will be coerced to 10,000.
int32 page_size = 4;
// A page token, received from a previous `QueryTestVariants` call.
// Provide this to retrieve the subsequent page.
//
// When paginating, all other parameters provided to `QueryTestVariants` MUST
// match the call that provided the page token.
string page_token = 5;
// Fields to include in the response.
// If not set, the default mask is used where all fields are included.
//
// The following fields in results.*.result will NEVER be included even when
// specified:
// * test_id
// * variant_hash
// * variant
// * test_metadata
// Those values can be found in the parent test variant objects.
//
// The following fields will ALWAYS be included even when NOT specified:
// * test_id
// * variant_hash
// * status
google.protobuf.FieldMask read_mask = 7;
}
// A response message for QueryTestVariants RPC.
message QueryTestVariantsResponse {
// Matched test variants.
// Ordered by TestVariantStatus, test_id, then variant_hash
repeated TestVariant test_variants = 1;
// A token, which can be sent as `page_token` to retrieve the next page.
// If this field is omitted, there were no subsequent pages at the time of
// request.
string next_page_token = 2;
// The code sources tested by the returned test variants. The sources are keyed
// by an ID which allows them to be cross-referenced from TestVariant.sources_id.
//
// The sources are returned via this map instead of directly on the TestVariant
// to avoid excessive response size. Each source message could be up to a few
// kilobytes and there are usually no more than a handful of different sources
// tested in an invocation, so deduplicating them here reduces response size.
map<string, Sources> sources = 3;
}
// A request message for BatchGetTestVariants RPC.
message BatchGetTestVariantsRequest {
message TestVariantIdentifier {
// The unique identifier of the test in a LUCI project. See the comment on
// TestResult.test_id for full documentation.
string test_id = 1 [ (google.api.field_behavior) = REQUIRED ];
// Hash of the variant. See the comment on TestResult.variant_hash for full
// documentation.
string variant_hash = 2 [ (google.api.field_behavior) = REQUIRED ];
}
// Name of the invocation that the test variants are in.
string invocation = 1;
// A list of test IDs and variant hashes, identifying the requested test
// variants. Size is limited to 500. Any request for more than 500 variants
// will return an error.
repeated TestVariantIdentifier test_variants = 2;
// The maximum number of test results to be included in a test variant.
//
// If a test variant has more results than the limit, the remaining results
// will not be returned.
// If unspecified, at most 10 results will be included in a test variant.
// The maximum value is 100; values above 100 will be coerced to 100.
int32 result_limit = 3;
}
// A response message for BatchGetTestVariants RPC.
message BatchGetTestVariantsResponse {
// Test variants matching the requests. Any variants that weren't found are
// omitted from the response. Clients shouldn't rely on the ordering of this
// field, as no particular order is guaranteed.
repeated TestVariant test_variants = 1;
// The code sources tested by the returned test variants. The sources are keyed
// by an ID which allows them to be cross-referenced from TestVariant.sources_id.
//
// The sources are returned via this map instead of directly on the TestVariant
// to avoid excessive response size. Each source message could be up to a few
// kilobytes and there are usually no more than a handful of different sources
// tested in an invocation, so deduplicating them here reduces response size.
map<string, Sources> sources = 2;
}