// Copyright 2014 The Bazel Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto2";

package blaze;

option java_package = "com.google.devtools.build.lib.view.test";

// Status data of test cases which failed (used only for printing test summary)
enum FailedTestCasesStatus {
  /** Information about every test case is available. */
  FULL = 1;
  /** Information about some test cases may be missing. */
  PARTIAL = 2;
  /** No information about individual test cases. */
  NOT_AVAILABLE = 3;
  /** This is an empty object still without data. */
  EMPTY = 4;
}

// Detailed status data for a TestRunnerAction execution.
enum BlazeTestStatus {
  NO_STATUS = 0;
  PASSED = 1;
  FLAKY = 2;
  TIMEOUT = 3;
  FAILED = 4;
  INCOMPLETE = 5;
  REMOTE_FAILURE = 6;
  FAILED_TO_BUILD = 7;
  BLAZE_HALTED_BEFORE_TESTING = 8;
}

// TestCase contains detailed data about all tests (cases/suites/decorators)
// ran, structured in a tree. This data will be later used to present the tests
// by the web status server.
message TestCase {
  enum Type {
    TEST_CASE = 0;
    TEST_SUITE = 1;
    TEST_DECORATOR = 2;
    UNKNOWN = 3;
  }

  enum Status {
    PASSED = 0;
    FAILED = 1;
    ERROR = 2;
    SKIPPED = 3;
  }

  repeated TestCase child = 1;
  optional string name = 2;
  optional string class_name = 3;
  optional int64 run_duration_millis = 4;
  optional string result = 5;
  optional Type type = 6;
  optional Status status = 7;
  optional bool run = 8 [default = true];
}

// TestResultData holds the outcome data for a single test action (A
// single test rule can result in multiple actions due to sharding and
// runs_per_test settings.)
message TestResultData {
  // The following two fields are used for TestRunnerAction caching.
  // This reflects the fact that failing tests are successful
  // actions that might be cached, depending on option settings.
  optional bool cachable = 1;
  optional bool test_passed = 2;

  // Following data is informational.
  optional BlazeTestStatus status = 3 [default = NO_STATUS];
  optional string status_details = 16;
  optional int32 exit_code = 17;
  repeated string failed_logs = 4;
  repeated string warning = 5;
  optional bool has_coverage = 6;

  // Returns if this was cached in remote execution.
  optional bool remotely_cached = 7;

  // Returns true if this was executed remotely
  optional bool is_remote_strategy = 8;

  // All associated test times (in ms).
  repeated int64 test_times = 9;

  // Passed log paths. Set if the test passed.
  optional string passed_log = 10;

  // Test times, without remote execution overhead (in ms).
  repeated int64 test_process_times = 11;

  // Total time in ms.
  optional int64 run_duration_millis = 12;

  // Start time of the test action in ms since the epoch.
  optional int64 start_time_millis_epoch = 15;

  // Additional build info
  optional TestCase test_case = 13;
  optional FailedTestCasesStatus failed_status = 14;
}
