# 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.

# WARNING: Known to infrastructure
#
# This group contains tests that may pull in virtualized guest images, which we
# want to keep out of our more commonly-used images as they are very heavy in
# terms of image size and test runtime.  See https://fxbug.dev/42073933 for more
# background.
group("virtualization") {
  testonly = true
  deps = [
    # Connectivity's netemul framework supports a "guest" setup where one of
    # the nodes in the network is a virtualized guest.
    "//src/connectivity/network/testing/netemul:tests-involving-guests",

    # The netemul framework is used to support some integration tests,
    # including tests that verify that a Fuchsia DHCPv4 and DHCPv6 client can
    # interoperate with a Linux DHCP server.
    "//src/connectivity/network/tests/integration:tests-involving-guests",

    # f2fs compatibility tests use a Linux guest to test that Fuchsia and Linux
    # can successfully interoperate bidirectionally with f2fs disk images.
    "//src/storage/f2fs:tests-involving-guests",

    # The virtualization integration tests themselves involve guest images.
    "//src/virtualization:tests-involving-guests",
  ]
}

# For use with the 'hermetic_test_package_labels' GN build argument.
# WARNING: Known to infrastructure
group("hermetic_tests") {
  testonly = true
  deps = []
  public_deps = []
  data_deps = []

  # Ensure that no tests are added to the non-hermetic tests group
  assert(
      deps + public_deps + data_deps == [],
      "The virtualization product does not support the running of non-hermetic tests in infra.")
}

# For use with the 'test_package_labels' GN build argument.
# WARNING: Known to infrastructure
group("non_hermetic_tests") {
  testonly = true
  deps = []
  public_deps = []
  data_deps = []

  # Ensure that no tests are added to the non-hermetic tests group
  assert(
      deps + public_deps + data_deps == [],
      "The virtualization product does not support the running of non-hermetic tests in infra.")
}

# For use with the 'e2e_test_labels' GN build argument.
# WARNING: Known to infrastructure
group("e2e_tests") {
  testonly = true
  deps = []
  public_deps = []
  data_deps = []

  # Ensure that no tests are added to the e2e_tests tests group
  assert(
      deps + public_deps + data_deps == [],
      "The virtualization product does not support the running of end-to-end tests in infra.")
}
