test/notify: notifications functional test

We use JSON configuration test already configure every subsystem so we
piggyback notifications testing here to not duplicate work.

Change-Id: Ib1334951fba60de390e6b40f653cf9cc1d32c144
Signed-off-by: Tomasz Kulasek <tomaszx.kulasek@intel.com>
Signed-off-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Signed-off-by: Karol Latecki <karol.latecki@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/445337
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
Tomasz Kulasek 2019-02-18 09:50:54 +01:00 committed by Jim Harris
parent 4b1012d5bf
commit e8f4ae0969

View File

@ -45,6 +45,47 @@ function initiator_rpc() {
$rootdir/scripts/rpc.py -s "${app_socket[initiator]}" "$@"
}
RE_UUID="[[:alnum:]-]+"
last_event_id=0
function tgt_check_notifications() {
local event_line event ev_type ev_ctx
local rc=""
while read event_line; do
# remove ID
event="${event_line%:*}"
ev_type=${event%*:}
ev_ctx=${event#:*}
ex_ev_type=${1%*:}
ex_ev_ctx=${1#:*}
last_event_id=${event_line##*:}
# set rc=false in case of failure so all errors can be printed
if (( $# == 0 )); then
echo "ERROR: got extra event: $event_line"
rc=false
continue
elif ! echo "$ev_type" | egrep -q "^${ex_ev_type}\$" || ! echo "$ev_ctx" | egrep -q "^${ex_ev_ctx}\$"; then
echo "ERROR: expected event '$1' but got '$event' (whole event line: $event_line)"
rc=false
fi
shift
done < <(tgt_rpc get_notifications -i ${last_event_id} | jq -r '.[] | "\(.type):\(.ctx):\(.id)"')
$rc
if (( $# != 0 )); then
echo "ERROR: missing events:"
echo "$@"
return 1
fi
}
# $1 - target / initiator
# $2..$n app parameters
function json_config_test_start_app() {
@ -99,6 +140,8 @@ function json_config_test_shutdown_app() {
function create_bdev_subsystem_config() {
timing_enter $FUNCNAME
local expected_notifications=()
if [[ $SPDK_TEST_BLOCKDEV -eq 1 ]]; then
local lvol_store_base_bdev=Nvme0n1
if ! tgt_rpc get_bdevs --name ${lvol_store_base_bdev} >/dev/null; then
@ -121,10 +164,23 @@ function create_bdev_subsystem_config() {
tgt_rpc construct_malloc_bdev 32 512 --name Malloc0
tgt_rpc construct_malloc_bdev 16 4096 --name Malloc1
expected_notifications+=(
bdev_register:${lvol_store_base_bdev}
bdev_register:${lvol_store_base_bdev}p0
bdev_register:${lvol_store_base_bdev}p1
bdev_register:Null0
bdev_register:Malloc0p0
bdev_register:Malloc0p1
bdev_register:Malloc0p2
bdev_register:Malloc0
bdev_register:Malloc1
)
if [[ $(uname -s) = Linux ]]; then
# This AIO bdev must be large enough to be used as LVOL store
dd if=/dev/zero of=/tmp/sample_aio bs=1024 count=102400
tgt_rpc construct_aio_bdev /tmp/sample_aio aio_disk 1024
expected_notifications+=( bdev_register:aio_disk )
fi
# For LVOLs use split to check for proper order of initialization.
@ -135,6 +191,13 @@ function create_bdev_subsystem_config() {
tgt_rpc construct_lvol_bdev -l lvs_test -t lvol1 32
tgt_rpc snapshot_lvol_bdev lvs_test/lvol0 snapshot0
tgt_rpc clone_lvol_bdev lvs_test/snapshot0 clone0
expected_notifications+=(
"bdev_register:$RE_UUID"
"bdev_register:$RE_UUID"
"bdev_register:$RE_UUID"
"bdev_register:$RE_UUID"
)
fi
if [[ $SPDK_TEST_CRYPTO -eq 1 ]]; then
@ -146,6 +209,10 @@ function create_bdev_subsystem_config() {
fi
tgt_rpc construct_crypto_bdev -b MallocForCryptoBdev -c CryptoMallocBdev -d $crypto_dirver -k 0123456789123456
expected_notifications+=(
bdev_register:MallocForCryptoBdev
bdev_register:CryptoMallocBdev
)
fi
if [[ $SPDK_TEST_PMDK -eq 1 ]]; then
@ -153,13 +220,17 @@ function create_bdev_subsystem_config() {
rm -f $pmem_pool_file
tgt_rpc create_pmem_pool $pmem_pool_file 128 4096
tgt_rpc construct_pmem_bdev -n pmem1 $pmem_pool_file
expected_notifications+=( bdev_register:pmem1 )
fi
if [[ $SPDK_TEST_RBD -eq 1 ]]; then
rbd_setup 127.0.0.1
tgt_rpc construct_rbd_bdev $RBD_POOL $RBD_NAME 4096
expected_notifications+=( bdev_register:Ceph0 )
fi
tgt_check_notifications "${expected_notifications[@]}"
timing_exit $FUNCNAME
}