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:
committed by
Jakub Kicinski
parent
2ed3ce7efb
commit
4f76ff14d3
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user