selftests/vsock: reuse logic for vsock_test through wrapper functions

Add wrapper functions vm_vsock_test() and host_vsock_test() to invoke
the vsock_test binary. This encapsulates several items of repeat logic,
such as waiting for the server to reach listening state and
enabling/disabling the bash option pipefail to avoid pipe-style logging
from hiding failures.

Signed-off-by: Bobby Eshleman <bobbyeshleman@meta.com>
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
Link: https://patch.msgid.link/20251108-vsock-selftests-fixes-and-improvements-v4-3-d5e8d6c87289@meta.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Bobby Eshleman
2025-11-08 08:00:54 -08:00
committed by Jakub Kicinski
parent 2ed3ce7efb
commit 4f76ff14d3
+95 -40
View File
@@ -272,8 +272,81 @@ EOF
}
host_wait_for_listener() {
wait_for_listener "${TEST_HOST_PORT_LISTENER}" "${WAIT_PERIOD}" "${WAIT_PERIOD_MAX}"
local port=$1
wait_for_listener "${port}" "${WAIT_PERIOD}" "${WAIT_PERIOD_MAX}"
}
vm_vsock_test() {
local host=$1
local cid=$2
local port=$3
local rc
# log output and use pipefail to respect vsock_test errors
set -o pipefail
if [[ "${host}" != server ]]; then
vm_ssh -- "${VSOCK_TEST}" \
--mode=client \
--control-host="${host}" \
--peer-cid="${cid}" \
--control-port="${port}" \
2>&1 | log_guest
rc=$?
else
vm_ssh -- "${VSOCK_TEST}" \
--mode=server \
--peer-cid="${cid}" \
--control-port="${port}" \
2>&1 | log_guest &
rc=$?
if [[ $rc -ne 0 ]]; then
set +o pipefail
return $rc
fi
vm_wait_for_listener "${port}"
rc=$?
fi
set +o pipefail
return $rc
}
host_vsock_test() {
local host=$1
local cid=$2
local port=$3
local rc
# log output and use pipefail to respect vsock_test errors
set -o pipefail
if [[ "${host}" != server ]]; then
${VSOCK_TEST} \
--mode=client \
--peer-cid="${cid}" \
--control-host="${host}" \
--control-port="${port}" 2>&1 | log_host
rc=$?
else
${VSOCK_TEST} \
--mode=server \
--peer-cid="${cid}" \
--control-port="${port}" 2>&1 | log_host &
rc=$?
if [[ $rc -ne 0 ]]; then
set +o pipefail
return $rc
fi
host_wait_for_listener "${port}"
rc=$?
fi
set +o pipefail
return $rc
}
log() {
@@ -312,59 +385,41 @@ log_guest() {
}
test_vm_server_host_client() {
if ! vm_vsock_test "server" 2 "${TEST_GUEST_PORT}"; then
return "${KSFT_FAIL}"
fi
vm_ssh -- "${VSOCK_TEST}" \
--mode=server \
--control-port="${TEST_GUEST_PORT}" \
--peer-cid=2 \
2>&1 | log_guest &
if ! host_vsock_test "127.0.0.1" "${VSOCK_CID}" "${TEST_HOST_PORT}"; then
return "${KSFT_FAIL}"
fi
vm_wait_for_listener "${TEST_GUEST_PORT}"
${VSOCK_TEST} \
--mode=client \
--control-host=127.0.0.1 \
--peer-cid="${VSOCK_CID}" \
--control-port="${TEST_HOST_PORT}" 2>&1 | log_host
return $?
return "${KSFT_PASS}"
}
test_vm_client_host_server() {
if ! host_vsock_test "server" "${VSOCK_CID}" "${TEST_HOST_PORT_LISTENER}"; then
return "${KSFT_FAIL}"
fi
${VSOCK_TEST} \
--mode "server" \
--control-port "${TEST_HOST_PORT_LISTENER}" \
--peer-cid "${VSOCK_CID}" 2>&1 | log_host &
if ! vm_vsock_test "10.0.2.2" 2 "${TEST_HOST_PORT_LISTENER}"; then
return "${KSFT_FAIL}"
fi
host_wait_for_listener
vm_ssh -- "${VSOCK_TEST}" \
--mode=client \
--control-host=10.0.2.2 \
--peer-cid=2 \
--control-port="${TEST_HOST_PORT_LISTENER}" 2>&1 | log_guest
return $?
return "${KSFT_PASS}"
}
test_vm_loopback() {
local port=60000 # non-forwarded local port
vm_ssh -- "${VSOCK_TEST}" \
--mode=server \
--control-port="${port}" \
--peer-cid=1 2>&1 | log_guest &
if ! vm_vsock_test "server" 1 "${port}"; then
return "${KSFT_FAIL}"
fi
vm_wait_for_listener "${port}"
if ! vm_vsock_test "127.0.0.1" 1 "${port}"; then
return "${KSFT_FAIL}"
fi
vm_ssh -- "${VSOCK_TEST}" \
--mode=client \
--control-host="127.0.0.1" \
--control-port="${port}" \
--peer-cid=1 2>&1 | log_guest
return $?
return "${KSFT_PASS}"
}
run_test() {