numam-spdk/test/pmem/pmem.sh
Josh Soref c9c7c281f8 spelling: test
Part of #2256

* achieve
* additionally
* against
* aliases
* already
* another
* arguments
* between
* capabilities
* comparison
* compatibility
* configuration
* continuing
* controlq
* cpumask
* default
* depends
* dereferenced
* discussed
* dissect
* driver
* environment
* everything
* excluded
* existing
* expectation
* failed
* fails
* following
* functions
* hugepages
* identifiers
* implicitly
* in_capsule
* increment
* initialization
* initiator
* integrity
* iteration
* latencies
* libraries
* management
* namespace
* negotiated
* negotiation
* nonexistent
* number
* occur
* occurred
* occurring
* offsetting
* operations
* outstanding
* overwhelmed
* parameter
* parameters
* partition
* preempts
* provisioned
* responded
* segment
* skipped
* struct
* subsystem
* success
* successfully
* sufficiently
* this
* threshold
* transfer
* transferred
* unchanged
* unexpected
* unregistered
* useless
* utility
* value
* variable
* workload

Change-Id: I21ca7dab4ef575b5767e50aaeabc34314ab13396
Signed-off-by: Josh Soref <jsoref@gmail.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/10409
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
2021-12-03 08:13:22 +00:00

684 lines
17 KiB
Bash
Executable File

#!/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 nonexistent 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