diff --git a/scripts/integration_test.sh b/scripts/integration_test.sh index 89a428ee9..b512a154c 100755 --- a/scripts/integration_test.sh +++ b/scripts/integration_test.sh @@ -81,28 +81,6 @@ function fail() { echo "[-] $1 exited with code $2" } -function fifo() { - local cmd="$1" - local fifo_file="$2" - if [ -f fail_fifo_timeout.txt ]; then - echo "[fifo] skipping because of timeout cmd: $cmd" - return - fi - if [ "$arg_verbose" == "1" ]; then - echo "[fifo] $cmd >> $fifo_file" - fi - if printf '%s' "$cmd" | grep -q '[`'"'"']'; then - echo "[-] fifo commands can not contain backticks or single quotes" - echo "[-] invalid fifo command: $cmd" - return - fi - if ! timeout 3 sh -c "printf '%s\n' '$cmd' >> \"$fifo_file\""; then - fifo_error="[-] fifo command timeout: $cmd >> $fifo_file" - printf '%s\n' "$fifo_error" - printf '%s\n' "$fifo_error" >> fail_fifo_timeout.txt - fi -} - # Get unused port from the system by binding to port 0 and immediately closing the socket again port=$(python3 -c 'import socket; s=socket.socket(); s.bind(("", 0)); print(s.getsockname()[1]); s.close()') @@ -116,7 +94,7 @@ export UBSAN_OPTIONS=suppressions=../ubsan.supp:log_path=./SAN:print_stacktrace= export ASAN_OPTIONS=log_path=./SAN:print_stacktrace=1:check_initialization_order=1:detect_leaks=$DETECT_LEAKS:halt_on_errors=0 export LSAN_OPTIONS=suppressions=../lsan.supp:print_suppressions=0 -function print_results() { +function check_asan_and_valgrind_results() { if [ "$arg_valgrind_memcheck" == "1" ]; then # Wait to ensure that the error summary was written to the stderr files because valgrind takes some time # TODO: Instead wait for all started processes to finish @@ -136,6 +114,74 @@ function print_results() { return 0 } +print_results() { + for logfile in client1.log client2.log server.log; do + if [ "$arg_valgrind_memcheck" == "1" ]; then + break + fi + if [ ! -f "$logfile" ]; then + echo "[-] Error: logfile '$logfile' not found" + touch fail_logs.txt + continue + fi + logdiff="$(diff -u <(grep -v "console: .* access for .* is now .*abled" "$logfile" | sort) <(sort "stdout_$(basename "$logfile" .log).txt"))" + if [ "$logdiff" != "" ]; then + echo "[-] Error: logfile '$logfile' differs from stdout" + echo "$logdiff" + echo "[-] Error: logfile '$logfile' differs from stdout" >> fail_logs.txt + echo "$logdiff" >> fail_logs.txt + fi + done + + for stderr in ./stderr_*.txt; do + if [ ! -f "$stderr" ]; then + continue + fi + if [ "$(cat "$stderr")" == "" ]; then + continue + fi + echo "[!] Warning: $stderr" + cat "$stderr" + done + + if test -n "$(find . -maxdepth 1 -name 'fail_*' -print -quit)"; then + for fail in fail_*; do + cat "$fail" + done + check_asan_and_valgrind_results + echo "[-] Test failed. See errors above" + exit 1 + fi + + echo "[*] All tests passed" + check_asan_and_valgrind_results || exit 1 +} + +function fifo() { + local cmd="$1" + local fifo_file="$2" + if [ -f fail_fifo_timeout.txt ]; then + echo "[fifo] skipping because of timeout cmd: $cmd" + return + fi + if [ "$arg_verbose" == "1" ]; then + echo "[fifo] $cmd >> $fifo_file" + fi + if printf '%s' "$cmd" | grep -q '[`'"'"']'; then + echo "[-] fifo commands can not contain backticks or single quotes" + echo "[-] invalid fifo command: $cmd" + exit 1 + fi + if ! timeout 3 sh -c "printf '%s\n' '$cmd' >> \"$fifo_file\""; then + fifo_error="[-] fifo command timeout: $cmd >> $fifo_file" + printf '%s\n' "$fifo_error" + printf '%s\n' "$fifo_error" >> fail_fifo_timeout.txt + kill_all + print_results + exit 1 + fi +} + rm -rf integration_test mkdir -p integration_test/data/maps cp data/maps/coverage.map integration_test/data/maps @@ -344,43 +390,4 @@ elif [ "$arg_valgrind_memcheck" != "1" ] && [ "$rank_time" != "$expected_times" echo " got: $rank_time" fi -for logfile in client1.log client2.log server.log; do - if [ "$arg_valgrind_memcheck" == "1" ]; then - break - fi - if [ ! -f "$logfile" ]; then - echo "[-] Error: logfile '$logfile' not found" - touch fail_logs.txt - continue - fi - logdiff="$(diff -u <(grep -v "console: .* access for .* is now .*abled" "$logfile" | sort) <(sort "stdout_$(basename "$logfile" .log).txt"))" - if [ "$logdiff" != "" ]; then - echo "[-] Error: logfile '$logfile' differs from stdout" - echo "$logdiff" - echo "[-] Error: logfile '$logfile' differs from stdout" >> fail_logs.txt - echo "$logdiff" >> fail_logs.txt - fi -done - -for stderr in ./stderr_*.txt; do - if [ ! -f "$stderr" ]; then - continue - fi - if [ "$(cat "$stderr")" == "" ]; then - continue - fi - echo "[!] Warning: $stderr" - cat "$stderr" -done - -if test -n "$(find . -maxdepth 1 -name 'fail_*' -print -quit)"; then - for fail in fail_*; do - cat "$fail" - done - print_results - echo "[-] Test failed. See errors above" - exit 1 -fi - -echo "[*] All tests passed" -print_results || exit 1 +print_results