From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Gibson To: passt-dev@passt.top Subject: [PATCH v2 10/11] test: Use context system for two_guests tests Date: Thu, 08 Sep 2022 11:49:19 +1000 Message-ID: <20220908014920.1474597-11-david@gibson.dropbear.id.au> In-Reply-To: <20220908014920.1474597-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3986420397919047486==" --===============3986420397919047486== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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 --- 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 985d31b..b9d30e9 100644 --- a/test/lib/layout +++ b/test/lib/layout @@ -172,23 +172,16 @@ layout_two_guests() { =20 get_info_cols =20 - 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 =20 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" =20 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 pass= t_1 + pane_watch_contexts ${PANE_PASST_2} "passt #2 in namespace #2" pasta_2 pass= t_2 =20 info_layout "two guests, two passt instances, in namespaces" =20 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 t= hem setup_two_guests() { context_setup_host host + context_setup_host pasta_1 + context_setup_host pasta_2 =20 layout_two_guests =20 @@ -201,66 +203,49 @@ setup_two_guests() { # 10004 | as server | to init | to guest | to ns #2 # 10005 | | | as server | to ns #2 =20 - __pid1_file=3D"$(mktemp)" - __pid2_file=3D"$(mktemp)" - __opts=3D [ ${PCAP} -eq 1 ] && __opts=3D"${__opts} -p /tmp/pasta_1.pcap" [ ${DEBUG} -eq 1 ] && __opts=3D"${__opts} -d" [ ${TRACE} -eq 1 ] && __opts=3D"${__opts} --trace" - pane_run PASST_1 "./pasta ${__opts} -P ${__pid1_file} -t 10001,10002 -T 100= 03,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=3D$(${NSHOLDER} ns1.hold pid) + context_setup_nsenter passt_1 -U -n -p --preserve-credentials -t ${__ns1_pi= d} =20 __opts=3D [ ${PCAP} -eq 1 ] && __opts=3D"${__opts} -p /tmp/pasta_2.pcap" [ ${DEBUG} -eq 1 ] && __opts=3D"${__opts} -d" [ ${TRACE} -eq 1 ] && __opts=3D"${__opts} --trace" - pane_run PASST_2 "./pasta ${__opts} -P ${__pid2_file} -t 10004,10005 -T 100= 03,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=3D$(${NSHOLDER} ns2.hold pid) + context_setup_nsenter passt_2 -U -n -p --preserve-credentials -t ${__ns2_pi= d} =20 - sleep 1 - pane_run PASST_1 '' - pane_run PASST_2 '' - - pane_status PASST_1 - pane_status PASST_2 - __pasta1_pid=3D"$(cat "${__pid1_file}")" - __ns1_pid=3D"$(cat /proc/${__pasta1_pid}/task/${__pasta1_pid}/children | cu= t -f1 -d' ')" - rm "${__pid1_file}" - __pasta2_pid=3D"$(cat "${__pid2_file}")" - __ns2_pid=3D"$(cat /proc/${__pasta2_pid}/task/${__pasta2_pid}/children | cu= t -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 =3D=3D = \"ether\").ifname'" - pane_wait PASST_1 - __ifname=3D"$(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=3D"$(context_run qemu_1 "ip -j link show | jq -rM '.[] | select(.l= ink_type =3D=3D \"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}" =20 __opts=3D [ ${PCAP} -eq 1 ] && __opts=3D"${__opts} -p /tmp/passt_1.pcap" [ ${DEBUG} -eq 1 ] && __opts=3D"${__opts} -d" [ ${TRACE} -eq 1 ] && __opts=3D"${__opts} --trace" =20 - 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 100= 01" sleep 1 =20 __opts=3D [ ${PCAP} -eq 1 ] && __opts=3D"${__opts} -p /tmp/passt_2.pcap" [ ${DEBUG} -eq 1 ] && __opts=3D"${__opts} -d" [ ${TRACE} -eq 1 ] && __opts=3D"${__opts} --trace" - pane_run PASST_2 "./passt -f ${__opts} -t 10004 -u 10004" =20 - 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 100= 04" + + GUEST_1_CID=3D94557 + context_run_bg qemu_1 './qrap 5 qemu-system-$(uname -m)' \ ' -M accel=3Dkvm:tcg' \ ' -m '${VMEM}' -cpu host -smp '${VCPUS} \ ' -kernel ' "/boot/vmlinuz-$(uname -r)" \ @@ -270,8 +255,11 @@ setup_two_guests() { 'virtio-net.napi_tx=3D1"' \ " -device virtio-net-pci,netdev=3Dhostnet0,x-txburst=3D16384" \ " -netdev socket,fd=3D5,id=3Dhostnet0" \ - ' -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=3D$GUEST_1_CID" + + GUEST_2_CID=3D94558 + context_run_bg qemu_2 './qrap 5 qemu-system-$(uname -m)' \ ' -M accel=3Dkvm:tcg' \ ' -m '${VMEM}' -cpu host -smp '${VCPUS} \ ' -kernel ' "/boot/vmlinuz-$(uname -r)" \ @@ -281,9 +269,11 @@ setup_two_guests() { 'virtio-net.napi_tx=3D1"' \ " -device virtio-net-pci,netdev=3Dhostnet0,x-txburst=3D16384" \ " -netdev socket,fd=3D5,id=3Dhostnet0" \ - ' -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=3D$GUEST_2_CID" + + context_setup_guest guest_1 ${GUEST_1_CID} + context_setup_guest guest_2 ${GUEST_2_CID} } =20 # teardown_context_watch() - Remove contexts and stop panes watching them @@ -348,28 +338,29 @@ teardown_passt_in_ns() { =20 # teardown_two_guests() - Exit namespaces, kill qemu processes, passt and pa= sta 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=3D$(${NSHOLDER} ns1.hold pid) + __ns2_pid=3D$(${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 =20 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 } =20 # teardown_demo_passt() - Exit namespace, kill qemu, passt and pasta --=20 2.37.3 --===============3986420397919047486==--