blob: d9bdd8967d29c9d2fb4e37a071057b9600e518b7 [file] [log] [blame]
# Copyright 2024 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/host.gni")
import("//build/python/python_binary.gni")
import("//build/rust/rustc_binary.gni")
import("//build/testing/host_test.gni")
import("//build/testing/host_test_data.gni")
# Declares a host-side antlion test.
#
# Examples
#
# ```
# antlion_host_test("sl4f_sanity_test") {
# main_source = "Sl4fSanityTest.py"
# }
#
# antlion_host_test("wlan_rvr_test_2g") {
# main_source = "WlanRvrTest.py"
# test_params = "rvr_settings.yaml"
# test_cases = [ "test_rvr_11n_2g_*" ]
# }
# ```
#
# Parameters
#
# main_source
# The .py file defining the antlion test.
# Type: path
#
# sources (optional)
# Other files that are used in the test.
# Type: list(path)
# Default: empty list
#
# test_params (optional)
# Path to a YAML file with additional test parameters. This will be provided
# to the test in the antlion config under the "test_params" key.
# Type: string
#
# test_cases (optional)
# List of test cases to run. Defaults to running all test cases.
# Type: list(string)
#
# enable_honeydew (optional)
# Flag to enable using honeydew package
# Type: bool
#
# test_data_deps (optional)
# List of test data GN targets that are needed at runtime.
# Type: list(string)
# Default: empty list
#
# deps
# environments
# visibility
template("antlion_host_test") {
assert(defined(invoker.main_source), "main_source is required")
#
# Define antlion test python_binary().
#
_python_binary_name = "${target_name}.pyz"
_python_binary_target = "${target_name}_python_binary"
python_binary(_python_binary_target) {
forward_variables_from(invoker,
[
"main_source",
"sources",
])
output_name = _python_binary_name
main_callable = "test_runner.main" # Mobly-specific entry point.
deps = [ "//third_party/antlion" ]
testonly = true
visibility = [ ":*" ]
}
_test_dir = "${root_out_dir}/test_data/" + get_label_info(target_name, "dir")
#
# Define antlion test host_test_data().
#
_host_test_data_target = "${target_name}_test_data"
host_test_data(_host_test_data_target) {
testonly = true
visibility = [ ":*" ]
sources = [ get_label_info(":${_python_binary_target}", "target_out_dir") +
"/${_python_binary_name}" ]
outputs = [ "${_test_dir}/${_python_binary_name}" ]
deps = [ ":${_python_binary_target}" ]
if (defined(invoker.deps)) {
deps += invoker.deps
}
}
#
# Define SSH binary host_test_data().
#
_host_test_data_ssh = "${target_name}_test_data_ssh"
host_test_data(_host_test_data_ssh) {
testonly = true
visibility = [ ":*" ]
sources = [ "//prebuilt/third_party/openssh-portable/${host_os}-${host_cpu}/bin/ssh" ]
outputs = [ "${_test_dir}/ssh" ]
}
#
# Define Mobly test params YAML host_test_data().
#
if (defined(invoker.test_params)) {
_host_test_data_test_params = "${target_name}_test_data_test_params"
host_test_data(_host_test_data_test_params) {
testonly = true
visibility = [ ":*" ]
sources = [ invoker.test_params ]
outputs = [ "${_test_dir}/${invoker.test_params}" ]
}
}
#
# Define FFX binary host_test_data().
#
_host_test_data_ffx = "${target_name}_test_data_ffx"
host_test_data(_host_test_data_ffx) {
testonly = true
visibility = [ ":*" ]
sources = [ get_label_info("//src/developer/ffx", "root_out_dir") + "/ffx" ]
outputs = [ "${_test_dir}/ffx" ]
deps = [ "//src/developer/ffx:ffx_bin($host_toolchain)" ]
}
#
# Define the antlion host_test() using antlion-runner.
#
host_test(target_name) {
forward_variables_from(invoker,
[
"environments",
"visibility",
])
binary_path = "${root_out_dir}/antlion-runner"
args = [
"--python-bin",
rebase_path(python_exe_src, root_build_dir),
"--antlion-pyz",
rebase_path("${_test_dir}/${_python_binary_name}", root_build_dir),
"--out-dir",
rebase_path("${_test_dir}", root_build_dir),
"--ffx-binary",
rebase_path("${_test_dir}/ffx", root_build_dir),
"--ffx-subtools-search-path",
rebase_path(host_tools_dir, root_build_dir),
"--ssh-binary",
rebase_path("${_test_dir}/ssh", root_build_dir),
]
if (defined(invoker.test_cases)) {
args += invoker.test_cases
}
if (defined(invoker.enable_honeydew) && invoker.enable_honeydew) {
args += ["--enable-honeydew"]
}
data_deps = [ "//src/developer/ffx:suite_test_data" ]
deps = [
":${_host_test_data_ffx}",
":${_host_test_data_ssh}",
":${_host_test_data_target}",
"//build/python:interpreter",
"//third_party/antlion/runner",
]
if (defined(invoker.test_params)) {
args += [
"--test-params",
rebase_path("${_test_dir}/${invoker.test_params}", root_build_dir),
]
deps += [ ":${_host_test_data_test_params}" ]
}
if (defined(invoker.enable_honeydew) && invoker.enable_honeydew) {
deps += [ "//src/testing/end_to_end/honeydew" ]
}
if (defined(invoker.test_data_deps)) {
deps += invoker.test_data_deps
}
}
}