spdkcli: Add support for TCP connection
Adds an option to spdkcli.py to allow connection over a tcp via a host address and port. These options match the format that exists in rpc.py Signed-off-by: Mike Carlin <mikefcarlin@protonmail.com> Change-Id: I7e9e1c376546dd765ffd6f4f4db88e193e9aa0ef Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/467844 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
f66aea7fc3
commit
390542a39e
@ -152,6 +152,7 @@ if [ $SPDK_RUN_FUNCTIONAL_TEST -eq 1 ]; then
|
||||
run_test suite test/rpc_client/rpc_client.sh
|
||||
run_test suite ./test/json_config/json_config.sh
|
||||
run_test suite test/json_config/alias_rpc/alias_rpc.sh
|
||||
run_test suite test/spdkcli/tcp.sh
|
||||
|
||||
if [ $SPDK_TEST_BLOCKDEV -eq 1 ]; then
|
||||
run_test suite test/bdev/blockdev.sh
|
||||
|
@ -37,7 +37,11 @@ def main():
|
||||
add_quotes_to_shell(spdk_shell)
|
||||
|
||||
parser = argparse.ArgumentParser(description="SPDK command line interface")
|
||||
parser.add_argument("-s", dest="socket", help="RPC socket path", default="/var/tmp/spdk.sock")
|
||||
parser.add_argument('-s', dest='server_addr',
|
||||
help='RPC domain socket path or IP address', default='/var/tmp/spdk.sock')
|
||||
parser.add_argument('-p', dest='port',
|
||||
help='RPC port number (if server_addr is IP address)',
|
||||
default=None, type=int)
|
||||
parser.add_argument("-v", dest="verbose", help="Print request/response JSON for configuration calls",
|
||||
default=False, action="store_true")
|
||||
parser.add_argument("commands", metavar="command", type=str, nargs="*", default="",
|
||||
@ -45,7 +49,7 @@ def main():
|
||||
args = parser.parse_args()
|
||||
|
||||
try:
|
||||
client = rpc.client.JSONRPCClient(args.socket)
|
||||
client = rpc.client.JSONRPCClient(args.server_addr, port=args.port)
|
||||
except JSONRPCException as e:
|
||||
spdk_shell.log.error("%s. SPDK not running?" % e)
|
||||
sys.exit(1)
|
||||
|
@ -27,10 +27,17 @@ def execute_command(cmd, element=None, element_exists=False):
|
||||
|
||||
if __name__ == "__main__":
|
||||
socket = "/var/tmp/spdk.sock"
|
||||
port = None
|
||||
if len(sys.argv) == 3:
|
||||
socket = sys.argv[2]
|
||||
elif len(sys.argv) == 4:
|
||||
port = sys.argv[3]
|
||||
testdir = os.path.dirname(os.path.realpath(sys.argv[0]))
|
||||
child = pexpect.spawn(os.path.join(testdir, "../../scripts/spdkcli.py") + " -s %s" % socket)
|
||||
|
||||
if port is None:
|
||||
child = pexpect.spawn(os.path.join(testdir, "../../scripts/spdkcli.py") + " -s %s" % socket)
|
||||
else:
|
||||
child = pexpect.spawn(os.path.join(testdir, "../../scripts/spdkcli.py") + " -s %s -p %s" % (socket, port))
|
||||
child.expect(">")
|
||||
child.sendline("cd /")
|
||||
child.expect("/>")
|
||||
|
65
test/spdkcli/tcp.sh
Executable file
65
test/spdkcli/tcp.sh
Executable file
@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
testdir=$(readlink -f $(dirname $0))
|
||||
rootdir=$(readlink -f $testdir/../..)
|
||||
source $rootdir/test/common/autotest_common.sh
|
||||
source $rootdir/test/spdkcli/common.sh
|
||||
|
||||
function waitfortcplisten() {
|
||||
# $1 = process pid
|
||||
if [ -z "$1" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local ipaddr=$2
|
||||
local port=$3
|
||||
|
||||
echo "Waiting for process to start up and listen on TCP/IP Socket $ipaddr:$port..."
|
||||
# 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 $rootdir/scripts/rpc.py -t 1 -s "$ipaddr" -p $port rpc_get_methods &>/dev/null; then
|
||||
break
|
||||
fi
|
||||
|
||||
sleep 0.5
|
||||
done
|
||||
|
||||
xtrace_restore
|
||||
if (( i == 0 )); then
|
||||
echo "ERROR: timeout while waiting for process (pid: $1) to start listening on '$ipaddr:$port'"
|
||||
ret=1
|
||||
fi
|
||||
return $ret
|
||||
}
|
||||
|
||||
IP_ADDRESS="127.0.0.1"
|
||||
PORT="9998"
|
||||
|
||||
timing_enter spdkcli_tcp
|
||||
trap 'on_error_exit;' ERR
|
||||
|
||||
timing_enter run_spdk_tgt_tcp
|
||||
$rootdir/app/spdk_tgt/spdk_tgt -m 0x3 -p 0 -s 2048 -r $IP_ADDRESS:$PORT &
|
||||
spdk_tgt_pid=$!
|
||||
|
||||
# This will issue a rpc request to the spdk target thus validating tcp
|
||||
waitfortcplisten $spdk_tgt_pid $IP_ADDRESS $PORT
|
||||
|
||||
timing_exit run_spdk_tgt_tcp
|
||||
|
||||
killprocess $spdk_tgt_pid
|
||||
|
||||
timing_exit spdkcli_tcp
|
||||
|
||||
report_test_completion spdkcli_tcp
|
Loading…
Reference in New Issue
Block a user