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

import("//build/dist/component_manifest_resources.gni")
import("//build/test.gni")
import("//src/sys/build/components.gni")
import("//zircon/system/ulib/devmgr-integration-test/isolated_devmgr.gni")

group("tests") {
  testonly = true
  deps = [ ":fshost-tests" ]
}

source_set("launcher") {
  visibility = [ ":*" ]
  sources = [ "fdio.cc" ]
  deps = [
    "//sdk/lib/fdio",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fidl",
    "//zircon/public/lib/zircon-internal",
    "//zircon/public/lib/zx",
  ]
}

source_set("fshost-registry") {
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [
    "admin-server.cc",
    "deprecated-loader-service.cc",
    "fs-manager.cc",
    "fshost-boot-args.cc",
    "lifecycle.cc",
    "registry.cc",
    "registry_vnode.cc",
  ]
  public_deps = [
    ":inspect",
    ":launcher",
    ":metrics",
    "//sdk/fidl/fuchsia.boot:fuchsia.boot_llcpp",
    "//sdk/fidl/fuchsia.fshost:fuchsia.fshost_llcpp",
    "//sdk/fidl/fuchsia.process.lifecycle:fuchsia.process.lifecycle_llcpp",
    "//sdk/lib/vfs/cpp",
    "//src/lib/loader_service",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/zircon-internal",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/fs",
    "//zircon/system/ulib/memfs",
  ]
  deps = [
    "//sdk/lib/fdio",
    "//src/lib/files",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/zircon-internal",
    "//zircon/system/ulib/fidl-async:fidl-async-cpp",
    "//zircon/system/ulib/memfs:memfs-cpp",
  ]
}

source_set("inspect") {
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [
    "inspect-manager.cc",
    "inspect-manager.h",
  ]
  public_deps = [
    "//sdk/lib/fdio",
    "//sdk/lib/sys/inspect/cpp",
    "//src/lib/fsl",
    "//zircon/public/lib/fbl",
    "//zircon/system/ulib/fs",
    "//zircon/system/ulib/memfs",
  ]
}

source_set("metrics") {
  sources = [
    "metrics.cc",
    "metrics.h",
  ]
  public_deps = [
    "//zircon/public/lib/async-cpp",
    "//zircon/system/ulib/cobalt-client",
    "//zircon/system/ulib/fs/metrics:metrics-cobalt",
  ]
  deps = [
    "//zircon/system/ulib/cobalt-client",
    "//zircon/system/ulib/fs/metrics:metrics-cobalt",
    "//zircon/system/ulib/fs/metrics:metrics-inspect",
  ]
}

source_set("block-watcher") {
  configs += [
    "//build/unification/config:zircon-migrated",
    "//build/config:all_source",
  ]
  sources = [
    "block-device-manager.cc",
    "block-device.cc",
    "block-watcher.cc",
    "encrypted-volume.cc",
    "filesystem-mounter.cc",
    "fshost-fs-provider.cc",
    "pkgfs-launcher.cc",
    "pkgfs-loader-service.cc",
  ]
  public_deps = [
    ":fshost-registry",
    ":launcher",
    ":metrics",
    "//sdk/fidl/fuchsia.fshost:fuchsia.fshost_llcpp",
    "//sdk/fidl/fuchsia.hardware.block.partition:fuchsia.hardware.block.partition_llcpp",
    "//src/storage/blobfs",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/zircon-internal",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/fdio-caller",
    "//zircon/system/ulib/fs",
    "//zircon/system/ulib/memfs",
  ]
  deps = [
    "//sdk/fidl/fuchsia.boot:fuchsia.boot_c",
    "//sdk/fidl/fuchsia.boot:fuchsia.boot_llcpp",
    "//sdk/fidl/fuchsia.device:fuchsia.device_c",
    "//sdk/fidl/fuchsia.device:fuchsia.device_llcpp",
    "//sdk/fidl/fuchsia.hardware.block:fuchsia.hardware.block_c",
    "//sdk/fidl/fuchsia.hardware.block.encrypted:fuchsia.hardware.block.encrypted_c",
    "//sdk/fidl/fuchsia.hardware.block.partition:fuchsia.hardware.block.partition_c",
    "//sdk/fidl/fuchsia.hardware.block.verified:fuchsia.hardware.block.verified_llcpp",
    "//sdk/lib/fdio",
    "//src/devices/block/drivers/block-verity:verified-volume-client",
    "//src/lib/loader_service",
    "//src/security/zxcrypt:zxcrypt-fdio",
    "//src/storage/minfs",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fidl",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/zircon-internal",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/digest",
    "//zircon/system/ulib/fidl-async:fidl-async-cpp",
    "//zircon/system/ulib/fs",
    "//zircon/system/ulib/fs-management",
    "//zircon/system/ulib/gpt",
    "//zircon/system/ulib/ramdevice-client",
    "//zircon/system/ulib/trace",
    "//zircon/system/ulib/trace-engine",
  ]
}

executable("fshost") {
  if (is_fuchsia) {
    configs += [
      "//build/unification/config:zircon-migrated",
      "//build/config:all_source",
    ]
  }
  if (is_fuchsia) {
    fdio_config = [ "//build/config/fuchsia:fdio_config" ]
    if (configs + fdio_config - fdio_config != configs) {
      configs -= fdio_config
    }
  }
  sources = [ "main.cc" ]
  deps = [
    ":block-watcher",
    ":fshost-registry",
    ":metrics",
    "//sdk/fidl/fuchsia.boot:fuchsia.boot_c",
    "//sdk/fidl/fuchsia.boot:fuchsia.boot_llcpp",
    "//sdk/fidl/fuchsia.fshost:fuchsia.fshost_c",
    "//sdk/fidl/fuchsia.fshost:fuchsia.fshost_llcpp",
    "//sdk/fidl/fuchsia.io:fuchsia.io_llcpp",
    "//sdk/fidl/fuchsia.ldsvc:fuchsia.ldsvc_c",
    "//src/sys/lib/stdout-to-debuglog/cpp",
    "//zircon/system/ulib/cobalt-client",
    "//zircon/system/ulib/fidl-async:fidl-async-cpp",
    "//zircon/system/ulib/fs-management",
    "//zircon/system/ulib/ramdevice-client",
    "//zircon/system/ulib/zbi-bootfs",
  ]
}

test("fshost_test") {
  sources = [
    "delayed-outdir-test.cc",
    "fshost-boot-args-test.cc",
    "fshost-test.cc",
  ]
  deps = [
    ":block-watcher",
    ":fshost-registry",
    ":metrics",
    "//sdk/fidl/fuchsia.boot:fuchsia.boot_llcpp",
    "//sdk/fidl/fuchsia.io:fuchsia.io_c",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/cobalt-client",
    "//zircon/system/ulib/cobalt-client:in-memory-logger",
    "//zircon/system/ulib/fidl-async",
    "//zircon/system/ulib/fidl-async:fidl-async-cpp",
    "//zircon/system/ulib/mock-boot-arguments",
  ]

  # TODO(fxbug.dev/46432): Fix the leaks and remove this.
  deps += [ "//build/config/sanitizers:suppress-lsan.DO-NOT-USE-THIS" ]
}

# Include this target from a product config if you want to allow authoring
# factory partition contents in mutable mode and prevent opening block-verity
# volumes in verified read mode.
generated_resource("allow-authoring-factory") {
  outputs = [ "config/allow-authoring-factory" ]
  contents = "yes"

  # We should never allow authoring factory from a production, user-facing build.
  deps = [ "//build/validate:non_production_tag" ]
}

fuchsia_unittest_component("fshost-test") {
  executable_path = "test/fshost_test"
  deps = [ ":fshost_test" ]
}

# This is a separate test executable because loader_service_test_fixture uses gtest, but other
# tests here use zxtest.
test("fshost_loader_service_test") {
  sources = [
    "deprecated-loader-service-test.cc",
    "pkgfs-loader-service-test.cc",
  ]
  deps = [
    ":block-watcher",
    ":fshost-registry",
    "//src/lib/loader_service:loader_service_test_fixture",
    "//zircon/system/ulib/mock-boot-arguments",
  ]
}

fuchsia_unittest_component("fshost-loader-service-test") {
  manifest = "meta/fshost-loader-service-test.cmx"
  deps = [ ":fshost_loader_service_test" ]
}

test("fshost_inspect_test") {
  sources = [ "inspect-manager-test.cc" ]
  deps = [
    ":inspect",
    "//zircon/public/lib/async",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/inspect",
  ]
}

fuchsia_unittest_component("fshost-inspect-test") {
  executable_path = "test/fshost_inspect_test"
  deps = [ ":fshost_inspect_test" ]
}

test("fshost_metrics_test") {
  sources = [ "metrics-test.cc" ]
  deps = [
    ":metrics",
    "//sdk/fidl/fuchsia.boot:fuchsia.boot_llcpp",
    "//sdk/lib/fdio",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/async-testing",
    "//zircon/system/ulib/cobalt-client:in-memory-logger",
    "//zircon/system/ulib/fs/metrics:metrics-cobalt",
    "//zircon/system/ulib/fs/metrics:metrics-inspect",
  ]
}

fuchsia_unittest_component("fshost-metrics-test") {
  executable_path = "test/fshost_metrics_test"
  deps = [ ":fshost_metrics_test" ]
}

test("block_watcher_test") {
  sources = [
    "block-device-test.cc",
    "block-watcher-test.cc",
    "filesystem-mounter-test.cc",
  ]
  deps = [
    ":block-watcher",
    "//sdk/fidl/fuchsia.boot:fuchsia.boot_llcpp",
    "//sdk/fidl/fuchsia.device:fuchsia.device_llcpp",
    "//src/storage/blobfs",
    "//src/storage/minfs",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/cobalt-client:in-memory-logger",
    "//zircon/system/ulib/fidl-async",
    "//zircon/system/ulib/fs-management",
    "//zircon/system/ulib/fs/metrics:metrics-cobalt",
    "//zircon/system/ulib/ramdevice-client",
  ]
}

isolated_devmgr_unittest_component("block-watcher-test") {
  executable_path = "test/block_watcher_test"
  deps = [
    ":block_watcher_test",
    "//src/devices/block/drivers/core",
    "//src/devices/block/drivers/gpt",
    "//src/devices/block/drivers/ramdisk",
    "//src/devices/bus/drivers/platform",
    "//src/devices/tests/sysdev",
  ]
}

fuchsia_test_package("fshost-tests") {
  test_specs = {
    log_settings = {
      max_severity = "ERROR"
    }
  }
  test_components = [
    ":block-watcher-test",
    ":fshost-test",
    ":fshost-inspect-test",
    ":fshost-metrics-test",
    ":fshost-loader-service-test",
  ]
}

component_manifest_resources("meta") {
  sources = [ "meta/fshost.cml" ]
}

group("bootfs") {
  deps = [
    ":fshost",
    ":meta",
  ]
}

resource("no_minfs_zxcrypt") {
  sources = [ "no_minfs_zxcrypt_fshost_config" ]
  outputs = [ "config/fshost" ]
  deps = [ "//build/validate:non_production_tag" ]
}

# To be used when minfs is embedded within FVM within a ramdisk (e.g. recovery) and therefore
# doesn't require zxcrypt.
resource("minfs_ramdisk") {
  sources = [ "minfs_ramdisk_fshost_config" ]
  outputs = [ "config/fshost" ]
}
