From: Bobby Eshleman <[email protected]>

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 <[email protected]>
---
Changes in v3:
- Add port input parameter to host_wait_for_listener() to accept port
  from host_vsock_test() (Stefano)
- Change host_wait_for_listener() call-site to pass in parameter
---
 tools/testing/selftests/vsock/vmtest.sh | 134 ++++++++++++++++++++++----------
 1 file changed, 94 insertions(+), 40 deletions(-)

diff --git a/tools/testing/selftests/vsock/vmtest.sh 
b/tools/testing/selftests/vsock/vmtest.sh
index d936209d3eaa..01ac2b7ee8db 100755
--- a/tools/testing/selftests/vsock/vmtest.sh
+++ b/tools/testing/selftests/vsock/vmtest.sh
@@ -272,8 +272,80 @@ 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
+                       return $rc
+               fi
+
+               host_wait_for_listener "${port}"
+               rc=$?
+       fi
+       set +o pipefail
+
+       return $rc
 }
 
 log() {
@@ -312,59 +384,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


Reply via email to