On Tue, Nov 04, 2025 at 02:38:53PM -0800, Bobby Eshleman wrote:
From: Bobby Eshleman bobbyeshleman@meta.com
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
tools/testing/selftests/vsock/vmtest.sh | 130 ++++++++++++++++++++++---------- 1 file changed, 91 insertions(+), 39 deletions(-)
diff --git a/tools/testing/selftests/vsock/vmtest.sh b/tools/testing/selftests/vsock/vmtest.sh index da0408ca6895..03dc4717ac3b 100755 --- a/tools/testing/selftests/vsock/vmtest.sh +++ b/tools/testing/selftests/vsock/vmtest.sh @@ -273,7 +273,77 @@ EOF
host_wait_for_listener() { wait_for_listener "${TEST_HOST_PORT_LISTENER}" "${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_guestrc=$?else
vm_ssh -- "${VSOCK_TEST}" \--mode=server \--peer-cid="${cid}" \--control-port="${port}" \2>&1 | log_guest &rc=$?if [[ $rc -ne 0 ]]; thenset +o pipefailreturn $rcfivm_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_hostrc=$?- else
${VSOCK_TEST} \--mode=server \--peer-cid="${cid}" \--control-port="${port}" 2>&1 | log_host &rc=$?if [[ $rc -ne 0 ]]; thenreturn $rcfihost_wait_for_listener "${port}" "${WAIT_PERIOD}" "${WAIT_PERIOD_MAX}"
IIUC host_wait_for_listener() doesn't have any input parameter, should we add them if we need to call in this way?
Stefano
rc=$?- fi
- set +o pipefail
- return $rc
}
log() { @@ -312,59 +382,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 &- 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
- if ! host_vsock_test "127.0.0.1" "${VSOCK_CID}" "${TEST_HOST_PORT}"; then
return "${KSFT_FAIL}"- fi
- 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 &- 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
- if ! vm_vsock_test "10.0.2.2" 2 "${TEST_HOST_PORT_LISTENER}"; then
return "${KSFT_FAIL}"- fi
- 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 &- vm_wait_for_listener "${port}"
- if ! vm_vsock_test "server" 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
- if ! vm_vsock_test "127.0.0.1" 1 "${port}"; then
return "${KSFT_FAIL}"- fi
- return $?
- return "${KSFT_PASS}"
}
run_test() {
-- 2.47.3