# Copyright 2023 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Tests that we want to run in an FYI builder.
# We do not want failures from these tests to break the tree.

############# STEPS FOR ADDING LACEWING SELF TEST TO INFRA - START #############
# 1. Identify which all <PRODUCT>.<BOARD> you like to run this test on
# 2. For each of the <PRODUCT>.<BOARD> there is a Test group and Package group
#    defined below. Accordingly update each of <PRODUCT>.<BOARD> Infra Test and
#    Package group where you like to run the test
#    Note: Update the Package group only if your test depends on any packages
############## STEPS FOR ADDING LACEWING SELF TEST TO INFRA - END ##############

# Infra Test and Package groups:
# For every <PRODUCT>.<BOARD> that we plans to run the tests on, below test
# and package groups are created:
#     Test groups
#         <PRODUCT>.<BOARD>
#             Stable (Tests that passed for at least 200+ consecutive runs)
#                 Tests that require SL4F transport, if any
#                 Tests that does not require SL4F transport
#             Unstable (Tests that are yet to pass 200 consecutive runs)
#                 Tests that require SL4F transport, if any
#                 Tests that does not require SL4F transport
#             Staging (Stable test group + Unstable test group)
#                 Tests that require SL4F transport, if any
#                 Tests that does not require SL4F transport
#     Package groups
#         <PRODUCT>.<BOARD>
#             Stable (Packages needed for Stable test groups)
#                 Packages needed for SL4F test groups, if any
#                 Packages needed for non-SL4F test groups
#             Unstable (Packages needed for Stable test groups)
#                 Packages needed for SL4F test groups, if any
#                 Packages needed for non-SL4F test groups
# Exception: Instead of `x64` board, we will use `nuc` and `emulator`.

# Note - Except in `Staging` groups, please refrain from referencing one group
# in another one (such as including `core_emulator_stable_tests` in
# `workbench_emulator_stable_tests`) as it is not guaranteed that every single
# test case supported by <product-#1>.<board-#1> is supported by other
# <product-#2>.<board-#2>

template("group_with_no_dir_target_deps") {
  group(target_name) {
    forward_variables_from(invoker, "*")
    assert_no_deps = [ ":*" ]
    if (defined(invoker.assert_no_deps)) {
      assert_no_deps += invoker.assert_no_deps
    }
  }
}

############################# Test groups - Start ##############################

# core.emulator
group_with_no_dir_target_deps("core_emulator_stable_sl4f_tests") {
  testonly = true
  public_deps = []
}

group_with_no_dir_target_deps("core_emulator_stable_tests") {
  testonly = true
  public_deps = [
    "examples/test_soft_reboot:soft_reboot_test_fc($host_toolchain)",
    "honeydew/tests/functional_tests:core_emulator_stable_tests",
  ]
}

group_with_no_dir_target_deps("core_emulator_unstable_sl4f_tests") {
  testonly = true
  public_deps = [
    "examples/test_soft_reboot:soft_reboot_test_fc_preferred($host_toolchain)",
  ]
}

group_with_no_dir_target_deps("core_emulator_unstable_tests") {
  testonly = true
  public_deps =
      [ "honeydew/tests/functional_tests:core_emulator_unstable_tests" ]
}

group("core_emulator_staging_sl4f_tests") {
  testonly = true
  public_deps = [
    ":core_emulator_stable_sl4f_tests",
    ":core_emulator_unstable_sl4f_tests",
  ]
}

group("core_emulator_staging_tests") {
  testonly = true
  public_deps = [
    ":core_emulator_stable_tests",
    ":core_emulator_unstable_tests",
  ]
}

# workbench.emulator
group_with_no_dir_target_deps("workbench_emulator_stable_tests") {
  testonly = true
  public_deps = [
    "examples/test_case_revive_example:test_case_revive_with_soft_reboot_fc($host_toolchain)",
    "examples/test_soft_reboot:soft_reboot_test_fc($host_toolchain)",
    "honeydew/tests/functional_tests:workbench_emulator_stable_tests",
  ]
}

group_with_no_dir_target_deps("workbench_emulator_unstable_tests") {
  testonly = true
  public_deps =
      [ "honeydew/tests/functional_tests:workbench_emulator_unstable_tests" ]
}

group("workbench_emulator_staging_tests") {
  testonly = true
  public_deps = [
    ":workbench_emulator_stable_tests",
    ":workbench_emulator_unstable_tests",
  ]
}

# core.vim3
group_with_no_dir_target_deps("core_vim3_stable_tests") {
  testonly = true
  public_deps = [
    "examples/test_power_cycle:power_cycle_test_fc($host_toolchain)",
    "examples/test_soft_reboot:soft_reboot_test_fc($host_toolchain)",
    "honeydew/tests/functional_tests:core_vim3_stable_tests",
  ]
}

group_with_no_dir_target_deps("core_vim3_unstable_tests") {
  testonly = true
  public_deps = [ "honeydew/tests/functional_tests:core_vim3_unstable_tests" ]
}

group("core_vim3_staging_tests") {
  testonly = true
  public_deps = [
    ":core_vim3_stable_tests",
    ":core_vim3_unstable_tests",
  ]
}

# workbench.vim3
group_with_no_dir_target_deps("workbench_vim3_stable_tests") {
  testonly = true
  public_deps = [
    "examples/test_case_revive_example:test_case_revive_with_hard_reboot_fc($host_toolchain)",
    "examples/test_case_revive_example:test_case_revive_with_soft_reboot_fc($host_toolchain)",
    "examples/test_power_cycle:power_cycle_test_fc($host_toolchain)",
    "examples/test_soft_reboot:soft_reboot_test_fc($host_toolchain)",
    "honeydew/tests/functional_tests:workbench_vim3_stable_tests",
  ]
}

group_with_no_dir_target_deps("workbench_vim3_unstable_tests") {
  testonly = true
  public_deps =
      [ "honeydew/tests/functional_tests:workbench_vim3_unstable_tests" ]
}

group("workbench_vim3_staging_tests") {
  testonly = true
  public_deps = [
    ":workbench_vim3_stable_tests",
    ":workbench_vim3_unstable_tests",
  ]
}

# core.nuc
group_with_no_dir_target_deps("core_nuc_stable_tests") {
  testonly = true
  public_deps = [
    "examples/test_soft_reboot:soft_reboot_test_fc($host_toolchain)",
    "honeydew/tests/functional_tests:core_nuc_stable_tests",
  ]
}

group_with_no_dir_target_deps("core_nuc_unstable_tests") {
  testonly = true
  public_deps = [ "honeydew/tests/functional_tests:core_nuc_unstable_tests" ]
}

group("core_nuc_staging_tests") {
  testonly = true
  public_deps = [
    ":core_nuc_stable_tests",
    ":core_nuc_unstable_tests",
  ]
}

# workbench.nuc
group_with_no_dir_target_deps("workbench_nuc_stable_tests") {
  testonly = true
  public_deps = [
    "examples/test_soft_reboot:soft_reboot_test_fc($host_toolchain)",
    "honeydew/tests/functional_tests:workbench_nuc_stable_tests",
  ]
}

group_with_no_dir_target_deps("workbench_nuc_unstable_tests") {
  testonly = true
  public_deps =
      [ "honeydew/tests/functional_tests:workbench_nuc_unstable_tests" ]
}

group("workbench_nuc_staging_tests") {
  testonly = true
  public_deps = [
    ":workbench_nuc_stable_tests",
    ":workbench_nuc_unstable_tests",
  ]
}

# starnix.vim3
# Note: This will be run on internal builder, hence using `starnix` here
# instead of internal `<PRODUCT>` name.
group_with_no_dir_target_deps("starnix_vim3_stable_tests") {
  testonly = true
  public_deps = [ "honeydew/tests/functional_tests:starnix_vim3_stable_tests" ]
}

group_with_no_dir_target_deps("starnix_vim3_unstable_tests") {
  testonly = true
  public_deps = [
    "examples/test_case_revive_example:test_case_revive_with_idle_suspend_auto_resume_fc($host_toolchain)",
    "examples/test_case_revive_example:test_case_revive_with_idle_suspend_timer_resume_fc($host_toolchain)",
    "honeydew/tests/functional_tests:starnix_vim3_unstable_tests",
  ]
}

group("starnix_vim3_staging_tests") {
  testonly = true
  public_deps = [
    ":starnix_vim3_stable_tests",
    ":starnix_vim3_unstable_tests",
  ]
}

############################## Test groups - End ###############################

############################ Package groups - Start ############################
# core.emulator
group_with_no_dir_target_deps("core_emulator_stable_sl4f_packages") {
  testonly = true
  public_deps = []
}

group_with_no_dir_target_deps("core_emulator_stable_packages") {
  testonly = true
  public_deps =
      [ "honeydew/tests/functional_tests:core_emulator_stable_packages" ]
}

group_with_no_dir_target_deps("core_emulator_unstable_sl4f_packages") {
  testonly = true
  public_deps = [ "honeydew:sl4f_packages" ]
}

group_with_no_dir_target_deps("core_emulator_unstable_packages") {
  testonly = true
  public_deps =
      [ "honeydew/tests/functional_tests:core_emulator_unstable_packages" ]
}

group("core_emulator_staging_sl4f_packages") {
  testonly = true
  public_deps = [
    ":core_emulator_stable_sl4f_packages",
    ":core_emulator_unstable_sl4f_packages",
  ]
}

group("core_emulator_staging_packages") {
  testonly = true
  public_deps = [
    ":core_emulator_stable_packages",
    ":core_emulator_unstable_packages",
  ]
}

# workbench.emulator
group_with_no_dir_target_deps("workbench_emulator_stable_packages") {
  testonly = true
  public_deps =
      [ "honeydew/tests/functional_tests:workbench_emulator_stable_packages" ]
}

group_with_no_dir_target_deps("workbench_emulator_unstable_packages") {
  testonly = true
  public_deps =
      [ "honeydew/tests/functional_tests:workbench_emulator_unstable_packages" ]
}

group("workbench_emulator_staging_packages") {
  testonly = true
  public_deps = [
    ":workbench_emulator_stable_packages",
    ":workbench_emulator_unstable_packages",
  ]
}

# core.vim3
group_with_no_dir_target_deps("core_vim3_stable_packages") {
  testonly = true
  public_deps = [ "honeydew/tests/functional_tests:core_vim3_stable_packages" ]
}

group_with_no_dir_target_deps("core_vim3_unstable_packages") {
  testonly = true
  public_deps =
      [ "honeydew/tests/functional_tests:core_vim3_unstable_packages" ]
}

group("core_vim3_staging_packages") {
  testonly = true
  public_deps = [
    ":core_vim3_stable_packages",
    ":core_vim3_unstable_packages",
  ]
}

# workbench.vim3
group_with_no_dir_target_deps("workbench_vim3_stable_packages") {
  testonly = true
  public_deps =
      [ "honeydew/tests/functional_tests:workbench_vim3_stable_packages" ]
}

group_with_no_dir_target_deps("workbench_vim3_unstable_packages") {
  testonly = true
  public_deps =
      [ "honeydew/tests/functional_tests:workbench_vim3_unstable_packages" ]
}

group("workbench_vim3_staging_packages") {
  testonly = true
  public_deps = [
    ":workbench_vim3_stable_packages",
    ":workbench_vim3_unstable_packages",
  ]
}

# core.nuc
group_with_no_dir_target_deps("core_nuc_stable_packages") {
  testonly = true
  public_deps = [ "honeydew/tests/functional_tests:core_nuc_stable_packages" ]
}

group_with_no_dir_target_deps("core_nuc_unstable_packages") {
  testonly = true
  public_deps = [ "honeydew/tests/functional_tests:core_nuc_unstable_packages" ]
}

group("core_nuc_staging_packages") {
  testonly = true
  public_deps = [
    ":core_nuc_stable_packages",
    ":core_nuc_unstable_packages",
  ]
}

# workbench.nuc
group_with_no_dir_target_deps("workbench_nuc_stable_packages") {
  testonly = true
  public_deps =
      [ "honeydew/tests/functional_tests:workbench_nuc_stable_packages" ]
}

group_with_no_dir_target_deps("workbench_nuc_unstable_packages") {
  testonly = true
  public_deps =
      [ "honeydew/tests/functional_tests:workbench_nuc_unstable_packages" ]
}

group("workbench_nuc_staging_packages") {
  testonly = true
  public_deps = [
    ":workbench_nuc_stable_packages",
    ":workbench_nuc_unstable_packages",
  ]
}

# starnix.vim3
# Note: This will be run on internal builder, hence using `starnix` here instead
# of internal `<PRODUCT>` name.
group_with_no_dir_target_deps("starnix_vim3_stable_packages") {
  testonly = true
  public_deps =
      [ "honeydew/tests/functional_tests:starnix_vim3_stable_packages" ]
}

group_with_no_dir_target_deps("starnix_vim3_unstable_packages") {
  testonly = true
  public_deps =
      [ "honeydew/tests/functional_tests:starnix_vim3_unstable_packages" ]
}

group("starnix_vim3_staging_packages") {
  testonly = true
  public_deps = [
    ":starnix_vim3_stable_packages",
    ":starnix_vim3_unstable_packages",
  ]
}
############################ Package groups - End ##############################
