aboutgitcodebugslistschat
path: root/test/run
blob: 342d99e1727bee7c66dff32b277e19db307fb63b (plain) (tree)
1
            

























































                                                                             
                                           

                   

                                        

                   



                                      


                      




                                          

                      
                  
                         





                                          



                            


                                      


                            
                                            


                           
                                     








                                                                 
                











                                         
                              
                  
                                      
                  
                           

                         
                              
                  
                                      
                  


                           
                               
                   
                                      
                  
                            
























                                               

                           


                                                             
#!/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 $(cd test && echo build/*)
	test $(cd test && echo distro/*)

	setup pasta
	test $(cd test && echo ndp/*)
	test $(cd test && echo dhcp/*)
	test $(cd test && echo tcp/*)
	test $(cd test && echo udp/*)
	teardown pasta

	setup passt
	test $(cd test && echo ndp/*)
	test $(cd test && echo dhcp/*)
	test $(cd test && echo tcp/*)
	test $(cd test && echo udp/*)
	test $(cd test && echo valgrind/*)
	teardown passt

	VALGRIND=1
	setup passt_in_ns
	test $(cd test && echo ndp/*)
	test $(cd test && echo dhcp/*)
	test $(cd test && echo icmp/*)
	test $(cd test && echo tcp/*)
	test $(cd test && echo udp/*)
	test $(cd test && echo valgrind/*)
	teardown passt_in_ns

	VALGRIND=0
	setup passt_in_ns
	test $(cd test && echo ndp/*)
	test $(cd test && echo dhcp/*)
	test $(cd test && echo perf/*)
	teardown passt_in_ns

	setup two_guests
	test $(cd test && echo 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 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
	MODE=passt
	test $(cd test && echo demo/*)
	video_stop
	teardown demo_passt

	layout_demo_pasta
	video_start demo_pasta
	MODE=pasta
	test $(cd test && echo demo/*)
	video_stop
	teardown demo_pasta

	layout_demo_podman
	video_start demo_podman
	MODE=podman
	test $(cd test && echo 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')