-
Notifications
You must be signed in to change notification settings - Fork 45
/
testing.proto
392 lines (320 loc) · 11.2 KB
/
testing.proto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
// 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/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;
option ruby_package = "Google::Showcase::V1beta1";
// A service to facilitate running discrete sets of tests
// against Showcase.
// Adding this comment with special characters for comment formatting tests:
// 1. (abra->kadabra->alakazam)
// 2) [Nonsense][]: `pokemon/*/psychic/*`
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";
// Creates a new testing session.
// Adding this comment with special characters for comment formatting tests:
// 1. (abra->kadabra->alakazam)
// 2) [Nonsense][]: `pokemon/*/psychic/*`
rpc CreateSession(CreateSessionRequest) returns (Session) {
option (google.api.http) = {
post: "/v1beta1/sessions"
body: "session"
};
}
// 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"
};
}
// 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"
};
}
}
// 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;
}
// 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;
}
// 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 Test {
option (google.api.resource) = {
type: "showcase.googleapis.com/Test"
pattern: "sessions/{session}/tests/{test}"
};
// 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;
// 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;
// An ordered list of method calls that can be called to trigger this test.
repeated Invocation additional_requests = 4;
}
// 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.
repeated Blueprint blueprints = 4;
}
// 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;
}
message VerifyTestResponse {
// An issue if check answer was unsuccessful. This will be empty if the check answer succeeded.
Issue issue = 1;
}