# 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/inspect:inspect_integration_tests",
    "//src/sys/appmgr/integration_tests/inspect:inspect_vmo_integration_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",
    "//garnet/bin/iquery/testing:iquery_golden_test",
    "//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/system_monitor/harvester:system_monitor_harvester",
    "//garnet/bin/system_monitor/harvester:system_monitor_harvester_tests",
    "//garnet/bin/trace:trace",
    "//garnet/bin/trace/tests:trace_tests",
    "//garnet/bin/zircon_benchmarks:zircon_benchmarks",
    "//src/lib/inspect_deprecated/integration:libinspect_integration_tests",
    "//garnet/tests/benchmarks/input_latency:garnet_input_latency_benchmarks",
    "//src/devices/tests/libdriver-integration-test",
    "//src/modular/bin/sessionctl:sessionctl",
    "//src/modular/lib/modular_test_harness/cpp:test_harness_fixture_test",
    "//src/modular/tests:modular_integration_tests",
    "//peridot/tests/sessionctl:sessionctl_integration_tests",
    "//src/connectivity/network/netstack:netstack_gotests",
    "//src/connectivity/network/testing/netemul/runner:netemul_devmgr",
    "//src/devices/coordinator:coordinator_tests",
    "//src/developer/memory/monitor/tests:memory_monitor_inspect_integration_tests",
    "//src/diagnostics/archivist:archivist",
    "//src/recovery/factory_reset:factory_reset_tests",
    "//sdk/lib/sys/inspect/cpp/tests:sys_inspect_cpp_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/developer/memory/monitor/tests:memory_monitor_tests",
    "//src/developer/memory/monitor:monitor",
    "//src/developer/memory/monitor/tests:memory_monitor_inspect_integration_tests",
    "//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/developer/memory/monitor:monitor",
    "//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",
  ]
}
