blob: 23bca5f3ebfe68cbcd4642e59f414cea5260189a [file] [log] [blame]
# 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/components.gni")
import("//build/dist/component_manifest_resources.gni")
import("//build/test.gni")
import("//src/storage/fshost/generated_fshost_config.gni")
import("//tools/cmc/build/cmc.gni")
group("tests") {
testonly = true
deps = [ ":fshost-tests" ]
}
source_set("headers") {
sources = [ "constants.h" ]
}
source_set("launcher") {
visibility = [ ":*" ]
sources = [ "fdio.cc" ]
deps = [
"//sdk/lib/fdio",
"//sdk/lib/syslog/cpp",
"//zircon/system/ulib/fbl",
"//zircon/system/ulib/fidl",
"//zircon/system/ulib/zx",
]
}
source_set("fshost-registry") {
sources = [
"admin-server.cc",
"fs-manager.cc",
"fshost-boot-args.cc",
"lifecycle.cc",
]
public_deps = [
":config",
":inspect",
":launcher",
"//sdk/fidl/fuchsia.boot:fuchsia.boot_llcpp",
"//sdk/fidl/fuchsia.device:fuchsia.device_llcpp",
"//sdk/fidl/fuchsia.feedback:fuchsia.feedback_llcpp",
"//sdk/fidl/fuchsia.fshost:fuchsia.fshost_llcpp",
"//sdk/fidl/fuchsia.hardware.block.partition:fuchsia.hardware.block.partition_llcpp",
"//sdk/fidl/fuchsia.process.lifecycle:fuchsia.process.lifecycle_llcpp",
"//sdk/lib/fit",
"//sdk/lib/vfs/cpp",
"//src/lib/loader_service",
"//src/lib/storage/fs_management",
"//src/lib/storage/vfs/cpp",
"//src/storage/fidl/fuchsia.fs.startup:fuchsia.fs.startup_llcpp",
"//src/storage/fxfs:fuchsia.fxfs_llcpp",
"//src/storage/memfs:lib",
"//zircon/system/ulib/async-loop:async-loop-cpp",
"//zircon/system/ulib/async-loop:async-loop-default",
"//zircon/system/ulib/fdio-caller",
"//zircon/system/ulib/service:service-llcpp",
"//zircon/system/ulib/zx",
]
deps = [
"//sdk/lib/fdio",
"//src/lib/files",
"//src/sys/lib/stdout-to-debuglog/cpp",
"//zircon/system/ulib/fbl",
"//zircon/system/ulib/fidl-async:fidl-async-cpp",
]
}
source_set("inspect") {
sources = [
"inspect-manager.cc",
"inspect-manager.h",
]
public_deps = [
"//sdk/lib/fdio",
"//sdk/lib/sys/inspect/cpp",
"//sdk/lib/syslog/cpp",
"//src/lib/fsl",
"//src/lib/storage/fs_management",
"//src/lib/storage/vfs/cpp",
"//zircon/system/ulib/fbl",
]
}
source_set("block-watcher") {
configs += [ "//build/config:all_source" ]
sources = [
"block-device-manager.cc",
"block-device.cc",
"block-watcher.cc",
"copier.cc",
"encrypted-volume.cc",
"filesystem-mounter.cc",
"nand-device.cc",
"watcher.cc",
]
public_deps = [
":config",
":fshost-registry",
":launcher",
"//sdk/fidl/fuchsia.fshost:fuchsia.fshost_llcpp",
"//sdk/fidl/fuchsia.hardware.block.partition:fuchsia.hardware.block.partition_llcpp",
"//sdk/lib/fit",
"//sdk/lib/fit-promise",
"//src/lib/storage/vfs/cpp",
"//src/storage/blobfs",
"//src/storage/fidl/fuchsia.fs.startup:fuchsia.fs.startup_llcpp",
"//src/storage/fxfs:fuchsia.fxfs_llcpp",
"//zircon/system/ulib/async-loop:async-loop-cpp",
"//zircon/system/ulib/async-loop:async-loop-default",
"//zircon/system/ulib/fdio-caller",
"//zircon/system/ulib/zx",
]
deps = [
":headers",
"//sdk/fidl/fuchsia.boot:fuchsia.boot_llcpp",
"//sdk/fidl/fuchsia.device:fuchsia.device_llcpp",
"//sdk/fidl/fuchsia.hardware.block.encrypted:fuchsia.hardware.block.encrypted_llcpp",
"//sdk/fidl/fuchsia.hardware.block.verified:fuchsia.hardware.block.verified_llcpp",
"//sdk/fidl/fuchsia.hardware.block.volume:fuchsia.hardware.block.volume_llcpp",
"//sdk/fidl/fuchsia.io:fuchsia.io_llcpp",
"//sdk/lib/fdio",
"//sdk/lib/fit",
"//src/devices/block/drivers/block-verity:verified-volume-client",
"//src/lib/digest",
"//src/lib/files",
"//src/lib/loader_service",
"//src/lib/storage/fs_management",
"//src/lib/storage/ramdevice_client/cpp",
"//src/lib/storage/vfs/cpp",
"//src/lib/uuid:uuid",
"//src/security/zxcrypt:zxcrypt-client",
"//src/storage/bin/minfs:minfs-component",
"//src/storage/gpt",
"//src/storage/minfs",
"//src/sys/pkg/fidl/fuchsia.update.verify:fuchsia.update.verify_llcpp",
"//zircon/system/ulib/fbl",
"//zircon/system/ulib/fidl",
"//zircon/system/ulib/fidl-async:fidl-async-cpp",
"//zircon/system/ulib/service:service-llcpp",
"//zircon/system/ulib/trace",
"//zircon/system/ulib/trace-engine",
"//zircon/system/ulib/zx",
]
if (extract_minfs_metadata_on_corruption) {
sources += [ "extract-metadata.cc" ]
public_deps += [ "//src/storage/extractor/cpp:disk_extractor" ]
} else {
sources += [ "extract-metadata-noop.cc" ]
}
if (data_filesystem_format == "fxfs") {
deps += [ "//src/storage/fxfs:fxfs_component" ]
} else if (data_filesystem_format == "f2fs") {
deps += [ "//src/storage/bin/f2fs" ]
}
}
source_set("config") {
sources = [ "config.cc" ]
public_deps = [
":fshost_config",
"//sdk/fidl/fuchsia.boot:fuchsia.boot_llcpp",
"//zircon/system/ulib/fbl",
]
}
executable("fshost") {
if (is_fuchsia) {
configs += [ "//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",
":config",
":fshost-registry",
"//sdk/fidl/fuchsia.boot:fuchsia.boot_llcpp",
"//sdk/fidl/fuchsia.fshost:fuchsia.fshost_llcpp",
"//sdk/fidl/fuchsia.io:fuchsia.io_llcpp",
"//src/lib/storage/fs_management",
"//src/lib/storage/ramdevice_client/cpp",
"//third_party/zstd",
"//zircon/system/ulib/fidl-async:fidl-async-cpp",
]
if (data_filesystem_format == "fxfs") {
deps += [ "//src/storage/fxfs-crypt" ]
}
}
test("fshost_test") {
sources = [
"fshost-boot-args-test.cc",
"fshost-test.cc",
]
deps = [
":block-watcher",
":config",
":fshost-registry",
"//sdk/fidl/fuchsia.boot:fuchsia.boot_llcpp",
"//sdk/fidl/fuchsia.io:fuchsia.io_llcpp",
"//sdk/lib/fit-promise",
"//src/lib/fxl/test:gtest_main",
"//zircon/system/ulib/fidl-async",
"//zircon/system/ulib/fidl-async:fidl-async-cpp",
"//zircon/system/ulib/mock-boot-arguments",
]
}
# 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") {
deps = [ ":fshost_test" ]
}
test("fshost_inspect_test") {
sources = [ "inspect-manager-test.cc" ]
deps = [
":inspect",
"//src/storage/memfs:cpp",
"//zircon/system/ulib/async",
"//zircon/system/ulib/async-loop:async-loop-cpp",
"//zircon/system/ulib/async-loop:async-loop-default",
"//zircon/system/ulib/inspect",
"//zircon/system/ulib/zxtest",
]
}
fuchsia_unittest_component("fshost-inspect-test") {
deps = [ ":fshost_inspect_test" ]
}
test("copier_test") {
sources = [
"copier.cc",
"copier_test.cc",
]
deps = [
"//sdk/lib/syslog/cpp:cpp-macros",
"//src/lib/files",
"//src/lib/fxl/test:gtest_main",
"//src/sys/test_runners:tmp_storage",
"//zircon/system/ulib/fbl",
"//zircon/system/ulib/zxc",
]
}
fuchsia_unittest_component("copier-test") {
deps = [ ":copier_test" ]
}
# Generates a test component for the fshost integration tests.
#
# test_component_name (required)
# [string] The name of the test component, e.g. "test-fshost".
#
# test_component_target (required)
# [string] The build target for the test component, e.g. "//src/storage/fshost/testing:test-fshost".
#
# data_filesystem_format
# [string] One of "fxfs", "minfs", or "f2fs".
template("fshost_integration_test") {
assert(defined(invoker.test_component_name) &&
defined(invoker.test_component_target),
"Test component not specified")
_test_bin = "${target_name}-bin"
test(_test_bin) {
data_filesystem_format = invoker.data_filesystem_format
forward_variables_from(invoker, [ "test_component_name" ])
sources = [
"admin-server-test.cc",
"block-device-manager-test.cc",
"block-device-test.cc",
"block-watcher-test.cc",
"filesystem-mounter-test.cc",
"migration-test.cc",
"recovery-test.cc",
"testing/fshost_integration_test.cc",
"testing/fshost_integration_test.h",
"testing/mock-block-device.h",
]
deps = [
":block-watcher",
":config",
":headers",
"//sdk/fidl/fuchsia.boot:fuchsia.boot_llcpp",
"//sdk/fidl/fuchsia.component:fuchsia.component_llcpp",
"//sdk/fidl/fuchsia.device:fuchsia.device_llcpp",
"//sdk/fidl/fuchsia.hardware.block.volume:fuchsia.hardware.block.volume_llcpp",
"//sdk/fidl/fuchsia.io:fuchsia.io_llcpp_testing",
"//src/developer/forensics/public/fakes:fuchsia.feedback.testing_llcpp",
"//src/lib/files",
"//src/lib/fxl/test:gtest_main",
"//src/lib/storage/fs_management",
"//src/lib/storage/ramdevice_client/cpp",
"//src/lib/testing/predicates",
"//src/storage/bin/minfs:minfs-component",
"//src/storage/blobfs",
"//src/storage/fxfs:fxfs_component",
"//src/storage/fxfs-crypt",
"//src/storage/lib/utils:topological_path",
"//src/storage/minfs",
"//src/storage/testing:storage_driver_test_support",
"//src/sys/pkg/fidl/fuchsia.update.verify:fuchsia.update.verify_llcpp",
"//third_party/googletest:gmock",
"//zircon/system/ulib/fidl-async",
"//zircon/system/ulib/service:service-llcpp",
]
data_deps = [
"//src/storage/bin/mount",
"//src/storage/bin/umount",
]
defines = [
"DATA_FILESYSTEM_FORMAT=\"$data_filesystem_format\"",
"TEST_COMPONENT_NAME=\"$test_component_name\"",
]
}
_shard_target = "${target_name}-shard"
generated_file(_shard_target) {
testonly = true
contents = {
program = {
binary = "test/${_test_bin}"
}
}
outputs = [ "${target_out_dir}/${_shard_target}.json" ]
output_conversion = "json"
visibility = [ ":*" ]
}
_shard = get_target_outputs(":$_shard_target")
_shard = _shard[0]
_manifest_target = "${target_name}-manifest.cml"
cmc_merge("$_manifest_target") {
testonly = true
sources = [
"testing/meta/fshost_integration_test.cml",
_shard,
]
deps = [ ":$_shard_target" ]
}
_manifest = get_target_outputs(":$_manifest_target")
_manifest = _manifest[0]
fuchsia_component(target_name) {
testonly = true
forward_variables_from(invoker, [ "test_component_target" ])
manifest = _manifest
deps = [
":$_manifest_target",
":$_test_bin",
"//src/storage/testing:storage_driver_test_realm",
test_component_target,
]
}
}
fshost_integration_test("fshost-integration-test") {
test_component_name = "test-fshost"
test_component_target = "//src/storage/fshost/testing:test-fshost"
# Ideally these would come from the configuration of "test_component_target".
data_filesystem_format = "minfs"
}
fshost_integration_test("fshost-fxfs-integration-test") {
test_component_name = "test-fshost-fxfs"
test_component_target = "//src/storage/fshost/testing:test-fshost-fxfs"
# Ideally these would come from the configuration of "test_component_target".
data_filesystem_format = "fxfs"
}
fuchsia_test_package("fshost-tests") {
test_specs = {
log_settings = {
max_severity = "ERROR"
}
}
test_components = [
":fshost-fxfs-integration-test",
":fshost-integration-test",
":fshost-test",
":fshost-inspect-test",
":copier-test",
]
deps = [
"//sdk/fidl/fuchsia.io:fuchsia.io_llcpp_testing",
"//src/developer/forensics/public/fakes:fake_crash_reporter",
"//src/storage/bin/blobfs",
"//src/storage/bin/minfs",
"//src/storage/blobfs:decompressor-sandbox",
]
}
cmc_merge("fshost.cml") {
sources = [
"meta/base_fshost.cml",
"meta/config.cml",
"meta/cpp_fshost.cml",
"meta/real_fshost.cml",
]
if (!bootfs_only) {
if (data_filesystem_format == "fxfs") {
sources += [ "meta/fxfs_fshost.cml" ]
} else if (data_filesystem_format == "f2fs") {
sources += [ "meta/f2fs_fshost.cml" ]
} else {
sources += [ "meta/minfs_fshost.cml" ]
}
sources += [ "meta/core_fshost.cml" ]
}
}
fuchsia_component_manifest("fshost_manifest") {
component_name = "fshost"
manifest = get_target_outputs(":fshost.cml")
manifest = manifest[0]
deps = [ ":fshost.cml" ]
}
fuchsia_structured_config_cpp_elf_lib("fshost_config") {
cm_label = ":fshost_manifest"
}
group("bootfs") {
deps = [
":fshost",
":fshost_manifest",
]
}