# run_python_bt2() to use it.
#
# TODO: Remove when `tests/bindings/python/bt2/test_plugin.py` is fixed.
-BT_PLUGINS_PATH="${BT_TESTS_BUILDDIR}/../src/plugins"
+_bt_tests_plugins_path="${BT_TESTS_BUILDDIR}/../src/plugins"
# Colon-separated list of project plugin paths, if not set
if [ -z "${BT_TESTS_BABELTRACE_PLUGIN_PATH:-}" ]; then
- BT_TESTS_BABELTRACE_PLUGIN_PATH="${BT_PLUGINS_PATH}/ctf:${BT_PLUGINS_PATH}/utils:${BT_PLUGINS_PATH}/text:${BT_PLUGINS_PATH}/lttng-utils"
+ BT_TESTS_BABELTRACE_PLUGIN_PATH="${_bt_tests_plugins_path}/ctf:${_bt_tests_plugins_path}/utils:${_bt_tests_plugins_path}/text:${_bt_tests_plugins_path}/lttng-utils"
fi
export BT_TESTS_BABELTRACE_PLUGIN_PATH
#
# This doesn't need to be exported, but it needs to remain set for
# run_python() to use it.
-BT_TESTS_PYTHON_VERSION=$("$BT_TESTS_PYTHON_BIN" -c 'import sys; print("{}.{}".format(sys.version_info.major, sys.version_info.minor))')
+_bt_tests_py3_version=$("$BT_TESTS_PYTHON_BIN" -c 'import sys; print("{}.{}".format(sys.version_info.major, sys.version_info.minor))')
# Name of the `python3-config` command to use when testing, if not set
if [ -z "${BT_TESTS_PYTHON_CONFIG_BIN:-}" ]; then
export BT_TESTS_CC_BIN
# Whether or not to enable AddressSanitizer, `0` (disabled) if not set.
+#
+# This doesn't need to be exported from the point of view of this file,
+# but the sourced `env.sh` above does export it.
if [ -z "${BT_TESTS_ENABLE_ASAN:-}" ]; then
BT_TESTS_ENABLE_ASAN="0"
fi
-export BT_TESTS_ENABLE_ASAN
# Directory containing test data
BT_TESTS_DATADIR="${BT_TESTS_SRCDIR}/data"
#
# Returns the exit status of the executed `$BT_TESTS_BT2_BIN`.
bt_cli() {
- local stdout_file="$1"
- local stderr_file="$2"
+ local -r stdout_file="$1"
+ local -r stderr_file="$2"
shift 2
- local args=("$@")
+ local -r args=("$@")
- echo "Running: $BT_TESTS_BT2_BIN ${args[*]}" >&2
+ echo "Running: \`$BT_TESTS_BT2_BIN ${args[*]}\`" >&2
run_python_bt2 "$BT_TESTS_BT2_BIN" "${args[@]}" 1>"$stdout_file" 2>"$stderr_file"
}
#
# Returns 0 if there's no difference, or not zero otherwise.
bt_diff() {
- local expected_file="$1"
- local actual_file="$2"
- local ret=0
+ local -r expected_file="$1"
+ local -r actual_file="$2"
diff -u <(bt_remove_cr_inline "$expected_file") <(bt_remove_cr_inline "$actual_file") 1>&2
-
- return $?
}
# Checks the difference between:
# Returns 0 if there's no difference, or 1 otherwise, also printing said
# difference to the standard error.
bt_diff_cli() {
- local expected_stdout_file="$1"
- local expected_stderr_file="$2"
+ local -r expected_stdout_file="$1"
+ local -r expected_stderr_file="$2"
shift 2
- local args=("$@")
-
- local temp_stdout_output_file
- local temp_stderr_output_file
- local ret=0
- local ret_stdout
- local ret_stderr
+ local -r args=("$@")
- temp_stdout_output_file="$(mktemp -t actual-stdout.XXXXXX)"
- temp_stderr_output_file="$(mktemp -t actual-stderr.XXXXXX)"
+ local -r temp_stdout_output_file="$(mktemp -t actual-stdout.XXXXXX)"
+ local -r temp_stderr_output_file="$(mktemp -t actual-stderr.XXXXXX)"
bt_cli "$temp_stdout_output_file" "$temp_stderr_output_file" "${args[@]}"
bt_diff "$expected_stdout_file" "$temp_stdout_output_file" "${args[@]}"
- ret_stdout=$?
+ local -r ret_stdout=$?
bt_diff "$expected_stderr_file" "$temp_stderr_output_file" "${args[@]}"
- ret_stderr=$?
-
- if ((ret_stdout != 0 || ret_stderr != 0)); then
- ret=1
- fi
+ local -r ret_stderr=$?
rm -f "$temp_stdout_output_file" "$temp_stderr_output_file"
- return $ret
+ return $((ret_stdout || ret_stderr))
}
# Checks the difference between:
# Returns 0 if there's no difference, or 1 otherwise, also printing said
# difference to the standard error.
bt_diff_details_ctf_single() {
- local expected_stdout_file="$1"
- local trace_dir="$2"
+ local -r expected_stdout_file="$1"
+ local -r trace_dir="$2"
shift 2
- local extra_details_args=("$@")
- expected_stderr_file="/dev/null"
+ local -r extra_details_args=("$@")
# Compare using the CLI with `sink.text.details`
- bt_diff_cli "$expected_stdout_file" "$expected_stderr_file" "$trace_dir" \
+ bt_diff_cli "$expected_stdout_file" /dev/null "$trace_dir" \
"-c" "sink.text.details" "${extra_details_args[@]+${extra_details_args[@]}}"
}
# The program `$1` receives the path to a temporary, empty directory
# where to write the CTF trace as its first argument.
bt_diff_details_ctf_gen_single() {
- local ctf_gen_prog_path="$1"
- local expected_stdout_file="$2"
+ local -r ctf_gen_prog_path="$1"
+ local -r expected_stdout_file="$2"
shift 2
- local extra_details_args=("$@")
-
- local temp_trace_dir
- local ret
+ local -r extra_details_args=("$@")
- temp_trace_dir="$(mktemp -d)"
+ local -r temp_trace_dir="$(mktemp -d)"
# Run the CTF trace generator program to get a CTF trace
if ! "$ctf_gen_prog_path" "$temp_trace_dir" 2>/dev/null; then
- echo "ERROR: \"$ctf_gen_prog_path\" \"$temp_trace_dir\" failed" >&2
+ echo "ERROR: \`$ctf_gen_prog_path $temp_trace_dir\` failed" >&2
rm -rf "$temp_trace_dir"
return 1
fi
# Compare using the CLI with `sink.text.details`
bt_diff_details_ctf_single "$expected_stdout_file" "$temp_trace_dir" \
"${extra_details_args[@]+${extra_details_args[@]}}"
- ret=$?
+ local -r ret=$?
rm -rf "$temp_trace_dir"
return $ret
}
# ok() with the test name `$3` on the result of bt_grep() matching the
# pattern `$1` within the file `$2`.
bt_grep_ok() {
- local pattern=$1
- local file=$2
- local test_name=$3
+ local -r pattern=$1
+ local -r file=$2
+ local -r test_name=$3
bt_grep --silent "$pattern" "$file"
- local ret=$?
+ local -r ret=$?
if ! ok $ret "$test_name"; then
{
run_python() {
local our_pythonpath="${BT_TESTS_SRCDIR}/utils/python"
- if [[ $BT_TESTS_PYTHON_VERSION =~ 3.[45] ]]; then
+ if [[ $_bt_tests_py3_version =~ 3.[45] ]]; then
# Add a local directory containing a `typing.py` to `PYTHONPATH`
# for Python 3.4 and Python 3.5 which either don't offer the
# `typing` module at all, or offer a partial one.
# Executes a command within an environment which can import the testing
# Python modules (in `tests/utils/python`) and the `bt2` Python package.
run_python_bt2() {
- local lib_asan
- local -x "BABELTRACE_PYTHON_BT2_NO_TRACEBACK=1"
local -x "BABELTRACE_PLUGIN_PATH=${BT_TESTS_BABELTRACE_PLUGIN_PATH}"
local -x "LIBBABELTRACE2_PLUGIN_PROVIDER_DIR=${BT_TESTS_PROVIDER_DIR}"
local -x "BT_TESTS_DATADIR=${BT_TESTS_DATADIR}"
local -x "BT_CTF_TRACES_PATH=${BT_CTF_TRACES_PATH}"
- local -x "BT_PLUGINS_PATH=${BT_PLUGINS_PATH}"
+ local -x "BT_PLUGINS_PATH=${_bt_tests_plugins_path}"
local -x "PYTHONPATH=${BT_TESTS_PYTHONPATH}${PYTHONPATH:+:}${PYTHONPATH:-}"
- local main_lib_path="${BT_TESTS_BUILDDIR}/../src/lib/.libs"
+ local -r main_lib_path="${BT_TESTS_BUILDDIR}/../src/lib/.libs"
# Set the library search path so that the Python 3 interpreter can
# load `libbabeltrace2`.
# override the user's value if it contains `detect_leaks=1`.
if [ "${BT_TESTS_ENABLE_ASAN:-}" = "1" ]; then
if "${BT_TESTS_CC_BIN}" --version | head -n 1 | bt_grep -q '^gcc'; then
- lib_asan="$("${BT_TESTS_CC_BIN}" -print-file-name=libasan.so)"
+ local -r lib_asan="$("${BT_TESTS_CC_BIN}" -print-file-name=libasan.so)"
local -x LD_PRELOAD="${lib_asan}${LD_PRELOAD:+:}${LD_PRELOAD:-}"
fi
# the testing Python modules (in `tests/utils/python`) and the `bt2`
# Python package.
run_python_bt2_test() {
- local test_dir="$1"
- local test_pattern="${2:-'*'}"
+ local -r test_dir="$1"
+ local -r test_pattern="${2:-'*'}"
- local ret
- local test_runner_args=()
-
- test_runner_args+=("$test_dir")
- if [ -n "${test_pattern}" ]; then
- test_runner_args+=("${test_pattern}")
- fi
+ local python_exec
if test "${BT_TESTS_COVERAGE:-}" = "1"; then
python_exec="check_coverage"
--pattern "$test_pattern" \
"$test_dir" \
- ret=$?
+ local -r ret=$?
if test "${BT_TESTS_COVERAGE_REPORT:-}" = "1"; then
coverage report -m
# Generates a CTF trace into the directory `$2` from the moultipart
# document `$1` using `mctf.py`.
gen_mctf_trace() {
- local input_file="$1"
- local base_dir="$2"
+ local -r input_file="$1"
+ local -r base_dir="$2"
- diag "Running: ${BT_TESTS_PYTHON_BIN} ${BT_TESTS_SRCDIR}/utils/python/mctf.py --base-dir ${base_dir} ${input_file}"
+ diag "Running: \`${BT_TESTS_PYTHON_BIN} ${BT_TESTS_SRCDIR}/utils/python/mctf.py --base-dir ${base_dir} ${input_file}\`"
run_python "${BT_TESTS_PYTHON_BIN}" "${BT_TESTS_SRCDIR}/utils/python/mctf.py" \
--base-dir "${base_dir}" "${input_file}"
}