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

import "lab/license.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;

    // Key that further specifies the device to test on in Skylab.
    // e.g. for skylab_board 'octopus', may require skylab_model 'ampton'
    string skylab_model = 15;

    HwTestSuiteType hw_test_suite_type = 13;

    // The swarming pool in which to run the test suite, e.g. DUT_POOL_QUOTA.
    string pool = 14;

    // The licenses required for the DUT the test will run on.
    repeated lab.LicenseType licenses = 16;

    reserved 2 to 10;
  }

  repeated HwTest hw_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;
  VmTestCfg vm_test_cfg = 5;
  TastVmTestCfg direct_tast_vm_test_cfg = 7;

  reserved 2, 4, 6;
}

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

