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

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

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

