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

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

import "google/protobuf/wrappers.proto";

message TestSuiteCommon {
  // Human-readable consistent name for a build target, test type pair.
  string display_name = 1;

  // Whether or not the test suite is considered critical.
  google.protobuf.BoolValue critical = 2;

  message TestSuiteGroup {
    string test_suite_group = 1;
  }
  // A list of groups to which this test suite belongs.
  // This is a key into other testingconfig modules.
  repeated TestSuiteGroup test_suite_groups = 3;

  // Whether this suite should be disabled by default. It will only be enabled
  // if some other rule forces it to be put into the test plan.
  bool disable_by_default = 4;
}

message HwTestCfg {
  enum HwTestSuiteType {
    HW_TEST_SUITE_TYPE_UNSPECIFIED = 0;
    AUTOTEST = 1;
    TAST = 2;
  }
  // Configuration for a hardware test suite.
  message HwTest {
    TestSuiteCommon common = 12;

    // Name of the test suite to run.
    string suite = 1;
    // The key that identifies a distinct type of device in Skylab.
    // Skylab uses the term "board", hence use of this otherwise controversial
    // word.
    // e.g. could use device_target 'caroline' to test the build_target
    // 'caroline-arcnext'.
    string skylab_board = 11;

    HwTestSuiteType hw_test_suite_type = 13;

    reserved 2 to 10;
  }

  repeated HwTest hw_test = 1;
}

message MoblabVmTestCfg {
  message MoblabTest {
    TestSuiteCommon common = 3;

    // Test type to be run.
    string test_type = 1;

    reserved 2;
  }

  repeated MoblabTest moblab_test = 1;
}

message TastVmTestCfg {
  message TastTestExpr {
    // A single tast test expression. See https://goo.gl/UPNEgT
    string test_expr = 1;
  }
  message TastVmTest {
    TestSuiteCommon common = 4;

    // String containing short human-readable name describing test suite.
    string suite_name = 1;
    // List of string expressions describing which tests to run; this
    // is passed directly to the 'tast run' command. See
    // https://goo.gl/UPNEgT for info about test expressions.
    repeated TastTestExpr tast_test_expr = 2;

    reserved 3;
  }

  repeated TastVmTest tast_vm_test = 1;
}

message VmTestCfg {
  message VmTest {
    TestSuiteCommon common = 8;

    // Test suite to be run in VMTest.
    string test_suite = 2;

    reserved 1, 3 to 7;
  }

  repeated VmTest vm_test = 1;
}


// Specifies a CrOS builder to target.
message TargetCriteria {
  // DEPRECATED: we need to target builder_name instead. build_target
  // has to go away. See https://crbug.com/1016536
  oneof target_type {
    // Any CrOS build target, such as "kevin". This should correspond to a
    // Portage overlay.
    string build_target = 2;
  }
  // A CrOS builder to target for testing, e.g. eve-postsubmit or
  // amd64-generic-kernel-v5_4-cq.
  string builder_name = 3;
}

// Details which testing is needed for a single CrOS build target.
message PerTargetTestRequirements {
  // Specifies the crieria for builds to target for testing.
  TargetCriteria target_criteria = 1;

  // These configure what testing is needed for these BuildCriteria.
  HwTestCfg hw_test_cfg = 3;
  MoblabVmTestCfg moblab_vm_test_cfg = 4;
  VmTestCfg vm_test_cfg = 5;
  TastVmTestCfg tast_vm_test_cfg = 6;
  TastVmTestCfg direct_tast_vm_test_cfg = 7;

  reserved 2;
}

// A listing of all testing that should be done for all CrOS builds.
message TargetTestRequirementsCfg {
  // The testing that should be performed for a single set of target criteria.
  repeated PerTargetTestRequirements per_target_test_requirements = 1;
}

