2022-02-24 12:17:31 +00:00
|
|
|
#!/usr/bin/env bash
|
2022-11-02 15:49:40 +00:00
|
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
# Copyright (C) 2022 Intel Corporation
|
|
|
|
# All rights reserved.
|
|
|
|
#
|
2022-02-24 12:17:31 +00:00
|
|
|
testdir=$(readlink -f "$(dirname "$0")")
|
|
|
|
rootdir=$(readlink -f "$testdir/../..")
|
|
|
|
|
|
|
|
source "$rootdir/test/common/autotest_common.sh"
|
|
|
|
source "$testdir/common.sh"
|
|
|
|
|
2022-03-03 14:56:36 +00:00
|
|
|
function cleanup() {
|
|
|
|
killprocess $tgtpid
|
|
|
|
killprocess $smapid
|
|
|
|
}
|
|
|
|
|
2022-02-24 12:17:31 +00:00
|
|
|
function create_device() {
|
|
|
|
"$rootdir/scripts/sma-client.py" <<- EOF
|
|
|
|
{
|
|
|
|
"method": "CreateDevice",
|
|
|
|
"params": {
|
|
|
|
"$1": {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
}
|
|
|
|
|
2022-03-03 14:56:36 +00:00
|
|
|
trap 'cleanup; exit 1' SIGINT SIGTERM EXIT
|
|
|
|
|
|
|
|
$rootdir/build/bin/spdk_tgt &
|
|
|
|
tgtpid=$!
|
2022-02-24 12:17:31 +00:00
|
|
|
|
|
|
|
# First check a single plugin with both its devices enabled in the config
|
|
|
|
PYTHONPATH=$testdir/plugins $rootdir/scripts/sma.py -c <(
|
|
|
|
cat <<- EOF
|
|
|
|
plugins:
|
|
|
|
- 'plugin1'
|
|
|
|
devices:
|
|
|
|
- name: 'plugin1-device1'
|
|
|
|
- name: 'plugin1-device2'
|
|
|
|
EOF
|
|
|
|
) &
|
|
|
|
smapid=$!
|
|
|
|
# Wait for a while to make sure SMA starts listening
|
|
|
|
sma_waitforlisten
|
|
|
|
|
2022-08-01 06:15:33 +00:00
|
|
|
[[ $(create_device nvme | jq -r '.handle') == 'nvme:plugin1-device1:nop' ]]
|
|
|
|
[[ $(create_device nvmf_tcp | jq -r '.handle') == 'nvmf_tcp:plugin1-device2:nop' ]]
|
2022-02-24 12:17:31 +00:00
|
|
|
|
|
|
|
killprocess $smapid
|
|
|
|
|
|
|
|
# Check that it's possible to enable only a single device from a plugin
|
|
|
|
PYTHONPATH=$testdir/plugins $rootdir/scripts/sma.py -c <(
|
|
|
|
cat <<- EOF
|
|
|
|
plugins:
|
|
|
|
- 'plugin1'
|
|
|
|
devices:
|
|
|
|
- name: 'plugin1-device2'
|
|
|
|
EOF
|
|
|
|
) &
|
|
|
|
smapid=$!
|
|
|
|
sma_waitforlisten
|
|
|
|
|
2022-08-01 06:15:33 +00:00
|
|
|
[[ $(create_device nvmf_tcp | jq -r '.handle') == 'nvmf_tcp:plugin1-device2:nop' ]]
|
2022-02-24 12:17:31 +00:00
|
|
|
NOT create_device nvme
|
|
|
|
|
|
|
|
killprocess $smapid
|
|
|
|
|
|
|
|
# Load two different plugins, but only enable devices from one of them
|
|
|
|
PYTHONPATH=$testdir/plugins $rootdir/scripts/sma.py -c <(
|
|
|
|
cat <<- EOF
|
|
|
|
plugins:
|
|
|
|
- 'plugin1'
|
|
|
|
- 'plugin2'
|
|
|
|
devices:
|
|
|
|
- name: 'plugin1-device1'
|
|
|
|
- name: 'plugin1-device2'
|
|
|
|
EOF
|
|
|
|
) &
|
|
|
|
smapid=$!
|
|
|
|
sma_waitforlisten
|
|
|
|
|
2022-08-01 06:15:33 +00:00
|
|
|
[[ $(create_device nvme | jq -r '.handle') == 'nvme:plugin1-device1:nop' ]]
|
|
|
|
[[ $(create_device nvmf_tcp | jq -r '.handle') == 'nvmf_tcp:plugin1-device2:nop' ]]
|
2022-02-24 12:17:31 +00:00
|
|
|
|
|
|
|
killprocess $smapid
|
|
|
|
|
|
|
|
# Check the same but take devices defined by the other plugin
|
|
|
|
PYTHONPATH=$testdir/plugins $rootdir/scripts/sma.py -c <(
|
|
|
|
cat <<- EOF
|
|
|
|
plugins:
|
|
|
|
- 'plugin1'
|
|
|
|
- 'plugin2'
|
|
|
|
devices:
|
|
|
|
- name: 'plugin2-device1'
|
|
|
|
- name: 'plugin2-device2'
|
|
|
|
EOF
|
|
|
|
) &
|
|
|
|
smapid=$!
|
|
|
|
sma_waitforlisten
|
|
|
|
|
2022-08-01 06:15:33 +00:00
|
|
|
[[ $(create_device nvme | jq -r '.handle') == 'nvme:plugin2-device1:nop' ]]
|
|
|
|
[[ $(create_device nvmf_tcp | jq -r '.handle') == 'nvmf_tcp:plugin2-device2:nop' ]]
|
2022-02-24 12:17:31 +00:00
|
|
|
|
|
|
|
killprocess $smapid
|
|
|
|
|
|
|
|
# Now pick a device from each plugin
|
|
|
|
PYTHONPATH=$testdir/plugins $rootdir/scripts/sma.py -c <(
|
|
|
|
cat <<- EOF
|
|
|
|
plugins:
|
|
|
|
- 'plugin1'
|
|
|
|
- 'plugin2'
|
|
|
|
devices:
|
|
|
|
- name: 'plugin1-device1'
|
|
|
|
- name: 'plugin2-device2'
|
|
|
|
EOF
|
|
|
|
) &
|
|
|
|
smapid=$!
|
|
|
|
sma_waitforlisten
|
|
|
|
|
2022-08-01 06:15:33 +00:00
|
|
|
[[ $(create_device nvme | jq -r '.handle') == 'nvme:plugin1-device1:nop' ]]
|
|
|
|
[[ $(create_device nvmf_tcp | jq -r '.handle') == 'nvmf_tcp:plugin2-device2:nop' ]]
|
2022-02-24 12:17:31 +00:00
|
|
|
|
|
|
|
killprocess $smapid
|
|
|
|
|
|
|
|
# Check the same, but register plugins via a env var
|
|
|
|
PYTHONPATH=$testdir/plugins SMA_PLUGINS=plugin1:plugin2 $rootdir/scripts/sma.py -c <(
|
|
|
|
cat <<- EOF
|
|
|
|
devices:
|
|
|
|
- name: 'plugin1-device1'
|
|
|
|
- name: 'plugin2-device2'
|
|
|
|
EOF
|
|
|
|
) &
|
|
|
|
smapid=$!
|
|
|
|
sma_waitforlisten
|
|
|
|
|
2022-08-01 06:15:33 +00:00
|
|
|
[[ $(create_device nvme | jq -r '.handle') == 'nvme:plugin1-device1:nop' ]]
|
|
|
|
[[ $(create_device nvmf_tcp | jq -r '.handle') == 'nvmf_tcp:plugin2-device2:nop' ]]
|
2022-02-24 12:17:31 +00:00
|
|
|
|
|
|
|
killprocess $smapid
|
|
|
|
|
2022-08-01 06:15:33 +00:00
|
|
|
# Register one plugin in a config and the other through env var
|
2022-02-24 12:17:31 +00:00
|
|
|
PYTHONPATH=$testdir/plugins SMA_PLUGINS=plugin1 $rootdir/scripts/sma.py -c <(
|
|
|
|
cat <<- EOF
|
|
|
|
plugins:
|
|
|
|
- 'plugin2'
|
|
|
|
devices:
|
|
|
|
- name: 'plugin1-device1'
|
|
|
|
- name: 'plugin2-device2'
|
|
|
|
EOF
|
|
|
|
) &
|
|
|
|
smapid=$!
|
|
|
|
sma_waitforlisten
|
|
|
|
|
2022-08-01 06:15:33 +00:00
|
|
|
[[ $(create_device nvme | jq -r '.handle') == 'nvme:plugin1-device1:nop' ]]
|
|
|
|
[[ $(create_device nvmf_tcp | jq -r '.handle') == 'nvmf_tcp:plugin2-device2:nop' ]]
|
|
|
|
|
|
|
|
killprocess $smapid
|
|
|
|
|
|
|
|
# Check registering external crypto engines
|
|
|
|
crypto_engines=(crypto-plugin1 crypto-plugin2)
|
|
|
|
for crypto in "${crypto_engines[@]}"; do
|
|
|
|
PYTHONPATH=$testdir/plugins $rootdir/scripts/sma.py -c <(
|
|
|
|
cat <<- EOF
|
|
|
|
plugins:
|
|
|
|
- 'plugin1'
|
|
|
|
- 'plugin2'
|
|
|
|
devices:
|
|
|
|
- name: 'plugin1-device1'
|
|
|
|
- name: 'plugin2-device2'
|
|
|
|
crypto:
|
|
|
|
name: '$crypto'
|
|
|
|
EOF
|
|
|
|
) &
|
|
|
|
smapid=$!
|
|
|
|
sma_waitforlisten
|
|
|
|
|
|
|
|
[[ $(create_device nvme | jq -r '.handle') == nvme:plugin1-device1:$crypto ]]
|
|
|
|
[[ $(create_device nvmf_tcp | jq -r '.handle') == nvmf_tcp:plugin2-device2:$crypto ]]
|
|
|
|
|
|
|
|
killprocess $smapid
|
|
|
|
done
|
2022-02-24 12:17:31 +00:00
|
|
|
|
2022-03-03 14:56:36 +00:00
|
|
|
cleanup
|
2022-02-24 12:17:31 +00:00
|
|
|
trap - SIGINT SIGTERM EXIT
|