blob: 77a21040c2a33358ca21d95b7be52a5d5f34ac76 [file] [log] [blame]
#!/bin/bash
# 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.
### Test the common fx execution flows, namely fx help and fx <subcommand>
BT_FILE_DEPS=(
"scripts/fx"
"scripts/fx-help.awk"
"tools/devshell/vendor"
"tools/devshell/lib/vars.sh"
"tools/devshell/lib/prebuilt.sh"
)
BT_MOCKED_TOOLS=("tools/devshell/lib/metrics.sh")
BT_MKDIR_DEPS=(".jiri_root")
BT_INIT_TEMP_DIR() {
cat > tools/devshell/lib/metrics.sh.mock_side_effects <<EOF
function track-command-execution {
echo ""
}
function track-command-finished {
echo ""
}
EOF
}
BT_SET_UP() {
base_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)/../../../.."
fx="${base_dir}/scripts/fx"
BT_ASSERT_FILE_EXISTS "${fx}"
}
_create_subcommand() {
local subcommand="$1"
local subcommand_file="${base_dir}/$2/${subcommand}"
local subcommand_output="$3"
local summary="$4"
local category="Testing"
local long_description_1="$5"
local long_description_2="$6"
mkdir -p "$(dirname "${subcommand_file}")"
cat >"${subcommand_file}" <<EOF
#!/bin/bash
# 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.
### ${summary}
#### CATEGORY=${category}
## ${long_description_1}
## ${long_description_2}
echo "${subcommand_output}"
EOF
chmod u+x "${subcommand_file}"
BT_ASSERT_FILE_EXISTS "${subcommand_file}"
[[ -x "${subcommand_file}" ]]
BT_ASSERT_GOOD_STATUS $? "File ${subcommand_file} must be executable"
}
# test for `fx help`
TEST_fx-help() {
local subcommand="mycommand1"
local summary="Simple mock script used to test help extraction"
_create_subcommand "${subcommand}" "tools/devshell" "howdy!" "${summary}" "line1" "line2"
# check the command name and summary
BT_EXPECT_STRING_CONTAINS_SUBSTRING "$(${fx} help | grep "${subcommand}")" "${subcommand}"
BT_EXPECT_STRING_CONTAINS_SUBSTRING "$(${fx} help | grep "${subcommand}")" "${summary}"
}
# test for `fx help <subcommand>`
TEST_fx-help-subcommand() {
local subcommand="mycommand1"
local line1="Usage:"
local line2=" fx mysubcommand bla bla"
_create_subcommand "${subcommand}" "tools/devshell" "howdy!" "summary" "${line1}" "${line2}"
# check the long description
BT_EXPECT_STRING_CONTAINS_SUBSTRING "$(${fx} help "${subcommand}")" "${line1}"
BT_EXPECT_STRING_CONTAINS_SUBSTRING "$(${fx} help "${subcommand}")" "${line2}"
}
# executes a simple subcommand and checks its output
TEST_fx-subcommand-run() {
local subcommand="mycommand1"
local output="Howdy!"
_create_subcommand "${subcommand}" "tools/devshell" "${output}" "summary" "line1" "line2"
BT_EXPECT_STRING_CONTAINS_SUBSTRING "$(${fx} "${subcommand}")" "${output}"
}
# executes a simple subcommand in contrib and checks its output
TEST_fx-contrib-subcommand-run() {
local subcommand="mycommand-contrib"
local output="Hello contrib!"
_create_subcommand "${subcommand}" "tools/devshell/contrib" "${output}" "summary" "line1" "line2"
BT_EXPECT_STRING_CONTAINS_SUBSTRING "$(${fx} "${subcommand}")" "${output}"
}
# executes a simple subcommand in vendor/mycompany and checks its output
TEST_fx-vendor-subcommand-run() {
local subcommand="mycommand-vendor"
local output="Hello vendor!"
local vendor="mycompany"
_create_subcommand "${subcommand}" "vendor/${vendor}/scripts/devshell" "${output}" "summary" "line1" "line2"
BT_EXPECT_STRING_CONTAINS_SUBSTRING "$(${fx} vendor "${vendor}" "${subcommand}")" "${output}"
}
# executes a host tool subcommand
# if this test fails, check if the directory that host tools are installed has
# changed. There are at least two places that use this path hard coded:
# //build/host.gni (template install_host_tools)
# //scripts/fx (method get_host_tools_dir)
# This test will fail if fx is changed to look for host tools in a different
# directory. It will NOT fail if the install_host_tools template changes.
TEST_fx-hosttools-subcommand-run() {
# create build directory in a subshell to not pollute the test
build_dir="out/default"
(
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../../lib/vars.sh || exit $?
mkdir -p "${BT_TEMP_DIR}/${build_dir}"
fx-build-dir-write "${build_dir}"
)
local host_tools_dir="${build_dir}/host-tools"
local subcommand="myhosttool"
local output="Hello host tool!"
_create_subcommand "${subcommand}" "${host_tools_dir}" "${output}" "summary" "line1" "line2"
BT_EXPECT_STRING_CONTAINS_SUBSTRING "$(${fx} "${subcommand}")" "${output}"
}
BT_RUN_TESTS "$@"