| #!/bin/bash | |
| # Copyright 2020 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. | |
| # | |
| # Runs test scripts using the bash_test_framework. | |
| # | |
| set -e | |
| SCRIPT_SRC_DIR="$(cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd)" | |
| TEST_DIR="$PWD" | |
| # Find the root of the project | |
| get_jiri_root() { | |
| local root_dir="" | |
| root_dir="${SCRIPT_SRC_DIR}" | |
| while [[ ! -d "${root_dir}/.jiri_root" ]]; do | |
| root_dir="$(dirname "${root_dir}")" | |
| if [[ ${#root_dir} -eq 1 ]]; then | |
| echo >&2 "Error! could not find the root of the project starting from $SCRIPT_SRC_DIR. The current working directory needs to be under the root of the project" | |
| find "${TEST_DIR}" | |
| exit 1 | |
| fi | |
| done | |
| echo "${root_dir}" | |
| } | |
| launch_script() { | |
| local test_script_name="" | |
| test_script_name="$1" | |
| shift | |
| local test_script_path="${SCRIPT_SRC_DIR}/${test_script_name}" | |
| local bt_deps_root="${TEST_DIR}"; | |
| # Check the local directory as the root of the test framework first, | |
| # then fall back to jiri_root. | |
| local test_framework_path="${bt_deps_root}/tools/devshell/tests/lib/bash_test_framework.sh" | |
| if [[ ! -e "${test_framework_path}" ]]; then | |
| echo "Could not find $test_framework_path" | |
| bt_deps_root="$(get_jiri_root)" | |
| test_framework_path="${bt_deps_root}/tools/devshell/tests/lib/bash_test_framework.sh" | |
| fi | |
| if [[ ! -f "${test_script_path}" ]]; then | |
| echo >&2 "Test script '${test_script_path}' not found. Aborting." | |
| return 1 | |
| fi | |
| # propagate certain bash flags if present | |
| local shell_flags=() | |
| if [[ $- == *x* ]]; then | |
| shell_flags+=( -x ) | |
| fi | |
| # Start a clean environment, load the bash_test_framework.sh, | |
| # then start the test script. | |
| # No quotes around EOF so variables are expanded when heredoc is processed. | |
| local -r launch_script="$(cat << EOF | |
| #set -x | |
| export BT_DEPS_ROOT="${bt_deps_root}" | |
| cd "\$BT_DEPS_ROOT" | |
| source "${test_framework_path}" || exit \$? | |
| source "${test_script_path}" || exit \$? | |
| EOF | |
| )" | |
| echo "Launching test script $test_script_path" | |
| /usr/bin/env -i \ | |
| USER="${USER}" \ | |
| HOME="${HOME}" \ | |
| bash "${shell_flags[@]}" \ | |
| -c "${launch_script}" "${test_script_path}" "$@" | |
| } | |
| launch_script "$@" |