diff options
Diffstat (limited to 'src/spdk/test/bdev/nbd_common.sh')
-rw-r--r-- | src/spdk/test/bdev/nbd_common.sh | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/src/spdk/test/bdev/nbd_common.sh b/src/spdk/test/bdev/nbd_common.sh new file mode 100644 index 00000000..df8caac6 --- /dev/null +++ b/src/spdk/test/bdev/nbd_common.sh @@ -0,0 +1,95 @@ +set -e + +function nbd_start_disks() { + local rpc_server=$1 + local bdev_list=($2) + local nbd_list=($3) + + for (( i=0; i<${#nbd_list[@]}; i++ )); do + $rootdir/scripts/rpc.py -s $rpc_server start_nbd_disk \ + ${bdev_list[$i]} ${nbd_list[$i]} + done + # Wait for nbd devices ready + for i in ${nbd_list[@]}; do + waitfornbd ${i:5} + done +} + +function waitfornbd_exit() { + nbd_name=$1 + + for ((i=1; i<=20; i++)); do + if grep -q -w $nbd_name /proc/partitions; then + sleep 0.1 + else + break + fi + done + + return 0 +} + +function nbd_stop_disks() { + local rpc_server=$1 + local nbd_list=($2) + + for i in ${nbd_list[@]}; do + $rootdir/scripts/rpc.py -s $rpc_server stop_nbd_disk $i + done + for i in ${nbd_list[@]}; do + waitfornbd_exit ${i:5} + done +} + +function nbd_get_count() { + # return = count of spdk nbd devices + local rpc_server=$1 + + nbd_disks_json=`$rootdir/scripts/rpc.py -s $rpc_server get_nbd_disks` + nbd_disks_name=`echo "${nbd_disks_json}" | jq -r '.[] | .nbd_device'` + count=`echo "${nbd_disks_name}" | grep -c /dev/nbd || true` + echo $count +} + +function nbd_dd_data_verify() { + local nbd_list=($1) + local operation=$2 + local tmp_file=/tmp/nbdrandtest + + if [ "$operation" = "write" ]; then + # data write + dd if=/dev/urandom of=$tmp_file bs=4096 count=256 + for i in ${nbd_list[@]}; do + dd if=$tmp_file of=$i bs=4096 count=256 oflag=direct + done + elif [ "$operation" = "verify" ]; then + # data read and verify + for i in ${nbd_list[@]}; do + cmp -b -n 1M $tmp_file $i + done + rm $tmp_file + fi +} + +function nbd_rpc_data_verify() { + local rpc_server=$1 + local bdev_list=($2) + local nbd_list=($3) + + nbd_start_disks $rpc_server "${bdev_list[*]}" "${nbd_list[*]}" + count=$(nbd_get_count $rpc_server) + if [ $count -ne ${#nbd_list[@]} ]; then + return -1 + fi + + nbd_dd_data_verify "${nbd_list[*]}" "write" + nbd_dd_data_verify "${nbd_list[*]}" "verify" + + nbd_stop_disks $rpc_server "${nbd_list[*]}" + count=$(nbd_get_count $rpc_server) + if [ $count -ne 0 ]; then + return -1 + fi + + return 0 +} |