blob: 3cdabc1f8136ad142af4437dcefd8ddd8981a388 [file] [log] [blame]
// Copyright 2019 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
syntax = "proto3";
package chromiumos.config.api.test.rtd.v1;
option go_package = "go.chromium.org/chromiumos/config/go/api/test/rtd/v1;rtd";
import "chromiumos/config/api/test/results/v2/result.proto";
// Configuration data needed by clients of ProgressSink.
message ProgressSinkClientConfig {
// Local TCP port to be used by the Remote Test Driver to communicate with
// InvocationProgressSink service.
int32 port = 1;
}
// A service implemented by Remote Test Servers, used to report progress from a
// Remote Test Driver invocation.
//
// A simple implementation of Remote Test Driver may report progress at the
// end of the invocation for all requests together. Real implementations SHOULD
// report incremental progress during the invocation.
//
// A progress sink service instance is tied to a single Invocation. There MUST
// always be a single Remote Test Driver invocation inside a Remote Test Server.
// If a Test Lab Environment desires to share a ProgressSink instance across
// various Remote Test Servers, a way to dinstinguish the different Remote Test
// Driver clients must be determined, which is not supported directly by the
// following API.
service ProgressSink {
// A Remote Test Driver invocation MUST call ReportResult exactly once per
// request.
rpc ReportResult(ReportResultRequest) returns (ReportResultResponse);
// A log stream from the Remote Test Driver invocation.
//
// Each call to this method MUST stream logs for a single invocation request
// and log file. Data for the same file may be split over multiple ReportLog
// calls. Data received from concurrent methods calls for the same log file
// may be interleved arbitrarily.
rpc ReportLog(stream ReportLogRequest) returns (ReportLogResponse);
// Archive test artifacts to non-ephemeral storage.
//
// Different Test Lab Environments may use very different non-ephemeral
// storage technologies. Remote Test Servers MUST archive the artifacts to
// final storage synchronously and return an error if the archival fails.
//
// Note: Remote Test Drivers SHOULD use ReportLog() to report logs.
// ArchiveArtifact() SHOULD be used to report structured or binary data only.
//
// Remote Test Server may limit the size of artifacts that may be offloaded
// per request and may fail further requests with RESOURCE_EXHAUSTED.
rpc ArchiveArtifact(ArchiveArtifactRequest) returns (ArchiveArtifactResponse);
}
message ReportResultRequest {
// The invocation to report results for, identified by the Invocation.name
// field.
string invocation = 1;
// Result to report.
chromiumos.config.api.test.results.v2.Result result = 2;
}
message ReportResultResponse {
// If set, the invocation SHOULD immediately terminate, skipping remaining
// requests.
bool terminate = 1;
}
message ReportLogRequest {
// Name of the log sink.
//
// name may be interpreted as a local file path or part of a URL. name MUST be
// a valid resource name per https://aip.dev/122 and MUST be a valid POSIX
// file path.
string name = 1;
// The invocation to report results for, identified by the Invocation.name
// field.
string invocation = 2;
// Uninterpreted chunk of log-data.
bytes data = 3;
}
message ReportLogResponse {}
message ArchiveArtifactRequest {
// Name for the archived artifact.
//
// name may be interpreted as a local file path or part of a URL. name MUST be
// a valid resource name per https://aip.dev/122 and MUST be a valid POSIX
// file path.
//
// name MUST be unique across all artifacts archived from a single invocation
// request.
string name = 1;
// The invocation to report results for, identified by the Invocation.name
// field.
string invocation = 2;
// Absolute path to a file or directory to archive.
string local_path = 3;
}
message ArchiveArtifactResponse {}