blob: d10c136fdec74e0efdc16f82665edc093f0c2bbc [file] [log] [blame]
# Copyright 2018 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("//src/media/audio/audio_core_package_v2.gni")
import("//src/virtualization/buildtools/linux_paths.gni")
import("//src/virtualization/buildtools/romfs_image.gni")
config("guest_test_util") {
visibility = [ "./*" ]
if (is_linux && current_cpu == "arm64") {
# On arm, termina_guest is a 64-bit kernel with a 32-bit userspace. If we don't use static
# linking those binaries will fail to run there.
rustflags = [
"-C",
"target-feature=+crt-static",
"-C",
"link-arg=-lgcc",
]
}
}
# Packages required to run the guest integration tests.
guest_packages = [
"//src/virtualization/bin/vmm",
"//src/virtualization/bin/host_vsock",
"//src/virtualization/packages",
# TODO(fxbug.dev/72386)
# Remove once audio test framework is migrated to RealmBuilder and virtio sound tests is using Cfv2
"//src/virtualization/bin",
]
linux_tests_label = "//src/virtualization/packages/debian_guest:tests"
resource("debian_tests_img") {
sources = [ get_label_info(linux_tests_label, "target_out_dir") +
"/debian/tests.romfs" ]
outputs = [ "data/linux_tests.img" ]
deps = [ linux_tests_label ]
}
termina_extras_label = "//src/virtualization/packages/termina_guest:extras"
resource("termina_extras_img") {
sources =
[ get_label_info(termina_extras_label, "target_out_dir") + "/vm_extras" ]
outputs = [ "data/vm_extras.img" ]
deps = [ termina_extras_label ]
}
group("tests") {
testonly = true
deps = [
":guest_unit_tests",
":virtualization_block_tests_pkg",
":virtualization_core_tests_pkg",
":virtualization_net_tests_pkg",
":virtualization_vsock_tests_pkg",
"hypervisor",
"virtio_input_test_util:tests($host_toolchain)",
]
# TODO(fxbug.dev/12616): These tests currently do not work on arm64.
if (current_cpu == "x64") {
deps += [
# TODO(fxbug.dev/64348): These tests needs to be reworked so that they
# interact correctly with Scenic.
# ":virtualization_gpu_tests_pkg",
# ":virtualization_input_tests_pkg",
":termina_integration_tests",
":virtualization_sound_tests_pkg",
]
}
# Ensure guest packages are available in the manifest.
data_deps = guest_packages
}
source_set("logger") {
visibility = [ ":*" ]
sources = [
"logger.cc",
"logger.h",
]
}
source_set("periodic_logger") {
visibility = [ ":*" ]
sources = [
"periodic_logger.cc",
"periodic_logger.h",
]
deps = [ "//src/lib/fxl" ]
public_deps = [ "//zircon/system/ulib/zx" ]
}
source_set("backtrace_watchdog") {
visibility = [ ":*" ]
sources = [
"backtrace_watchdog.cc",
"backtrace_watchdog.h",
]
deps = [
"//src/lib/fxl",
"//zircon/system/ulib/inspector",
"//zircon/system/ulib/task-utils",
]
public_deps = [ "//zircon/system/ulib/zx" ]
}
source_set("socket_logger") {
visibility = [
"//src/connectivity/network/testing/netemul/*",
"//src/virtualization/*",
]
sources = [
"socket_logger.cc",
"socket_logger.h",
]
public_deps = [
":logger",
"//src/lib/fsl",
"//zircon/system/ulib/async:async-cpp",
"//zircon/system/ulib/async-loop:async-loop-cpp",
"//zircon/system/ulib/zx",
]
}
source_set("guest_console") {
visibility = [
"//src/connectivity/network/testing/netemul/*",
"//src/virtualization/*",
]
sources = [
"guest_console.cc",
"guest_console.h",
"socket.cc",
"socket.h",
]
deps = [
"//sdk/fidl/fuchsia.virtualization",
"//src/lib/fxl",
]
public_deps = [
":logger",
"//zircon/system/ulib/zx",
]
}
source_set("guest_constants") {
visibility = [
"//src/connectivity/network/testing/netemul/*",
"//src/virtualization/*",
]
public = [ "guest_constants.h" ]
}
source_set("fake_netstack") {
testonly = true
visibility = [
"//src/connectivity/network/testing/netemul/*",
"//src/virtualization/*",
]
public = [ "fake_netstack.h" ]
sources = [ "fake_netstack.cc" ]
deps = [
"//sdk/fidl/fuchsia.hardware.network",
"//sdk/fidl/fuchsia.net.interfaces",
"//sdk/fidl/fuchsia.net.virtualization",
"//sdk/fidl/fuchsia.netstack",
"//sdk/lib/sys/component/cpp/testing:cpp",
"//sdk/lib/sys/cpp/testing:integration_fixture",
"//src/connectivity/lib/network-device/cpp",
"//src/lib/inet",
"//zircon/system/ulib/async:async-cpp",
"//zircon/system/ulib/async-loop:async-loop-cpp",
"//zircon/system/ulib/async-loop:async-loop-default",
]
public_deps = [
"//sdk/fidl/fuchsia.netstack",
"//sdk/lib/fit-promise",
"//sdk/lib/sys/cpp/testing:cpp",
]
}
source_set("fake_scenic") {
visibility = [ ":*" ]
testonly = true
sources = [
"fake_scenic.cc",
"fake_scenic.h",
]
deps = [
"//sdk/lib/sys/component/cpp/testing:cpp",
"//sdk/lib/sys/cpp/testing:integration_fixture",
"//src/lib/fostr/fidl/fuchsia.ui.gfx",
"//src/lib/fostr/fidl/fuchsia.ui.scenic",
"//src/lib/fxl",
]
public_deps = [ "//sdk/fidl/fuchsia.ui.scenic" ]
}
executable("unit_tests") {
testonly = true
output_name = "guest_unit_tests"
sources = [
"guest_console_test.cc",
"periodic_logger_test.cc",
]
deps = [
":guest_console",
":periodic_logger",
"//src/lib/fxl/test:gtest_main",
"//third_party/googletest:gtest",
]
}
source_set("test_main") {
testonly = true
visibility = [ ":*" ]
sources = [ "test_main.cc" ]
deps = [
":logger",
"//src/lib/fxl/test:test_settings",
"//third_party/googletest:gtest",
]
}
source_set("lib") {
visibility = [ ":*" ]
testonly = true
sources = [
"enclosed_guest.cc",
"enclosed_guest.h",
"guest_test.h",
]
deps = [
":backtrace_watchdog",
":guest_console",
":guest_constants",
":periodic_logger",
":socket_logger",
"//sdk/fidl/fuchsia.kernel",
"//sdk/fidl/fuchsia.logger",
"//sdk/fidl/fuchsia.net.virtualization",
"//sdk/fidl/fuchsia.scheduler",
"//sdk/fidl/fuchsia.sysinfo",
"//sdk/fidl/fuchsia.sysmem",
"//sdk/fidl/fuchsia.tracing.provider",
"//sdk/lib/fit-promise",
"//sdk/lib/sys/component/cpp/testing:cpp",
"//src/virtualization/lib/guest_config",
"//third_party/googletest:gmock",
"//zircon/system/ulib/zxc",
]
public_deps = [
":fake_netstack",
":fake_scenic",
"//sdk/lib/sys/cpp/testing:integration_fixture",
"//src/virtualization/lib/grpc",
"//src/virtualization/lib/vsh:client",
"//src/virtualization/third_party/vm_tools:vm_cc_proto",
"//zircon/system/ulib/async:async-cpp",
"//zircon/system/ulib/async-loop:async-loop-cpp",
"//zircon/system/ulib/async-loop:async-loop-default",
]
}
fuchsia_unittest_package("guest_unit_tests") {
deps = [ ":unit_tests" ]
}
executable("virtualization_core_tests") {
visibility = [ ":*" ]
testonly = true
sources = [ "core_tests.cc" ]
deps = [
":guest_console",
":lib",
":test_main",
"//sdk/lib/sys/component/cpp/testing:cpp",
"//sdk/lib/sys/cpp/testing:integration_fixture",
"//src/lib/json_parser",
"//third_party/googletest:gmock",
"//third_party/re2",
]
}
group("test_images") {
testonly = true
deps = [
":termina_extras_img",
":debian_tests_img",
":linux_extras_img",
termina_extras_label,
linux_tests_label,
] + guest_packages
}
fuchsia_test_component("virtualization_core_tests_cmp") {
component_name = "virtualization_core_tests"
deps = [
":test_images",
":virtualization_core_tests",
] + guest_packages
manifest = "meta/virtualization_core_tests.cml"
}
fuchsia_test_package("virtualization_core_tests_pkg") {
package_name = "virtualization-core-tests"
test_components = [ ":virtualization_core_tests_cmp" ]
test_specs = {
environments = guest_envs
log_settings = {
max_severity = "ERROR"
}
}
}
executable("virtualization_block_tests") {
visibility = [ ":*" ]
testonly = true
sources = [ "virtio_block_tests.cc" ]
deps = [
":guest_console",
":lib",
":test_main",
"//sdk/lib/sys/component/cpp/testing:cpp",
"//sdk/lib/sys/cpp/testing:integration_fixture",
"//src/virtualization/bin/vmm/device:lib",
"//src/virtualization/bin/vmm/device:qcow_test_data",
"//third_party/googletest:gmock",
]
}
fuchsia_test_component("virtualization_block_tests_cmp") {
component_name = "virtualization_block_tests"
deps = [
":test_images",
":virtualization_block_tests",
] + guest_packages
manifest = "meta/virtualization_block_tests.cml"
}
fuchsia_test_package("virtualization_block_tests_pkg") {
package_name = "virtualization-block-tests"
test_components = [ ":virtualization_block_tests_cmp" ]
test_specs = {
environments = guest_envs
log_settings = {
max_severity = "ERROR"
}
}
}
executable("virtualization_gpu_tests") {
visibility = [ ":*" ]
testonly = true
sources = [ "virtio_gpu_tests.cc" ]
deps = [
":guest_console",
":lib",
":periodic_logger",
":test_main",
"//sdk/lib/sys/component/cpp/testing:cpp",
"//sdk/lib/sys/cpp/testing:integration_fixture",
"//third_party/googletest:gmock",
]
}
fuchsia_test_component("virtualization_gpu_tests_cmp") {
component_name = "virtualization_gpu_tests"
deps = [
":test_images",
":virtualization_gpu_tests",
] + guest_packages
manifest = "meta/virtualization_gpu_tests.cml"
}
fuchsia_test_package("virtualization_gpu_tests_pkg") {
package_name = "virtualization-gpu-tests"
test_components = [ ":virtualization_gpu_tests_cmp" ]
test_specs = {
environments = guest_envs
log_settings = {
max_severity = "ERROR"
}
}
}
executable("virtualization_input_tests") {
visibility = [ ":*" ]
testonly = true
sources = [ "virtio_input_tests.cc" ]
deps = [
":guest_console",
":lib",
":test_main",
"//sdk/lib/sys/component/cpp/testing:cpp",
"//sdk/lib/sys/cpp/testing:integration_fixture",
]
}
fuchsia_test_component("virtualization_input_tests_cmp") {
component_name = "virtualization_input_tests"
deps = [
":test_images",
":virtualization_input_tests",
] + guest_packages
manifest = "meta/virtualization_input_tests.cml"
}
fuchsia_test_package("virtualization_input_tests_pkg") {
package_name = "virtualization-input-tests"
test_components = [ ":virtualization_input_tests_cmp" ]
test_specs = {
environments = guest_envs
log_settings = {
max_severity = "ERROR"
}
}
}
executable("virtualization_net_tests") {
visibility = [ ":*" ]
testonly = true
sources = [ "virtio_net_tests.cc" ]
deps = [
":guest_console",
":lib",
":test_main",
"//sdk/lib/sys/component/cpp/testing:cpp",
"//sdk/lib/sys/cpp/testing:integration_fixture",
"//src/lib/inet",
"//third_party/googletest:gmock",
]
}
fuchsia_test_component("virtualization_net_tests_cmp") {
component_name = "virtualization_net_tests"
deps = [
":test_images",
":virtualization_net_tests",
] + guest_packages
manifest = "meta/virtualization_net_tests.cml"
}
fuchsia_test_package("virtualization_net_tests_pkg") {
package_name = "virtualization-net-tests"
test_components = [ ":virtualization_net_tests_cmp" ]
test_specs = {
environments = guest_envs
log_settings = {
max_severity = "ERROR"
}
}
}
executable("virtualization_sound_tests") {
visibility = [ ":*" ]
testonly = true
sources = [ "virtio_sound_tests.cc" ]
deps = [
":guest_console",
":lib",
":test_main",
"//sdk/lib/sys/component/cpp/testing:cpp",
"//src/lib/files",
"//src/media/audio/audio_core/testing/integration:hermetic_audio_test",
"//src/media/audio/lib/format",
"//third_party/googletest:gmock",
]
}
fuchsia_test_component("virtualization_sound_tests_cmp") {
component_name = "virtualization_sound_tests"
deps = [
":test_images",
":virtualization_sound_tests",
]
manifest = "meta/virtualization_sound_tests.cml"
}
audio_core_test_package("virtualization_sound_tests_pkg") {
package_name = "virtualization-sound-tests"
test_components = [ ":virtualization_sound_tests_cmp" ]
test_specs = {
environments = guest_envs
log_settings = {
max_severity = "ERROR"
}
}
audio_core_manifest_shards = [
"//src/media/audio/audio_core/meta/audio_core.shard.for_integration_tests.cml",
"//src/media/audio/audio_core/meta/audio_core.shard.ultrasound.cml",
]
}
executable("virtualization_vsock_tests") {
visibility = [ ":*" ]
testonly = true
sources = [ "virtio_vsock_tests.cc" ]
deps = [
":guest_console",
":lib",
":test_main",
"//sdk/lib/sys/component/cpp/testing:cpp",
"//sdk/lib/sys/cpp/testing:integration_fixture",
"//third_party/googletest:gmock",
]
}
fuchsia_test_component("virtualization_vsock_tests_cmp") {
component_name = "virtualization_vsock_tests"
deps = [
":test_images",
":virtualization_vsock_tests",
] + guest_packages
manifest = "meta/virtualization_vsock_tests.cml"
}
fuchsia_test_package("virtualization_vsock_tests_pkg") {
package_name = "virtualization-vsock-tests"
test_components = [ ":virtualization_vsock_tests_cmp" ]
test_specs = {
environments = guest_envs
log_settings = {
max_severity = "ERROR"
}
}
}
fuchsia_component("virtio_block_test_util_cmp") {
component_name = "virtio_block_test_util"
deps = [ "virtio_block_test_util" ]
manifest = "virtio_block_test_util/meta/virtio_block_test_util.cml"
}
fuchsia_component("virtio_rng_test_util_cmp") {
component_name = "virtio_rng_test_util"
deps = [ "virtio_rng_test_util" ]
manifest = "virtio_rng_test_util/meta/virtio_rng_test_util.cml"
}
fuchsia_component("virtio_net_test_util_cmp") {
component_name = "virtio_net_test_util"
deps = [ "virtio_net_test_util" ]
manifest = "virtio_net_test_util/meta/virtio_net_test_util.cml"
}
fuchsia_component("virtio_vsock_test_util_cmp") {
component_name = "virtio_vsock_test_util"
deps = [ "virtio_vsock_test_util" ]
manifest = "virtio_vsock_test_util/meta/virtio_vsock_test_util.cml"
}
fuchsia_shell_package("virtualization_test_utils_pkg") {
package_name = "virtualization-test-utils"
deps = [
":virtio_block_test_util_cmp",
":virtio_net_test_util_cmp",
":virtio_rng_test_util_cmp",
":virtio_vsock_test_util_cmp",
]
}
romfs_image("extras") {
testonly = true
deps = [
"//src/graphics/lib/magma/tests/integration:virtmagma_conformance_tests(${linux_exe_toolchain})",
"//src/graphics/lib/magma/tests_linux/unit_tests:virtmagma_vulkan_unit_tests(${linux_exe_toolchain})",
]
inputs = [
"${linux_exe_path}/virtmagma_vulkan_unit_tests",
"${linux_exe_path}/virtmagma_conformance_tests",
"//src/virtualization/tests/testdata/stereo_ramp_48khz_16bit.wav",
]
output = "$target_out_dir/linux/extras.img"
}
executable("termina_integration_tests_bin") {
visibility = [ ":*" ]
output_name = "termina_integration_tests"
testonly = true
sources = [
"virtio_magma_tests.cc",
"virtio_wl_tests.cc",
]
deps = [
":lib",
":test_main",
"//sdk/lib/sys/component/cpp/testing:cpp",
"//sdk/lib/sys/cpp/testing:integration_fixture",
"//third_party/googletest:gtest",
]
}
group("termina") {
testonly = true
deps = guest_packages
deps += [ ":termina_integration_tests" ]
}
resource("linux_extras_img") {
testonly = true
sources = [ "$target_out_dir/linux/extras.img" ]
outputs = [ "data/extras.img" ]
deps = [ ":extras" ]
}
fuchsia_test_component("termina_integration_tests_cmp") {
component_name = "termina_integration_tests"
deps = [
":termina_integration_tests_bin",
":test_images",
]
manifest = "meta/termina_integration_tests.cml"
}
fuchsia_test_package("termina_integration_tests") {
test_components = [ ":termina_integration_tests_cmp" ]
test_specs = {
environments = [ nuc_env ]
log_settings = {
max_severity = "ERROR"
}
}
}