]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/spdk/test/iscsi_tgt/sock/sock.sh
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / spdk / test / iscsi_tgt / sock / sock.sh
index a8940cd079bcb2d4cf4beeb2c9cb93f24395be86..14615d3bccbb15bfc397ed44f7d8f1745b03fed0 100755 (executable)
@@ -5,11 +5,86 @@ rootdir=$(readlink -f $testdir/../../..)
 source $rootdir/test/common/autotest_common.sh
 source $rootdir/test/iscsi_tgt/common.sh
 
+function waitfortcp() {
+       local addr="$2"
+
+       if hash ip &> /dev/null; then
+               local have_ip_cmd=true
+       else
+               local have_ip_cmd=false
+       fi
+
+       if hash ss &> /dev/null; then
+               local have_ss_cmd=true
+       else
+               local have_ss_cmd=false
+       fi
+
+       echo "Waiting for process to start up and listen on address $addr..."
+       # turn off trace for this loop
+       xtrace_disable
+       local ret=0
+       local i
+       for ((i = 40; i != 0; i--)); do
+               # if the process is no longer running, then exit the script
+               #  since it means the application crashed
+               if ! kill -s 0 $1; then
+                       echo "ERROR: process (pid: $1) is no longer running"
+                       ret=1
+                       break
+               fi
+
+               if $have_ip_cmd; then
+                       namespace=$(ip netns identify $1)
+                       if [ -n "$namespace" ]; then
+                               ns_cmd="ip netns exec $namespace"
+                       fi
+               fi
+
+               if $have_ss_cmd; then
+                       if $ns_cmd ss -ln | grep -E -q "\s+$addr\s+"; then
+                               break
+                       fi
+               elif [[ "$(uname -s)" == "Linux" ]]; then
+                       # For Linux, if system doesn't have ss, just assume it has netstat
+                       if $ns_cmd netstat -an | grep -iw LISTENING | grep -E -q "\s+$addr\$"; then
+                               break
+                       fi
+               fi
+               sleep 0.5
+       done
+
+       xtrace_restore
+       if ((i == 0)); then
+               echo "ERROR: timeout while waiting for process (pid: $1) to start listening on '$addr'"
+               ret=1
+       fi
+       return $ret
+}
+
 # $1 = "iso" - triggers isolation mode (setting up required environment).
 # $2 = test type posix or vpp. defaults to posix.
 iscsitestinit $1 $2
 
-HELLO_SOCK_APP="$TARGET_NS_CMD $rootdir/examples/sock/hello_world/hello_sock"
+if [ "$1" == "iso" ]; then
+       TEST_TYPE=$2
+else
+       TEST_TYPE=$1
+fi
+
+if [ -z "$TEST_TYPE" ]; then
+       TEST_TYPE="posix"
+fi
+
+if [ "$TEST_TYPE" != "posix" ] && [ "$TEST_TYPE" != "vpp" ]; then
+       echo "No correct sock implmentation specified"
+       exit 1
+fi
+
+HELLO_SOCK_APP="${TARGET_NS_CMD[*]} $SPDK_EXAMPLE_DIR/hello_sock"
+if [ $SPDK_TEST_VPP -eq 1 ]; then
+       HELLO_SOCK_APP+=" -L sock_vpp"
+fi
 SOCAT_APP="socat"
 
 # ----------------
@@ -19,14 +94,15 @@ timing_enter sock_client
 echo "Testing client path"
 
 # start echo server using socat
-$SOCAT_APP tcp-l:$ISCSI_PORT,fork,bind=$INITIATOR_IP exec:'/bin/cat' & server_pid=$!
-trap "killprocess $server_pid;iscsitestfini $1 $2; exit 1" SIGINT SIGTERM EXIT
+$SOCAT_APP tcp-l:$ISCSI_PORT,fork,bind=$INITIATOR_IP exec:'/bin/cat' &
+server_pid=$!
+trap 'killprocess $server_pid;iscsitestfini $1 $2; exit 1' SIGINT SIGTERM EXIT
 
-waitforlisten $server_pid $INITIATOR_IP:$ISCSI_PORT
+waitfortcp $server_pid $INITIATOR_IP:$ISCSI_PORT
 
 # send message using hello_sock client
 message="**MESSAGE:This is a test message from the client**"
-response=$( echo $message | $HELLO_SOCK_APP -H $INITIATOR_IP -P $ISCSI_PORT )
+response=$(echo $message | $HELLO_SOCK_APP -H $INITIATOR_IP -P $ISCSI_PORT -N $TEST_TYPE)
 
 if ! echo "$response" | grep -q "$message"; then
        exit 1
@@ -36,7 +112,6 @@ trap '-' SIGINT SIGTERM EXIT
 # NOTE: socat returns code 143 on SIGINT
 killprocess $server_pid || true
 
-report_test_completion "sock_client"
 timing_exit sock_client
 
 # ----------------
@@ -46,13 +121,14 @@ timing_exit sock_client
 timing_enter sock_server
 
 # start echo server using hello_sock echo server
-$HELLO_SOCK_APP -H $TARGET_IP -P $ISCSI_PORT -S & server_pid=$!
-trap "killprocess $server_pid; iscsitestfini $1 $2; exit 1" SIGINT SIGTERM EXIT
+$HELLO_SOCK_APP -H $TARGET_IP -P $ISCSI_PORT -S -N $TEST_TYPE &
+server_pid=$!
+trap 'killprocess $server_pid; iscsitestfini $1 $2; exit 1' SIGINT SIGTERM EXIT
 waitforlisten $server_pid
 
 # send message to server using socat
 message="**MESSAGE:This is a test message to the server**"
-response=$( echo $message | $SOCAT_APP - tcp:$TARGET_IP:$ISCSI_PORT 2>/dev/null )
+response=$(echo $message | $SOCAT_APP - tcp:$TARGET_IP:$ISCSI_PORT 2> /dev/null)
 
 if [ "$message" != "$response" ]; then
        exit 1
@@ -63,5 +139,4 @@ trap - SIGINT SIGTERM EXIT
 killprocess $server_pid
 
 iscsitestfini $1 $2
-report_test_completion "sock_server"
 timing_exit sock_server