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

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" ]
}

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 = [
    "//src/ledger/cloud_provider_memory_diff:cloud_provider_memory_diff_tests",
    "//peridot/bin/sessionmgr/entity_provider_runner:entity_provider_runner_unittests",
    "//topaz/runtime/dart_runner/examples/goodbye_dart:goodbye_dart_test",
    "//src/connectivity/wlan/drivers/third_party/intel/iwlwifi/test:iwlwifi_test",
    "//src/ledger:ledger_tests",
    "//third_party/leveldb:leveldb_tests",
    "//peridot/tests:modular_tests",
    "//topaz/runtime/dart/utils:run_vmservice_object_tests",
    "//src/connectivity/wlan/wlanstack:wlanstack-tests",
    "//garnet/bin/zircon_benchmarks:zircon_benchmarks",
    "//src/graphics/lib/compute/spinel-rs:spinel-rs-tests",
    "//src/lib/ui/input-synthesis:input-synthesis-tests",
    "//garnet/tests/zircon/bringup:bringup_bootfs_test",
    "//garnet/drivers/video/amlogic-decoder:test_amlogic_codec_factory_package",
    "//src/lib/rust_backtrace:rust_backtrace_tests",
  ]
}

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 = [
    "//garnet/bin/appmgr:appmgr_unittests",
    "//garnet/bin/appmgr/integration_tests:appmgr_integration_tests",
    "//garnet/bin/appmgr/integration_tests/components:components_binary_tests",
    "//garnet/bin/appmgr/integration_tests/inspect:inspect_integration_tests",
    "//garnet/bin/appmgr/integration_tests/inspect:inspect_vmo_integration_tests",
    "//garnet/bin/appmgr/integration_tests/sandbox/features/shell:has_deprecated_shell",
    "//garnet/bin/archivist:archivist",
    "//garnet/bin/chrealm/integration_tests:chrealm_integrationtests",
    "//garnet/bin/cpuperf_provider:cpuperf_provider_tests",
    "//garnet/bin/glob:glob",
    "//garnet/bin/iquery/testing:iquery_golden_test",
    "//garnet/bin/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/go/src/amber:amber",
    "//garnet/go/src/amber/system_updater:system_updater_tests",
    "//garnet/public/lib/inspect/integration:libinspect_integration_tests",
    "//garnet/tests/benchmarks/input_latency:garnet_input_latency_benchmarks",
    "//garnet/tests/zircon/libdriver-integration-test:libdriver-integration-test",
    "//peridot/bin/module_resolver/module_package_indexer:module_package_indexer",
    "//peridot/bin/sessionctl:sessionctl",
    "//peridot/public/lib/modular_test_harness/cpp:test_harness_fixture_test",
    "//peridot/tests/sessionctl:sessionctl_integration_tests",
    "//src/connectivity/network/netstack:netstack_gotests",
    "//src/connectivity/network/testing/netemul/runner:netemul_devmgr",
    "//src/developer/debug/debug_agent:debug_agent",
    "//src/developer/debug/debug_agent:debug_agent_tests",
    "//src/developer/feedback_agent:feedback_agent",
    "//src/developer/feedback_agent/tests:feedback_agent_tests",
    "//src/lib/isolated_devmgr:isolated_devmgr_tests",
    "//src/recovery/factory_reset:factory_reset_tests",
  ]
}

group("system_deprecated_data_allowlist") {
  #  ________  _________  ________  ________
  # |\   ____\|\___   ___\\   __  \|\   __  \
  # \ \  \___|\|___ \  \_\ \  \|\  \ \  \|\  \
  #  \ \_____  \   \ \  \ \ \  \\\  \ \   ____\
  #   \|____|\  \   \ \  \ \ \  \\\  \ \  \___|
  #     ____\_\  \   \ \__\ \ \_______\ \__\
  #    |\_________\   \|__|  \|_______|\|__|
  #    \|_________|
  # This is an allowlist of components manifests that are allowed to include
  # the "deprecated-data" value in their "system" capability. Do not add to
  # this list. Instead, use the config_data() template to gather data from
  # other build entities that your component would like to use at run time.
  visibility = [ "//garnet/bin/appmgr/integration_tests/sandbox/features/system-deprecated-data:uses_system_deprecated_data" ]
}
