From 8da5783b52e9adce5a564997cd6e4a393831fdd5 Mon Sep 17 00:00:00 2001 From: Marcin Spiewak Date: Fri, 3 Mar 2023 13:45:16 +0000 Subject: [PATCH] bdev/pmem: Removing bdev pmem - updated tests Removed tests associated with bdev pmem Change-Id: Ibfb699eb5626242a7c1930be13eb1f5ded8d6392 Signed-off-by: Marcin Spiewak Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/17003 Reviewed-by: Jim Harris Tested-by: SPDK CI Jenkins Community-CI: Mellanox Build Bot Reviewed-by: Tomasz Zawadzki --- autotest.sh | 6 - scripts/vagrant/autorun-spdk.conf | 1 - test/bdev/blockdev.sh | 14 - test/common/config/vm_setup.sh | 1 - test/common/skipped_tests.txt | 1 - test/iscsi_tgt/iscsi_tgt.sh | 3 - test/iscsi_tgt/pmem/iscsi_pmem.sh | 76 -- test/json_config/clear_config.py | 1 - test/json_config/json_config.sh | 15 - test/pmem/common.sh | 96 --- test/pmem/pmem.sh | 686 ---------------- test/spdkcli/common.sh | 2 +- .../match_files/spdkcli_pmem.test.match | 3 - test/spdkcli/pmem.sh | 50 -- test/unit/lib/bdev/Makefile | 2 - test/unit/lib/bdev/pmem/Makefile | 10 - test/unit/lib/bdev/pmem/bdev_pmem_ut.c | 734 ------------------ test/unit/unittest.sh | 4 - 18 files changed, 1 insertion(+), 1704 deletions(-) delete mode 100755 test/iscsi_tgt/pmem/iscsi_pmem.sh delete mode 100644 test/pmem/common.sh delete mode 100755 test/pmem/pmem.sh delete mode 100644 test/spdkcli/match_files/spdkcli_pmem.test.match delete mode 100755 test/spdkcli/pmem.sh delete mode 100644 test/unit/lib/bdev/pmem/Makefile delete mode 100644 test/unit/lib/bdev/pmem/bdev_pmem_ut.c diff --git a/autotest.sh b/autotest.sh index af15987f5..34f743045 100755 --- a/autotest.sh +++ b/autotest.sh @@ -305,12 +305,6 @@ if [ $SPDK_RUN_FUNCTIONAL_TEST -eq 1 ]; then timing_exit vhost_initiator fi - if [ $SPDK_TEST_PMDK -eq 1 ]; then - run_test "blockdev_pmem" $rootdir/test/bdev/blockdev.sh "pmem" - run_test "pmem" $rootdir/test/pmem/pmem.sh -x - run_test "spdkcli_pmem" $rootdir/test/spdkcli/pmem.sh - fi - if [ $SPDK_TEST_RBD -eq 1 ]; then run_test "blockdev_rbd" $rootdir/test/bdev/blockdev.sh "rbd" run_test "spdkcli_rbd" $rootdir/test/spdkcli/rbd.sh diff --git a/scripts/vagrant/autorun-spdk.conf b/scripts/vagrant/autorun-spdk.conf index 15b1507f7..48439a92e 100644 --- a/scripts/vagrant/autorun-spdk.conf +++ b/scripts/vagrant/autorun-spdk.conf @@ -23,7 +23,6 @@ SPDK_TEST_DAOS=0 # doesn't work on vm SPDK_TEST_IOAT=0 SPDK_TEST_BLOBFS=0 -SPDK_TEST_PMDK=0 SPDK_TEST_LVOL=0 SPDK_TEST_VBDEV_COMPRESS=0 SPDK_RUN_ASAN=1 diff --git a/test/bdev/blockdev.sh b/test/bdev/blockdev.sh index 83744b7a5..c348cdd84 100755 --- a/test/bdev/blockdev.sh +++ b/test/bdev/blockdev.sh @@ -25,7 +25,6 @@ nonarray_conf_file="$testdir/nonarray.json" function cleanup() { rm -f "$SPDK_TEST_STORAGE/aiofile" - rm -f "$SPDK_TEST_STORAGE/spdk-pmem-pool" rm -f "$conf_file" if [[ $test_type == rbd ]]; then @@ -255,16 +254,6 @@ function setup_crypto_mlx5_conf() { RPC } -function setup_pmem_conf() { - if hash pmempool; then - rm -f "$SPDK_TEST_STORAGE/spdk-pmem-pool" - pmempool create blk --size=32M 512 "$SPDK_TEST_STORAGE/spdk-pmem-pool" - "$rpc_py" bdev_pmem_create -n Pmem0 "$SPDK_TEST_STORAGE/spdk-pmem-pool" - else - return 1 - fi -} - function setup_rbd_conf() { timing_enter rbd_setup rbd_setup 127.0.0.1 @@ -678,9 +667,6 @@ case "$test_type" in crypto_accel_mlx5) setup_crypto_accel_mlx5_conf ;; - pmem) - setup_pmem_conf - ;; rbd) setup_rbd_conf ;; diff --git a/test/common/config/vm_setup.sh b/test/common/config/vm_setup.sh index f42b9ecf1..189ee8ea6 100755 --- a/test/common/config/vm_setup.sh +++ b/test/common/config/vm_setup.sh @@ -191,7 +191,6 @@ SPDK_TEST_VFIOUSER=1 SPDK_TEST_RBD=1 SPDK_TEST_BLOCKDEV=1 SPDK_TEST_BLOBFS=1 -SPDK_TEST_PMDK=1 SPDK_TEST_LVOL=1 SPDK_TEST_NVME_CUSE=1 SPDK_TEST_BLOBFS=1 diff --git a/test/common/skipped_tests.txt b/test/common/skipped_tests.txt index 0053398f4..e9f77ef46 100644 --- a/test/common/skipped_tests.txt +++ b/test/common/skipped_tests.txt @@ -64,7 +64,6 @@ build_shared_native_dpdk_rpm build_shared_rpm_with_rpmed_dpdk iscsi_tgt_digest iscsi_tgt_data_digest -iscsi_tgt_pmem iscsi_tgt_ext4test iscsi_tgt_digests iscsi_tgt_multiconnection diff --git a/test/iscsi_tgt/iscsi_tgt.sh b/test/iscsi_tgt/iscsi_tgt.sh index 308485ae5..3fcaf0fec 100755 --- a/test/iscsi_tgt/iscsi_tgt.sh +++ b/test/iscsi_tgt/iscsi_tgt.sh @@ -39,9 +39,6 @@ run_test "iscsi_tgt_trace_record" $rootdir/test/iscsi_tgt/trace_record/trace_rec run_test "iscsi_tgt_login_redirection" $rootdir/test/iscsi_tgt/login_redirection/login_redirection.sh if [ $RUN_NIGHTLY -eq 1 ]; then - if [ $SPDK_TEST_PMDK -eq 1 ]; then - run_test "iscsi_tgt_pmem" $rootdir/test/iscsi_tgt/pmem/iscsi_pmem.sh 4096 10 - fi run_test "iscsi_tgt_ext4test" $rootdir/test/iscsi_tgt/ext4test/ext4test.sh run_test "iscsi_tgt_digests" $rootdir/test/iscsi_tgt/digests/digests.sh fi diff --git a/test/iscsi_tgt/pmem/iscsi_pmem.sh b/test/iscsi_tgt/pmem/iscsi_pmem.sh deleted file mode 100755 index e609de9b1..000000000 --- a/test/iscsi_tgt/pmem/iscsi_pmem.sh +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env bash -# SPDX-License-Identifier: BSD-3-Clause -# Copyright (C) 2017 Intel Corporation -# All rights reserved. -# -testdir=$(readlink -f $(dirname $0)) -rootdir=$(readlink -f $testdir/../../..) -source $rootdir/test/common/autotest_common.sh -source $rootdir/test/iscsi_tgt/common.sh - -BLOCKSIZE=$1 -RUNTIME=$2 -PMEM_BDEVS="" -PMEM_SIZE=128 -PMEM_BLOCK_SIZE=512 -TGT_NR=10 -PMEM_PER_TGT=1 -fio_py="$rootdir/scripts/fio-wrapper" - -timing_enter start_iscsi_target -"${ISCSI_APP[@]}" -m $ISCSI_TEST_CORE_MASK --wait-for-rpc & -pid=$! -echo "Process pid: $pid" - -trap 'iscsicleanup; killprocess $pid; rm -f /tmp/pool_file*; exit 1' SIGINT SIGTERM EXIT - -waitforlisten $pid -$rpc_py iscsi_set_options -o 30 -a 16 -$rpc_py framework_start_init -echo "iscsi_tgt is listening. Running tests..." -timing_exit start_iscsi_target - -timing_enter setup -$rpc_py iscsi_create_portal_group $PORTAL_TAG $TARGET_IP:$ISCSI_PORT -for i in $(seq 1 $TGT_NR); do - INITIATOR_TAG=$((i + 1)) - $rpc_py iscsi_create_initiator_group $INITIATOR_TAG $INITIATOR_NAME $NETMASK - - luns="" - for j in $(seq 1 $PMEM_PER_TGT); do - $rpc_py bdev_pmem_create_pool /tmp/pool_file${i}_${j} $PMEM_SIZE $PMEM_BLOCK_SIZE - bdevs_name="$($rpc_py bdev_pmem_create -n pmem${i}_${j} /tmp/pool_file${i}_${j})" - PMEM_BDEVS+="$bdevs_name " - luns+="$bdevs_name:$((j - 1)) " - done - $rpc_py iscsi_create_target_node Target$i Target${i}_alias "$luns" "1:$INITIATOR_TAG " 256 -d -done -timing_exit setup -sleep 1 - -timing_enter discovery -iscsiadm -m discovery -t sendtargets -p $TARGET_IP:$ISCSI_PORT -iscsiadm -m node --login -p $TARGET_IP:$ISCSI_PORT -timing_exit discovery - -timing_enter fio_test -$fio_py -p iscsi -i $BLOCKSIZE -d 64 -t randwrite -r $RUNTIME -v -timing_exit fio_test - -iscsicleanup - -for pmem in $PMEM_BDEVS; do - $rpc_py bdev_pmem_delete $pmem -done - -for i in $(seq 1 $TGT_NR); do - for c in $(seq 1 $PMEM_PER_TGT); do - $rpc_py bdev_pmem_delete_pool /tmp/pool_file${i}_${c} - done -done - -trap - SIGINT SIGTERM EXIT - -rm -f ./local-job* -rm -f /tmp/pool_file* -killprocess $pid diff --git a/test/json_config/clear_config.py b/test/json_config/clear_config.py index e271fa4e2..e0afeb0a6 100755 --- a/test/json_config/clear_config.py +++ b/test/json_config/clear_config.py @@ -37,7 +37,6 @@ def get_bdev_delete_method(bdev): delete_method_map = {'bdev_malloc_create': "bdev_malloc_delete", 'bdev_null_create': "bdev_null_delete", 'bdev_rbd_create': "bdev_rbd_delete", - 'bdev_pmem_create': "bdev_pmem_delete", 'bdev_aio_create': "bdev_aio_delete", 'bdev_error_create': "bdev_error_delete", 'bdev_split_create': "bdev_split_delete", diff --git a/test/json_config/json_config.sh b/test/json_config/json_config.sh index 1727537cf..f122dab0f 100755 --- a/test/json_config/json_config.sh +++ b/test/json_config/json_config.sh @@ -22,7 +22,6 @@ if ((SPDK_TEST_BLOCKDEV + \ SPDK_TEST_NVMF + \ SPDK_TEST_VHOST + \ SPDK_TEST_VHOST_INIT + \ - SPDK_TEST_PMDK + \ SPDK_TEST_RBD == 0)); then echo "WARNING: No tests are enabled so not running JSON configuration tests" exit 0 @@ -225,14 +224,6 @@ function create_bdev_subsystem_config() { ) fi - if [[ $SPDK_TEST_PMDK -eq 1 ]]; then - pmem_pool_file=$(mktemp /tmp/pool_file1.XXXXX) - rm -f $pmem_pool_file - tgt_rpc bdev_pmem_create_pool $pmem_pool_file 128 4096 - tgt_rpc bdev_pmem_create -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 bdev_rbd_create $RBD_POOL $RBD_NAME 4096 @@ -258,12 +249,6 @@ function cleanup_bdev_subsystem_config() { rm -f "$SPDK_TEST_STORAGE/sample_aio" fi - if [[ $SPDK_TEST_PMDK -eq 1 && -n "$pmem_pool_file" && -f "$pmem_pool_file" ]]; then - tgt_rpc bdev_pmem_delete pmem1 - tgt_rpc bdev_pmem_delete_pool $pmem_pool_file - rm -f $pmem_pool_file - fi - if [[ $SPDK_TEST_RBD -eq 1 ]]; then rbd_cleanup fi diff --git a/test/pmem/common.sh b/test/pmem/common.sh deleted file mode 100644 index 1a774bf2d..000000000 --- a/test/pmem/common.sh +++ /dev/null @@ -1,96 +0,0 @@ -# SPDX-License-Identifier: BSD-3-Clause -# Copyright (C) 2017 Intel Corporation -# All rights reserved. -# - -# Prints error message and return error code, closes vhost app and remove -# pmem pool file -# input: error message, error code -function error() { - local error_code=${2:-1} - echo "===========" - echo -e "ERROR: $1" - echo "error code: $error_code" - echo "===========" - vhost_kill 0 - pmem_clean_pool_file - return $error_code -} - -# check if there is pool file & remove it -# input: path to pool file -# default: $default_pool_file -function pmem_clean_pool_file() { - local pool_file=${1:-$default_pool_file} - - if [ -f $pool_file ]; then - echo "Deleting old pool_file" - rm $pool_file - fi -} - -# create new pmem file -# input: path to pool file, size in MB, block_size -# default: $default_pool_file 32 512 -function pmem_create_pool_file() { - local pool_file=${1:-$default_pool_file} - local size=${2:-32} - local block_size=${3:-512} - - pmem_clean_pool_file $pool_file - echo "Creating new pool file" - if ! $rpc_py bdev_pmem_create_pool $pool_file $size $block_size; then - error "Creating pool_file failed!" - fi - - if [ ! -f $pool_file ]; then - error "Creating pool_file failed!" - fi -} - -function pmem_unmount_ramspace() { - if [ -d "$testdir/ramspace" ]; then - if mount | grep -q "$testdir/ramspace"; then - umount $testdir/ramspace - fi - - rm -rf $testdir/ramspace - fi -} - -function pmem_print_tc_name() { - echo "" - echo "===============================================================" - echo "Now running: $1" - echo "===============================================================" -} - -function vhost_start() { - local vhost_pid - - $SPDK_BIN_DIR/vhost & - - vhost_pid=$! - echo $vhost_pid > $testdir/vhost.pid - waitforlisten $vhost_pid -} - -function vhost_kill() { - local vhost_pid_file="$testdir/vhost.pid" - local vhost_pid - vhost_pid="$(cat $vhost_pid_file)" - - if [[ ! -f $vhost_pid_file ]]; then - echo -e "ERROR: No vhost pid file found!" - return 1 - fi - - if ! kill -s INT $vhost_pid; then - echo -e "ERROR: Failed to exit vhost / invalid pid!" - rm $vhost_pid_file - return 1 - fi - - sleep 1 - rm $vhost_pid_file -} diff --git a/test/pmem/pmem.sh b/test/pmem/pmem.sh deleted file mode 100755 index 06d57331a..000000000 --- a/test/pmem/pmem.sh +++ /dev/null @@ -1,686 +0,0 @@ -#!/usr/bin/env bash -# SPDX-License-Identifier: BSD-3-Clause -# Copyright (C) 2017 Intel Corporation -# All rights reserved. -# -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 "Bdev_pmem_get_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 diff --git a/test/spdkcli/common.sh b/test/spdkcli/common.sh index bc46a202d..aa54110fc 100644 --- a/test/spdkcli/common.sh +++ b/test/spdkcli/common.sh @@ -19,7 +19,7 @@ function cleanup() { if [ -n "$vhost_tgt_pid" ]; then killprocess $vhost_tgt_pid fi - rm -f $testdir/${MATCH_FILE} $testdir/match_files/spdkcli_details_vhost.test /tmp/sample_aio /tmp/sample_pmem + rm -f $testdir/${MATCH_FILE} $testdir/match_files/spdkcli_details_vhost.test /tmp/sample_aio } function run_spdk_tgt() { diff --git a/test/spdkcli/match_files/spdkcli_pmem.test.match b/test/spdkcli/match_files/spdkcli_pmem.test.match deleted file mode 100644 index 85b938d09..000000000 --- a/test/spdkcli/match_files/spdkcli_pmem.test.match +++ /dev/null @@ -1,3 +0,0 @@ -o- pmemblk .............................................................................................................. [Bdevs: 2] - o- pmem_bdev0 $(S) [Size=31.6M, Not claimed] - o- pmem_bdev1 $(S) [Size=31.6M, Not claimed] diff --git a/test/spdkcli/pmem.sh b/test/spdkcli/pmem.sh deleted file mode 100755 index 1031797ff..000000000 --- a/test/spdkcli/pmem.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bash -# SPDX-License-Identifier: BSD-3-Clause -# Copyright (C) 2018 Intel Corporation -# All rights reserved. -# -testdir=$(readlink -f $(dirname $0)) -rootdir=$(readlink -f $testdir/../..) -source $rootdir/test/common/autotest_common.sh -source $rootdir/test/spdkcli/common.sh - -MATCH_FILE="spdkcli_pmem.test" -SPDKCLI_BRANCH="/bdevs/pmemblk" - -trap 'rm -f $testdir/match_files/spdkcli_pmem_info.test; cleanup' EXIT - -timing_enter run_spdk_tgt -run_spdk_tgt -timing_exit run_spdk_tgt - -timing_enter spdkcli_create_pmem_config -$spdkcli_job "'/bdevs/pmemblk bdev_pmem_create_pool /tmp/sample_pmem0 32 512' '' True -'/bdevs/pmemblk bdev_pmem_create_pool /tmp/sample_pmem1 32 512' '' True -" - -# Saving pmem pool info before they get claimed by /bdevs/pmemblk create -$rootdir/scripts/spdkcli.py /bdevs/pmemblk bdev_pmem_get_pool_info /tmp/sample_pmem0 >> $testdir/match_files/spdkcli_pmem_info.test -$rootdir/scripts/spdkcli.py /bdevs/pmemblk bdev_pmem_get_pool_info /tmp/sample_pmem1 >> $testdir/match_files/spdkcli_pmem_info.test - -$spdkcli_job "'/bdevs/pmemblk create /tmp/sample_pmem0 pmem_bdev0' 'pmem_bdev0' True -'/bdevs/pmemblk create /tmp/sample_pmem1 pmem_bdev1' 'pmem_bdev1' True -" - -timing_exit spdkcli_create_pmem_config - -timing_enter spdkcli_check_match -check_match -$rootdir/test/app/match/match -v $testdir/match_files/spdkcli_pmem_info.test.match -timing_exit spdkcli_check_match - -timing_enter spdkcli_clear_pmem_config -$spdkcli_job "'/bdevs/pmemblk delete pmem_bdev0' 'pmem_bdev0' -'/bdevs/pmemblk bdev_pmem_delete_pool /tmp/sample_pmem0' '' -'/bdevs/pmemblk delete_all' 'pmem_bdev1' -'/bdevs/pmemblk bdev_pmem_delete_pool /tmp/sample_pmem1' '' -" -rm -f /tmp/sample_pmem -rm -f $testdir/match_files/spdkcli_pmem_info.test -timing_exit spdkcli_clear_pmem_config - -killprocess $spdk_tgt_pid diff --git a/test/unit/lib/bdev/Makefile b/test/unit/lib/bdev/Makefile index 245e17f9a..daf0a0bb4 100644 --- a/test/unit/lib/bdev/Makefile +++ b/test/unit/lib/bdev/Makefile @@ -13,8 +13,6 @@ DIRS-$(CONFIG_CRYPTO) += crypto.c # enable once new mocks are added for compressdev DIRS-$(CONFIG_VBDEV_COMPRESS) += compress.c -DIRS-$(CONFIG_PMDK) += pmem - .PHONY: all clean $(DIRS-y) all: $(DIRS-y) diff --git a/test/unit/lib/bdev/pmem/Makefile b/test/unit/lib/bdev/pmem/Makefile deleted file mode 100644 index 84625a8ea..000000000 --- a/test/unit/lib/bdev/pmem/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -# SPDX-License-Identifier: BSD-3-Clause -# Copyright (C) 2016 Intel Corporation. -# All rights reserved. -# - -SPDK_ROOT_DIR := $(abspath $(CURDIR)/../../../../..) - -TEST_FILE = bdev_pmem_ut.c - -include $(SPDK_ROOT_DIR)/mk/spdk.unittest.mk diff --git a/test/unit/lib/bdev/pmem/bdev_pmem_ut.c b/test/unit/lib/bdev/pmem/bdev_pmem_ut.c deleted file mode 100644 index 2e4ce1bfa..000000000 --- a/test/unit/lib/bdev/pmem/bdev_pmem_ut.c +++ /dev/null @@ -1,734 +0,0 @@ -/* SPDX-License-Identifier: BSD-3-Clause - * Copyright (C) 2017 Intel Corporation. - * All rights reserved. - */ - -#include "spdk_cunit.h" - -#include "common/lib/ut_multithread.c" -#include "unit/lib/json_mock.c" - -#include "bdev/pmem/bdev_pmem.c" - -DEFINE_STUB_V(spdk_bdev_module_fini_done, (void)); - -static struct spdk_bdev_module *g_bdev_pmem_module; -static int g_bdev_module_cnt; - -struct pmemblk { - const char *name; - bool is_open; - bool is_consistent; - size_t bsize; - long long nblock; - - uint8_t *buffer; -}; - -static const char *g_bdev_name = "pmem0"; - -/* PMEMblkpool is a typedef of struct pmemblk */ -static PMEMblkpool g_pool_ok = { - .name = "/pools/ok_pool", - .is_open = false, - .is_consistent = true, - .bsize = 4096, - .nblock = 150 -}; - -static PMEMblkpool g_pool_nblock_0 = { - .name = "/pools/nblock_0", - .is_open = false, - .is_consistent = true, - .bsize = 4096, - .nblock = 0 -}; - -static PMEMblkpool g_pool_bsize_0 = { - .name = "/pools/nblock_0", - .is_open = false, - .is_consistent = true, - .bsize = 0, - .nblock = 100 -}; - -static PMEMblkpool g_pool_inconsistent = { - .name = "/pools/inconsistent", - .is_open = false, - .is_consistent = false, - .bsize = 512, - .nblock = 1 -}; - -static int g_opened_pools; -static struct spdk_bdev *g_bdev; -static const char *g_check_version_msg; -static bool g_pmemblk_open_allow_open = true; - -static PMEMblkpool * -find_pmemblk_pool(const char *path) -{ - if (path == NULL) { - errno = EINVAL; - return NULL; - } else if (strcmp(g_pool_ok.name, path) == 0) { - return &g_pool_ok; - } else if (strcmp(g_pool_nblock_0.name, path) == 0) { - return &g_pool_nblock_0; - } else if (strcmp(g_pool_bsize_0.name, path) == 0) { - return &g_pool_bsize_0; - } else if (strcmp(g_pool_inconsistent.name, path) == 0) { - return &g_pool_inconsistent; - } - - errno = ENOENT; - return NULL; -} - -PMEMblkpool * -pmemblk_open(const char *path, size_t bsize) -{ - PMEMblkpool *pool; - - if (!g_pmemblk_open_allow_open) { - errno = EIO; - return NULL; - } - - pool = find_pmemblk_pool(path); - if (!pool) { - errno = ENOENT; - return NULL; - } - - CU_ASSERT_TRUE_FATAL(pool->is_consistent); - CU_ASSERT_FALSE(pool->is_open); - if (pool->is_open == false) { - pool->is_open = true; - g_opened_pools++; - } else { - errno = EBUSY; - pool = NULL; - } - - return pool; -} -void -spdk_bdev_io_get_buf(struct spdk_bdev_io *bdev_io, spdk_bdev_io_get_buf_cb cb, uint64_t len) -{ - cb(NULL, bdev_io, true); -} - -static void -check_open_pool_fatal(PMEMblkpool *pool) -{ - SPDK_CU_ASSERT_FATAL(pool != NULL); - SPDK_CU_ASSERT_FATAL(find_pmemblk_pool(pool->name) == pool); - SPDK_CU_ASSERT_FATAL(pool->is_open == true); -} - -void -pmemblk_close(PMEMblkpool *pool) -{ - check_open_pool_fatal(pool); - pool->is_open = false; - CU_ASSERT(g_opened_pools > 0); - g_opened_pools--; -} - -size_t -pmemblk_bsize(PMEMblkpool *pool) -{ - check_open_pool_fatal(pool); - return pool->bsize; -} - -size_t -pmemblk_nblock(PMEMblkpool *pool) -{ - check_open_pool_fatal(pool); - return pool->nblock; -} - -int -pmemblk_read(PMEMblkpool *pool, void *buf, long long blockno) -{ - check_open_pool_fatal(pool); - if (blockno >= pool->nblock) { - errno = EINVAL; - return -1; - } - - memcpy(buf, &pool->buffer[blockno * pool->bsize], pool->bsize); - return 0; -} - -int -pmemblk_write(PMEMblkpool *pool, const void *buf, long long blockno) -{ - check_open_pool_fatal(pool); - if (blockno >= pool->nblock) { - errno = EINVAL; - return -1; - } - - memcpy(&pool->buffer[blockno * pool->bsize], buf, pool->bsize); - return 0; -} - -int -pmemblk_set_zero(PMEMblkpool *pool, long long blockno) -{ - check_open_pool_fatal(pool); - if (blockno >= pool->nblock) { - - errno = EINVAL; - return -1; - } - - memset(&pool->buffer[blockno * pool->bsize], 0, pool->bsize); - return 0; -} - -const char * -pmemblk_errormsg(void) -{ - return strerror(errno); -} - -const char * -pmemblk_check_version(unsigned major_required, unsigned minor_required) -{ - return g_check_version_msg; -} - -int -pmemblk_check(const char *path, size_t bsize) -{ - PMEMblkpool *pool = find_pmemblk_pool(path); - - if (!pool) { - errno = ENOENT; - return -1; - } - - if (!pool->is_consistent) { - /* errno ? */ - return 0; - } - - if (bsize != 0 && pool->bsize != bsize) { - /* errno ? */ - return 0; - } - - return 1; -} - -void -spdk_bdev_io_complete(struct spdk_bdev_io *bdev_io, enum spdk_bdev_io_status status) -{ - bdev_io->internal.status = status; -} - -int -spdk_bdev_register(struct spdk_bdev *bdev) -{ - CU_ASSERT_PTR_NULL(g_bdev); - g_bdev = bdev; - - return 0; -} - -int -spdk_bdev_unregister_by_name(const char *name, struct spdk_bdev_module *module, - spdk_bdev_unregister_cb cb_fn, void *cb_arg) -{ - return 0; -} - -int -spdk_bdev_notify_blockcnt_change(struct spdk_bdev *bdev, uint64_t size) -{ - bdev->blockcnt = size; - return 0; -} - -static void -ut_bdev_pmem_destruct(struct spdk_bdev *bdev) -{ - SPDK_CU_ASSERT_FATAL(g_bdev != NULL); - CU_ASSERT_EQUAL(bdev_pmem_destruct(bdev->ctxt), 0); - g_bdev = NULL; -} - -void -spdk_bdev_module_list_add(struct spdk_bdev_module *bdev_module) -{ - g_bdev_pmem_module = bdev_module; - g_bdev_module_cnt++; -} - -static int -bdev_submit_request(struct spdk_bdev *bdev, int16_t io_type, uint64_t offset_blocks, - uint64_t num_blocks, struct iovec *iovs, size_t iov_cnt) -{ - struct spdk_bdev_io bio = { 0 }; - - switch (io_type) { - case SPDK_BDEV_IO_TYPE_READ: - bio.u.bdev.iovs = iovs; - bio.u.bdev.iovcnt = iov_cnt; - bio.u.bdev.offset_blocks = offset_blocks; - bio.u.bdev.num_blocks = num_blocks; - break; - case SPDK_BDEV_IO_TYPE_WRITE: - bio.u.bdev.iovs = iovs; - bio.u.bdev.iovcnt = iov_cnt; - bio.u.bdev.offset_blocks = offset_blocks; - bio.u.bdev.num_blocks = num_blocks; - break; - case SPDK_BDEV_IO_TYPE_FLUSH: - bio.u.bdev.offset_blocks = offset_blocks; - bio.u.bdev.num_blocks = num_blocks; - break; - case SPDK_BDEV_IO_TYPE_RESET: - break; - case SPDK_BDEV_IO_TYPE_UNMAP: - bio.u.bdev.offset_blocks = offset_blocks; - bio.u.bdev.num_blocks = num_blocks; - break; - case SPDK_BDEV_IO_TYPE_WRITE_ZEROES: - bio.u.bdev.offset_blocks = offset_blocks; - bio.u.bdev.num_blocks = num_blocks; - break; - default: - CU_FAIL_FATAL("BUG:Unexpected IO type"); - break; - } - - /* - * Set status to value that shouldn't be returned - */ - bio.type = io_type; - bio.internal.status = SPDK_BDEV_IO_STATUS_PENDING; - bio.bdev = bdev; - bdev_pmem_submit_request(NULL, &bio); - return bio.internal.status; -} - - -static int -ut_pmem_blk_clean(void) -{ - free(g_pool_ok.buffer); - g_pool_ok.buffer = NULL; - - /* Unload module to free IO channel */ - g_bdev_pmem_module->module_fini(); - poll_threads(); - - free_threads(); - - return 0; -} - -static int -ut_pmem_blk_init(void) -{ - errno = 0; - - allocate_threads(1); - set_thread(0); - - g_pool_ok.buffer = calloc(g_pool_ok.nblock, g_pool_ok.bsize); - if (g_pool_ok.buffer == NULL) { - ut_pmem_blk_clean(); - return -1; - } - - return 0; -} - -static void -ut_pmem_init(void) -{ - SPDK_CU_ASSERT_FATAL(g_bdev_pmem_module != NULL); - CU_ASSERT_EQUAL(g_bdev_module_cnt, 1); - - /* Make pmemblk_check_version fail with provided error message */ - g_check_version_msg = "TEST FAIL MESSAGE"; - CU_ASSERT_NOT_EQUAL(g_bdev_pmem_module->module_init(), 0); - - /* This init must success */ - g_check_version_msg = NULL; - CU_ASSERT_EQUAL(g_bdev_pmem_module->module_init(), 0); -} - -static void -ut_pmem_open_close(void) -{ - struct spdk_bdev *bdev = NULL; - int pools_cnt; - int rc; - - pools_cnt = g_opened_pools; - - /* Try opening with NULL name */ - rc = create_pmem_disk(NULL, NULL, &bdev); - CU_ASSERT_PTR_NULL(bdev); - CU_ASSERT_EQUAL(pools_cnt, g_opened_pools); - CU_ASSERT_NOT_EQUAL(rc, 0); - - /* Open non-existent pool */ - rc = create_pmem_disk("non existent pool", NULL, &bdev); - CU_ASSERT_PTR_NULL(bdev); - CU_ASSERT_EQUAL(pools_cnt, g_opened_pools); - CU_ASSERT_NOT_EQUAL(rc, 0); - - /* Open inconsistent pool */ - rc = create_pmem_disk(g_pool_inconsistent.name, NULL, &bdev); - CU_ASSERT_PTR_NULL(bdev); - CU_ASSERT_EQUAL(pools_cnt, g_opened_pools); - CU_ASSERT_NOT_EQUAL(rc, 0); - - /* Open consistent pool fail the open from unknown reason. */ - g_pmemblk_open_allow_open = false; - rc = create_pmem_disk(g_pool_inconsistent.name, NULL, &bdev); - g_pmemblk_open_allow_open = true; - CU_ASSERT_PTR_NULL(bdev); - CU_ASSERT_EQUAL(pools_cnt, g_opened_pools); - CU_ASSERT_NOT_EQUAL(rc, 0); - - /* Open pool with nblocks = 0 */ - rc = create_pmem_disk(g_pool_nblock_0.name, NULL, &bdev); - CU_ASSERT_PTR_NULL(bdev); - CU_ASSERT_EQUAL(pools_cnt, g_opened_pools); - CU_ASSERT_NOT_EQUAL(rc, 0); - - /* Open pool with bsize = 0 */ - rc = create_pmem_disk(g_pool_bsize_0.name, NULL, &bdev); - CU_ASSERT_PTR_NULL(bdev); - CU_ASSERT_EQUAL(pools_cnt, g_opened_pools); - CU_ASSERT_NOT_EQUAL(rc, 0); - - /* Open pool with NULL name */ - rc = create_pmem_disk(g_pool_ok.name, NULL, &bdev); - CU_ASSERT_PTR_NULL(bdev); - CU_ASSERT_EQUAL(pools_cnt, g_opened_pools); - CU_ASSERT_NOT_EQUAL(rc, 0); - - /* Open good pool */ - rc = create_pmem_disk(g_pool_ok.name, g_bdev_name, &bdev); - SPDK_CU_ASSERT_FATAL(bdev != NULL); - CU_ASSERT_TRUE(g_pool_ok.is_open); - CU_ASSERT_EQUAL(pools_cnt + 1, g_opened_pools); - CU_ASSERT_EQUAL(rc, 0); - - /* Now remove this bdev */ - ut_bdev_pmem_destruct(bdev); - CU_ASSERT_FALSE(g_pool_ok.is_open); - CU_ASSERT_EQUAL(pools_cnt, g_opened_pools); -} - -static void -ut_pmem_write_read(void) -{ - uint8_t *write_buf, *read_buf; - struct spdk_bdev *bdev; - int rc; - size_t unaligned_aligned_size = 100; - size_t buf_size = g_pool_ok.bsize * g_pool_ok.nblock; - size_t i; - const uint64_t nblock_offset = 10; - uint64_t offset; - size_t io_size, nblock, total_io_size, bsize; - - bsize = 4096; - struct iovec iov[] = { - { 0, 2 * bsize }, - { 0, 3 * bsize }, - { 0, 4 * bsize }, - }; - - rc = create_pmem_disk(g_pool_ok.name, g_bdev_name, &bdev); - CU_ASSERT_EQUAL(rc, 0); - - SPDK_CU_ASSERT_FATAL(g_pool_ok.nblock > 40); - - write_buf = calloc(1, buf_size); - read_buf = calloc(1, buf_size); - - SPDK_CU_ASSERT_FATAL(bdev != NULL); - SPDK_CU_ASSERT_FATAL(write_buf != NULL); - SPDK_CU_ASSERT_FATAL(read_buf != NULL); - - total_io_size = 0; - offset = nblock_offset * g_pool_ok.bsize; - for (i = 0; i < 3; i++) { - iov[i].iov_base = &write_buf[offset + total_io_size]; - total_io_size += iov[i].iov_len; - } - - for (i = 0; i < total_io_size + unaligned_aligned_size; i++) { - write_buf[offset + i] = 0x42 + i; - } - - SPDK_CU_ASSERT_FATAL(total_io_size < buf_size); - - /* - * Write outside pool. - */ - rc = bdev_submit_request(bdev, SPDK_BDEV_IO_TYPE_WRITE, g_pool_ok.nblock, 1, &iov[0], 2); - CU_ASSERT_EQUAL(rc, SPDK_BDEV_IO_STATUS_FAILED); - - /* - * Write with insufficient IOV buffers length. - */ - rc = bdev_submit_request(bdev, SPDK_BDEV_IO_TYPE_WRITE, 0, g_pool_ok.nblock, &iov[0], 2); - CU_ASSERT_EQUAL(rc, SPDK_BDEV_IO_STATUS_FAILED); - - /* - * Try to write two IOV with first one iov_len % bsize != 0. - */ - io_size = iov[0].iov_len + iov[1].iov_len; - nblock = io_size / g_pool_ok.bsize; - iov[0].iov_len += unaligned_aligned_size; - rc = bdev_submit_request(bdev, SPDK_BDEV_IO_TYPE_WRITE, 0, nblock, &iov[0], 2); - CU_ASSERT_EQUAL(rc, SPDK_BDEV_IO_STATUS_FAILED); - iov[0].iov_len -= unaligned_aligned_size; - - /* - * Try to write one IOV. - */ - nblock = iov[0].iov_len / g_pool_ok.bsize; - rc = bdev_submit_request(bdev, SPDK_BDEV_IO_TYPE_WRITE, nblock_offset, nblock, &iov[0], 1); - CU_ASSERT_EQUAL(rc, SPDK_BDEV_IO_STATUS_SUCCESS); - - /* - * Try to write 2 IOV. - * Sum of IOV length is larger than IO size and last IOV is larger and iov_len % bsize != 0 - */ - offset = iov[0].iov_len / g_pool_ok.bsize; - io_size = iov[1].iov_len + iov[2].iov_len; - nblock = io_size / g_pool_ok.bsize; - iov[2].iov_len += unaligned_aligned_size; - rc = bdev_submit_request(bdev, SPDK_BDEV_IO_TYPE_WRITE, nblock_offset + offset, nblock, - &iov[1], 2); - CU_ASSERT_EQUAL(rc, SPDK_BDEV_IO_STATUS_SUCCESS); - iov[2].iov_len -= unaligned_aligned_size; - - /* - * Examine pool state: - * 1. Written area should have expected values. - * 2. Anything else should contain zeros. - */ - offset = nblock_offset * g_pool_ok.bsize + total_io_size; - rc = memcmp(&g_pool_ok.buffer[0], write_buf, offset); - CU_ASSERT_EQUAL(rc, 0); - - for (i = offset; i < buf_size; i++) { - if (g_pool_ok.buffer[i] != 0) { - CU_ASSERT_EQUAL(g_pool_ok.buffer[i], 0); - break; - } - } - - /* Setup IOV for reads */ - memset(read_buf, 0xAB, buf_size); - offset = nblock_offset * g_pool_ok.bsize; - for (i = 0; i < 3; i++) { - iov[i].iov_base = &read_buf[offset]; - offset += iov[i].iov_len; - } - - /* - * Write outside pool. - */ - rc = bdev_submit_request(bdev, SPDK_BDEV_IO_TYPE_READ, g_pool_ok.nblock, 1, &iov[0], 2); - CU_ASSERT_EQUAL(rc, SPDK_BDEV_IO_STATUS_FAILED); - - /* - * Read with insufficient IOV buffers length. - */ - rc = bdev_submit_request(bdev, SPDK_BDEV_IO_TYPE_READ, 0, g_pool_ok.nblock, &iov[0], 2); - CU_ASSERT_EQUAL(rc, SPDK_BDEV_IO_STATUS_FAILED); - - /* - * Try to read two IOV with first one iov_len % bsize != 0. - */ - io_size = iov[0].iov_len + iov[1].iov_len; - nblock = io_size / g_pool_ok.bsize; - iov[0].iov_len += unaligned_aligned_size; - rc = bdev_submit_request(bdev, SPDK_BDEV_IO_TYPE_READ, 0, nblock, &iov[0], 2); - CU_ASSERT_EQUAL(rc, SPDK_BDEV_IO_STATUS_FAILED); - iov[0].iov_len -= unaligned_aligned_size; - - /* - * Try to write one IOV. - */ - nblock = iov[0].iov_len / g_pool_ok.bsize; - rc = bdev_submit_request(bdev, SPDK_BDEV_IO_TYPE_READ, nblock_offset, nblock, &iov[0], 1); - CU_ASSERT_EQUAL(rc, SPDK_BDEV_IO_STATUS_SUCCESS); - - /* - * Try to read 2 IOV. - * Sum of IOV length is larger than IO size and last IOV is larger and iov_len % bsize != 0 - */ - offset = iov[0].iov_len / g_pool_ok.bsize; - io_size = iov[1].iov_len + iov[2].iov_len; - nblock = io_size / g_pool_ok.bsize; - iov[2].iov_len += unaligned_aligned_size; - rc = bdev_submit_request(bdev, SPDK_BDEV_IO_TYPE_READ, nblock_offset + offset, nblock, - &iov[1], 2); - CU_ASSERT_EQUAL(rc, SPDK_BDEV_IO_STATUS_SUCCESS); - iov[2].iov_len -= unaligned_aligned_size; - - - /* - * Examine what we read state: - * 1. Written area should have expected values. - * 2. Anything else should contain zeros. - */ - offset = nblock_offset * g_pool_ok.bsize; - for (i = 0; i < offset; i++) { - if (read_buf[i] != 0xAB) { - CU_ASSERT_EQUAL(read_buf[i], 0xAB); - break; - } - } - - rc = memcmp(&read_buf[offset], &write_buf[offset], total_io_size); - CU_ASSERT_EQUAL(rc, 0); - - offset += total_io_size; - for (i = offset; i < buf_size; i++) { - if (read_buf[i] != 0xAB) { - CU_ASSERT_EQUAL(read_buf[i], 0xAB); - break; - } - } - - memset(g_pool_ok.buffer, 0, g_pool_ok.bsize * g_pool_ok.nblock); - free(write_buf); - free(read_buf); - - /* Now remove this bdev */ - ut_bdev_pmem_destruct(bdev); - CU_ASSERT_FALSE(g_pool_ok.is_open); - CU_ASSERT_EQUAL(g_opened_pools, 0); -} - -static void -ut_pmem_reset(void) -{ - struct spdk_bdev *bdev; - int rc; - - rc = create_pmem_disk(g_pool_ok.name, g_bdev_name, &bdev); - CU_ASSERT_EQUAL(rc, 0); - SPDK_CU_ASSERT_FATAL(bdev != NULL); - - rc = bdev_submit_request(bdev, SPDK_BDEV_IO_TYPE_RESET, 0, 0, NULL, 0); - CU_ASSERT_EQUAL(rc, SPDK_BDEV_IO_STATUS_SUCCESS); - - ut_bdev_pmem_destruct(bdev); -} - -static void -ut_pmem_unmap_write_zero(int16_t io_type) -{ - struct spdk_bdev *bdev; - size_t buff_size = g_pool_ok.nblock * g_pool_ok.bsize; - size_t i; - uint8_t *buffer; - int rc; - - CU_ASSERT(io_type == SPDK_BDEV_IO_TYPE_UNMAP || io_type == SPDK_BDEV_IO_TYPE_WRITE_ZEROES); - rc = create_pmem_disk(g_pool_ok.name, g_bdev_name, &bdev); - CU_ASSERT_EQUAL(rc, 0); - SPDK_CU_ASSERT_FATAL(bdev != NULL); - SPDK_CU_ASSERT_FATAL(g_pool_ok.nblock > 40); - - buffer = calloc(1, buff_size); - SPDK_CU_ASSERT_FATAL(buffer != NULL); - - for (i = 10 * g_pool_ok.bsize; i < 30 * g_pool_ok.bsize; i++) { - buffer[i] = 0x30 + io_type + i; - } - memcpy(g_pool_ok.buffer, buffer, buff_size); - - /* - * Block outside of pool. - */ - rc = bdev_submit_request(bdev, io_type, g_pool_ok.nblock, 1, NULL, 0); - CU_ASSERT_EQUAL(rc, SPDK_BDEV_IO_STATUS_FAILED); - - rc = memcmp(buffer, g_pool_ok.buffer, buff_size); - CU_ASSERT_EQUAL(rc, 0); - - /* - * Blocks 15 to 25 - */ - memset(&buffer[15 * g_pool_ok.bsize], 0, 10 * g_pool_ok.bsize); - rc = bdev_submit_request(bdev, io_type, 15, 10, NULL, 0); - CU_ASSERT_EQUAL(rc, SPDK_BDEV_IO_STATUS_SUCCESS); - - rc = memcmp(buffer, g_pool_ok.buffer, buff_size); - CU_ASSERT_EQUAL(rc, 0); - - /* - * All blocks. - */ - memset(buffer, 0, buff_size); - rc = bdev_submit_request(bdev, io_type, 0, g_pool_ok.nblock, NULL, 0); - CU_ASSERT_EQUAL(rc, SPDK_BDEV_IO_STATUS_SUCCESS); - - rc = memcmp(buffer, g_pool_ok.buffer, buff_size); - CU_ASSERT_EQUAL(rc, 0); - - /* Now remove this bdev */ - ut_bdev_pmem_destruct(bdev); - CU_ASSERT_FALSE(g_pool_ok.is_open); - CU_ASSERT_EQUAL(g_opened_pools, 0); - - free(buffer); -} - -static void -ut_pmem_write_zero(void) -{ - ut_pmem_unmap_write_zero(SPDK_BDEV_IO_TYPE_WRITE_ZEROES); -} - -static void -ut_pmem_unmap(void) -{ - ut_pmem_unmap_write_zero(SPDK_BDEV_IO_TYPE_UNMAP); -} - -int -main(int argc, char **argv) -{ - CU_pSuite suite = NULL; - unsigned int num_failures; - - CU_set_error_action(CUEA_ABORT); - CU_initialize_registry(); - - suite = CU_add_suite("bdev_pmem", ut_pmem_blk_init, ut_pmem_blk_clean); - - CU_ADD_TEST(suite, ut_pmem_init); - CU_ADD_TEST(suite, ut_pmem_open_close); - CU_ADD_TEST(suite, ut_pmem_write_read); - CU_ADD_TEST(suite, ut_pmem_reset); - CU_ADD_TEST(suite, ut_pmem_write_zero); - CU_ADD_TEST(suite, ut_pmem_unmap); - - CU_basic_set_mode(CU_BRM_VERBOSE); - CU_basic_run_tests(); - num_failures = CU_get_number_of_failures(); - CU_cleanup_registry(); - - return num_failures; -} diff --git a/test/unit/unittest.sh b/test/unit/unittest.sh index fbb74c126..f8c45d5d5 100755 --- a/test/unit/unittest.sh +++ b/test/unit/unittest.sh @@ -222,10 +222,6 @@ if grep -q '#define SPDK_CONFIG_DPDK_COMPRESSDEV 1' $rootdir/include/spdk/config run_test "unittest_dpdk_compressdev" $valgrind $testdir/lib/accel/dpdk_compressdev.c/accel_dpdk_compressdev_ut fi -if grep -q '#define SPDK_CONFIG_PMDK 1' $rootdir/include/spdk/config.h; then - run_test "unittest_bdev_pmem" $valgrind $testdir/lib/bdev/pmem/bdev_pmem_ut -fi - if grep -q '#define SPDK_CONFIG_RAID5F 1' $rootdir/include/spdk/config.h; then run_test "unittest_bdev_raid5f" $valgrind $testdir/lib/bdev/raid/raid5f.c/raid5f_ut fi