diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 18:24:20 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 18:24:20 +0000 |
commit | 483eb2f56657e8e7f419ab1a4fab8dce9ade8609 (patch) | |
tree | e5d88d25d870d5dedacb6bbdbe2a966086a0a5cf /src/spdk/test/pmem/pmem.sh | |
parent | Initial commit. (diff) | |
download | ceph-483eb2f56657e8e7f419ab1a4fab8dce9ade8609.tar.xz ceph-483eb2f56657e8e7f419ab1a4fab8dce9ade8609.zip |
Adding upstream version 14.2.21.upstream/14.2.21upstream
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 | 701 |
1 files changed, 701 insertions, 0 deletions
diff --git a/src/spdk/test/pmem/pmem.sh b/src/spdk/test/pmem/pmem.sh new file mode 100755 index 00000000..15188635 --- /dev/null +++ b/src/spdk/test/pmem/pmem.sh @@ -0,0 +1,701 @@ +#!/usr/bin/env bash + +BASE_DIR=$(readlink -f $(dirname $0)) +[[ -z "$TEST_DIR" ]] && TEST_DIR="$(cd $BASE_DIR/../../ && pwd)" + +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=$TEST_DIR/test/pmem/pool_file +obj_pool_file=$TEST_DIR/test/pmem/obj_pool_file +bdev_name=pmem0 + +function usage() +{ + [[ ! -z $2 ]] && ( echo "$2"; echo ""; ) + echo "Shortcut script for automated RPC tests for PMEM" + echo "For test details, check test_plan.md or" + echo "https://review.gerrithub.io/#/c/378618/18/test/pmem/test_plan.md" + 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 pmem_pool_info" + echo " --create Run test cases for create_pmem_pool" + echo " --delete Run test cases for delete_pmem_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 + +source $TEST_DIR/test/pmem/common.sh +source $TEST_DIR/test/common/autotest_common.sh + +#================================================ +# pmem_pool_info tests +#================================================ +function pmem_pool_info_tc1() +{ + pmem_print_tc_name ${FUNCNAME[0]} + + if $rpc_py pmem_pool_info; then + error "pmem_pool_info passed with missing argument!" + fi + + return 0 +} + +function pmem_pool_info_tc2() +{ + pmem_print_tc_name ${FUNCNAME[0]} + + if $rpc_py pmem_pool_info $TEST_DIR/non/existing/path/non_existent_file; then + error "pmem_pool_info passed with invalid path!" + fi + + return 0 +} + +function pmem_pool_info_tc3() +{ + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file $TEST_DIR/test/pmem/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 pmem_pool_info $TEST_DIR/test/pmem/obj_pool_file; then + pmem_clean_pool_file $TEST_DIR/test/pmem/obj_pool_file + error "Pmem_pool_info passed with invalid pool_file type!" + fi + + pmem_clean_pool_file $TEST_DIR/test/pmem/obj_pool_file + return 0 +} + +function pmem_pool_info_tc4() +{ + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + + pmem_create_pool_file + if ! $rpc_py pmem_pool_info $default_pool_file; then + error "Failed to get pmem_pool_info!" + fi + + pmem_clean_pool_file + return 0 +} + +#================================================ +# create_pmem_pool tests +#================================================ +function create_pmem_pool_tc1() +{ + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + + if $rpc_py create_pmem_pool 32 512; then + error "Mem pool file created w/out given path!" + fi + + if $rpc_py create_pmem_pool $default_pool_file; then + error "Mem pool file created w/out size & block size arguments!" + fi + + if $rpc_py pmem_pool_info $default_pool_file; then + error "create_pmem_pool created invalid pool file!" + fi + + if $rpc_py create_pmem_pool $default_pool_file 32; then + error "Mem pool file created w/out block size argument!" + fi + + if $rpc_py pmem_pool_info $default_pool_file; then + error "create_pmem_pool created invalid pool file!" + fi + + pmem_clean_pool_file + return 0 +} + +function create_pmem_pool_tc2() +{ + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + + if $rpc_py create_pmem_pool $TEST_DIR/non/existing/path/non_existent_file 32 512; then + error "Mem pool file created with incorrect path!" + fi + + if $rpc_py pmem_pool_info $TEST_DIR/non/existing/path/non_existent_file; then + error "create_pmem_pool created invalid pool file!" + fi + + pmem_clean_pool_file + return 0 +} + +function create_pmem_pool_tc3() +{ + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + + if ! $rpc_py create_pmem_pool $default_pool_file 256 512; then + error "Failed to create pmem pool!" + fi + + if ! $rpc_py pmem_pool_info $default_pool_file; then + error "Failed to get pmem info" + fi + + if ! $rpc_py delete_pmem_pool $default_pool_file; then + error "Failed to delete pool file!" + fi + + if $rpc_py pmem_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 create_pmem_pool_tc4() +{ + pmem_print_tc_name ${FUNCNAME[0]} + + pmem_unmount_ramspace + mkdir $TEST_DIR/test/pmem/ramspace + mount -t tmpfs -o size=300m tmpfs $TEST_DIR/test/pmem/ramspace + if ! $rpc_py create_pmem_pool $TEST_DIR/test/pmem/ramspace/pool_file 256 512; then + pmem_unmount_ramspace + error "Failed to create pmem pool!" + fi + + if ! $rpc_py pmem_pool_info $TEST_DIR/test/pmem/ramspace/pool_file; then + pmem_unmount_ramspace + error "Failed to get pmem info" + fi + + if ! $rpc_py delete_pmem_pool $TEST_DIR/test/pmem/ramspace/pool_file; then + pmem_unmount_ramspace + error "Failed to delete pool file!" + fi + + if [ -f $TEST_DIR/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 create_pmem_pool_tc5() +{ + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + local pmem_block_size + local pmem_num_block + + if ! $rpc_py create_pmem_pool $default_pool_file 256 512; then + error "Failed to create pmem pool!" + fi + + if $rpc_py pmem_pool_info $default_pool_file; then + pmem_block_size=$($rpc_py pmem_pool_info $default_pool_file | jq -r '.[] .block_size') + pmem_num_block=$($rpc_py pmem_pool_info $default_pool_file | jq -r '.[] .num_blocks') + else + error "Failed to get pmem info!" + fi + + if $rpc_py create_pmem_pool $default_pool_file 512 4096; then + error "Pmem pool with already occupied path has been created!" + fi + + if $rpc_py pmem_pool_info $default_pool_file; then + if [ $pmem_block_size != $($rpc_py pmem_pool_info $default_pool_file | jq -r '.[] .block_size') ]; then + error "Invalid block size of pmem pool!" + fi + + if [ $pmem_num_block != $($rpc_py pmem_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 delete_pmem_pool $default_pool_file; then + error "Failed to delete pmem file!" + fi + + pmem_clean_pool_file + return 0 +} + +function create_pmem_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 create_pmem_pool $default_pool_file 256 $i; then + error "Failed to create pmem pool!" + fi + + created_pmem_block_size=$($rpc_py pmem_pool_info $default_pool_file | jq -r '.[] .block_size') + if [ $? != 0 ]; 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 delete_pmem_pool $default_pool_file; then + error "Failed to delete pmem file!" + fi + done + + pmem_clean_pool_file + return 0 +} + +function create_pmem_pool_tc7() +{ + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + + if $rpc_py create_pmem_pool $default_pool_file 15 512; then + error "Created pmem pool with invalid size!" + fi + + if $rpc_py pmem_pool_info $default_pool_file; then + error "Pmem file shouldn' exist!" + fi + + pmem_clean_pool_file + return 0 +} + +function create_pmem_pool_tc8() +{ + pmem_print_tc_name "create_pmem_pool_tc8" + pmem_clean_pool_file + + if $rpc_py create_pmem_pool $default_pool_file 32 65536; then + error "Created pmem pool with invalid block number!" + fi + + if $rpc_py pmem_pool_info $default_pool_file; then + error "Pmem file shouldn' exist!" + fi + + pmem_clean_pool_file + return 0 +} + +function create_pmem_pool_tc9() +{ + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + + if $rpc_py create_pmem_pool $default_pool_file 256 -1; then + error "Created pmem pool with negative block size number!" + fi + + if $rpc_py pmem_pool_info $default_pool_file; then + error "create_pmem_pool create invalid pool file!" + fi + + if $rpc_py create_pmem_pool $default_pool_file -1 512; then + error "Created pmem pool with negative size number!" + fi + + if $rpc_py pmem_pool_info $default_pool_file; then + error "create_pmem_pool create invalid pool file!" + fi + + pmem_clean_pool_file + return 0 +} + +#================================================ +# delete_pmem_pool tests +#================================================ +function delete_pmem_pool_tc1() +{ + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + + if $rpc_py delete_pmem_pool $default_pool_file; then + error "delete_pmem_pool deleted inexistant pool file!" + fi + + return 0 +} + +function delete_pmem_pool_tc2() +{ + pmem_print_tc_name "delete_pmem_pool_tc2" + pmem_clean_pool_file $TEST_DIR/test/pmem/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 delete_pmem_pool $TEST_DIR/test/pmem/obj_pool_file; then + pmem_clean_pool_file $TEST_DIR/test/pmem/obj_pool_file + error "delete_pmem_pool deleted invalid pmem pool type!" + fi + + pmem_clean_pool_file $TEST_DIR/test/pmem/obj_pool_file + return 0 +} + +function delete_pmem_pool_tc3() +{ + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + + pmem_create_pool_file + if ! $rpc_py pmem_pool_info $default_pool_file; then + error "Failed to get info on pmem pool file!" + fi + + if ! $rpc_py delete_pmem_pool $default_pool_file; then + error "Failed to delete pmem pool file!" + fi + + if $rpc_py pmem_pool_info $default_pool_file; then + error "Pmem pool file exists after using pmem_pool_info!" + fi + + return 0 +} + +function delete_pmem_pool_tc4() +{ + pmem_print_tc_name ${FUNCNAME[0]} + + delete_pmem_pool_tc3 + if $rpc_py delete_pmem_pool $default_pool_file; then + error "Deleted pmem pool file that shouldn't exist!" + fi + + return 0 +} + +#================================================ +# construct_pmem_bdev tests +#================================================ +function construct_pmem_bdev_tc1() +{ + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + + pmem_create_pool_file + if $rpc_py construct_pmem_bdev; then + error "construct_pmem_bdev passed with missing argument!" + fi + + pmem_clean_pool_file + return 0 +} + +function construct_pmem_bdev_tc2() +{ + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + + pmem_create_pool_file + if $rpc_py construct_pmem_bdev -n $bdev_name $TEST_DIR/non/existing/path/non_existent_file; then + error "Created pmem bdev w/out valid pool file!" + fi + + if $rpc_py get_bdevs | jq -r '.[] .name' | grep -qi pmem; then + error "construct_pmem_bdev passed with invalid argument!" + fi + + pmem_clean_pool_file + return 0 +} + +function construct_pmem_bdev_tc3() +{ + pmem_print_tc_name ${FUNCNAME[0]} + + truncate -s 32M $TEST_DIR/test/pmem/random_file + if $rpc_py construct_pmem_bdev -n $bdev_name $TEST_DIR/test/pmem/random_file; then + error "Created pmem bdev from random file!" + fi + + if [ -f $TEST_DIR/test/pmem/random_file ]; then + echo "Deleting previously created random file" + rm $TEST_DIR/test/pmem/random_file + fi + + return 0 +} + +function construct_pmem_bdev_tc4() +{ + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file $TEST_DIR/test/pmem/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 construct_pmem_bdev -n $bdev_name $TEST_DIR/test/pmem/obj_pool_file; then + pmem_clean_pool_file $TEST_DIR/test/pmem/obj_pool_file + error "Created pmem bdev from obj type pmem file!" + fi + + pmem_clean_pool_file $TEST_DIR/test/pmem/obj_pool_file + return 0 +} + +function construct_pmem_bdev_tc5() +{ + pmem_print_tc_name ${FUNCNAME[0]} + pmem_clean_pool_file + pmem_create_pool_file + local pmem_bdev_name + + if ! $rpc_py pmem_pool_info $default_pool_file; then + error "Failed to get pmem info!" + fi + + pmem_bdev_name=$($rpc_py construct_pmem_bdev -n $bdev_name $default_pool_file) + if [ $? != 0 ]; then + error "Failed to create pmem bdev" + fi + + if ! $rpc_py get_bdevs | jq -r '.[] .name' | grep -qi $pmem_bdev_name; then + error "Pmem bdev not found!" + fi + + if ! $rpc_py delete_pmem_bdev $pmem_bdev_name; then + error "Failed to delete pmem bdev!" + fi + + if ! $rpc_py delete_pmem_pool $default_pool_file; then + error "Failed to delete pmem pool file!" + fi + + pmem_clean_pool_file + return 0 +} + +function construct_pmem_bdev_tc6() +{ + pmem_print_tc_name ${FUNCNAME[0]} + local pmem_bdev_name + pmem_clean_pool_file + + pmem_create_pool_file + if ! $rpc_py pmem_pool_info $default_pool_file; then + error "Failed to get info on pmem pool file!" + fi + + pmem_bdev_name=$($rpc_py construct_pmem_bdev -n $bdev_name $default_pool_file) + if [ $? != 0 ]; then + error "Failed to create pmem bdev!" + fi + + if ! $rpc_py get_bdevs | jq -r '.[] .name' | grep -qi $pmem_bdev_name; then + error "Pmem bdev not found!" + fi + + if $rpc_py construct_pmem_bdev -n $bdev_name $default_pool_file; then + error "Constructed pmem bdev with occupied path!" + fi + + if ! $rpc_py delete_pmem_bdev $pmem_bdev_name; then + error "Failed to delete pmem bdev!" + fi + + if ! $rpc_py delete_pmem_pool $default_pool_file; then + error "Failed to delete pmem pool file!" + fi + + pmem_clean_pool_file + return 0 +} + +#================================================ +# delete_pmem_bdev 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 pmem_pool_info $default_pool_file; then + error "Failed to get pmem info!" + fi + + pmem_bdev_name=$($rpc_py construct_pmem_bdev -n $bdev_name $default_pool_file) + if [ $? != 0 ]; then + error "Failed to create pmem bdev!" + fi + + if ! $rpc_py get_bdevs | jq -r '.[] .name' | grep -qi $pmem_bdev_name; then + error "$pmem_bdev_name bdev not found!" + fi + + if ! $rpc_py delete_pmem_bdev $pmem_bdev_name; then + error "Failed to delete $pmem_bdev_name bdev!" + fi + + bdevs_names=$($rpc_py 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 pmem_pool_info $default_pool_file; then + error "Failed to get pmem info!" + fi + + pmem_bdev_name=$($rpc_py construct_pmem_bdev -n $bdev_name $default_pool_file) + if [ $? != 0 ]; then + error "Failed to create pmem bdev" + fi + + if ! $rpc_py get_bdevs | jq -r '.[] .name' | grep -qi $pmem_bdev_name; then + error "Pmem bdev not found!" + fi + + if ! $rpc_py delete_pmem_bdev $pmem_bdev_name; then + error "Failed to delete pmem bdev!" + fi + + if $rpc_py delete_pmem_bdev $pmem_bdev_name; then + error "delete_pmem_bdev deleted pmem bdev for second time!" + fi + + pmem_clean_pool_file + return 0 +} + +timing_enter pmem +vhost_start +if ! $enable_script_debug; then + set +x +fi + +if $test_info || $test_all; then + pmem_pool_info_tc1 + pmem_pool_info_tc2 + pmem_pool_info_tc3 + pmem_pool_info_tc4 +fi + +if $test_create || $test_all; then + create_pmem_pool_tc1 + create_pmem_pool_tc2 + create_pmem_pool_tc3 + create_pmem_pool_tc4 + create_pmem_pool_tc5 + create_pmem_pool_tc6 + create_pmem_pool_tc7 + create_pmem_pool_tc8 + create_pmem_pool_tc9 +fi + +if $test_delete || $test_all; then + delete_pmem_pool_tc1 + delete_pmem_pool_tc2 + delete_pmem_pool_tc3 + delete_pmem_pool_tc4 +fi + +if $test_construct_bdev || $test_all; then + construct_pmem_bdev_tc1 + construct_pmem_bdev_tc2 + construct_pmem_bdev_tc3 + construct_pmem_bdev_tc4 + construct_pmem_bdev_tc5 + construct_pmem_bdev_tc6 +fi + +if $test_delete_bdev || $test_all; then + delete_bdev_tc1 + delete_bdev_tc2 +fi + +pmem_clean_pool_file +report_test_completion "pmem" +vhost_kill +timing_exit pmem |