blob: 3b8712310401b0f2edb2a76916620cab9c38e7cc [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("//build/dart/dart_component.gni")
import("//build/dart/dart_library.gni")
import("//build/fidl/fidl.gni")
import("//build/rust/rustc_binary.gni")
# Import definitions into the protocol being tested.
fidl("fidl_import") {
name = "fidl.test.imported"
sources = [ "compatibility_imported.test.fidl" ]
}
# The protocol used in the test.
fidl("fidl_service") {
name = "fidl.test.compatibility"
sources = [ "compatibility_service.test.fidl" ]
public_deps = [
":fidl_import",
"//zircon/vdso/zx",
]
}
# Shared between the hlcpp test server and the test harness
source_set("hlcpp_client_app") {
visibility = [ ":*" ]
sources = [
"hlcpp_client_app.cc",
"hlcpp_client_app.h",
]
deps = [
":fidl_service",
"//sdk/lib/sys/cpp",
"//zircon/system/ulib/zx",
]
}
## CPP (unified bindings / natural types) Test Server
executable("cpp_server") {
output_name = "cpp-server"
output_dir = target_out_dir
sources = [ "cpp_server.cc" ]
deps = [
":fidl_service_cpp",
"//sdk/lib/fdio",
"//sdk/lib/stdcompat",
"//sdk/lib/sys/cpp",
"//zircon/system/ulib/async-default",
"//zircon/system/ulib/async-loop",
"//zircon/system/ulib/async-loop:async-loop-cpp",
"//zircon/system/ulib/async-loop:async-loop-default",
]
}
fuchsia_component("cpp-server") {
manifest = "meta/cpp-server.cmx"
deps = [ ":cpp_server" ]
}
## HLCPP Test Server
executable("hlcpp_server") {
output_name = "hlcpp-server"
output_dir = target_out_dir
sources = [ "hlcpp_server.cc" ]
deps = [
":fidl_service",
":hlcpp_client_app",
"//sdk/lib/fidl/cpp",
"//sdk/lib/sys/cpp",
"//src/lib/fxl",
"//zircon/system/ulib/async-default",
"//zircon/system/ulib/async-loop:async-loop-cpp",
"//zircon/system/ulib/async-loop:async-loop-default",
]
}
fuchsia_component("hlcpp-server") {
manifest = "meta/hlcpp-server.cmx"
deps = [ ":hlcpp_server" ]
}
## LLCPP Test Server
executable("llcpp_server") {
output_name = "llcpp-server"
output_dir = target_out_dir
testonly = true
sources = [ "llcpp_server.cc" ]
deps = [
":fidl_service_llcpp_testing",
"//sdk/lib/fdio",
"//sdk/lib/sys/cpp",
"//zircon/system/ulib/async-default",
"//zircon/system/ulib/async-loop",
"//zircon/system/ulib/async-loop:async-loop-cpp",
"//zircon/system/ulib/async-loop:async-loop-default",
]
}
fuchsia_component("llcpp-server") {
manifest = "meta/llcpp-server.cmx"
deps = [ ":llcpp_server" ]
testonly = true
}
## Rust Test Server
rustc_binary("rust_server") {
output_name = "rust_server"
output_dir = target_out_dir
edition = "2021"
source_root = "rust_server.rs"
deps = [
":fidl_import-rustc",
":fidl_service-rustc",
"//sdk/fidl/fuchsia.sys:fuchsia.sys-rustc",
"//src/lib/fidl/rust/fidl",
"//src/lib/fuchsia-async",
"//src/lib/fuchsia-component",
"//third_party/rust_crates:anyhow",
"//third_party/rust_crates:futures",
"//third_party/rust_crates:thiserror",
]
sources = [ "rust_server.rs" ]
}
fuchsia_component("rust-server") {
manifest = "meta/rust-server.cmx"
deps = [ ":rust_server" ]
}
## Dart Test Server
dart_library("dart_server") {
package_name = "dart_server"
package_root = "dart"
sources = [ "main.dart" ]
deps = [
"//sdk/dart/fidl",
"//sdk/dart/fuchsia_services",
"//sdk/fidl/fuchsia.sys",
"//src/tests/fidl/compatibility:fidl_import",
"//src/tests/fidl/compatibility:fidl_service",
]
}
dart_component("dart-server") {
manifest = "meta/dart-server.cmx"
main_package = "dart_server"
deps = [ ":dart_server" ]
}
## Test Runner
executable("fidl_compatibility_test_executable") {
output_name = "fidl_compatibility_test"
testonly = true
sources = [ "compatibility_test.cc" ]
deps = [
":fidl_service",
":hlcpp_client_app",
"//sdk/lib/fidl/cpp",
"//sdk/lib/sys/cpp",
"//src/lib/files",
"//src/lib/fxl",
"//src/lib/fxl/test:test_settings",
"//third_party/googletest:gtest",
"//third_party/re2",
"//zircon/system/ulib/async-default",
"//zircon/system/ulib/async-loop:async-loop-cpp",
"//zircon/system/ulib/async-loop:async-loop-default",
]
}
## Tests
fidl_compatibility_tests = [
{
name = "minimal"
filter = "Minimal.*"
},
{
name = "struct"
filter = "Struct.*"
},
{
name = "array"
filter = "Array.*"
},
{
name = "vector"
filter = "Vector.*"
},
{
name = "table"
filter = "Table.*"
},
{
name = "union"
filter = "Union.*"
},
]
fidl_compatibilty_test_servers = [
"cpp",
"hlcpp",
"go",
"llcpp",
"rust",
"dart",
]
test_component_labels = []
foreach(test, fidl_compatibility_tests) {
component_name = "fidl_compatibility_test_${test.name}"
component_label = "${component_name}_component"
test_label = component_name
generate_label = "generate_${test.name}"
generate_output = "${target_gen_dir}/${component_name}.cmx"
test_component_labels += [ ":${component_label}" ]
## Generate a CMX
fuchsia_test_component_manifest(generate_label) {
deps = [ ":fidl_compatibility_test_executable" ]
visibility = [ ":*" ]
v2 = false
metadata = {
test_component_manifest_cmx = [
{
program = {
args = [ "--gtest_filter=${test.filter}" ] +
fidl_compatibilty_test_servers
}
sandbox = {
services = [ "fuchsia.sys.Launcher" ]
}
},
]
}
}
generate_output = get_target_outputs(":$generate_label")
generate_output = generate_output[0]
## The test component
fuchsia_test_component(component_label) {
visibility = [ ":*" ]
component_name = component_name
manifest = generate_output
manifest_deps = [ ":$generate_label" ]
}
}
fuchsia_component("fidl_compatibility_test_component") {
testonly = true
component_name = "fidl_compatibility_test"
manifest = "meta/fidl_compatibility_test.cmx"
deps = [ ":fidl_compatibility_test_executable" ]
}
fuchsia_test_package("fidl_compatibility_test_package") {
package_name = "fidl-compatibility-test"
deps = [
":cpp-server",
":dart-server",
":hlcpp-server",
":llcpp-server",
":rust-server",
"golang:go-server",
]
test_components = test_component_labels
}
group("compatibility") {
testonly = true
deps = [ ":fidl_compatibility_test_package" ]
}