// 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/CTP_BUILD_ID/REQ_KEY", where REQ_KEY is the CTP
  // request’s key in the multiple-request,
  // e.g. "testPlanRuns/8879199769272202448/octopus_ampton"
  // Required field.
  string uid = 1;

  // CTP build ID.
  int64 build_id = 2;

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

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

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

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

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

  Status status = 8;

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

// TestRun contains Skylab task level information.
message TestRun {
  // Test runner build ID.
  int64 build_id = 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/TEST_RUNNER_BUILD_ID/TEST_CASE_NAME", e.g.
  // "testCaseResults/8879199769272202448/provision_AutoUpdate.double".
  // 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.build_id of the parent test run.
  int64 parent_build_id = 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;
}
