// 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 test_platform.phosphorus;

option go_package = "go.chromium.org/chromiumos/infra/proto/go/test_platform/phosphorus";

import "google/protobuf/timestamp.proto";
import "test_platform/phosphorus/common.proto";
import "test_platform/request.proto";

// PrejobRequest defines the input of `phosphorus prejob`.
message PrejobRequest {
  Config config = 1;

  string dut_hostname = 2;

  // TODO(crbug.com/1162347): Delete this post-migration.
  map<string,string> provisionable_labels = 3 [deprecated = true];

  // What needs to be installed onto the DUT at the end of prejob, e.g.
  // "cros-version": "reef-release/R77-12345.0.0".
  // TODO(crbug.com/1162347): Delete this post-migration.
  map<string,string> desired_provisionable_labels = 4 [deprecated = true];

  // What needs to be installed onto the DUT at the end of prejob, as specified
  // in the cros_test_platform request.
  repeated test_platform.Request.Params.SoftwareDependency software_dependencies = 8;

  // What is installed on the DUT before the prejob, e.g.
  // "cros-version": "reef-release/R77-12345.0.0".
  map<string,string> existing_provisionable_labels = 5;

  // Hard deadline for execution.
  //
  // All prejob execution should abort beyond this deadline.
  google.protobuf.Timestamp deadline = 6;

  // If set, use the Provision TLS API for the prejob.
  // See go/cros-prover go/cros-tls
  //
  // crbug.com/1137444: This is a transitional argument. Once go/cros-prover
  // migration is complete, all prejobs will use the TLS API and this argument
  // will be dropped.
  bool use_tls = 7;
}

// PrejobResponse defines the output of `phosphorus prejob`.
message PrejobResponse {
  // Values should be consistent with https://aip.dev/216
  enum State {
    // Should not be used.
    STATE_UNSPECIFIED = 0;
    // The prejob succeeded.
    //
    // Some prejob failures may not be detectable during execution. These
    // failures will be detected when parsing results off the prejob logs in a
    // later step of test_runner.
    SUCCEEDED = 1;
    // The prejob failed.
    FAILED = 2;
    // The prejob hit the requested timeout.
    TIMED_OUT = 3;
    // The prejob was aborted externally.
    ABORTED = 4;
  }

  // `phosphorus prejob` exits with exit code 0 unless there is an
  // infrastructure failure. When the exit code is 0, `state` indicates the
  // best known state of the prejob execution (see comments on State enum).
  State state = 1;
}
