test: Use new-style command issue for passt_in_ns tests

Put the pieces together to use the new style context based dispatch for
the passt_in_pasta tests.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
David Gibson 2022-09-12 20:56:24 +10:00 committed by Stefano Brivio
parent 87a57156cf
commit 4381278b7d
5 changed files with 35 additions and 50 deletions

View file

@ -125,11 +125,8 @@ layout_passt_in_pasta() {
get_info_cols get_info_cols
tmux pipe-pane -O -t ${PANE_GUEST} "cat >> ${LOGDIR}/pane_guest.log" pane_watch_contexts ${PANE_GUEST} "guest" qemu guest
tmux select-pane -t ${PANE_GUEST} -T "guest" pane_watch_contexts ${PANE_NS} "namespace" ns
tmux pipe-pane -O -t ${PANE_NS} "cat >> ${LOGDIR}/pane_ns.log"
tmux select-pane -t ${PANE_NS} -T "namespace"
tmux send-keys -l -t ${PANE_INFO} 'while cat /tmp/.passt_test_log_pipe; do :; done' tmux send-keys -l -t ${PANE_INFO} 'while cat /tmp/.passt_test_log_pipe; do :; done'
tmux send-keys -t ${PANE_INFO} -N 100 C-m tmux send-keys -t ${PANE_INFO} -N 100 C-m
@ -137,8 +134,7 @@ layout_passt_in_pasta() {
pane_watch_contexts ${PANE_HOST} host host pane_watch_contexts ${PANE_HOST} host host
tmux pipe-pane -O -t ${PANE_PASST} "cat >> ${LOGDIR}/pane_passt.log" pane_watch_contexts ${PANE_PASST} "passt in pasta (namespace)" pasta passt
tmux select-pane -t ${PANE_PASST} -T "passt in pasta (namespace)"
info_layout "passt and guest in namespace, connected by pasta" info_layout "passt and guest in namespace, connected by pasta"

View file

@ -105,6 +105,7 @@ setup_pasta() {
# setup_passt_in_ns() - Set up namespace (with pasta), run qemu and passt into it # setup_passt_in_ns() - Set up namespace (with pasta), run qemu and passt into it
setup_passt_in_ns() { setup_passt_in_ns() {
context_setup_host host context_setup_host host
context_setup_host pasta
layout_passt_in_pasta layout_passt_in_pasta
@ -127,28 +128,18 @@ setup_passt_in_ns() {
[ ${DEBUG} -eq 1 ] && __opts="${__opts} -d" [ ${DEBUG} -eq 1 ] && __opts="${__opts} -d"
[ ${TRACE} -eq 1 ] && __opts="${__opts} --trace" [ ${TRACE} -eq 1 ] && __opts="${__opts} --trace"
__pid_file="$(mktemp)" context_run_bg pasta "./pasta ${__opts} -t 10001,10002,10011,10012 -T 10003,10013 -u 10001,10002,10011,10012 -U 10003,10013 -P pasta.pid ${NSHOLDER} ns.hold hold"
pane_run PASST "./pasta ${__opts} -t 10001,10002,10011,10012 -T 10003,10013 -u 10001,10002,10011,10012 -U 10003,10013 -P ${__pid_file}"
sleep 1 sleep 1
pane_run PASST '' __ns_pid=$(${NSHOLDER} ns.hold pid)
pane_status PASST
__pasta_pid="$(cat "${__pid_file}")"
__ns_pid="$(cat /proc/${__pasta_pid}/task/${__pasta_pid}/children | cut -f1 -d' ')"
rm "${__pid_file}"
pane_run GUEST "nsenter -t ${__ns_pid} -U -n --preserve-credentials" context_setup_nsenter qemu "-t ${__ns_pid} -U -n -p --preserve-credentials"
pane_run NS "nsenter -t ${__ns_pid} -U -n -p --preserve-credentials" context_setup_nsenter ns "-t ${__ns_pid} -U -n -p --preserve-credentials"
pane_status GUEST context_setup_nsenter passt "-t ${__ns_pid} -U -n -p --preserve-credentials"
pane_status NS
pane_run NS "ip -j link show | jq -rM '.[] | select(.link_type == \"ether\").ifname'" __ifname=$(context_run ns "ip -j link show | jq -rM '.[] | select(.link_type == \"ether\").ifname'")
pane_wait NS context_run ns "/sbin/dhclient -4 --no-pid ${__ifname}"
__ifname="$(pane_parse NS)"
pane_run NS "/sbin/dhclient -4 --no-pid ${__ifname}"
pane_status NS
sleep 2 sleep 2
pane_run NS "/sbin/dhclient -6 --no-pid ${__ifname}" context_run ns "/sbin/dhclient -6 --no-pid ${__ifname}"
pane_status NS
__opts= __opts=
[ ${PCAP} -eq 1 ] && __opts="${__opts} -p /tmp/passt_in_pasta.pcap" [ ${PCAP} -eq 1 ] && __opts="${__opts} -p /tmp/passt_in_pasta.pcap"
@ -156,21 +147,18 @@ setup_passt_in_ns() {
[ ${TRACE} -eq 1 ] && __opts="${__opts} --trace" [ ${TRACE} -eq 1 ] && __opts="${__opts} --trace"
if [ ${VALGRIND} -eq 1 ]; then if [ ${VALGRIND} -eq 1 ]; then
pane_run PASST "make clean" context_run passt "make clean"
pane_status PASST context_run passt "make valgrind"
pane_run PASST "make valgrind" context_run_bg 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"
pane_status 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 else
pane_run PASST "make clean" context_run passt "make clean"
pane_status PASST context_run passt "make"
pane_run PASST "make" context_run_bg passt "./passt -f ${__opts} -t 10001,10011,10021,10031 -u 10001,10011,10021,10031 -P passt.pid"
pane_status PASST
pane_run PASST "./passt -f ${__opts} -t 10001,10011,10021,10031 -u 10001,10011,10021,10031 -P passt.pid"
fi fi
sleep 5 sleep 5
pane_run GUEST './qrap 5 qemu-system-$(uname -m)' \ GUEST_CID=94557
context_run_bg qemu './qrap 5 qemu-system-$(uname -m)' \
' -machine accel=kvm' \ ' -machine accel=kvm' \
' -M accel=kvm:tcg' \ ' -M accel=kvm:tcg' \
' -m '${VMEM}' -cpu host -smp '${VCPUS} \ ' -m '${VMEM}' -cpu host -smp '${VCPUS} \
@ -181,8 +169,10 @@ setup_passt_in_ns() {
'virtio-net.napi_tx=1"' \ 'virtio-net.napi_tx=1"' \
" -device virtio-net-pci,netdev=hostnet0,x-txburst=524288" \ " -device virtio-net-pci,netdev=hostnet0,x-txburst=524288" \
" -netdev socket,fd=5,id=hostnet0" \ " -netdev socket,fd=5,id=hostnet0" \
' -pidfile passt_in_ns_qemu.pid' ' -pidfile passt_in_ns_qemu.pid' \
pane_status GUEST " -device vhost-vsock-pci,guest-cid=$GUEST_CID"
context_setup_guest guest $GUEST_CID
} }
# setup_two_guests() - Set up two namespace, run qemu and passt in both of them # setup_two_guests() - Set up two namespace, run qemu and passt in both of them
@ -321,19 +311,18 @@ teardown_pasta() {
# teardown_passt_in_ns() - Exit namespace, kill qemu and pasta, remove pid file # teardown_passt_in_ns() - Exit namespace, kill qemu and pasta, remove pid file
teardown_passt_in_ns() { teardown_passt_in_ns() {
kill $(cat passt_in_ns_qemu.pid) context_run ns kill $(cat passt_in_ns_qemu.pid)
pane_wait GUEST context_wait qemu
tmux send-keys -t ${PANE_GUEST} "C-d"
tmux send-keys -t ${PANE_PASST} "C-d" ${NSHOLDER} ns.hold stop
context_wait pasta
pane_wait GUEST rm passt.pid pasta.pid
pane_wait NS
pane_wait PASST
rm passt.pid
teardown_context_watch ${PANE_HOST} host teardown_context_watch ${PANE_HOST} host
teardown_context_watch ${PANE_PASST} pasta passt
teardown_context_watch ${PANE_NS} ns
teardown_context_watch ${PANE_GUEST} qemu guest
} }
# teardown_two_guests() - Exit namespaces, kill qemu processes, passt and pasta # teardown_two_guests() - Exit namespaces, kill qemu processes, passt and pasta

View file

@ -17,6 +17,4 @@ test shutdown: exit code
nsout PASST_PID cat passt.pid nsout PASST_PID cat passt.pid
ns kill __PASST_PID__ ns kill __PASST_PID__
sleep 1 sleep 1
passtw
pout EXIT echo $?
check [ "__EXIT__" = "0" ]

View file

@ -66,6 +66,7 @@ check [ "__HOST_MD5_BIG__" = "__MD5_BIG__" ]
test TCP/IPv4: ns to guest (using loopback address): big transfer test TCP/IPv4: ns to guest (using loopback address): big transfer
guestb socat -u TCP4-LISTEN:10001 OPEN:test_big.bin,create,trunc guestb socat -u TCP4-LISTEN:10001 OPEN:test_big.bin,create,trunc
sleep 1
ns socat -u OPEN:__TEMP_NS_BIG__ TCP4:127.0.0.1:10001 ns socat -u OPEN:__TEMP_NS_BIG__ TCP4:127.0.0.1:10001
guestw guestw
gout GUEST_MD5_BIG md5sum test_big.bin | cut -d' ' -f1 gout GUEST_MD5_BIG md5sum test_big.bin | cut -d' ' -f1

View file

@ -19,6 +19,7 @@ test UDP/IPv4: host to guest
temp TEMP temp TEMP
temp SC_PID temp SC_PID
guestb (socat -u UDP4-LISTEN:10001 STDOUT & echo $! > sc.pid) | tee test.bin | (grep -qm1 "END_OF_TEST" && kill $(cat sc.pid)) guestb (socat -u UDP4-LISTEN:10001 STDOUT & echo $! > sc.pid) | tee test.bin | (grep -qm1 "END_OF_TEST" && kill $(cat sc.pid))
sleep 1
host dd if=/dev/urandom bs=1k count=5 > __TEMP__ && printf "\nEND_OF_TEST\n" >> __TEMP__ host dd if=/dev/urandom bs=1k count=5 > __TEMP__ && printf "\nEND_OF_TEST\n" >> __TEMP__
host socat -u OPEN:__TEMP__ UDP4:127.0.0.1:10001 host socat -u OPEN:__TEMP__ UDP4:127.0.0.1:10001
guestw guestw