79 lines
1.9 KiB
Bash
79 lines
1.9 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
|
||
|
rootdir=$(readlink -f $(dirname $0)/../..)
|
||
|
source "$rootdir/test/common/autotest_common.sh"
|
||
|
source "$rootdir/test/nvmf/common.sh"
|
||
|
|
||
|
# Check that adding arbitrary top-level key to JSON SPDK config alongside
|
||
|
# "subsystems" doesn't break SPDK parsing that occurs when loading config
|
||
|
# to initialize subsystems. This enables applications to use the same config
|
||
|
# file to communicate private and SPDK data.
|
||
|
|
||
|
declare -A app_pid=([target]="")
|
||
|
declare -A app_socket=([target]='/var/tmp/spdk_tgt.sock')
|
||
|
declare -A app_params=([target]='-m 0x1 -s 1024')
|
||
|
declare -A configs_path=([target]="$rootdir/test/json_config/extra_key.json")
|
||
|
|
||
|
# $1 - target
|
||
|
# $2..$n app parameters
|
||
|
function json_config_test_start_app() {
|
||
|
local app=$1
|
||
|
shift
|
||
|
|
||
|
[[ -n "${#app_socket[$app]}" ]] # Check app type
|
||
|
[[ -z "${app_pid[$app]}" ]] # Assert if app is not running
|
||
|
|
||
|
$SPDK_BIN_DIR/spdk_tgt ${app_params[$app]} -r ${app_socket[$app]} "$@" &
|
||
|
app_pid[$app]=$!
|
||
|
|
||
|
echo "Waiting for $app to run..."
|
||
|
waitforlisten ${app_pid[$app]} ${app_socket[$app]}
|
||
|
echo ""
|
||
|
}
|
||
|
|
||
|
# $1 - target / initiator
|
||
|
function json_config_test_shutdown_app() {
|
||
|
local app=$1
|
||
|
|
||
|
# Check app type && assert app was started
|
||
|
[[ -n "${#app_socket[$app]}" ]]
|
||
|
[[ -n "${app_pid[$app]}" ]]
|
||
|
|
||
|
# spdk_kill_instance RPC will trigger ASAN
|
||
|
kill -SIGINT ${app_pid[$app]}
|
||
|
|
||
|
for ((i = 0; i < 30; i++)); do
|
||
|
if ! kill -0 ${app_pid[$app]} 2> /dev/null; then
|
||
|
app_pid[$app]=
|
||
|
break
|
||
|
fi
|
||
|
sleep 0.5
|
||
|
done
|
||
|
|
||
|
if [[ -n "${app_pid[$app]}" ]]; then
|
||
|
echo "SPDK $app shutdown timeout"
|
||
|
return 1
|
||
|
fi
|
||
|
|
||
|
echo "SPDK $app shutdown done"
|
||
|
}
|
||
|
|
||
|
on_error_exit() {
|
||
|
set -x
|
||
|
set +e
|
||
|
print_backtrace
|
||
|
trap - ERR
|
||
|
echo "Error on $1 - $2"
|
||
|
exit 1
|
||
|
}
|
||
|
|
||
|
trap 'on_error_exit "${FUNCNAME}" "${LINENO}"' ERR
|
||
|
|
||
|
echo "INFO: launching applications..."
|
||
|
json_config_test_start_app target --json ${configs_path[target]}
|
||
|
|
||
|
echo "INFO: shutting down applications..."
|
||
|
json_config_test_shutdown_app target
|
||
|
|
||
|
echo "Success"
|