// Copyright 2022 The Cobalt Authors. All Rights Reserved.
//
// 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 on_device_tests_gateway;

// Interface exported by the server.
service on_device_tests_gateway {
  // A dumb proxy RPC service that passes user defined command line options
  // to the on-device tests gateway and streams back output in real time.
  rpc exec_command (OnDeviceTestsCommand) returns (stream OnDeviceTestsResponse) {
  }

  rpc exec_watch_command (OnDeviceTestsWatchCommand) returns (stream OnDeviceTestsResponse) {
  }
}

// Working directory and command line arguments to be passed to the gateway.
message OnDeviceTestsCommand {
  enum Config {
    devel = 0;
  }

  string workdir = 1;
  string token = 2;
  string test_type = 3;
  string platform = 4;
  string archive_path = 5;
  string config = 6;
  string tag = 7;
  string label = 8;
  string builder_name = 9;
  string change_id = 10;
  string build_number = 11;
  string loader_platform = 12;
  string loader_config = 13;
  string version = 14;
  optional bool dry_run = 15;
  repeated string dimension = 16;
}

// Working directory and command line arguments to be passed to the gateway.
message OnDeviceTestsWatchCommand {
  string workdir = 1;
  string token = 2;
  string session_id = 3;
  optional bool dry_run = 15;
}

// Response from the on-device tests.
message OnDeviceTestsResponse {
  string response = 1;
}
