passt/test/run
Stefano Brivio 66a95e331e test, seccomp, Makefile: Switch to valgrind runs for passt functional tests
Pass to seccomp.sh a list of additional syscalls valgrind needs as
EXTRA_SYSCALLS in a new 'valgrind' make target, and add corresponding
support in seccomp.sh itself.

In test setup functions, start passt with valgrind, but not for
performance tests.

Add tests checking that valgrind exits without errors after all the
other tests in the group are done.

Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
2022-03-29 15:35:38 +02:00

177 lines
3 KiB
Bash
Executable file

#!/bin/sh
#
# SPDX-License-Identifier: AGPL-3.0-or-later
#
# PASST - Plug A Simple Socket Transport
# for qemu/UNIX domain socket mode
#
# PASTA - Pack A Subtle Tap Abstraction
# for network namespace/tap device mode
#
# test/run - Entry point to run test cases and demo
#
# Copyright (c) 2021 Red Hat GmbH
# Author: Stefano Brivio <sbrivio@redhat.com>
# Start an X terminal and capture a video of the test run (also set for ./ci)
CI=${CI:-0}
# Start an X terminal and show the demo (also set for ./demo)
DEMO=${DEMO:-0}
# Base path for output files
BASEPATH=${BASEPATH:-"$(pwd)"}
# Location of log files for test run
LOGDIR=${LOGDIR:-"${BASEPATH}/test_logs"}
LOGFILE=${LOGFILE:-"${LOGDIR}/test.log"}
# If set, skip typing delays while issuing commands in panes
FAST=${FAST:-1}
# If set, run passt and pasta with debug options
DEBUG=${DEBUG:-0}
# If set, tell passt and pasta to take packet captures
PCAP=${PCAP:-0}
# If set, run X terminals for CI and demos in Xvfb
XVFB=${XVFB:-1}
COMMIT="$(git log --oneline --no-decorate -1)"
. lib/util
. lib/setup
. lib/term
. lib/perf_report
. lib/layout
. lib/test
. lib/video
# cleanup() - Remove temporary files
cleanup() {
rm -f /tmp/.passt_test_log_pipe
}
# run() - Call setup functions, run tests, handle exit from test session
run() {
rm -f /tmp/.passt_test_log_pipe
mkfifo /tmp/.passt_test_log_pipe
term
perf_init
[ ${CI} -eq 1 ] && video_start ci
setup build
test build
test distro
setup pasta
test ndp
test dhcp
test tcp
test udp
teardown pasta
setup passt
test ndp
test dhcp
test tcp
test udp
test valgrind
teardown passt
VALGRIND=1
setup passt_in_ns
test ndp
test dhcp
test icmp
test tcp
test udp
test valgrind
teardown passt_in_ns
VALGRIND=0
setup passt_in_ns
test ndp
test dhcp
test perf
teardown passt_in_ns
setup two_guests
test two_guests
teardown two_guests
perf_finish
[ ${CI} -eq 1 ] && video_stop
log "PASS: ${STATUS_PASS}, FAIL: ${STATUS_FAIL}"
pause_continue \
"Press any key to keep test session open" \
"Closing in " \
"Interrupted, press any key to quit" \
9
return ${STATUS_FAIL}
}
# demo() - Simpler path for demo purposes
demo() {
rm -f /tmp/.passt_test_log_pipe
mkfifo /tmp/.passt_test_log_pipe
FAST=0
term_demo
layout_demo_passt
video_start demo_passt
MODE=passt
test demo
video_stop
teardown demo_passt
layout_demo_pasta
video_start demo_pasta
MODE=pasta
test demo
video_stop
teardown demo_pasta
layout_demo_podman
video_start demo_podman
MODE=podman
test demo
video_stop
teardown_demo_podman
return 0
}
[ "$(basename "${0}")" = "ci" ] && CI=1
[ "$(basename "${0}")" = "run_demo" ] && DEMO=1
if [ "${1}" = "from_term" ]; then
cd ..
if [ ${DEMO} -eq 1 ]; then
demo
else
run
fi
tmux kill-session -t passt_test
exit
else
rm -rf "${LOGDIR}"
mkdir -p "${LOGDIR}"
:> "${LOGFILE}"
trap "cleanup" EXIT
run_term
trap "" EXIT
fi
[ ${DEMO} -eq 1 ] && exit 0
tail -n1 ${LOGFILE}
echo "Log at ${LOGFILE}"
exit $(tail -n1 ${LOGFILE} | sed -n 's/.*FAIL: \(.*\)$/\1/p')