summaryrefslogtreecommitdiffstats
path: root/TESTS_ENVIRONMENT.in
diff options
context:
space:
mode:
Diffstat (limited to 'TESTS_ENVIRONMENT.in')
-rw-r--r--TESTS_ENVIRONMENT.in275
1 files changed, 275 insertions, 0 deletions
diff --git a/TESTS_ENVIRONMENT.in b/TESTS_ENVIRONMENT.in
new file mode 100644
index 0000000..775c59a
--- /dev/null
+++ b/TESTS_ENVIRONMENT.in
@@ -0,0 +1,275 @@
+#! /bin/bash
+
+top_srcdir="@abssrcdir@"
+export top_srcdir
+
+top_srcdir_parent=`dirname ${top_srcdir}`
+export top_srcdir_parent
+
+srcdir="@abssrcdir@/test"
+export srcdir
+
+# The top build directory, derived from the path to this script.
+top_builddir=`dirname $0`
+export top_builddir
+
+builddir=`pwd -P`
+export builddir
+
+test_dir="@abssrcdir@/test"
+export test_dir
+
+# Let the tests know whether bzip is supported or not.
+BZIP2_SUPPORT="@BZIP2_SUPPORT@"
+export BZIP2_SUPPORT
+
+BZIP2_CMD="@BZIP2_CMD@"
+export BZIP2_CMD
+
+XZ_CMD="@XZ_CMD@"
+export XZ_CMD
+
+TSHARK_CMD="@TSHARK_CMD@"
+export TSHARK_CMD
+
+LIBARCHIVE_LIBS="@LIBARCHIVE_LIBS@"
+export LIBARCHIVE_LIBS
+
+HOME="${top_builddir}/test"
+export HOME
+
+# The full path of the test case
+test_file=$1
+# The base name of the test case
+test_file_base=`basename $1`
+# The current test number for shell based tests.
+test_num=0
+
+test_hash=""
+
+lnav_test="${top_builddir}/src/lnav-test"
+export lnav_test
+
+lnav="${top_builddir}/src/lnav"
+export lnav
+
+LNAV_LOG_PATH="${top_builddir}/test/test.log"
+export LNAV_LOG_PATH
+
+SFTP_TEST_URL="@SFTP_TEST_URL@"
+export SFTP_TEST_URL
+
+HAVE_SQLITE3_VALUE_SUBTYPE="@HAVE_SQLITE3_VALUE_SUBTYPE@"
+export HAVE_SQLITE3_VALUE_SUBTYPE
+
+HAVE_SQLITE3_ERROR_OFFSET="@HAVE_SQLITE3_ERROR_OFFSET@"
+export HAVE_SQLITE3_ERROR_OFFSET
+
+## BEGIN Functions
+
+LAST_TEST=""
+
+LAST_CAP_TEST=()
+
+has_errors=""
+
+#
+# Run a test case and capture its standard out and standard err.
+#
+# Usage: run_test <utility> [<argument> ...]
+#
+# Example:
+#
+# To run rktimes and capture all of its stdio output:
+#
+# run_test rktimes -V
+#
+run_test() {
+ printf "%s \033[0;35m=============================================================\033[0m\n" $(date -Iseconds)
+ LAST_TEST=("test: $@")
+ echo "${LAST_TEST[@]}"
+ export test_num=`expr ${test_num} \+ 1`
+ "$@" > ${test_file_base}_${test_num}.tmp 2> ${test_file_base}_${test_num}.err
+}
+
+run_cap_test() {
+ LAST_CAP_TEST=("test: $@")
+ local full_cmd=$(echo "${LAST_CAP_TEST[@]}" | sed -e "s;${test_dir};{test_dir};g" -e "s;${top_srcdir};{top_srcdir};g")
+ export test_hash=$(echo "${full_cmd}" | shasum | cut -f 1 -d ' ')
+ echo "${full_cmd}" > ${test_file_base}_${test_hash}.cmd
+ "$@" > ${test_file_base}_${test_hash}.out 2> ${test_file_base}_${test_hash}.err
+
+ sed -ibak \
+ -e "s;${test_dir};{test_dir};g" \
+ -e "s;${builddir};{test_dir};g" \
+ -e "s;${top_srcdir};{top_srcdir};g" \
+ -e "s;${top_srcdir_parent};{top_srcdir_parent};g" \
+ ${test_file_base}_${test_hash}.out
+ echo
+ printf "%s \033[0;35m=============================================================\033[0m\n" $(date -Iseconds)
+ printf '\033[0;35mCommand\033[0m: %s\n' "${full_cmd}"
+ printf '\033[0;32mBEGIN\033[0m %s\n' "${test_file_base}_${test_hash}.out"
+ cat "${test_file_base}_${test_hash}.out"
+ printf '\033[0;32mEND\033[0m %s\n' "${test_file_base}_${test_hash}.out"
+ if test -f ${srcdir}/expected/${test_file_base}_${test_hash}.out; then
+ diff -w -u \
+ ${srcdir}/expected/${test_file_base}_${test_hash}.out \
+ ${test_file_base}_${test_hash}.out \
+ > ${test_file_base}_${test_hash}.diff
+ if test $? -ne 0; then
+ echo OUT: "${full_cmd}"
+ cat ${test_file_base}_${test_hash}.diff
+ echo "FAIL! EXPECTED OUT DIFF"
+ export has_errors="yes"
+ fi
+ else
+ echo "FAIL! EXPECTED OUT MISSING -- ${srcdir}/expected/${test_file_base}_${test_hash}.out"
+ export has_errors="yes"
+ fi
+
+ sed -ibak -E \
+ -e "s;${test_dir};{test_dir};g" \
+ -e "s;${builddir};{builddir};g" \
+ -e "s;${top_srcdir};{top_srcdir};g" \
+ -e 's;"errorId":".+";;g' \
+ ${test_file_base}_${test_hash}.err
+ printf '\033[0;31mBEGIN\033[0m %s\n' "${test_file_base}_${test_hash}.err"
+ cat "${test_file_base}_${test_hash}.err"
+ printf '\033[0;31mEND\033[0m %s\n' "${test_file_base}_${test_hash}.err"
+ if test -f ${srcdir}/expected/${test_file_base}_${test_hash}.err; then
+ diff -w -u ${srcdir}/expected/${test_file_base}_${test_hash}.err \
+ ${test_file_base}_${test_hash}.err \
+ > ${test_file_base}_${test_hash}.err.diff
+ if test $? -ne 0; then
+ echo ERR: "${full_cmd}"
+ cat ${test_file_base}_${test_hash}.err.diff
+ echo "FAIL! EXPECTED ERR DIFF"
+ export has_errors="yes"
+ fi
+ else
+ echo "FAIL! EXPECTED ERR MISSING"
+ export has_errors="yes"
+ fi
+}
+
+#
+# Check the output generated by a run_test() call.
+#
+# Usage: check_output <fail message> {Expected output on stdin}
+#
+# Example:
+#
+# To check the output of 'rktimes -V' and print out 'Unable to get version?'
+# if the output doesn't match:
+#
+# run_test rktimes -V
+# check_output "Unable to get version?" <<EOF
+# 0.5
+# EOF
+#
+check_output() {
+ sed -ibak \
+ -e "s;${test_dir};{test_dir};g" \
+ -e "s;${top_srcdir};{top_srcdir};g" \
+ ${test_file_base}_${test_num}.tmp
+ diff -w -u - ${test_file_base}_${test_num}.tmp > ${test_file_base}_${test_num}.diff
+ if test $? -ne 0; then
+ echo "${LAST_TEST[@]}"
+ echo $1
+ cat ${test_file_base}_${test_num}.diff
+ exit 1
+ fi
+}
+
+check_output_ws() {
+ diff -u - ${test_file_base}_${test_num}.tmp > ${test_file_base}_${test_num}.diff
+ if test $? -ne 0; then
+ echo "${LAST_TEST[@]}"
+ echo $1
+ cat ${test_file_base}_${test_num}.diff
+ exit 1
+ fi
+}
+
+test_filename() {
+ echo ${test_file_base}_${test_num}.tmp
+}
+
+test_err_filename() {
+ echo ${test_file_base}_${test_num}.err
+}
+
+check_error_output() {
+ sed -ibak \
+ -e "s;${test_dir};{test_dir};g" \
+ -e "s;${top_srcdir};{top_srcdir};g" \
+ ${test_file_base}_${test_num}.err
+ diff -w -u - ${test_file_base}_${test_num}.err \
+ > ${test_file_base}_${test_num}.err.diff
+ if test $? -ne 0; then
+ echo "${LAST_TEST[@]}"
+ echo $1
+ cat ${test_file_base}_${test_num}.err.diff
+ exit 1
+ fi
+}
+
+#
+# Grep for a string in the output generated by a run_test() call.
+#
+# Usage: grep_output_for <string> <fail message>
+#
+# Example:
+#
+# To check the output of 'cbhey -l' for 'IDL:Foobar:1.0' and print out
+# 'Unable to list supported interfaces?' if it is not found:
+#
+# run_test cbhey -l
+# grep_output_for "IDL:Foobar:1.0" "Unable to list supported interface?"
+#
+grep_output_for() {
+ if grep -q $1 ${test_file_base}_${test_num}.tmp > /dev/null 2>&1; then
+ :
+ else
+ echo "${test_file_base}_${test_num}.tmp: $2"
+ exit 1
+ fi
+}
+
+on_error_log() {
+ if test $? -ne 0; then
+ echo $1 > /dev/stderr
+ cat ${test_file_base}_${test_num}.tmp
+ cat ${test_file_base}_${test_num}.err
+ fi
+}
+
+on_error_fail_with() {
+ if test $? -ne 0; then
+ echo $1 > /dev/stderr
+ cat ${test_file_base}_${test_num}.tmp
+ cat ${test_file_base}_${test_num}.err
+ exit 1
+ fi
+}
+
+## END Functions
+
+
+# Finally, run the test...
+
+if test -x $1 && test `basename $1 .sh` == `basename $1`; then
+ exec $*
+else
+ # Shell script
+ shift
+ . ${test_file}
+fi
+
+cleanup() {
+ if test "${has_errors}"x = "yes"x; then
+ exit 1
+ fi
+}
+
+trap "cleanup" EXIT