public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: passt-dev@passt.top
Subject: [PATCH v2 11/32] test: Use new-style command issue for passt_in_ns tests
Date: Thu, 08 Sep 2022 16:16:00 +1000	[thread overview]
Message-ID: <20220908061621.2430844-12-david@gibson.dropbear.id.au> (raw)
In-Reply-To: <20220908061621.2430844-1-david@gibson.dropbear.id.au>

[-- Attachment #1: Type: text/plain, Size: 7808 bytes --]

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

Signed-off-by: David Gibson <david(a)gibson.dropbear.id.au>
---
 test/lib/layout           | 10 ++----
 test/lib/setup            | 73 +++++++++++++++++----------------------
 test/shutdown/passt_in_ns |  4 +--
 test/tcp/passt_in_ns      |  1 +
 test/udp/passt_in_ns      |  1 +
 5 files changed, 37 insertions(+), 52 deletions(-)

diff --git a/test/lib/layout b/test/lib/layout
index b9d30e9..cc7c688 100644
--- a/test/lib/layout
+++ b/test/lib/layout
@@ -125,11 +125,8 @@ layout_passt_in_pasta() {
 
 	get_info_cols
 
-	tmux pipe-pane -O -t ${PANE_GUEST} "cat >> ${LOGDIR}/pane_guest.log"
-	tmux select-pane -t ${PANE_GUEST} -T "guest"
-
-	tmux pipe-pane -O -t ${PANE_NS} "cat >> ${LOGDIR}/pane_ns.log"
-	tmux select-pane -t ${PANE_NS} -T "namespace"
+	pane_watch_contexts ${PANE_GUEST} "guest" qemu guest
+	pane_watch_contexts ${PANE_NS} "namespace" ns
 
 	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
@@ -137,8 +134,7 @@ layout_passt_in_pasta() {
 
 	pane_watch_contexts ${PANE_HOST} host host
 
-	tmux pipe-pane -O -t ${PANE_PASST} "cat >> ${LOGDIR}/pane_passt.log"
-	tmux select-pane -t ${PANE_PASST} -T "passt in pasta (namespace)"
+	pane_watch_contexts ${PANE_PASST} "passt in pasta (namespace)" pasta passt
 
 	info_layout "passt and guest in namespace, connected by pasta"
 
diff --git a/test/lib/setup b/test/lib/setup
index 6eccd8c..957a9cc 100755
--- a/test/lib/setup
+++ b/test/lib/setup
@@ -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() {
 	context_setup_host host
+	context_setup_host pasta
 
 	layout_passt_in_pasta
 
@@ -127,28 +128,18 @@ setup_passt_in_ns() {
 	[ ${DEBUG} -eq 1 ] && __opts="${__opts} -d"
 	[ ${TRACE} -eq 1 ] && __opts="${__opts} --trace"
 
-	__pid_file="$(mktemp)"
-	pane_run PASST "./pasta ${__opts} -t 10001,10002,10011,10012 -T 10003,10013 -u 10001,10002,10011,10012 -U 10003,10013 -P ${__pid_file}"
+	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"
 	sleep 1
-	pane_run PASST ''
-	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"
-	pane_run NS "nsenter -t ${__ns_pid} -U -n -p --preserve-credentials"
-	pane_status GUEST
-	pane_status NS
-
-	pane_run NS "ip -j link show | jq -rM '.[] | select(.link_type == \"ether\").ifname'"
-	pane_wait NS
-	__ifname="$(pane_parse NS)"
-	pane_run NS "/sbin/dhclient -4 --no-pid ${__ifname}"
-	pane_status NS
+	__ns_pid=$(${NSHOLDER} ns.hold pid)
+
+	context_setup_nsenter qemu "-t ${__ns_pid} -U -n -p --preserve-credentials"
+	context_setup_nsenter ns "-t ${__ns_pid} -U -n -p --preserve-credentials"
+	context_setup_nsenter passt "-t ${__ns_pid} -U -n -p --preserve-credentials"
+
+	__ifname=$(context_run ns "ip -j link show | jq -rM '.[] | select(.link_type == \"ether\").ifname'")
+	context_run ns "/sbin/dhclient -4 --no-pid ${__ifname}"
 	sleep 2
-	pane_run NS "/sbin/dhclient -6 --no-pid ${__ifname}"
-	pane_status NS
+	context_run ns "/sbin/dhclient -6 --no-pid ${__ifname}"
 
 	__opts=
 	[ ${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"
 
 	if [ ${VALGRIND} -eq 1 ]; then
-		pane_run PASST "make clean"
-		pane_status PASST
-		pane_run PASST "make valgrind"
-		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"
+		context_run passt "make clean"
+		context_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"
 	else
-		pane_run PASST "make clean"
-		pane_status PASST
-		pane_run PASST "make"
-		pane_status PASST
-		pane_run PASST "./passt -f ${__opts} -t 10001,10011,10021,10031 -u 10001,10011,10021,10031 -P passt.pid"
+		context_run passt "make clean"
+		context_run passt "make"
+		context_run_bg 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 qemu-system-$(uname -m)'                  \
+	GUEST_CID=94557
+	context_run_bg qemu './qrap 5 qemu-system-$(uname -m)'                \
 		' -machine accel=kvm'                                      \
 		' -M accel=kvm:tcg'                                        \
 		' -m '${VMEM}' -cpu host -smp '${VCPUS}                    \
@@ -181,8 +169,10 @@ setup_passt_in_ns() {
 		'virtio-net.napi_tx=1"'					   \
 		" -device virtio-net-pci,netdev=hostnet0,x-txburst=524288" \
 		" -netdev socket,fd=5,id=hostnet0"			   \
-		' -pidfile passt_in_ns_qemu.pid'
-	pane_status GUEST
+		' -pidfile passt_in_ns_qemu.pid'			   \
+		" -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
@@ -321,19 +311,18 @@ teardown_pasta() {
 
 # teardown_passt_in_ns() - Exit namespace, kill qemu and pasta, remove pid file
 teardown_passt_in_ns() {
-	kill $(cat passt_in_ns_qemu.pid)
-	pane_wait GUEST
-	tmux send-keys -t ${PANE_GUEST} "C-d"
-
-	tmux send-keys -t ${PANE_PASST} "C-d"
+	context_run ns kill $(cat passt_in_ns_qemu.pid)
+	context_wait qemu
 
-	pane_wait GUEST
-	pane_wait NS
-	pane_wait PASST
+	${NSHOLDER} ns.hold stop
+	context_wait pasta
 
-	rm passt.pid
+	rm passt.pid pasta.pid
 
 	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
diff --git a/test/shutdown/passt_in_ns b/test/shutdown/passt_in_ns
index a427bf4..3808adb 100644
--- a/test/shutdown/passt_in_ns
+++ b/test/shutdown/passt_in_ns
@@ -17,6 +17,4 @@ test	shutdown: exit code
 nsout	PASST_PID cat passt.pid
 ns	kill __PASST_PID__
 sleep	1
-
-pout	EXIT echo $?
-check	[ "__EXIT__" = "0" ]
+passtw
diff --git a/test/tcp/passt_in_ns b/test/tcp/passt_in_ns
index cb01781..a248f00 100644
--- a/test/tcp/passt_in_ns
+++ b/test/tcp/passt_in_ns
@@ -66,6 +66,7 @@ check	[ "__HOST_MD5_BIG__" = "__MD5_BIG__" ]
 
 test	TCP/IPv4: ns to guest (using loopback address): big transfer
 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
 guestw
 gout	GUEST_MD5_BIG md5sum test_big.bin | cut -d' ' -f1
diff --git a/test/udp/passt_in_ns b/test/udp/passt_in_ns
index f5ea402..d5f08fe 100644
--- a/test/udp/passt_in_ns
+++ b/test/udp/passt_in_ns
@@ -19,6 +19,7 @@ test	UDP/IPv4: host to guest
 temp	TEMP
 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))
+sleep	1
 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
 guestw
-- 
@@ -19,6 +19,7 @@ test	UDP/IPv4: host to guest
 temp	TEMP
 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))
+sleep	1
 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
 guestw
-- 
2.37.3


  parent reply	other threads:[~2022-09-08  6:16 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-08  6:15 [PATCH v2 00/32] Improve handling of test temporary files David Gibson
2022-09-08  6:15 ` [PATCH v2 01/32] test: Correctly match "background" with "wait" commands David Gibson
2022-09-08  6:15 ` [PATCH v2 02/32] test: Context execution helpers David Gibson
2022-09-08  6:15 ` [PATCH v2 03/32] test: Allow a tmux pane to watch commands executed in contexts David Gibson
2022-09-08  6:15 ` [PATCH v2 04/32] test: Integration of old-style pane execution and new context execution David Gibson
2022-09-08  6:15 ` [PATCH v2 05/32] test: Issue host commands via context for most tests David Gibson
2022-09-08  6:15 ` [PATCH v2 06/32] test: Use new-style contexts for passt pane in the pasta and passt tests David Gibson
2022-09-08  6:15 ` [PATCH v2 07/32] test: Add nsholder utility David Gibson
2022-09-08  6:15 ` [PATCH v2 08/32] test: Extend context system to run commands in namespace for pasta tests David Gibson
2022-09-08  6:15 ` [PATCH v2 09/32] test: Use context system for guest commands David Gibson
2022-09-08  6:15 ` [PATCH v2 10/32] test: Use context system for two_guests tests David Gibson
2022-09-08  6:16 ` David Gibson [this message]
2022-09-08  6:16 ` [PATCH v2 12/32] Don't store UID & GID persistently in the context structure David Gibson
2022-09-08  6:16 ` [PATCH v2 13/32] Split checking for root from dropping root privilege David Gibson
2022-09-08  6:16 ` [PATCH v2 14/32] Consolidate determination of UID/GID to run as David Gibson
2022-09-08  6:16 ` [PATCH v2 15/32] Safer handling if we can't open /proc/self/uid_map David Gibson
2022-09-08  6:16 ` [PATCH v2 16/32] Move self-isolation code into a separate file David Gibson
2022-09-08  6:16 ` [PATCH v2 17/32] Consolidate validation of pasta namespace options David Gibson
2022-09-08  6:16 ` [PATCH v2 18/32] Clean up and rename conf_ns_open() David Gibson
2022-09-08  6:16 ` [PATCH v2 19/32] Correctly handle --netns-only in pasta_start_ns() David Gibson
2022-09-08  6:16 ` [PATCH v2 20/32] Handle userns isolation and dropping root at the same time David Gibson
2022-09-08  6:16 ` [PATCH v2 21/32] Allow --userns when pasta spawns a command David Gibson
2022-09-08  6:16 ` [PATCH v2 22/32] test: Group tests by context then protocol, rather than the reverse David Gibson
2022-09-08  6:16 ` [PATCH v2 23/32] test: Remove unused variable FFMPEG_PID_FILE David Gibson
2022-09-08  6:16 ` [PATCH v2 24/32] test: Actually run cleanup function David Gibson
2022-09-08  6:16 ` [PATCH v2 25/32] test: Create common state directories for temporary files David Gibson
2022-09-08  6:16 ` [PATCH v2 26/32] test: Move context temporary files to state dir David Gibson
2022-09-08  6:16 ` [PATCH v2 27/32] test: Dont regnerate small test file in pasta/tcp David Gibson
2022-09-08  6:16 ` [PATCH v2 28/32] test: Use paths in __STATEDIR__ instead of 'temp' and 'tempdir' directives David Gibson
2022-09-08  6:16 ` [PATCH v2 29/32] test: Move pause temporary file to state directory David Gibson
2022-09-08  6:16 ` [PATCH v2 30/32] test: Store pcap files in $LOGDIR instead of /tmp David Gibson
2022-09-08  6:16 ` [PATCH v2 31/32] test: Move pidfiles and nsholder sockets into state directory David Gibson
2022-09-08  6:16 ` [PATCH v2 32/32] test: Move video processing files to $STATEBASE David Gibson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220908061621.2430844-12-david@gibson.dropbear.id.au \
    --to=david@gibson.dropbear.id.au \
    --cc=passt-dev@passt.top \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://passt.top/passt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).