blob: a7d15261a4a63174c040c75e147ed79383deab1b [file] [log] [blame]
// Copyright 2018 Google LLC
//
// 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
//
// https://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";
import "google/api/annotations.proto";
import "google/api/routing.proto";
import "google/api/client.proto";
import "google/api/resource.proto";
import "google/protobuf/empty.proto";
package google.showcase.v1beta1;
option go_package = "github.com/googleapis/gapic-showcase/server/genproto";
option java_package = "com.google.showcase.v1beta1";
option java_multiple_files = true;
// A service to facilitate running discrete sets of tests
// against Showcase.
service Testing {
// This service is meant to only run locally on the port 7469 (keypad digits
// for "show").
option (google.api.default_host) = "localhost:7469";
option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform";
// Creates a new testing session.
rpc CreateSession(CreateSessionRequest) returns (Session) {
option (google.api.http) = {
post: "/v1beta1/sessions"
body: "session"
};
option (google.api.method_signature) = "session,blueprint";
}
// Gets a testing session.
rpc GetSession(GetSessionRequest) returns (Session) {
option (google.api.http) = {
get: "/v1beta1/{name=sessions/*}"
};
}
// Lists the current test sessions.
rpc ListSessions(ListSessionsRequest) returns (ListSessionsResponse) {
option (google.api.http) = {
get: "/v1beta1/sessions"
};
}
// Delete a test session.
rpc DeleteSession(DeleteSessionRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v1beta1/{name=sessions/*}"
};
}
// Report on the status of a session.
// This generates a report detailing which tests have been completed,
// and an overall rollup.
rpc ReportSession(ReportSessionRequest) returns (ReportSessionResponse) {
option (google.api.http) = {
post: "/v1beta1/{name=sessions/*}:report"
};
}
// Gets a testing session.
rpc GetTest(GetTestRequest) returns (Test) {
option (google.api.http) = {
get: "/v1beta1/{name=tests/*}"
};
option (google.api.routing) = {
routing_parameters {
field: "name"
path_template: "/v1beta1/{rename=tests/*}"
}
routing_parameters {
field: "routing.name"
path_template: "/v1beta1/{routing_id=tests/*}"
}
};
option (google.api.method_signature) = "name";
}
// List the tests of a sessesion.
rpc ListTests(ListTestsRequest) returns (ListTestsResponse) {
option (google.api.http) = {
get: "/v1beta1/{parent=sessions/*}/tests"
};
}
// Explicitly decline to implement a test.
//
// This removes the test from subsequent `ListTests` calls, and
// attempting to do the test will error.
//
// This method will error if attempting to delete a required test.
rpc DeleteTest(DeleteTestRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v1beta1/{name=sessions/*/tests/*}"
};
}
// Register a response to a test.
//
// In cases where a test involves registering a final answer at the
// end of the test, this method provides the means to do so.
rpc VerifyTest(VerifyTestRequest) returns (VerifyTestResponse) {
option (google.api.http) = {
post: "/v1beta1/{name=sessions/*/tests/*}:check"
body: "*"
additional_bindings {
post: "/v1beta1/{foo=sessions/*/tests/*}:check"
body: "*"
}
additional_bindings {
post: "/v1beta1/{answer=sessions/*/tests/*}:check"
body: "*"
}
additional_bindings {
post: "/v1beta1/{test_to_verify.name=sessions/*/tests/*}:check"
body: "*"
}
// Test enums in HTTP fields.
additional_bindings { post: "/v1beta1/{type}:check" body: "*" }
};
}
}
// A session is a suite of tests, generally being made in the context
// of testing code generation.
//
// A session defines tests it may expect, based on which version of the
// code generation spec is in use.
message Session {
option (google.api.resource) = {
type: "showcase.googleapis.com/Session"
pattern: "sessions/{session}"
};
// The name of the session. The ID must conform to ^[a-z]+$
// If this is not provided, Showcase chooses one at random.
string name = 1;
// The specification versions understood by Showcase.
enum Version {
// Unspecified version. If passed on creation, the session will default
// to using the latest stable release.
VERSION_UNSPECIFIED = 0;
// The latest v1. Currently, this is v1.0.
V1_LATEST = 1;
// v1.0. (Until the spec is "GA", this will be a moving target.)
V1_0 = 2;
}
// Required. The version this session is using.
Version version = 2;
map<int32, string> session_ids_to_descriptor = 3;
}
// The request for the CreateSession method.
message CreateSessionRequest {
// The session to be created.
// Sessions are immutable once they are created (although they can
// be deleted).
Session session = 1;
// A blueprint is an explicit definition of methods and requests that are
// needed to be made to test this specific test case. Ideally this would be
// represented by something more robust like CEL, but as of writing this, I am
// unsure if CEL is ready.
message Blueprint {
option (google.api.resource) = {
type: "showcase.googleapis.com/Blueprint"
pattern: "sessions/{session}/tests/{test}/blueprints/{blueprint}"
};
// The name of this blueprint.
string name = 1;
// A description of this blueprint.
string description = 2;
// A message representing a method invocation.
message Invocation {
// The fully qualified name of the showcase method to be invoked.
string method = 1;
// The request to be made if a specific request is necessary.
bytes serialized_request = 2;
}
// The initial request to trigger this test.
Invocation request = 3;
}
// The blueprints that will satisfy this test. There may be multiple
// blueprints that can signal to the server that this test case is being
// exercised. Although multiple blueprints are specified, only a single
// blueprint needs to be run to signal that the test case was exercised.
Blueprint blueprint = 2;
}
// The request for the GetSession method.
message GetSessionRequest {
// The session to be retrieved.
string name = 1 [(google.api.resource_reference).type =
"showcase.googleapis.com/Session"];
}
// The request for the ListSessions method.
message ListSessionsRequest {
// The maximum number of sessions to return per page.
int32 page_size = 1;
// The page token, for retrieving subsequent pages.
string page_token = 2;
}
// Response for the ListSessions method.
message ListSessionsResponse {
// The sessions being returned.
repeated Session sessions = 1;
// The next page token, if any.
// An empty value here means the last page has been reached.
string next_page_token = 2;
}
// Request for the DeleteSession method.
message DeleteSessionRequest {
// The session to be deleted.
string name = 1 [(google.api.resource_reference).type =
"showcase.googleapis.com/Session"];
}
// Request message for reporting on a session.
message ReportSessionRequest {
// The session to be reported on.
string name = 1 [(google.api.resource_reference).type =
"showcase.googleapis.com/Session"];
}
// Response message for reporting on a session.
message ReportSessionResponse {
// The topline state of the report.
enum Result {
RESULT_UNSPECIFIED = 0;
// The session is complete, and everything passed.
PASSED = 1;
// The session had an explicit failure.
FAILED = 2;
// The session is incomplete. This is a failure response.
INCOMPLETE = 3;
}
// The state of the report.
Result result = 1;
// The test runs of this session.
repeated TestRun test_runs = 2;
}
message GetTestRequest {
// The session to be retrieved.
string name = 1
[(google.api.resource_reference).type = "showcase.googleapis.com/Test"];
Routing routing = 2;
}
message Routing {
string name = 1;
}
message Test {
option (google.api.resource) = {
type: "showcase.googleapis.com/Test"
pattern: "sessions/{session}/tests/{shard_id}~{test_id}"
};
// The name of the test.
// The tests/* portion of the names are hard-coded, and do not change
// from session to session.
string name = 1;
// Whether or not a test is required, recommended, or optional.
enum ExpectationLevel {
EXPECTATION_LEVEL_UNSPECIFIED = 0;
// This test is strictly required.
REQUIRED = 1;
// This test is recommended.
//
// If a generator explicitly ignores a recommended test (see `DeleteTest`),
// then the report may still pass, but with a warning.
//
// If a generator skips a recommended test and does not explicitly
// express that intention, the report will fail.
RECOMMENDED = 2;
// This test is optional.
//
// If a generator explicitly ignores an optional test (see `DeleteTest`),
// then the report may still pass, and no warning will be issued.
//
// If a generator skips an optional test and does not explicitly
// express that intention, the report may still pass, but with a
// warning.
OPTIONAL = 3;
}
// The expectation level for this test.
ExpectationLevel expectation_level = 2;
// A description of the test.
string description = 3;
}
// An issue found in the test.
message Issue {
// The different potential types of issues.
enum Type {
TYPE_UNSPECIFIED = 0;
// The test was never instrumented.
SKIPPED = 1;
// The test was started but never confirmed.
PENDING = 2;
// The test was instrumented, but Showcase got an unexpected
// value when the generator tried to confirm success.
INCORRECT_CONFIRMATION = 3;
}
// The type of the issue.
Type type = 1;
// Severity levels.
enum Severity {
SEVERITY_UNSPECIFIED = 0;
// Errors.
ERROR = 1;
// Warnings.
WARNING = 2;
}
// The severity of the issue.
Severity severity = 2;
// A description of the issue.
string description = 3;
}
// The request for the ListTests method.
message ListTestsRequest {
// The session.
string parent = 1 [(google.api.resource_reference).type =
"showcase.googleapis.com/Session"];
// The maximum number of tests to return per page.
int32 page_size = 2;
// The page token, for retrieving subsequent pages.
string page_token = 3;
}
// The response for the ListTests method.
message ListTestsResponse {
// The tests being returned.
repeated Test tests = 1;
// The next page token, if any.
// An empty value here means the last page has been reached.
string next_page_token = 2;
}
// A TestRun is the result of running a Test.
message TestRun {
// The name of the test.
// The tests/* portion of the names are hard-coded, and do not change
// from session to session.
string test = 1
[(google.api.resource_reference).type = "showcase.googleapis.com/Test"];
// An issue found with the test run. If empty, this test run was successful.
Issue issue = 2;
}
// Request message for deleting a test.
message DeleteTestRequest {
// The test to be deleted.
string name = 1
[(google.api.resource_reference).type = "showcase.googleapis.com/Test"];
}
message VerifyTestRequest {
// The test to have an answer registered to it.
string name = 1
[(google.api.resource_reference).type = "showcase.googleapis.com/Test"];
// The answer from the test.
bytes answer = 2;
// The answers from the test if multiple are to be checked
repeated bytes answers = 3;
// Test fields for HTTP annotations.
string foo = 4;
Test test_to_verify = 5;
// For testing enums in HTTP fields.
Issue.Type type = 6;
}
message VerifyTestResponse {
// An issue if check answer was unsuccessful. This will be empty if the check
// answer succeeded.
Issue issue = 1;
}