aboutgitcodebugslistschat
path: root/test/lib
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2022-10-31 12:20:59 +0100
committerStefano Brivio <sbrivio@redhat.com>2022-11-04 12:01:27 +0100
commit40fc9e6e7b46819bfa275abf8e0f0e5b6ae7316b (patch)
treeb03442286486117b67d986886377ab0f93152bc1 /test/lib
parentce2a0a5bb45b23a28ac9b125bd67a4678c009231 (diff)
downloadpasst-40fc9e6e7b46819bfa275abf8e0f0e5b6ae7316b.tar
passt-40fc9e6e7b46819bfa275abf8e0f0e5b6ae7316b.tar.gz
passt-40fc9e6e7b46819bfa275abf8e0f0e5b6ae7316b.tar.bz2
passt-40fc9e6e7b46819bfa275abf8e0f0e5b6ae7316b.tar.lz
passt-40fc9e6e7b46819bfa275abf8e0f0e5b6ae7316b.tar.xz
passt-40fc9e6e7b46819bfa275abf8e0f0e5b6ae7316b.tar.zst
passt-40fc9e6e7b46819bfa275abf8e0f0e5b6ae7316b.zip
test: Add memory/passt test cases
These show a summary of memory usage in kernel and userspace with different port forwarding configurations, details of userspace usage using 'nm' (passt only uses statically allocated memory), and details of kernel memory from slab reporting facilities. This adds a new test image, mbuto.mem.img, with harcoded IPv4 and IPv6 addresses and routes, and just the tools we need to start and stop passt, to report from /proc/slabinfo, /proc/meminfo, and to print and parse symbol sizes using nm(1). passt can't pivot_root() for sandboxing purposes on ramfs, so we need to create another filesystem and chroot into it, first. We don't want to use pane context functions, as we're checking memory usage for sockets: resort to screen-scraping. Configure a dummy interface to provide passt with an appearance of working IPv4 and IPv6 connectivity, contributed by David. Signed-off-by: Stefano Brivio <sbrivio@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'test/lib')
-rw-r--r--test/lib/layout_ugly30
-rwxr-xr-xtest/lib/setup_ugly20
2 files changed, 50 insertions, 0 deletions
diff --git a/test/lib/layout_ugly b/test/lib/layout_ugly
index 9397b7d..22f6169 100644
--- a/test/lib/layout_ugly
+++ b/test/lib/layout_ugly
@@ -81,3 +81,33 @@ layout_pasta_simple() {
sleep 1
}
+
+# layout_memory() - Screen-scraped panes for memory usage tests, big guest pane
+layout_memory() {
+ sleep 3
+
+ tmux kill-pane -a -t 0
+ cmd_write 0 clear
+
+ tmux split-window -h -l '35%' -t passt_test
+
+ PANE_GUEST=0
+ PANE_INFO=1
+
+ get_info_cols
+
+ tmux send-keys -l -t ${PANE_INFO} 'while cat '"$STATEBASE/log_pipe"'; do :; done'
+ tmux send-keys -t ${PANE_INFO} -N 100 C-m
+ tmux select-pane -t ${PANE_INFO} -T "test log"
+
+ if context_exists guest; then
+ pane_watch_contexts ${PANE_GUEST} guest guest
+ else
+ tmux pipe-pane -O -t ${PANE_GUEST} "cat >> ${LOGDIR}/pane_guest.log"
+ tmux select-pane -t ${PANE_GUEST} -T "guest"
+ fi
+
+ info_layout "memory usage"
+
+ sleep 1
+}
diff --git a/test/lib/setup_ugly b/test/lib/setup_ugly
index 764177e..bcf07ef 100755
--- a/test/lib/setup_ugly
+++ b/test/lib/setup_ugly
@@ -13,6 +13,8 @@
# Copyright (c) 2022 Red Hat GmbH
# Author: Stefano Brivio <sbrivio@redhat.com>
+INITRAMFS_MEM="${BASEPATH}/mbuto.mem.img"
+
# setup_distro() - Set up pane layout for distro tests
setup_distro() {
layout_host
@@ -25,6 +27,20 @@ setup_pasta_options() {
layout_pasta_simple
}
+# setup_memory() - Start qemu in guest pane, and passt in passt context
+setup_memory() {
+ layout_memory
+
+ pane_or_context_run guest 'qemu-system-$(uname -m)' \
+ ' -machine accel=kvm' \
+ ' -m '${VMEM}' -cpu host -smp '${VCPUS} \
+ ' -kernel ' "/boot/vmlinuz-$(uname -r)" \
+ ' -initrd '${INITRAMFS_MEM}' -nographic -serial stdio' \
+ ' -nodefaults' \
+ ' -append "console=ttyS0 mitigations=off apparmor=0"' \
+ " -pidfile ${STATESETUP}/qemu.pid"
+}
+
# teardown_distro() - Nothing to do, yet
teardown_distro() {
:
@@ -36,3 +52,7 @@ teardown_pasta_options() {
teardown_context_watch ${PANE_PASST} passt
}
+# teardown_passt() - Kill qemu with ^C, remove passt PID file
+teardown_memory() {
+ kill $(cat "${STATESETUP}/qemu.pid")
+}