aboutgitcodebugslistschat
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/README.md2
-rwxr-xr-xtest/lib/setup40
-rwxr-xr-xtest/run9
-rw-r--r--test/valgrind.supp9
-rw-r--r--test/valgrind/passt22
-rw-r--r--test/valgrind/passt_in_ns22
6 files changed, 91 insertions, 13 deletions
diff --git a/test/README.md b/test/README.md
index b50c430..623e6e5 100644
--- a/test/README.md
+++ b/test/README.md
@@ -31,7 +31,7 @@ Example for Debian, and possibly most Debian-based distributions:
build-essential git jq strace iperf3 qemu-system-x86 tmux sipcalc bc
clang-tidy cppcheck isc-dhcp-common udhcpc psmisc linux-cpupower
netcat-openbsd fakeroot lz4 lm-sensors qemu-system-arm qemu-system-ppc
- qemu-system-misc qemu-system-x86`
+ qemu-system-misc qemu-system-x86 valgrind
### Other tools
diff --git a/test/lib/setup b/test/lib/setup
index a39eb80..823c706 100755
--- a/test/lib/setup
+++ b/test/lib/setup
@@ -51,8 +51,12 @@ setup_passt() {
[ ${DEBUG} -eq 1 ] && __opts="${__opts} -d"
[ ${TRACE} -eq 1 ] && __opts="${__opts} --trace"
- pane_run PASST "./passt ${__opts} -f -t 10001 -u 10001"
- sleep 1
+ pane_run PASST "make clean"
+ pane_wait PASST
+ pane_run PASST "make valgrind"
+ pane_wait PASST
+ pane_run PASST "valgrind --max-stackframe=$((4 * 1024 * 1024)) --trace-children=yes --vgdb=no --error-exitcode=1 --suppressions=test/valgrind.supp ./passt ${__opts} -f -t 10001 -u 10001 -P passt.pid"
+ sleep 5
pane_run GUEST './qrap 5 kvm -m '${VMEM}' -cpu host -smp '${VCPUS} \
' -kernel ' "/boot/vmlinuz-$(uname -r)" \
@@ -133,7 +137,7 @@ setup_passt_in_ns() {
rm "${__pid_file}"
pane_run GUEST "nsenter -t ${__ns_pid} -U -n --preserve-credentials"
- pane_run NS "nsenter -t ${__ns_pid} -U -n --preserve-credentials"
+ pane_run NS "nsenter -t ${__ns_pid} -U -n -p --preserve-credentials"
pane_wait GUEST
pane_wait NS
@@ -151,9 +155,20 @@ setup_passt_in_ns() {
[ ${DEBUG} -eq 1 ] && __opts="${__opts} -d"
[ ${TRACE} -eq 1 ] && __opts="${__opts} --trace"
- #pane_run PASST "valgrind --max-stackframe=3000000 ./passt -f ${__opts} -t 10001,10011,10021,10031 -u 10001,10011,10021,10031"
- pane_run PASST "./passt -f ${__opts} -t 10001,10011,10021,10031 -u 10001,10011,10021,10031"
- sleep 1
+ if [ ${VALGRIND} -eq 1 ]; then
+ pane_run PASST "make clean"
+ pane_wait PASST
+ pane_run PASST "make valgrind"
+ pane_wait PASST
+ pane_run PASST "valgrind --max-stackframe=$((4 * 1024 * 1024)) --trace-children=yes --vgdb=no --error-exitcode=1 --suppressions=test/valgrind.supp ./passt -f ${__opts} -t 10001,10011,10021,10031 -u 10001,10011,10021,10031 -P passt.pid"
+ else
+ pane_run PASST "make clean"
+ pane_wait PASST
+ pane_run PASST "make"
+ pane_wait PASST
+ pane_run PASST "./passt -f ${__opts} -t 10001,10011,10021,10031 -u 10001,10011,10021,10031 -P passt.pid"
+ fi
+ sleep 5
pane_run GUEST './qrap 5 kvm -m '${VMEM}' -cpu host -smp '${VCPUS} \
' -kernel ' "/boot/vmlinuz-$(uname -r)" \
@@ -264,12 +279,11 @@ setup_two_guests() {
pane_wait GUEST_2
}
-# teardown_passt() - Kill qemu and passt
+# teardown_passt() - Kill qemu, remove passt PID file
teardown_passt() {
- tmux send-keys -t ${PANE_PASST} "C-c"
- pane_wait PASST
tmux send-keys -t ${PANE_GUEST} "C-c"
pane_wait GUEST
+ rm passt.pid
}
# teardown_passt() - Exit namespace, kill pasta process
@@ -280,14 +294,14 @@ teardown_pasta() {
pane_wait NS
}
-# teardown_passt_in_ns() - Exit namespace, kill qemu, passt and pasta
+# teardown_passt_in_ns() - Exit namespace, kill qemu and pasta, remove pid file
teardown_passt_in_ns() {
tmux send-keys -t ${PANE_GUEST} "C-c"
pane_wait GUEST
tmux send-keys -t ${PANE_GUEST} "C-d"
- tmux send-keys -t ${PANE_PASST} "C-c"
- pane_wait PASST
+ [ ${VALGRIND} -eq 0 ] && tmux send-keys -t ${PANE_PASST} "C-c"
+ [ ${VALGRIND} -eq 0 ] && pane_wait GUEST
tmux send-keys -t ${PANE_PASST} "C-d"
tmux send-keys -t ${PANE_NS} "C-d"
@@ -295,6 +309,8 @@ teardown_passt_in_ns() {
pane_wait GUEST
pane_wait NS
pane_wait PASST
+
+ rm passt.pid
}
# teardown_two_guests() - Exit namespaces, kill qemu processes, passt and pasta
diff --git a/test/run b/test/run
index 385267e..b2819ef 100755
--- a/test/run
+++ b/test/run
@@ -78,14 +78,23 @@ run() {
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
diff --git a/test/valgrind.supp b/test/valgrind.supp
new file mode 100644
index 0000000..1228056
--- /dev/null
+++ b/test/valgrind.supp
@@ -0,0 +1,9 @@
+# tcp_sock_consume() calls recv() with MSG_TRUNC and no buffer to discard data
+{
+ passt_recv_MSG_TRUNC_into_NULL_buffer
+ Memcheck:Param
+ socketcall.recvfrom(buf)
+ fun:recv
+ ...
+ fun:tcp_sock_consume*
+}
diff --git a/test/valgrind/passt b/test/valgrind/passt
new file mode 100644
index 0000000..3af943a
--- /dev/null
+++ b/test/valgrind/passt
@@ -0,0 +1,22 @@
+# 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/valgrind/passt - Terminate passt and check valgrind exit code
+#
+# Copyright (c) 2022 Red Hat GmbH
+# Author: Stefano Brivio <sbrivio@redhat.com>
+
+onlyfor passt
+test valgrind: exit code
+
+hout PASST_PID cat passt.pid
+host kill __PASST_PID__
+sleep 1
+
+pout VALGRIND_EXIT echo $?
+check [ "__VALGRIND_EXIT__" = "0" ]
diff --git a/test/valgrind/passt_in_ns b/test/valgrind/passt_in_ns
new file mode 100644
index 0000000..bf50c7e
--- /dev/null
+++ b/test/valgrind/passt_in_ns
@@ -0,0 +1,22 @@
+# 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/valgrind/passt_in_ns - Terminate passt and check valgrind exit code
+#
+# Copyright (c) 2022 Red Hat GmbH
+# Author: Stefano Brivio <sbrivio@redhat.com>
+
+onlyfor passt_in_ns
+test valgrind: exit code
+
+nsout PASST_PID cat passt.pid
+ns kill __PASST_PID__
+sleep 1
+
+pout VALGRIND_EXIT echo $?
+check [ "__VALGRIND_EXIT__" = "0" ]