// 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";

// BotEnvironment defines bot-specific parameters used by phosphorus.
message BotEnvironment {
  // Absolute path to the autotest directory for the bot, e.g.
  // "/usr/local/autotest".
  string autotest_dir = 1;
}

// TaskEnvironment defines task-specific parameters used by phosphorus.
message TaskEnvironment {
  // Absolute path to the results directory for a given run. Include results of
  //  both tests and non-test tasks like provision
  string results_dir = 2;

  // Absolute path to the results directory for a given run's tests.
  //  MUST be equal to ${results_dir}/autoserv_test if present. This restriction
  //  may be lifted in the future.
  string test_results_dir = 3;

  // The name of the base lxc image used for Server Side Packaging (SSP).
  //
  // autoserv fetches the base image from a hard-coded path on Google
  // Storage: gs://abci-ssp/autotest-containers/{name}.tar.xz
  //
  // See go/ctp-ssp for an overview of SSP.
  string ssp_base_image_name = 4;

  reserved 1;
  reserved "synchronous_offload_dir";
}

// Knobs specific to the step that uploads log-data to Google Storage.
message LogDataUploadStep{
  // Controls the maximum number of files that may be uploaded concurrently.
  // If unset, a hard-coded constant is used to limit concurrency (i.e., there
  // is no way to request unlimited concurrent uploads).
  int32 max_concurrent_uploads = 1;
}

message FetchCrashesStep {
  // URL of the crash server where crashes can be uploaded.
  // e.g.: https://clients2.google.com/cr/report
  string crash_server_report_url = 1;

  // URL of the crash server where pre-uploaded crashes can be viewed.
  // e.g.: https://crash.corp.google.com
  string crash_server_view_url = 2;
}

// Config defines configuration parameters common to phosphorus subcommands.
message Config {
  BotEnvironment bot = 1;
  TaskEnvironment task = 2;
  LogDataUploadStep log_data_upload_step = 3;
  FetchCrashesStep fetch_crashes_step = 4;
}
