Spdk/test/sma/nvmf_tcp.sh
Michal Berger 3f912cf0e9 misc: Fix spelling mistakes
Found with misspell-fixer.

Signed-off-by: Michal Berger <michal.berger@intel.com>
Change-Id: If062df0189d92e4fb2da3f055fb981909780dc04
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15207
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
2022-12-09 08:16:18 +00:00

155 lines
4.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# SPDX-License-Identifier: BSD-3-Clause
# Copyright (C) 2022 Intel Corporation
# All rights reserved.
#
testdir=$(readlink -f "$(dirname "$0")")
rootdir=$(readlink -f "$testdir/../..")
source "$rootdir/test/common/autotest_common.sh"
source "$testdir/common.sh"
function cleanup() {
killprocess $tgtpid
killprocess $smapid
}
function create_device() {
"$rootdir/scripts/sma-client.py" <<- EOF
{
"method": "CreateDevice",
"params": {
"nvmf_tcp": {
"subnqn": "$1",
"adrfam": "ipv4",
"traddr": "127.0.0.1",
"trsvcid": "4420"
}
}
}
EOF
}
function delete_device() {
"$rootdir/scripts/sma-client.py" <<- EOF
{
"method": "DeleteDevice",
"params": {
"handle": "$1"
}
}
EOF
}
function attach_volume() {
"$rootdir/scripts/sma-client.py" <<- EOF
{
"method": "AttachVolume",
"params": {
"device_handle": "$1",
"volume": {
"volume_id": "$(uuid2base64 $2)"
}
}
}
EOF
}
function detach_volume() {
"$rootdir/scripts/sma-client.py" <<- EOF
{
"method": "DetachVolume",
"params": {
"device_handle": "$1",
"volume_id": "$(uuid2base64 $2)"
}
}
EOF
}
trap "cleanup; exit 1" SIGINT SIGTERM EXIT
$rootdir/build/bin/spdk_tgt &
tgtpid=$!
$rootdir/scripts/sma.py -c <(
cat <<- EOF
address: 127.0.0.1
port: 8080
devices:
- name: 'nvmf_tcp'
EOF
) &
smapid=$!
# Wait until the SMA starts listening
sma_waitforlisten
# Prepare the target
rpc_cmd bdev_null_create null0 100 4096
# Make sure a TCP transport has been created
rpc_cmd nvmf_get_transports --trtype tcp
# Create a couple of devices and verify them via RPC
devid0=$(create_device nqn.2016-06.io.spdk:cnode0 | jq -r '.handle')
rpc_cmd nvmf_get_subsystems nqn.2016-06.io.spdk:cnode0
devid1=$(create_device nqn.2016-06.io.spdk:cnode1 | jq -r '.handle')
rpc_cmd nvmf_get_subsystems nqn.2016-06.io.spdk:cnode0
rpc_cmd nvmf_get_subsystems nqn.2016-06.io.spdk:cnode1
[[ "$devid0" != "$devid1" ]]
# Check that there are three subsystems (2 created above + discovery)
[[ $(rpc_cmd nvmf_get_subsystems | jq -r '. | length') -eq 3 ]]
# Verify the method is idempotent and sending the same gRPCs won't create new
# devices and will return the same handles
tmp0=$(create_device nqn.2016-06.io.spdk:cnode0 | jq -r '.handle')
tmp1=$(create_device nqn.2016-06.io.spdk:cnode1 | jq -r '.handle')
[[ $(rpc_cmd nvmf_get_subsystems | jq -r '. | length') -eq 3 ]]
[[ "$tmp0" == "$devid0" ]]
[[ "$tmp1" == "$devid1" ]]
# Now delete both of them verifying via RPC
delete_device "$devid0"
NOT rpc_cmd nvmf_get_subsystems nqn.2016-06.io.spdk:cnode0
[[ $(rpc_cmd nvmf_get_subsystems | jq -r '. | length') -eq 2 ]]
delete_device "$devid1"
NOT rpc_cmd nvmf_get_subsystems nqn.2016-06.io.spdk:cnode1
[[ $(rpc_cmd nvmf_get_subsystems | jq -r '. | length') -eq 1 ]]
# Finally check that removing a non-existing device is also successful
delete_device "$devid0"
delete_device "$devid1"
# Check volume attach/detach
devid0=$(create_device nqn.2016-06.io.spdk:cnode0 | jq -r '.handle')
devid1=$(create_device nqn.2016-06.io.spdk:cnode1 | jq -r '.handle')
uuid=$(rpc_cmd bdev_get_bdevs -b null0 | jq -r '.[].uuid')
# Attach the volume to a first device
attach_volume "$devid0" "$uuid"
[[ $(rpc_cmd nvmf_get_subsystems nqn.2016-06.io.spdk:cnode0 | jq -r '.[0].namespaces | length') -eq 1 ]]
[[ $(rpc_cmd nvmf_get_subsystems nqn.2016-06.io.spdk:cnode1 | jq -r '.[0].namespaces | length') -eq 0 ]]
[[ $(rpc_cmd nvmf_get_subsystems nqn.2016-06.io.spdk:cnode0 | jq -r '.[0].namespaces[0].uuid') == "$uuid" ]]
# Attach the same device again and see that it won't fail
attach_volume "$devid0" "$uuid"
[[ $(rpc_cmd nvmf_get_subsystems nqn.2016-06.io.spdk:cnode0 | jq -r '.[0].namespaces | length') -eq 1 ]]
[[ $(rpc_cmd nvmf_get_subsystems nqn.2016-06.io.spdk:cnode1 | jq -r '.[0].namespaces | length') -eq 0 ]]
[[ $(rpc_cmd nvmf_get_subsystems nqn.2016-06.io.spdk:cnode0 | jq -r '.[0].namespaces[0].uuid') == "$uuid" ]]
# Detach it and verify it's removed from the subsystem
detach_volume "$devid0" "$uuid"
[[ $(rpc_cmd nvmf_get_subsystems nqn.2016-06.io.spdk:cnode0 | jq -r '.[0].namespaces | length') -eq 0 ]]
[[ $(rpc_cmd nvmf_get_subsystems nqn.2016-06.io.spdk:cnode1 | jq -r '.[0].namespaces | length') -eq 0 ]]
# Detach it again and verify it succeeds
detach_volume "$devid0" "$uuid"
cleanup
trap - SIGINT SIGTERM EXIT