blob: a30d7eb8f0ead453694160fbe1351f0d5db46578 [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/dist/resource.gni")
import("//build/test.gni")
import("//build/testing/zbi_test.gni")
import("//build/testing/zbi_test_success.gni")
import("//build/zbi/zbi_input.gni")
executable("bootsvc-integration-test") {
if (is_fuchsia) {
configs += [ "//build/unification/config:zircon-migrated" ]
}
if (is_fuchsia) {
fdio_config = [ "//build/config/fuchsia:fdio_config" ]
if (configs + fdio_config - fdio_config != configs) {
configs -= fdio_config
}
}
testonly = true
defines = [ "ZBI_TEST_SUCCESS_STRING=\"$zbi_test_success_string\"" ]
sources = [ "integration-test.cc" ]
deps = [
"..:util",
"//sdk/fidl/fuchsia.boot:fuchsia.boot_c",
"//sdk/fidl/fuchsia.io:fuchsia.io_llcpp",
"//sdk/lib/fdio",
"//zircon/public/lib/fbl",
"//zircon/public/lib/safemath",
"//zircon/public/lib/zx",
"//zircon/public/lib/zxtest",
]
# TODO(fxbug.dev/69585): This target uses raw zx::channel with LLCPP which is deprecated.
# Please migrate to typed channel APIs (fidl::ClientEnd<T>, fidl::ServerEnd<T>).
# See linked bug for details.
configs += [ "//build/cpp:fidl-llcpp-deprecated-raw-channels" ]
}
# This collects all the runtime dependencies of bootsvc-integration-test,
# to bring them into a test ZBI.
zbi_input("integration-test-deps") {
visibility = [ ":*" ]
testonly = true
deps = [
# Include the additional ZBI items that we test the behavior of in
# the integration test.
":integration-test-bootloader-file-invalid",
":integration-test-bootloader-file-valid",
":integration-test-crashlog",
":integration-test-factory-item",
":integration-test-image-arg",
":shutdown-flag",
# Include a boot argument from bootfs.
":integration-test-bootfs-arg",
# Include a fake file in the ZBI in meta/, so we can test against a file that shouldn't be
# executable.
":fake-cm-file",
# Include some fake libraries at both packaged and unpackaged locations to test that they can be
# opened executable. This is done so that the test doesn't need to look at different paths
# depending on whether the build is using sanitizers.
":fake-packaged-library",
":fake-unpackaged-library",
# Pull in the dependencies of devcoordinator so that we can test
# requesting libdriver.so from the bootsvc loader service.
# This could possibly be smaller, but seems pretty reasonable.
"//src/bringup/bin/device-name-provider",
"//src/bringup/bin/miscsvc",
"//src/bringup/bin/netsvc",
"//src/bringup/bin/pwrbtn-monitor",
"//src/bringup/bin/svchost:bootfs",
"//src/devices/internal/drivers/fragment",
"//src/devices/internal/drivers/fragment:fragment.proxy",
]
}
# The bootsvc integration tests exercises reading several different kinds of
# entries from the ZBI. Make sure we include one of each, so that we can test
# that bootsvc is exposing access to them correctly.
zbi_input("integration-test-factory-item") {
visibility = [ ":*" ]
testonly = true
type = "BOOTFS_FACTORY"
args = [ "--entry=IAmAFactoryItemHooray" ]
}
zbi_input("integration-test-crashlog") {
visibility = [ ":*" ]
testonly = true
type = "CRASHLOG"
args = [ "--entry=IAmACrashLogButNotAVeryLongOne" ]
}
# This flag is passed to the bootsvc so that when the test binary exits bootsvc
# shuts the system down.
zbi_input("shutdown-flag") {
visibility = [ ":*" ]
testonly = true
type = "cmdline"
args = [ "--entry=bootsvc.on_next_process_exit=shutdown" ]
}
# This file must contain a trailing newline, but you can't inline that in a
# shell command with --entry, so generate a file and pass that as the argument
# when building the bootsvc-integration-tests zbi.
generated_file("bootsvc-integration-test-image-arg") {
visibility = [ ":*" ]
testonly = true
outputs = [ "$target_out_dir/$target_name.txt" ]
# Writing out a list rather than a string means it gets a trailing newline.
contents = [ "testkey=testvalue" ]
}
zbi_input("integration-test-image-arg") {
visibility = [ ":*" ]
testonly = true
deps = [ ":bootsvc-integration-test-image-arg" ]
type = "IMAGE_ARGS"
sources = get_target_outputs(deps[0])
}
zbi_input("integration-test-bootloader-file-invalid") {
visibility = [ ":*" ]
testonly = true
type = "BOOTLOADER_FILE"
contents = "$0x23This filename is too short"
args = [ "--entry=$contents" ]
}
zbi_input("integration-test-bootloader-file-valid") {
visibility = [ ":*" ]
testonly = true
type = "BOOTLOADER_FILE"
contents = "$0x21This is the filename of the file!FILE CONTENTS ARE HERE"
args = [ "--entry=$contents" ]
}
generated_file("bootsvc-integration-test-bootfs-arg") {
visibility = [ ":*" ]
testonly = true
outputs = [ "$target_out_dir/$target_name.txt" ]
# Writing out a list rather than a string means it gets a trailing newline.
contents = [ "bootfskey=bootfsvalue" ]
}
resource("integration-test-bootfs-arg") {
visibility = [ ":*" ]
testonly = true
deps = [ ":bootsvc-integration-test-bootfs-arg" ]
sources = get_target_outputs(deps[0])
outputs = [ "config/devmgr" ]
}
generated_file("gen-dummy-file") {
outputs = [ "$target_out_dir/$target_name" ]
contents = "doesn't matter"
}
resource("fake-cm-file") {
visibility = [ ":*" ]
deps = [ ":gen-dummy-file" ]
sources = [ "$target_out_dir/gen-dummy-file" ]
outputs = [ "meta/fake.cm" ]
}
resource("fake-packaged-library") {
visibility = [ ":*" ]
deps = [ ":gen-dummy-file" ]
sources = [ "$target_out_dir/gen-dummy-file" ]
outputs = [ "pkg/dummy_pkg/lib/dummy.so" ]
}
resource("fake-unpackaged-library") {
visibility = [ ":*" ]
deps = [ ":gen-dummy-file" ]
sources = [ "$target_out_dir/gen-dummy-file" ]
outputs = [ "lib/dummy.so" ]
}
zbi_test("bootsvc-integration-tests") {
assert(current_cpu != "")
args = [
"userboot=bin/bootsvc",
"bootsvc.next=bin/bootsvc-integration-test,testargument",
"kernel.root-job.behavior=shutdown",
]
deps = [
# We need a zircon kernel to get off the ground at all.
"//zircon/kernel",
# Include bootsvc itself, since that's what we're testing here. Note
# that this uses the package() target for bootsvc, which comes with its
# own data_deps to exercise the `userboot.root` option to find bootsvc
# and its libraries inside a package directory in the BOOTFS.
"..",
# Include the integration test binary, which bootsvc will launch.
":bootsvc-integration-test",
# Include the test's own runtime dependencies.
":integration-test-deps",
]
output_dir = root_build_dir
output_name = "$target_name-$current_cpu"
}
zbi_test("bootsvc-root-job-test") {
args = [
"userboot=bin/bootsvc",
"bootsvc.next=test/core/zbi-child-test",
"kernel.root-job.behavior=shutdown",
"kernel.root-job.notice=$zbi_test_success_string",
]
deps = [
# We need a zircon kernel to get off the ground at all.
"//zircon/kernel",
# Include bootsvc itself, since that's what we're testing here. Note
# that this uses the package() target for bootsvc, which comes with its
# own data_deps to exercise the `userboot.root` option to find bootsvc
# and its libraries inside a package directory in the BOOTFS.
"..",
# Include the integration test binary, which bootsvc will launch.
"//src/bringup/lib/mexec/tests:smoke-zbi-test",
]
}