diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-21 11:54:28 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-21 11:54:28 +0000 |
commit | e6918187568dbd01842d8d1d2c808ce16a894239 (patch) | |
tree | 64f88b554b444a49f656b6c656111a145cbbaa28 /src/spdk/test/pmem/pmem.sh | |
parent | Initial commit. (diff) | |
download | ceph-e6918187568dbd01842d8d1d2c808ce16a894239.tar.xz ceph-e6918187568dbd01842d8d1d2c808ce16a894239.zip |
Adding upstream version 18.2.2.upstream/18.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/spdk/test/pmem/pmem.sh')
-rwxr-xr-x | src/spdk/test/pmem/pmem.sh | 683 |
1 files changed, 683 insertions, 0 deletions
diff --git a/src/spdk/test/pmem/pmem.sh b/src/spdk/test/pmem/pmem.sh new file mode 100755 index 000000000..bca8b4db7 --- /dev/null +++ b/src/spdk/test/pmem/pmem.sh @@ -0,0 +1,683 @@ +#!/usr/bin/env bash + +testdir=$(readlink -f $(dirname $0)) +rootdir=$(readlink -f $testdir/../..) +source $rootdir/test/common/autotest_common.sh +source $rootdir/test/pmem/common.sh + +rpc_py="$rootdir/scripts/rpc.py " + +enable_script_debug=false +test_info=false +test_create=false +test_delete=false +test_construct_bdev=false +test_delete_bdev=false +test_all=true +test_all_get=false +default_pool_file="$testdir/pool_file" +obj_pool_file="$testdir/obj_pool_file" +bdev_name=pmem0 + +function usage() { + [[ -n $2 ]] && ( + echo "$2" + echo "" + ) + echo "Shortcut script for automated RPC tests for PMEM" + echo + echo "Usage: $(basename $1) [OPTIONS]" + echo + echo "-h, --help Print help and exit" + echo "-x set -x for script debug" + echo " --info Run test cases for bdev_pmem_get_pool_info" + echo " --create Run test cases for bdev_pmem_create_pool" + echo " --delete Run test cases for bdev_pmem_delete_pool" + echo " --construct_bdev Run test cases for constructing pmem bdevs" + echo " --delete_bdev Run test cases for deleting pmem bdevs" + echo " --all Run all test cases (default)" + exit 0 +} + +while getopts 'xh-:' optchar; do + case "$optchar" in + -) + case "$OPTARG" in + help) usage $0 ;; + info) + test_info=true + test_all=false + ;; + create) + test_create=true + test_all=false + ;; + delete) + test_delete=true + test_all=false + ;; + construct_bdev) + test_construct_bdev=true + test_all=false + ;; + delete_bdev) + test_delete_bdev=true + test_all=false + ;; + all) test_all_get=true ;; + *) usage $0 "Invalid argument '$OPTARG'" ;; + esac + ;; + h) usage $0 ;; + x) enable_script_debug=true ;; + *) usage $0 "Invalid argument '$OPTARG'" ;; + esac +done + +if $test_all_get; then + test_all=true +fi + +if [[ $EUID -ne 0 ]]; then + echo "Go away user come back as root" + exit 1 +fi + +#================================================ +# bdev_pmem_get_pool_info tests +#================================================ +function bdev_pmem_get_pool_info_tc1() { + pmem_print_tc_name ${FUNCNAME[0]} + + if $rpc_py bdev_pmem_get_pool_info; then + error "bdev_pmem_get_pool_info passed with missing argument!" + fi + + return 0 +} + +function bdev_pmem_get_pool_info_tc2() { + pmem_print_tc_name ${FUNCNAME[0]} + + if $rpc_py bdev_pmem_get_pool_info $rootdir/non/existing/path/non_existent_file; then + error "bdev_pmem_get_pool_info passed with invalid path!" + fi + + return 0 +} + +function bdev_pmem_get_pool_info_tc3() { + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file $obj_pool_file + + echo "Creating new type OBJ pool file" + if hash pmempool; then + pmempool create -s 32000000 obj $obj_pool_file + else + echo "Warning: pmempool package not found! Creating stub file." + truncate -s "32M" $obj_pool_file + fi + + if $rpc_py bdev_pmem_get_pool_info $obj_pool_file; then + pmem_clean_pool_file $obj_pool_file + error "Pmem_pool_info passed with invalid pool_file type!" + fi + + pmem_clean_pool_file $obj_pool_file + return 0 +} + +function bdev_pmem_get_pool_info_tc4() { + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + + pmem_create_pool_file + if ! $rpc_py bdev_pmem_get_pool_info $default_pool_file; then + error "Failed to get bdev_pmem_get_pool_info!" + fi + + pmem_clean_pool_file + return 0 +} + +#================================================ +# bdev_pmem_create_pool tests +#================================================ +function bdev_pmem_create_pool_tc1() { + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + + if $rpc_py bdev_pmem_create_pool 32 512; then + error "Mem pool file created w/out given path!" + fi + + if $rpc_py bdev_pmem_create_pool $default_pool_file; then + error "Mem pool file created w/out size & block size arguments!" + fi + + if $rpc_py bdev_pmem_get_pool_info $default_pool_file; then + error "bdev_pmem_create_pool created invalid pool file!" + fi + + if $rpc_py bdev_pmem_create_pool $default_pool_file 32; then + error "Mem pool file created w/out block size argument!" + fi + + if $rpc_py bdev_pmem_get_pool_info $default_pool_file; then + error "bdev_pmem_create_pool created invalid pool file!" + fi + + pmem_clean_pool_file + return 0 +} + +function bdev_pmem_create_pool_tc2() { + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + + if $rpc_py bdev_pmem_create_pool $rootdir/non/existing/path/non_existent_file 32 512; then + error "Mem pool file created with incorrect path!" + fi + + if $rpc_py bdev_pmem_get_pool_info $rootdir/non/existing/path/non_existent_file; then + error "bdev_pmem_create_pool created invalid pool file!" + fi + + pmem_clean_pool_file + return 0 +} + +function bdev_pmem_create_pool_tc3() { + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + + if ! $rpc_py bdev_pmem_create_pool $default_pool_file 256 512; then + error "Failed to create pmem pool!" + fi + + if ! $rpc_py bdev_pmem_get_pool_info $default_pool_file; then + error "Failed to get pmem info" + fi + + if ! $rpc_py bdev_pmem_delete_pool $default_pool_file; then + error "Failed to delete pool file!" + fi + + if $rpc_py bdev_pmem_get_pool_info $default_pool_file; then + error "Got pmem file info but file should be deleted" + fi + + if [ -f $default_pool_file ]; then + error "Failed to delete pmem file!" + fi + + pmem_clean_pool_file + return 0 +} + +function bdev_pmem_create_pool_tc4() { + pmem_print_tc_name ${FUNCNAME[0]} + + pmem_unmount_ramspace + mkdir $rootdir/test/pmem/ramspace + mount -t tmpfs -o size=300m tmpfs $rootdir/test/pmem/ramspace + if ! $rpc_py bdev_pmem_create_pool $rootdir/test/pmem/ramspace/pool_file 256 512; then + pmem_unmount_ramspace + error "Failed to create pmem pool!" + fi + + if ! $rpc_py bdev_pmem_get_pool_info $rootdir/test/pmem/ramspace/pool_file; then + pmem_unmount_ramspace + error "Failed to get pmem info" + fi + + if ! $rpc_py bdev_pmem_delete_pool $rootdir/test/pmem/ramspace/pool_file; then + pmem_unmount_ramspace + error "Failed to delete pool file!" + fi + + if [ -f $rootdir/test/pmem/ramspace/pool_file ]; then + pmem_unmount_ramspace + error "Failed to delete pmem file / file still exists!" + fi + + pmem_unmount_ramspace + return 0 +} + +function bdev_pmem_create_pool_tc5() { + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + local pmem_block_size + local pmem_num_block + + if ! $rpc_py bdev_pmem_create_pool $default_pool_file 256 512; then + error "Failed to create pmem pool!" + fi + + if $rpc_py bdev_pmem_get_pool_info $default_pool_file; then + pmem_block_size=$($rpc_py bdev_pmem_get_pool_info $default_pool_file | jq -r '.[] .block_size') + pmem_num_block=$($rpc_py bdev_pmem_get_pool_info $default_pool_file | jq -r '.[] .num_blocks') + else + error "Failed to get pmem info!" + fi + + if $rpc_py bdev_pmem_create_pool $default_pool_file 512 4096; then + error "Pmem pool with already occupied path has been created!" + fi + + if $rpc_py bdev_pmem_get_pool_info $default_pool_file; then + if [ $pmem_block_size != $($rpc_py bdev_pmem_get_pool_info $default_pool_file | jq -r '.[] .block_size') ]; then + error "Invalid block size of pmem pool!" + fi + + if [ $pmem_num_block != $($rpc_py bdev_pmem_get_pool_info $default_pool_file | jq -r '.[] .num_blocks') ]; then + error "Invalid number of blocks of pmem pool!" + fi + else + error "Failed to get pmem info!" + fi + + if ! $rpc_py bdev_pmem_delete_pool $default_pool_file; then + error "Failed to delete pmem file!" + fi + + pmem_clean_pool_file + return 0 +} + +function bdev_pmem_create_pool_tc6() { + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + local created_pmem_block_size + + for i in 511 512 1024 2048 4096 131072 262144; do + if ! $rpc_py bdev_pmem_create_pool $default_pool_file 256 $i; then + error "Failed to create pmem pool!" + fi + + if ! created_pmem_block_size=$($rpc_py bdev_pmem_get_pool_info $default_pool_file | jq -r '.[] .block_size'); then + error "Failed to get pmem info!" + fi + + if [ $i != $created_pmem_block_size ]; then + error "Invalid block size of pmem pool!" + fi + + if ! $rpc_py bdev_pmem_delete_pool $default_pool_file; then + error "Failed to delete pmem file!" + fi + done + + pmem_clean_pool_file + return 0 +} + +function bdev_pmem_create_pool_tc7() { + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + + if $rpc_py bdev_pmem_create_pool $default_pool_file 15 512; then + error "Created pmem pool with invalid size!" + fi + + if $rpc_py bdev_pmem_get_pool_info $default_pool_file; then + error "Pmem file shouldn' exist!" + fi + + pmem_clean_pool_file + return 0 +} + +function bdev_pmem_create_pool_tc8() { + pmem_print_tc_name "bdev_pmem_create_pool_tc8" + pmem_clean_pool_file + + if $rpc_py bdev_pmem_create_pool $default_pool_file 32 65536; then + error "Created pmem pool with invalid block number!" + fi + + if $rpc_py bdev_pmem_get_pool_info $default_pool_file; then + error "Pmem file shouldn' exist!" + fi + + pmem_clean_pool_file + return 0 +} + +function bdev_pmem_create_pool_tc9() { + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + + if $rpc_py bdev_pmem_create_pool $default_pool_file 256 -1; then + error "Created pmem pool with negative block size number!" + fi + + if $rpc_py bdev_pmem_get_pool_info $default_pool_file; then + error "bdev_pmem_create_pool create invalid pool file!" + fi + + if $rpc_py bdev_pmem_create_pool $default_pool_file -1 512; then + error "Created pmem pool with negative size number!" + fi + + if $rpc_py bdev_pmem_get_pool_info $default_pool_file; then + error "bdev_pmem_create_pool create invalid pool file!" + fi + + pmem_clean_pool_file + return 0 +} + +#================================================ +# bdev_pmem_delete_pool tests +#================================================ +function bdev_pmem_delete_pool_tc1() { + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + + if $rpc_py bdev_pmem_delete_pool $default_pool_file; then + error "bdev_pmem_delete_pool deleted inexistant pool file!" + fi + + return 0 +} + +function bdev_pmem_delete_pool_tc2() { + pmem_print_tc_name "bdev_pmem_delete_pool_tc2" + pmem_clean_pool_file $obj_pool_file + + echo "Creating new type OBJ pool file" + if hash pmempool; then + pmempool create -s 32000000 obj $obj_pool_file + else + echo "Warning: pmempool package not found! Creating stub file." + truncate -s "32M" $obj_pool_file + fi + + if $rpc_py bdev_pmem_delete_pool $obj_pool_file; then + pmem_clean_pool_file $obj_pool_file + error "bdev_pmem_delete_pool deleted invalid pmem pool type!" + fi + + pmem_clean_pool_file $obj_pool_file + return 0 +} + +function bdev_pmem_delete_pool_tc3() { + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + + pmem_create_pool_file + if ! $rpc_py bdev_pmem_get_pool_info $default_pool_file; then + error "Failed to get info on pmem pool file!" + fi + + if ! $rpc_py bdev_pmem_delete_pool $default_pool_file; then + error "Failed to delete pmem pool file!" + fi + + if $rpc_py bdev_pmem_get_pool_info $default_pool_file; then + error "Pmem pool file exists after using bdev_pmem_get_pool_info!" + fi + + return 0 +} + +function bdev_pmem_delete_pool_tc4() { + pmem_print_tc_name ${FUNCNAME[0]} + + bdev_pmem_delete_pool_tc3 + if $rpc_py bdev_pmem_delete_pool $default_pool_file; then + error "Deleted pmem pool file that shouldn't exist!" + fi + + return 0 +} + +#================================================ +# bdev_pmem_create tests +#================================================ +function bdev_pmem_create_tc1() { + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + + pmem_create_pool_file + if $rpc_py bdev_pmem_create; then + error "bdev_pmem_create passed with missing argument!" + fi + + pmem_clean_pool_file + return 0 +} + +function bdev_pmem_create_tc2() { + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + + pmem_create_pool_file + if $rpc_py bdev_pmem_create -n $bdev_name $rootdir/non/existing/path/non_existent_file; then + error "Created pmem bdev w/out valid pool file!" + fi + + if $rpc_py bdev_get_bdevs | jq -r '.[] .name' | grep -qi pmem; then + error "bdev_pmem_create passed with invalid argument!" + fi + + pmem_clean_pool_file + return 0 +} + +function bdev_pmem_create_tc3() { + pmem_print_tc_name ${FUNCNAME[0]} + + truncate -s 32M $rootdir/test/pmem/random_file + if $rpc_py bdev_pmem_create -n $bdev_name $rootdir/test/pmem/random_file; then + error "Created pmem bdev from random file!" + fi + + if [ -f $rootdir/test/pmem/random_file ]; then + echo "Deleting previously created random file" + rm $rootdir/test/pmem/random_file + fi + + return 0 +} + +function bdev_pmem_create_tc4() { + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file $obj_pool_file + + echo "Creating new type OBJ pool file" + if hash pmempool; then + pmempool create -s 32000000 obj $obj_pool_file + else + echo "Warning: pmempool package not found! Creating stub file." + truncate -s "32M" $obj_pool_file + fi + + if $rpc_py bdev_pmem_create -n $bdev_name $obj_pool_file; then + pmem_clean_pool_file $obj_pool_file + error "Created pmem bdev from obj type pmem file!" + fi + + pmem_clean_pool_file $obj_pool_file + return 0 +} + +function bdev_pmem_create_tc5() { + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + pmem_create_pool_file + local pmem_bdev_name + + if ! $rpc_py bdev_pmem_get_pool_info $default_pool_file; then + error "Failed to get pmem info!" + fi + + if ! pmem_bdev_name=$($rpc_py bdev_pmem_create -n $bdev_name $default_pool_file); then + error "Failed to create pmem bdev" + fi + + if ! $rpc_py bdev_get_bdevs | jq -r '.[] .name' | grep -qi $pmem_bdev_name; then + error "Pmem bdev not found!" + fi + + if ! $rpc_py bdev_pmem_delete $pmem_bdev_name; then + error "Failed to delete pmem bdev!" + fi + + if ! $rpc_py bdev_pmem_delete_pool $default_pool_file; then + error "Failed to delete pmem pool file!" + fi + + pmem_clean_pool_file + return 0 +} + +function bdev_pmem_create_tc6() { + pmem_print_tc_name ${FUNCNAME[0]} + local pmem_bdev_name + pmem_clean_pool_file + + pmem_create_pool_file + if ! $rpc_py bdev_pmem_get_pool_info $default_pool_file; then + error "Failed to get info on pmem pool file!" + fi + + if ! pmem_bdev_name=$($rpc_py bdev_pmem_create -n $bdev_name $default_pool_file); then + error "Failed to create pmem bdev!" + fi + + if ! $rpc_py bdev_get_bdevs | jq -r '.[] .name' | grep -qi $pmem_bdev_name; then + error "Pmem bdev not found!" + fi + + if $rpc_py bdev_pmem_create -n $bdev_name $default_pool_file; then + error "Constructed pmem bdev with occupied path!" + fi + + if ! $rpc_py bdev_pmem_delete $pmem_bdev_name; then + error "Failed to delete pmem bdev!" + fi + + if ! $rpc_py bdev_pmem_delete_pool $default_pool_file; then + error "Failed to delete pmem pool file!" + fi + + pmem_clean_pool_file + return 0 +} + +#================================================ +# bdev_pmem_delete tests +#================================================ +function delete_bdev_tc1() { + pmem_print_tc_name ${FUNCNAME[0]} + local pmem_bdev_name + local bdevs_names + pmem_clean_pool_file + + pmem_create_pool_file $default_pool_file 256 512 + if ! $rpc_py bdev_pmem_get_pool_info $default_pool_file; then + error "Failed to get pmem info!" + fi + + if ! pmem_bdev_name=$($rpc_py bdev_pmem_create -n $bdev_name $default_pool_file); then + error "Failed to create pmem bdev!" + fi + + if ! $rpc_py bdev_get_bdevs | jq -r '.[] .name' | grep -qi $pmem_bdev_name; then + error "$pmem_bdev_name bdev not found!" + fi + + if ! $rpc_py bdev_pmem_delete $pmem_bdev_name; then + error "Failed to delete $pmem_bdev_name bdev!" + fi + + bdevs_names=$($rpc_py bdev_get_bdevs | jq -r '.[] .name') + if echo $bdevs_names | grep -qi $pmem_bdev_name; then + error "$pmem_bdev_name bdev is not deleted!" + fi + + pmem_clean_pool_file + return 0 +} + +function delete_bdev_tc2() { + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + pmem_create_pool_file $default_pool_file 256 512 + local pmem_bdev_name + + if ! $rpc_py bdev_pmem_get_pool_info $default_pool_file; then + error "Failed to get pmem info!" + fi + + if ! pmem_bdev_name=$($rpc_py bdev_pmem_create -n $bdev_name $default_pool_file); then + error "Failed to create pmem bdev" + fi + + if ! $rpc_py bdev_get_bdevs | jq -r '.[] .name' | grep -qi $pmem_bdev_name; then + error "Pmem bdev not found!" + fi + + if ! $rpc_py bdev_pmem_delete $pmem_bdev_name; then + error "Failed to delete pmem bdev!" + fi + + if $rpc_py bdev_pmem_delete $pmem_bdev_name; then + error "bdev_pmem_delete deleted pmem bdev for second time!" + fi + + pmem_clean_pool_file + return 0 +} + +vhost_start +if ! $enable_script_debug; then + set +x +fi + +if $test_info || $test_all; then + bdev_pmem_get_pool_info_tc1 + bdev_pmem_get_pool_info_tc2 + bdev_pmem_get_pool_info_tc3 + bdev_pmem_get_pool_info_tc4 +fi + +if $test_create || $test_all; then + bdev_pmem_create_pool_tc1 + bdev_pmem_create_pool_tc2 + bdev_pmem_create_pool_tc3 + bdev_pmem_create_pool_tc4 + bdev_pmem_create_pool_tc5 + bdev_pmem_create_pool_tc6 + bdev_pmem_create_pool_tc7 + bdev_pmem_create_pool_tc8 + bdev_pmem_create_pool_tc9 +fi + +if $test_delete || $test_all; then + bdev_pmem_delete_pool_tc1 + bdev_pmem_delete_pool_tc2 + bdev_pmem_delete_pool_tc3 + bdev_pmem_delete_pool_tc4 +fi + +if $test_construct_bdev || $test_all; then + bdev_pmem_create_tc1 + bdev_pmem_create_tc2 + bdev_pmem_create_tc3 + bdev_pmem_create_tc4 + bdev_pmem_create_tc5 + bdev_pmem_create_tc6 +fi + +if $test_delete_bdev || $test_all; then + delete_bdev_tc1 + delete_bdev_tc2 +fi + +pmem_clean_pool_file +vhost_kill 0 |