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 10/11] test: Use context system for two_guests tests
Date: Fri, 02 Sep 2022 12:14:59 +1000	[thread overview]
Message-ID: <20220902021500.25358-11-david@gibson.dropbear.id.au> (raw)
In-Reply-To: <20220902021500.25358-1-david@gibson.dropbear.id.au>

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

Now that we have all the pieces we need for issuing commands both into
namespaces and into guests, we can use those to convert the two_guests to
using only the new style context command issue.

Signed-off-by: David Gibson <david(a)gibson.dropbear.id.au>
---
 test/lib/layout |  15 ++-----
 test/lib/setup  | 115 ++++++++++++++++++++++--------------------------
 2 files changed, 57 insertions(+), 73 deletions(-)

diff --git a/test/lib/layout b/test/lib/layout
index 6942c2e..bf2283a 100644
--- a/test/lib/layout
+++ b/test/lib/layout
@@ -175,23 +175,16 @@ layout_two_guests() {
 
 	get_info_cols
 
-	tmux pipe-pane -O -t ${PANE_GUEST_1} "cat >> ${LOGDIR}/pane_guest_1.log"
-	tmux select-pane -t ${PANE_GUEST_1} -T "guest #1 in namespace #1"
-
-	tmux pipe-pane -O -t ${PANE_GUEST_2} "cat >> ${LOGDIR}/pane_guest_2.log"
-	tmux select-pane -t ${PANE_GUEST_2} -T "guest #2 in namespace #2"
+	pane_watch_contexts ${PANE_GUEST_1} "guest #1 in namespace #1" qemu_1 guest_1
+	pane_watch_contexts ${PANE_GUEST_2} "guest #2 in namespace #2" qemu_2 guest_2
 
 	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 select-pane -t ${PANE_INFO} -T "test log"
 
 	pane_watch_contexts ${PANE_HOST} host host
-
-	tmux pipe-pane -O -t ${PANE_PASST_1} "cat >> ${LOGDIR}/pane_passt_1.log"
-	tmux select-pane -t ${PANE_PASST_1} -T "passt #1 in namespace #1"
-
-	tmux pipe-pane -O -t ${PANE_PASST_2} "cat >> ${LOGDIR}/pane_passt_2.log"
-	tmux select-pane -t ${PANE_PASST_2} -T "passt #2 in namespace #2"
+	pane_watch_contexts ${PANE_PASST_1} "passt #1 in namespace #1" pasta_1 passt_1
+	pane_watch_contexts ${PANE_PASST_2} "passt #2 in namespace #2" pasta_2 passt_2
 
 	info_layout "two guests, two passt instances, in namespaces"
 
diff --git a/test/lib/setup b/test/lib/setup
index 4d8c81f..6eccd8c 100755
--- a/test/lib/setup
+++ b/test/lib/setup
@@ -188,6 +188,8 @@ setup_passt_in_ns() {
 # setup_two_guests() - Set up two namespace, run qemu and passt in both of them
 setup_two_guests() {
 	context_setup_host host
+	context_setup_host pasta_1
+	context_setup_host pasta_2
 
 	layout_two_guests
 
@@ -201,66 +203,49 @@ setup_two_guests() {
 	#  10004            | as server |  to init  |  to guest  |  to ns #2
 	#  10005            |           |           |  as server |  to ns #2
 
-	__pid1_file="$(mktemp)"
-	__pid2_file="$(mktemp)"
-
 	__opts=
 	[ ${PCAP} -eq 1 ] && __opts="${__opts} -p /tmp/pasta_1.pcap"
 	[ ${DEBUG} -eq 1 ] && __opts="${__opts} -d"
 	[ ${TRACE} -eq 1 ] && __opts="${__opts} --trace"
-	pane_run PASST_1 "./pasta ${__opts} -P ${__pid1_file} -t 10001,10002 -T 10003,10004 -u 10001,10002 -U 10003,10004"
+	context_run_bg pasta_1 "./pasta ${__opts} -P pasta_1.pid -t 10001,10002 -T 10003,10004 -u 10001,10002 -U 10003,10004 ${NSHOLDER} ns1.hold hold"
+	__ns1_pid=$(${NSHOLDER} ns1.hold pid)
+	context_setup_nsenter passt_1 -U -n -p --preserve-credentials -t ${__ns1_pid}
 
 	__opts=
 	[ ${PCAP} -eq 1 ] && __opts="${__opts} -p /tmp/pasta_2.pcap"
 	[ ${DEBUG} -eq 1 ] && __opts="${__opts} -d"
 	[ ${TRACE} -eq 1 ] && __opts="${__opts} --trace"
-	pane_run PASST_2 "./pasta ${__opts} -P ${__pid2_file} -t 10004,10005 -T 10003,10001 -u 10004,10005 -U 10003,10001"
+	context_run_bg pasta_2 "./pasta ${__opts} -P pasta_2.pid -t 10004,10005 -T 10003,10001 -u 10004,10005 -U 10003,10001 ${NSHOLDER} ns2.hold hold"
+	__ns2_pid=$(${NSHOLDER} ns2.hold pid)
+	context_setup_nsenter passt_2 -U -n -p --preserve-credentials -t ${__ns2_pid}
 
-	sleep 1
-	pane_run PASST_1 ''
-	pane_run PASST_2 ''
-
-	pane_status PASST_1
-	pane_status PASST_2
-	__pasta1_pid="$(cat "${__pid1_file}")"
-	__ns1_pid="$(cat /proc/${__pasta1_pid}/task/${__pasta1_pid}/children | cut -f1 -d' ')"
-	rm "${__pid1_file}"
-	__pasta2_pid="$(cat "${__pid2_file}")"
-	__ns2_pid="$(cat /proc/${__pasta2_pid}/task/${__pasta2_pid}/children | cut -f1 -d' ')"
-	rm "${__pid2_file}"
-
-	pane_run GUEST_1 "nsenter -t ${__ns1_pid} -U -n --preserve-credentials"
-	pane_run GUEST_2 "nsenter -t ${__ns2_pid} -U -n --preserve-credentials"
-
-	pane_run PASST_1 "ip -j link show | jq -rM '.[] | select(.link_type == \"ether\").ifname'"
-	pane_wait PASST_1
-	__ifname="$(pane_parse PASST_1)"
-
-	pane_run GUEST_1 "/sbin/dhclient -4 --no-pid ${__ifname}"
-	pane_run GUEST_2 "/sbin/dhclient -4 --no-pid ${__ifname}"
-	pane_status GUEST_1
-	pane_status GUEST_2
-	sleep 2
-	pane_run GUEST_1 "/sbin/dhclient -6 --no-pid ${__ifname}"
-	pane_run GUEST_2 "/sbin/dhclient -6 --no-pid ${__ifname}"
-	pane_status GUEST_1
-	pane_status GUEST_2
+	context_setup_nsenter qemu_1 -U -n -p --preserve-credentials -t ${__ns1_pid}
+	context_setup_nsenter qemu_2 -U -n -p --preserve-credentials -t ${__ns2_pid}
+
+	__ifname="$(context_run qemu_1 "ip -j link show | jq -rM '.[] | select(.link_type == \"ether\").ifname'")"
+
+	context_run qemu_1 "/sbin/dhclient -4 --no-pid ${__ifname}"
+	context_run qemu_2 "/sbin/dhclient -4 --no-pid ${__ifname}"
+	context_run qemu_1 "/sbin/dhclient -6 --no-pid ${__ifname}"
+	context_run qemu_2 "/sbin/dhclient -6 --no-pid ${__ifname}"
 
 	__opts=
 	[ ${PCAP} -eq 1 ] && __opts="${__opts} -p /tmp/passt_1.pcap"
 	[ ${DEBUG} -eq 1 ] && __opts="${__opts} -d"
 	[ ${TRACE} -eq 1 ] && __opts="${__opts} --trace"
 
-	pane_run PASST_1 "./passt -f ${__opts} -t 10001 -u 10001"
+	context_run_bg passt_1 "./passt -P passt_1.pid -f ${__opts} -t 10001 -u 10001"
 	sleep 1
 
 	__opts=
 	[ ${PCAP} -eq 1 ] && __opts="${__opts} -p /tmp/passt_2.pcap"
 	[ ${DEBUG} -eq 1 ] && __opts="${__opts} -d"
 	[ ${TRACE} -eq 1 ] && __opts="${__opts} --trace"
-	pane_run PASST_2 "./passt -f ${__opts} -t 10004 -u 10004"
 
-	pane_run GUEST_1 './qrap 5 qemu-system-$(uname -m)'                  \
+	context_run_bg passt_2 "./passt -P passt_2.pid -f ${__opts} -t 10004 -u 10004"
+
+	GUEST_1_CID=94557
+	context_run_bg qemu_1 './qrap 5 qemu-system-$(uname -m)'             \
 		' -M accel=kvm:tcg'                                          \
 		' -m '${VMEM}' -cpu host -smp '${VCPUS}                      \
 		' -kernel ' "/boot/vmlinuz-$(uname -r)"			     \
@@ -270,8 +255,11 @@ setup_two_guests() {
 		'virtio-net.napi_tx=1"'					     \
 		" -device virtio-net-pci,netdev=hostnet0,x-txburst=16384"    \
 		" -netdev socket,fd=5,id=hostnet0"			     \
-		' -pidfile two_guests_qemu_1.pid'
-	pane_run GUEST_2 './qrap 5 qemu-system-$(uname -m)'                  \
+		' -pidfile two_guests_qemu_1.pid'			     \
+		" -device vhost-vsock-pci,guest-cid=$GUEST_1_CID"
+
+	GUEST_2_CID=94558
+	context_run_bg qemu_2 './qrap 5 qemu-system-$(uname -m)'             \
 		' -M accel=kvm:tcg'                                          \
 		' -m '${VMEM}' -cpu host -smp '${VCPUS}                      \
 		' -kernel ' "/boot/vmlinuz-$(uname -r)"			     \
@@ -281,9 +269,11 @@ setup_two_guests() {
 		'virtio-net.napi_tx=1"'					     \
 		" -device virtio-net-pci,netdev=hostnet0,x-txburst=16384"    \
 		" -netdev socket,fd=5,id=hostnet0"			     \
-		' -pidfile two_guests_qemu_2.pid'
-	pane_status GUEST_1
-	pane_status GUEST_2
+		' -pidfile two_guests_qemu_2.pid'			     \
+		" -device vhost-vsock-pci,guest-cid=$GUEST_2_CID"
+
+	context_setup_guest guest_1 ${GUEST_1_CID}
+	context_setup_guest guest_2 ${GUEST_2_CID}
 }
 
 # teardown_context_watch() - Remove contexts and stop panes watching them
@@ -348,28 +338,29 @@ teardown_passt_in_ns() {
 
 # teardown_two_guests() - Exit namespaces, kill qemu processes, passt and pasta
 teardown_two_guests() {
-	kill $(cat two_guests_qemu_1.pid)
-	pane_wait GUEST_1
-	tmux send-keys -t ${PANE_GUEST_1} "C-d"
-
-	kill $(cat two_guests_qemu_2.pid)
-	pane_wait GUEST_2
-	tmux send-keys -t ${PANE_GUEST_2} "C-d"
-
-	tmux send-keys -t ${PANE_PASST_1} "C-c"
-	pane_wait PASST_1
-	tmux send-keys -t ${PANE_PASST_1} "C-d"
-
-	tmux send-keys -t ${PANE_PASST_2} "C-c"
-	pane_wait PASST_2
-	tmux send-keys -t ${PANE_PASST_2} "C-d"
-
-	pane_wait GUEST_1
-	pane_wait GUEST_2
-	pane_wait PASST_1
-	pane_wait PASST_2
+	__ns1_pid=$(${NSHOLDER} ns1.hold pid)
+	__ns2_pid=$(${NSHOLDER} ns2.hold pid)
+	nsenter -U -p --preserve-credentials -t ${__ns1_pid} kill $(cat two_guests_qemu_1.pid)
+	nsenter -U -p --preserve-credentials -t ${__ns2_pid} kill $(cat two_guests_qemu_2.pid)
+	context_wait qemu_1
+	context_wait qemu_2
+
+	nsenter -U -p --preserve-credentials -t ${__ns1_pid} kill $(cat passt_1.pid)
+	nsenter -U -p --preserve-credentials -t ${__ns2_pid} kill $(cat passt_2.pid)
+	context_wait passt_1
+	context_wait passt_2
+	${NSHOLDER} ns1.hold stop
+	${NSHOLDER} ns2.hold stop
+	context_wait pasta_1
+	context_wait pasta_2
+
+	rm -f passt_[12].pid pasta_[12].pid
 
 	teardown_context_watch ${PANE_HOST} host
+	teardown_context_watch ${PANE_GUEST_1} qemu_1 guest_1
+	teardown_context_watch ${PANE_GUEST_2} qemu_2 guest_2
+	teardown_context_watch ${PANE_PASST_1} pasta_1 passt_1
+	teardown_context_watch ${PANE_PASST_2} pasta_2 passt_2
 }
 
 # teardown_demo_passt() - Exit namespace, kill qemu, passt and pasta
-- 
@@ -188,6 +188,8 @@ setup_passt_in_ns() {
 # setup_two_guests() - Set up two namespace, run qemu and passt in both of them
 setup_two_guests() {
 	context_setup_host host
+	context_setup_host pasta_1
+	context_setup_host pasta_2
 
 	layout_two_guests
 
@@ -201,66 +203,49 @@ setup_two_guests() {
 	#  10004            | as server |  to init  |  to guest  |  to ns #2
 	#  10005            |           |           |  as server |  to ns #2
 
-	__pid1_file="$(mktemp)"
-	__pid2_file="$(mktemp)"
-
 	__opts=
 	[ ${PCAP} -eq 1 ] && __opts="${__opts} -p /tmp/pasta_1.pcap"
 	[ ${DEBUG} -eq 1 ] && __opts="${__opts} -d"
 	[ ${TRACE} -eq 1 ] && __opts="${__opts} --trace"
-	pane_run PASST_1 "./pasta ${__opts} -P ${__pid1_file} -t 10001,10002 -T 10003,10004 -u 10001,10002 -U 10003,10004"
+	context_run_bg pasta_1 "./pasta ${__opts} -P pasta_1.pid -t 10001,10002 -T 10003,10004 -u 10001,10002 -U 10003,10004 ${NSHOLDER} ns1.hold hold"
+	__ns1_pid=$(${NSHOLDER} ns1.hold pid)
+	context_setup_nsenter passt_1 -U -n -p --preserve-credentials -t ${__ns1_pid}
 
 	__opts=
 	[ ${PCAP} -eq 1 ] && __opts="${__opts} -p /tmp/pasta_2.pcap"
 	[ ${DEBUG} -eq 1 ] && __opts="${__opts} -d"
 	[ ${TRACE} -eq 1 ] && __opts="${__opts} --trace"
-	pane_run PASST_2 "./pasta ${__opts} -P ${__pid2_file} -t 10004,10005 -T 10003,10001 -u 10004,10005 -U 10003,10001"
+	context_run_bg pasta_2 "./pasta ${__opts} -P pasta_2.pid -t 10004,10005 -T 10003,10001 -u 10004,10005 -U 10003,10001 ${NSHOLDER} ns2.hold hold"
+	__ns2_pid=$(${NSHOLDER} ns2.hold pid)
+	context_setup_nsenter passt_2 -U -n -p --preserve-credentials -t ${__ns2_pid}
 
-	sleep 1
-	pane_run PASST_1 ''
-	pane_run PASST_2 ''
-
-	pane_status PASST_1
-	pane_status PASST_2
-	__pasta1_pid="$(cat "${__pid1_file}")"
-	__ns1_pid="$(cat /proc/${__pasta1_pid}/task/${__pasta1_pid}/children | cut -f1 -d' ')"
-	rm "${__pid1_file}"
-	__pasta2_pid="$(cat "${__pid2_file}")"
-	__ns2_pid="$(cat /proc/${__pasta2_pid}/task/${__pasta2_pid}/children | cut -f1 -d' ')"
-	rm "${__pid2_file}"
-
-	pane_run GUEST_1 "nsenter -t ${__ns1_pid} -U -n --preserve-credentials"
-	pane_run GUEST_2 "nsenter -t ${__ns2_pid} -U -n --preserve-credentials"
-
-	pane_run PASST_1 "ip -j link show | jq -rM '.[] | select(.link_type == \"ether\").ifname'"
-	pane_wait PASST_1
-	__ifname="$(pane_parse PASST_1)"
-
-	pane_run GUEST_1 "/sbin/dhclient -4 --no-pid ${__ifname}"
-	pane_run GUEST_2 "/sbin/dhclient -4 --no-pid ${__ifname}"
-	pane_status GUEST_1
-	pane_status GUEST_2
-	sleep 2
-	pane_run GUEST_1 "/sbin/dhclient -6 --no-pid ${__ifname}"
-	pane_run GUEST_2 "/sbin/dhclient -6 --no-pid ${__ifname}"
-	pane_status GUEST_1
-	pane_status GUEST_2
+	context_setup_nsenter qemu_1 -U -n -p --preserve-credentials -t ${__ns1_pid}
+	context_setup_nsenter qemu_2 -U -n -p --preserve-credentials -t ${__ns2_pid}
+
+	__ifname="$(context_run qemu_1 "ip -j link show | jq -rM '.[] | select(.link_type == \"ether\").ifname'")"
+
+	context_run qemu_1 "/sbin/dhclient -4 --no-pid ${__ifname}"
+	context_run qemu_2 "/sbin/dhclient -4 --no-pid ${__ifname}"
+	context_run qemu_1 "/sbin/dhclient -6 --no-pid ${__ifname}"
+	context_run qemu_2 "/sbin/dhclient -6 --no-pid ${__ifname}"
 
 	__opts=
 	[ ${PCAP} -eq 1 ] && __opts="${__opts} -p /tmp/passt_1.pcap"
 	[ ${DEBUG} -eq 1 ] && __opts="${__opts} -d"
 	[ ${TRACE} -eq 1 ] && __opts="${__opts} --trace"
 
-	pane_run PASST_1 "./passt -f ${__opts} -t 10001 -u 10001"
+	context_run_bg passt_1 "./passt -P passt_1.pid -f ${__opts} -t 10001 -u 10001"
 	sleep 1
 
 	__opts=
 	[ ${PCAP} -eq 1 ] && __opts="${__opts} -p /tmp/passt_2.pcap"
 	[ ${DEBUG} -eq 1 ] && __opts="${__opts} -d"
 	[ ${TRACE} -eq 1 ] && __opts="${__opts} --trace"
-	pane_run PASST_2 "./passt -f ${__opts} -t 10004 -u 10004"
 
-	pane_run GUEST_1 './qrap 5 qemu-system-$(uname -m)'                  \
+	context_run_bg passt_2 "./passt -P passt_2.pid -f ${__opts} -t 10004 -u 10004"
+
+	GUEST_1_CID=94557
+	context_run_bg qemu_1 './qrap 5 qemu-system-$(uname -m)'             \
 		' -M accel=kvm:tcg'                                          \
 		' -m '${VMEM}' -cpu host -smp '${VCPUS}                      \
 		' -kernel ' "/boot/vmlinuz-$(uname -r)"			     \
@@ -270,8 +255,11 @@ setup_two_guests() {
 		'virtio-net.napi_tx=1"'					     \
 		" -device virtio-net-pci,netdev=hostnet0,x-txburst=16384"    \
 		" -netdev socket,fd=5,id=hostnet0"			     \
-		' -pidfile two_guests_qemu_1.pid'
-	pane_run GUEST_2 './qrap 5 qemu-system-$(uname -m)'                  \
+		' -pidfile two_guests_qemu_1.pid'			     \
+		" -device vhost-vsock-pci,guest-cid=$GUEST_1_CID"
+
+	GUEST_2_CID=94558
+	context_run_bg qemu_2 './qrap 5 qemu-system-$(uname -m)'             \
 		' -M accel=kvm:tcg'                                          \
 		' -m '${VMEM}' -cpu host -smp '${VCPUS}                      \
 		' -kernel ' "/boot/vmlinuz-$(uname -r)"			     \
@@ -281,9 +269,11 @@ setup_two_guests() {
 		'virtio-net.napi_tx=1"'					     \
 		" -device virtio-net-pci,netdev=hostnet0,x-txburst=16384"    \
 		" -netdev socket,fd=5,id=hostnet0"			     \
-		' -pidfile two_guests_qemu_2.pid'
-	pane_status GUEST_1
-	pane_status GUEST_2
+		' -pidfile two_guests_qemu_2.pid'			     \
+		" -device vhost-vsock-pci,guest-cid=$GUEST_2_CID"
+
+	context_setup_guest guest_1 ${GUEST_1_CID}
+	context_setup_guest guest_2 ${GUEST_2_CID}
 }
 
 # teardown_context_watch() - Remove contexts and stop panes watching them
@@ -348,28 +338,29 @@ teardown_passt_in_ns() {
 
 # teardown_two_guests() - Exit namespaces, kill qemu processes, passt and pasta
 teardown_two_guests() {
-	kill $(cat two_guests_qemu_1.pid)
-	pane_wait GUEST_1
-	tmux send-keys -t ${PANE_GUEST_1} "C-d"
-
-	kill $(cat two_guests_qemu_2.pid)
-	pane_wait GUEST_2
-	tmux send-keys -t ${PANE_GUEST_2} "C-d"
-
-	tmux send-keys -t ${PANE_PASST_1} "C-c"
-	pane_wait PASST_1
-	tmux send-keys -t ${PANE_PASST_1} "C-d"
-
-	tmux send-keys -t ${PANE_PASST_2} "C-c"
-	pane_wait PASST_2
-	tmux send-keys -t ${PANE_PASST_2} "C-d"
-
-	pane_wait GUEST_1
-	pane_wait GUEST_2
-	pane_wait PASST_1
-	pane_wait PASST_2
+	__ns1_pid=$(${NSHOLDER} ns1.hold pid)
+	__ns2_pid=$(${NSHOLDER} ns2.hold pid)
+	nsenter -U -p --preserve-credentials -t ${__ns1_pid} kill $(cat two_guests_qemu_1.pid)
+	nsenter -U -p --preserve-credentials -t ${__ns2_pid} kill $(cat two_guests_qemu_2.pid)
+	context_wait qemu_1
+	context_wait qemu_2
+
+	nsenter -U -p --preserve-credentials -t ${__ns1_pid} kill $(cat passt_1.pid)
+	nsenter -U -p --preserve-credentials -t ${__ns2_pid} kill $(cat passt_2.pid)
+	context_wait passt_1
+	context_wait passt_2
+	${NSHOLDER} ns1.hold stop
+	${NSHOLDER} ns2.hold stop
+	context_wait pasta_1
+	context_wait pasta_2
+
+	rm -f passt_[12].pid pasta_[12].pid
 
 	teardown_context_watch ${PANE_HOST} host
+	teardown_context_watch ${PANE_GUEST_1} qemu_1 guest_1
+	teardown_context_watch ${PANE_GUEST_2} qemu_2 guest_2
+	teardown_context_watch ${PANE_PASST_1} pasta_1 passt_1
+	teardown_context_watch ${PANE_PASST_2} pasta_2 passt_2
 }
 
 # teardown_demo_passt() - Exit namespace, kill qemu, passt and pasta
-- 
2.37.2


  parent reply	other threads:[~2022-09-02  2:14 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-02  2:14 [PATCH 00/11] Improve command dispatch in test scripts David Gibson
2022-09-02  2:14 ` [PATCH 01/11] test: Correctly match "background" with "wait" commands David Gibson
2022-09-02  2:14 ` [PATCH 02/11] test: Context execution helpers David Gibson
2022-09-02  2:14 ` [PATCH 03/11] test: Allow a tmux pane to watch commands executed in contexts David Gibson
2022-09-02  2:14 ` [PATCH 04/11] test: Integration of old-style pane execution and new context execution David Gibson
2022-09-02  2:14 ` [PATCH 05/11] test: Issue host commands via context for most tests David Gibson
2022-09-02  2:14 ` [PATCH 06/11] test: Use new-style contexts for passt pane in the pasta and passt tests David Gibson
2022-09-02  2:14 ` [PATCH 07/11] test: Add nsholder utility David Gibson
2022-09-02  2:14 ` [PATCH 08/11] test: Extend context system to run commands in namespace for pasta tests David Gibson
2022-09-02  2:14 ` [PATCH 09/11] test: Use context system for guest commands David Gibson
2022-09-02  2:14 ` David Gibson [this message]
2022-09-02  2:15 ` [PATCH 11/11] test: Use new-style command issue for passt_in_ns tests 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=20220902021500.25358-11-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).