blob: 966452c155d632b33d92344b4bb08b20a7f3092c [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 "go.chromium.org/luci/resultdb/proto/v1/common.proto";
option go_package = "go.chromium.org/luci/resultdb/proto/v1;resultpb";
// Represents a function TestResult -> bool.
// Empty message matches all test results.
//
// Most clients would want to set expected_results to
// VARIANTS_WITH_UNEXPECTED_RESULTS.
message TestResultPredicate {
// A test result must have a test id matching this regular expression
// entirely, i.e. the expression is implicitly wrapped with ^ and $.
string test_id_regexp = 1;
// A test result must have a variant satisfying this predicate.
VariantPredicate variant = 2;
// Filters test results based on TestResult.expected field.
enum Expectancy {
// All test results satisfy this.
// WARNING: using this significantly increases response size and latency.
ALL = 0;
// A test result must belong to a test variant that has one or more
// unexpected results. It can be used to fetch both unexpected and flakily
// expected results.
//
// Note that the predicate is defined at the test variant level.
// For example, if a test variant expects a PASS and has results
// [FAIL, FAIL, PASS], then all results satisfy the predicate because
// the variant satisfies the predicate.
VARIANTS_WITH_UNEXPECTED_RESULTS = 1;
// Similar to VARIANTS_WITH_UNEXPECTED_RESULTS, but the test variant
// must not have any expected results.
VARIANTS_WITH_ONLY_UNEXPECTED_RESULTS = 2;
}
// A test result must match this predicate based on TestResult.expected field.
// Most clients would want to override this field because the default
// typically causes a large response size.
Expectancy expectancy = 3;
// If true, filter out exonerated test variants.
// Mutually exclusive with Expectancy.ALL.
//
// If false, the filter is NOT applied.
// That is, the test result may or may not be exonerated.
bool exclude_exonerated = 4;
}
// Represents a function TestExoneration -> bool.
// Empty message matches all test exonerations.
message TestExonerationPredicate {
// A test exoneration must have a test id matching this regular expression
// entirely, i.e. the expression is implicitly wrapped with ^ and $.
string test_id_regexp = 1;
// A test exoneration must have a variant satisfying this predicate.
VariantPredicate variant = 2;
}
// Represents a function Variant -> bool.
message VariantPredicate {
oneof predicate {
// A variant must be equal this definition exactly.
Variant equals = 1;
// A variant's key-value pairs must contain those in this one.
Variant contains = 2;
}
}
// Represents a function Artifact -> bool.
message ArtifactPredicate {
// A set of Invocation's outgoing edge types.
message EdgeTypeSet {
// The edges represented by Invocation.included_invocations field.
bool included_invocations = 1;
// The parent-child relationship between Invocation and TestResult.
bool test_results = 2;
}
// Specifies which edges to follow when retrieving directly/indirectly
// included artifacts.
// For example,
// - to retrieve only invocation-level artifacts, use
// {included_invocations: true}.
// - to retrieve only test-result-level artifacts, use {test_results: true}.
//
// By default, follows all edges.
EdgeTypeSet follow_edges = 1; // defaults to All.
// If an Artifact belongs to a TestResult, then the test result must satisfy
// this predicate.
// Note: this predicate does NOT apply to invocation-level artifacts.
// To exclude them from the response, use follow_edges.
TestResultPredicate test_result_predicate = 2;
// An artifact must have a content type matching this regular expression
// entirely, i.e. the expression is implicitly wrapped with ^ and $.
// Defaults to ".*".
string content_type_regexp = 3;
// An artifact must have an ID matching this regular expression entirely, i.e.
// the expression is implicitly wrapped with ^ and $. Defaults to ".*".
string artifact_id_regexp = 4;
}