// 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.skylab_test_runner;

import "test_platform/common/task.proto";

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

// AsyncResults contains references to locations where task results will
// eventually be available.
message AsyncResults {
  // The URL at which a human will be able to view the task's logs.
  string logs_url = 1;

  // The full google storage URL at which a task's full logs will be stored.
  string gs_url = 2;
}

// Result defines the output format of skylab_test_runner.
// It contains a summary of test results from a single Swarming task run.
message Result {
  // Autotest describes the result summary for the case of autotest harness.
  message Autotest {
    // TestCase describes the result of an individual test case.
    // A single control file may correspond to multiple test cases.
    message TestCase {
      // Test case name as it appears in status.log.
      string name = 1;

      // Verdict defines the test case result to be reported.
      enum Verdict {
        VERDICT_UNDEFINED = 0;
        VERDICT_PASS = 1;
        VERDICT_FAIL = 2;
      }

      Verdict verdict = 2;

      // A one line human readable description of what happened during test
      // case execution (e.g. error/warning message). Not intended to be machine
      // parseable. There's no guarantee that a given root cause will always
      // resolve to the same summary.
      string human_readable_summary = 3;
    }

    repeated TestCase test_cases = 1;

    // False if test_cases represents all of the test cases to be run by the
    // task. True otherwise (e.g. the task was aborted early).
    bool incomplete = 2;

    // Google Storage URL at which to place results
    string synchronous_log_data_url = 3;
  }

  // Which test harness was used.
  oneof harness {
      Autotest autotest_result = 1;
  }

  // Prejob contains all preparatory operations that run before the actual
  // test cases.
  message Prejob {
    // Step describes an individual prejob operation e.g. provision.
    message Step {
      // Step name, e.g. as it appears in status.log.
      string name = 1;

      // Verdict defines the final step status. Eventually may have different
      // cases from the test case verdict, e.g. VERDICT_SKIPPED.
      enum Verdict {
        VERDICT_UNDEFINED = 0;
        VERDICT_PASS = 1;
        VERDICT_FAIL = 2;
      }

      Verdict verdict = 2;

      // A one line human readable description of what happened during step
      // execution (e.g. error/warning message). Not intended to be machine
      // parseable. There's no guarantee that a given root cause will always
      // resolve to the same summary.
      string human_readable_summary = 3;
    }

    repeated Step step = 1;
  }

  Prejob prejob = 2;

  test_platform.common.TaskLogData log_data = 3 [deprecated = true];

  // StateUpdate contains Skylab state changes that resulted from the test run.
  // It is consumed by `skylab_local_state save`.
  message StateUpdate {
    // E.g. "needs_repair", "ready" etc.
    string dut_state = 1;
  }

  StateUpdate state_update = 4;

  AsyncResults async_results = 5;
}

