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

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

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

