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

# The tests listed in this target will be built by the default build.
group("tests") {
  testonly = true

  deps = [
    "sdk:tests",
  ]
}

group("deprecated_misc_storage_allowlist") {
  #  ________  _________  ________  ________
  # |\   ____\|\___   ___\\   __  \|\   __  \
  # \ \  \___|\|___ \  \_\ \  \|\  \ \  \|\  \
  #  \ \_____  \   \ \  \ \ \  \\\  \ \   ____\
  #   \|____|\  \   \ \  \ \ \  \\\  \ \  \___|
  #     ____\_\  \   \ \__\ \ \_______\ \__\
  #    |\_________\   \|__|  \|_______|\|__|
  #    \|_________|
  # This is an allowlist of packages that have components manifests that include
  # the "deprecated-misc-storage" feature. This is only intended to be used as
  # a temporary hack for OTAs. Do not add to this list.
  visibility = [
    "//garnet/go/src/amber:amber",
    "//garnet/bin/system-update-checker",
    "//garnet/bin/omaha_client",
  ]
}

group("deprecated_bare_tests_allowlist") {
  #  ________  _________  ________  ________
  # |\   ____\|\___   ___\\   __  \|\   __  \
  # \ \  \___|\|___ \  \_\ \  \|\  \ \  \|\  \
  #  \ \_____  \   \ \  \ \ \  \\\  \ \   ____\
  #   \|____|\  \   \ \  \ \ \  \\\  \ \  \___|
  #     ____\_\  \   \ \__\ \ \_______\ \__\
  #    |\_________\   \|__|  \|_______|\|__|
  #    \|_________|
  # This is an allowlist of packages that have bare tests which haven't been converted to components yet.
  # This is only intended to be used as a temporary allowlist. Do not add to this list.
  visibility = [
    "//topaz/runtime/dart_runner/examples/goodbye_dart:goodbye_dart_test",
    "//topaz/runtime/dart/utils:run_vmservice_object_tests",
  ]
}

group("global_data_allowlist") {
  # !DANGER!
  # Only Archivist may use this feature, it's use case will be ported to component_manager.
  # We use this to obtain storage stats in the archive output.
  # Note that there is a secondary allow-list to trigger this behavior at
  # //src/sys/appmgr/global_data_allowlist.txt
  visibility = [
    "//src/diagnostics/archivist:archivist",
    "//src/sys/appmgr/integration_tests/sandbox/features/global-data:has_global_data",
    "//src/sys/appmgr/integration_tests/sandbox/features/global-data:restricted_global_data",
  ]
}

group("deprecated_shell_allowlist") {
  #  ________  _________  ________  ________
  # |\   ____\|\___   ___\\   __  \|\   __  \
  # \ \  \___|\|___ \  \_\ \  \|\  \ \  \|\  \
  #  \ \_____  \   \ \  \ \ \  \\\  \ \   ____\
  #   \|____|\  \   \ \  \ \ \  \\\  \ \  \___|
  #     ____\_\  \   \ \__\ \ \_______\ \__\
  #    |\_________\   \|__|  \|_______|\|__|
  #    \|_________|
  # This is an allowlist of packages that have components manifests that include
  # the "deprecated-shell" feature. Do not add to this list. If the manifest
  # does not otherwise include the feature you need, please file a feature
  # request for that fine-grained feature to help us support least-privileged
  # components.
  visibility = [
    "//src/sys/appmgr:appmgr_unittests",
    "//src/sys/appmgr/integration_tests:appmgr_integration_tests",
    "//src/sys/appmgr/integration_tests/components:components_binary_tests",
    "//src/sys/appmgr/integration_tests/sandbox/features/shell:has_deprecated_shell",
    "//src/sys/appmgr/integration_tests/sandbox/features/hub:has_hub_deprecated_shell",
    "//src/sys/tools/chrealm/integration_tests:chrealm_integrationtests",
    "//garnet/bin/cpuperf_provider:cpuperf_provider_tests",
    "//garnet/bin/glob:glob",
    "//src/sys/tools/run/test:run_tests",
    "//garnet/bin/run_test_component/test:run_test_component_test",
    "//garnet/bin/sl4f:sl4f",
    "//garnet/bin/sshd-host:sshd-host",
    "//garnet/bin/trace:trace",
    "//garnet/bin/trace/tests:trace_tests",
    "//garnet/tests/benchmarks/input_latency:garnet_input_latency_benchmarks",
    "//src/devices/tests/libdriver-integration-test",
    "//src/connectivity/network/netstack:netstack_gotests",
    "//src/devices/coordinator:coordinator_tests",
    "//src/recovery/factory_reset:factory_reset_tests",
  ]
}

group("rootresource_svc_allowlist") {
  #  ________  _________  ________  ________
  # |\   ____\|\___   ___\\   __  \|\   __  \
  # \ \  \___|\|___ \  \_\ \  \|\  \ \  \|\  \
  #  \ \_____  \   \ \  \ \ \  \\\  \ \   ____\
  #   \|____|\  \   \ \  \ \ \  \\\  \ \  \___|
  #     ____\_\  \   \ \__\ \ \_______\ \__\
  #    |\_________\   \|__|  \|_______|\|__|
  #    \|_________|
  # This is an allowlist of packages that have components manifests that include
  # the "fuchsia.boot.RootResource" service. This is a highly privileged service that vends
  # out a very powerful capability. Do not add yourself to this unless this is the only
  # way to accomplish your goal and you have talked to the security team about this.
  visibility = [
    "//garnet/bin/system_monitor/harvester:system_monitor_harvester",
    "//garnet/bin/system_monitor/harvester:system_monitor_harvester_tests",
    "//garnet/bin/thermd:thermd",
    "//src/sys/component_manager:component_manager_tests",
    "//src/virtualization/bin/vmm:vmm",
  ]
}

group("rootjob_svc_allowlist") {
  #  ________  _________  ________  ________
  # |\   ____\|\___   ___\\   __  \|\   __  \
  # \ \  \___|\|___ \  \_\ \  \|\  \ \  \|\  \
  #  \ \_____  \   \ \  \ \ \  \\\  \ \   ____\
  #   \|____|\  \   \ \  \ \ \  \\\  \ \  \___|
  #     ____\_\  \   \ \__\ \ \_______\ \__\
  #    |\_________\   \|__|  \|_______|\|__|
  #    \|_________|
  # This is an allowlist of packages that have components manifests that include
  # the "fuchsia.boot.RootJob" service. This is a highly privileged service that vends
  # out a very powerful capability. Do not add yourself to this unless this is the only
  # way to accomplish your goal and you have talked to the security team about this.
  visibility = [
    "//garnet/bin/system_monitor/harvester:system_monitor_harvester",
    "//garnet/bin/system_monitor/harvester:system_monitor_harvester_tests",
    "//garnet/bin/ktrace_provider:ktrace_provider",
    "//garnet/bin/trace/tests:trace_tests",
    "//garnet/lib/debugger_utils:debugger_utils_tests",
    "//garnet/lib/inferior_control:inferior_control_tests",
    "//garnet/tests/benchmarks/input_latency:garnet_input_latency_benchmarks",
    "//src/developer/debug/debug_agent:debug_agent",
    "//src/developer/debug/debug_agent:debug_agent_tests",
    "//src/ledger:ledger_tests",
    "//src/ledger/bin/tests/benchmark:ledger_benchmarks",
    "//src/lib/process_builder:process_builder_tests",
    "//src/sys/component_manager:component_manager_tests",
  ]
}
