Spdk/test/sma/plugins.sh
paul luse eb53c23236 add (c) and SPDX header to bash files as needed
per Intel policy to include file commit date using git cmd
below.  The policy does not apply to non-Intel (C) notices.

git log --follow -C90% --format=%ad --date default <file> | tail -1

and then pull just the year from the result.

Intel copyrights were not added to files where Intel either had
no contribution ot the contribution lacked substance (ie license
header updates, formatting changes, etc)

For intel copyrights added, --follow and -C95% were used.

Signed-off-by: paul luse <paul.e.luse@intel.com>
Change-Id: I2ef86976095b88a9bf5b1003e59f3943cd6bbe4c
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15209
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Krzysztof Karas <krzysztof.karas@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2022-11-29 08:27:51 +00:00

186 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": {
"$1": {}
}
}
EOF
}
trap 'cleanup; exit 1' SIGINT SIGTERM EXIT
$rootdir/build/bin/spdk_tgt &
tgtpid=$!
# 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
[[ $(create_device nvme | jq -r '.handle') == 'nvme:plugin1-device1:nop' ]]
[[ $(create_device nvmf_tcp | jq -r '.handle') == 'nvmf_tcp:plugin1-device2:nop' ]]
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
[[ $(create_device nvmf_tcp | jq -r '.handle') == 'nvmf_tcp:plugin1-device2:nop' ]]
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
[[ $(create_device nvme | jq -r '.handle') == 'nvme:plugin1-device1:nop' ]]
[[ $(create_device nvmf_tcp | jq -r '.handle') == 'nvmf_tcp:plugin1-device2:nop' ]]
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
[[ $(create_device nvme | jq -r '.handle') == 'nvme:plugin2-device1:nop' ]]
[[ $(create_device nvmf_tcp | jq -r '.handle') == 'nvmf_tcp:plugin2-device2:nop' ]]
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
[[ $(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 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
[[ $(create_device nvme | jq -r '.handle') == 'nvme:plugin1-device1:nop' ]]
[[ $(create_device nvmf_tcp | jq -r '.handle') == 'nvmf_tcp:plugin2-device2:nop' ]]
killprocess $smapid
# Register one plugin in a config and the other through env var
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
[[ $(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
cleanup
trap - SIGINT SIGTERM EXIT