1
0
mirror of https://passt.top/passt synced 2024-12-23 06:05:23 +00:00
passt/test/run

180 lines
3.2 KiB
Plaintext
Raw Normal View History

#!/bin/sh -e
#
# 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}
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/all
test build/cppcheck
test build/clang_tidy
test distro/debian
test distro/fedora
test distro/opensuse
test distro/ubuntu
setup pasta
test ndp/pasta
test dhcp/pasta
test tcp/pasta
test udp/pasta
teardown pasta
setup passt
test ndp/passt
test dhcp/passt
test tcp/passt
test udp/passt
test valgrind/passt
teardown passt
VALGRIND=1
setup passt_in_ns
test ndp/passt
test dhcp/passt
test icmp/passt_in_ns
test tcp/passt_in_ns
test udp/passt_in_ns
test valgrind/passt_in_ns
teardown passt_in_ns
VALGRIND=0
setup passt_in_ns
test ndp/passt
test dhcp/passt
test perf/passt_tcp
test perf/passt_udp
test perf/pasta_tcp
test perf/pasta_udp
teardown passt_in_ns
setup two_guests
test two_guests/basic
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 0
}
# 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
test demo/passt
video_stop
teardown demo_passt
layout_demo_pasta
video_start demo_pasta
test demo/pasta
video_stop
teardown demo_pasta
layout_demo_podman
video_start demo_podman
test demo/podman
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')