// Copyright 2020 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.analytics;

import "google/protobuf/timestamp.proto";

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

// TestPlanRun represents the test request defined by users and its running
// status.
message TestPlanRun {
  // A unique name to identify this test plan run, format
  // "testPlanRuns/{testPlanRun}", where {} is a UUID,
  // e.g. "testPlanRuns/8df26977-469d-4a85-a0e8-b1f42ca4a888"
  // Required field.
  string uid = 1;

  // Suite name. If the test plan is running an autotest suite,
  // this field is the autotest suite name, e.g. wifi_interop.
  string suite = 2;

  // Human friendly url to access this run.
  string execution_url = 3;

  // The dut_pool in which the test plan ran, e.g. "DUT_POOL_QUOTA" or
  // "wificell".
  // It is case sensitive: "WIFICELL" and "wificell" represent different
  // pools.
  // Note that legacy pools "suites", "bvt" and "pcq" have been integrated
  // into "DUT_POOL_QUOTA" and legacy pool "cts" has been renamed to
  // "DUT_POOL_CTS".
  string dut_pool = 4;

  // The build target, a.k.a board name, e.g. "hatch", "octopus".
  string build_target = 5;

  // CrOS build version, e.g. "R84/13091.0.0".
  string chromeos_build = 6;

  Status status = 7;

  // Event timestamp of test plan run, e.g. start time, end time.
  Timeline timeline = 8;
}

// TestRun contains Skylab task level information.
message TestRun {
  // A unique name for this test run, format "testRuns/{testRun}",
  // where {} is a UUID.
  // Required field.
  string uid = 1;

  // The name of the Skylab task corresponding to the test run, e.g.
  // "tast.critical-chrome".
  //
  // For tasks containing a single test case, will generally be the same as the
  // name of that test case, e.g. "provision_AutoUpdate.double".
  // Required field.
  string display_name = 2;

  // Human friendly url to access this run.
  string execution_url = 3;

  // The TestPlanRun.uid of the parent test plan run.
  string parent_uid = 4;

  // Model name, e.g. "helios", "mimrock".
  // Note that a single TestPlanRun may be spread across multiple models, if
  // the test plan request did not specify a model to run.
  string model = 5;

  // Event timestamp of test run, e.g. start time, end time.
  Timeline timeline = 6;

  Status status = 7;

  Verdict verdict = 8;

  // The URL for the entire logs of this run.
  string full_log_url = 9;

  message Prejob {
    Verdict verdict = 1;
  }
  Prejob prejob = 10;
}

// TestCaseResult describes the result of an individual test case.
message TestCaseResult {
  // A unique name for this test case run,
  // format "testCaseResults/{testCaseResult}" where {} is a UUID.
  // Required field.
  string uid = 1;

  // Test case name as it appears in status.log,
  // e.g. "provision_AutoUpdate.double".
  string display_name = 2;

  // The TestRun.uid of the parent test run.
  string parent_uid = 3;

  Verdict verdict = 4;

  // 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 = 5;
}

// The timeline of a task.
message Timeline {
  // Time the task was requested.
  google.protobuf.Timestamp create_time = 1;
  // Time the task began to execute in a bot.
  google.protobuf.Timestamp start_time = 2;
  // Time the task completed, unset if the task was
  // stopped unexpectedly before its completion.
  google.protobuf.Timestamp end_time = 3;
  // Time the task was stopped unexpectedly, unset if
  // task has run to its end.
  google.protobuf.Timestamp abandon_time = 4;
}

// The latest known status of a task, may change as the run progresses.
message Status {
  // All the currently possible values (corresponding to
  // testplatform.Taskstate.LifeCycle enum values):
  //   NORMAL STATUS:
  //
  //     PENDING: task is pending somewhere and does not run.
  //     RUNNING: task is running.
  //     COMPLETED: ran to completion without being cancelled externally,
  //       regardless of whether it succeeded or failed. A task is completed
  //       only if all its sub-tasks have reached the end, either with a normal
  //       or abnormal status.
  //
  //   ABNORMAL STATUS:
  //
  //     CANCELLED: never got a chance to run, cancelled externally.
  //     REJECTED: never got a chance to run, rejected due to unsatisfiable
  //       depenedencies.
  //     ABORTED: started running but was cancelled externally while running.
  string value = 1;
}

// The known tokens describe whether a task passed, failed, or had some other
// indefinite verdict.
message Verdict {
  // All the currently possible values (corresponding to
  // testplatform.Taskstate.Verdict enum values):
  //
  //   UNSPECIFIED(default): the task produced no usable verdict (possibly
  //     because it never ran, or never finished, or the results were
  //     unparseable).
  //     Under most circumstances, this should be treated as a failure or
  //     an infrastructure failure.
  //   PASSED: test run definitively passed.
  //   FAILED: test run definitively failed.
  //   NO_VERDICT: the task definitively produced no verdict(for instance,
  //     the test is irrelevant in the given environment).
  //     Under most circumstances, this should be treated as a passing
  //     (but uninteresting).
  //   PASSED_ON_RETRY: the task failed, but passed after one or more retries.
  string value = 1;
}