freeswitch/tests/unit/test.sh

90 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
### shfmt -w -s -ci -sr -kp -fn tests/unit/run-tests.sh
#------------------------------------------------------------------------------
# Test Execution Script
# Executes unit tests and handles test logs and core dumps
#------------------------------------------------------------------------------
# Initialize timing
start_time=$(date +%s)
# All output will be collected here
TESTSUNITPATH=$PWD
# All relative paths are based on the tree's root
FSBASEDIR=$(realpath "$PWD/../../")
# Set system limits
ulimit -c unlimited
ulimit -a
# Get test identifier from argument
i=$1
echo ""
echo "Starting test: $i"
echo ""
# Change folder to where the test is
currenttestpath="$FSBASEDIR/$i"
cd "$(dirname "$currenttestpath")"
# Tests are unique per module, so need to distinguish them by their directory
relativedir=$(dirname "$i")
echo "Relative dir is $relativedir"
# Set up log file path
file=$(basename -- "$currenttestpath")
log="$TESTSUNITPATH/log_run-tests_${relativedir//\//!}!$file.html"
# Execute the test
echo "Start executing $currenttestpath"
$currenttestpath 2>&1 | tee >(ansi2html > "$log")
exitstatus=${PIPESTATUS[0]}
echo "End executing $currenttestpath"
# Record execution time
end_time=$(date +%s)
duration=$((end_time - start_time))
echo "Test $1 took $duration seconds" >> test_times.log
echo "Exit status is $exitstatus"
# Handle test results
if [ "0" -eq "$exitstatus" ]; then
rm "$log"
else
echo "*** ./$i exit status is $exitstatus"
# Search for core dumps
corefilesearch="/cores/core.*.!__w!freeswitch!freeswitch!${relativedir//\//!}!.libs!$file.*"
echo "$corefilesearch"
if ls $corefilesearch 1> /dev/null 2>&1; then
echo "coredump found"
coredump=$(ls $corefilesearch)
echo "$coredump"
# Generate backtrace using GDB
gdb \
-ex "set logging file $TESTSUNITPATH/backtrace_${i//\//!}.txt" \
-ex "set logging on" \
-ex "set pagination off" \
-ex "bt full" \
-ex "bt" \
-ex "info threads" \
-ex "thread apply all bt" \
-ex "thread apply all bt full" \
-ex "quit" \
"$FSBASEDIR/$relativedir/.libs/$file" \
"$coredump"
fi
echo "*** $log was saved"
exit $exitstatus
fi
echo ""