The on_error_exit() function was being called via the local ERR trap to cleanup after the tests in case any failure occurred during the execution. However, this was masking the backtrace trap so the on_error_exit() had to also call print_backtrace() to compensate - this was resulting in an additional function being unnecessarily placed onto the stack and included in the actual backtrace. Avoid the above by refactoring on_error_exit() into simple cleanup() function called upon exit()ing from the script. The rationale is that cleanup has to happen regardless if the script failed or not and elements like $conf_file are always created from the very scratch by the script itself anyway prior running the tests. Change-Id: I6bb8f4155525037624f0bd5aab288f8c502141f6 Signed-off-by: Michal Berger <michalx.berger@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/456 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
140 lines
3.0 KiB
Bash
Executable File
140 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
SYSTEM=$(uname -s)
|
|
if [ $SYSTEM = "FreeBSD" ] ; then
|
|
echo "blobfs.sh cannot run on FreeBSD currently."
|
|
exit 0
|
|
fi
|
|
|
|
testdir=$(readlink -f $(dirname $0))
|
|
rootdir=$(readlink -f $testdir/../..)
|
|
rpc_server=/var/tmp/spdk-blobfs.sock
|
|
rpc_py="$rootdir/scripts/rpc.py -s $rpc_server"
|
|
tmp_file=/tmp/blobfs_file
|
|
conf_file=/tmp/blobfs.conf
|
|
bdevname=BlobfsBdev
|
|
mount_dir=/tmp/spdk_tmp_mount
|
|
test_cache_size=512
|
|
|
|
source $rootdir/test/common/autotest_common.sh
|
|
|
|
function cleanup() {
|
|
if [[ -n $blobfs_pid && -e /proc/$blobfs_pid ]]; then
|
|
killprocess $blobfs_pid
|
|
fi
|
|
|
|
rm -rf $mount_dir
|
|
rm -f $tmp_file
|
|
rm -f $conf_file
|
|
}
|
|
|
|
function blobfs_start_app {
|
|
$rootdir/test/app/bdev_svc/bdev_svc -r $rpc_server -c ${conf_file} &
|
|
blobfs_pid=$!
|
|
|
|
echo "Process blobfs pid: $blobfs_pid"
|
|
waitforlisten $blobfs_pid $rpc_server
|
|
|
|
result=$($rpc_py blobfs_set_cache_size ${test_cache_size})
|
|
if [ "${result}" != "True" ]; then
|
|
false
|
|
fi
|
|
}
|
|
|
|
function blobfs_detect_test() {
|
|
# Detect out there is no blobfs on test bdev
|
|
blobfs_start_app
|
|
result=$($rpc_py blobfs_detect ${bdevname})
|
|
if [ "${result}" != "False" ]; then
|
|
false
|
|
fi
|
|
|
|
killprocess $blobfs_pid
|
|
|
|
# Create blobfs on test bdev
|
|
$rootdir/test/blobfs/mkfs/mkfs ${conf_file} ${bdevname}
|
|
|
|
# Detect out there is a blobfs on test bdev
|
|
blobfs_start_app
|
|
result=$($rpc_py blobfs_detect ${bdevname})
|
|
if [ "${result}" != "True" ]; then
|
|
false
|
|
fi
|
|
|
|
killprocess $blobfs_pid
|
|
}
|
|
|
|
function blobfs_create_test() {
|
|
blobfs_start_app
|
|
|
|
# Create blobfs on test bdev
|
|
$rpc_py blobfs_create ${bdevname}
|
|
|
|
# Detect out there is a blobfs on test bdev
|
|
result=$($rpc_py blobfs_detect ${bdevname})
|
|
if [ "${result}" != "True" ]; then
|
|
false
|
|
fi
|
|
|
|
killprocess $blobfs_pid
|
|
}
|
|
|
|
function blobfs_fuse_test() {
|
|
if [ ! -d /usr/include/fuse3 ] && [ ! -d /usr/local/include/fuse3 ]; then
|
|
echo "libfuse3 is not installed which is required to this test."
|
|
return 0
|
|
fi
|
|
|
|
# mount blobfs on test dir
|
|
$rootdir/test/blobfs/fuse/fuse ${conf_file} ${bdevname} $mount_dir &
|
|
blobfs_pid=$!
|
|
echo "Process blobfs pid: $blobfs_pid"
|
|
|
|
# Currently blobfs fuse APP doesn't support specific path of RPC sock.
|
|
# So directly use default sock path.
|
|
waitforlisten $blobfs_pid /var/tmp/spdk.sock
|
|
|
|
# check mount status
|
|
mount | grep "$mount_dir"
|
|
|
|
# create a rand file in mount dir
|
|
dd if=/dev/urandom of=${mount_dir}/rand_file bs=4k count=32
|
|
|
|
umount ${mount_dir}
|
|
killprocess $blobfs_pid
|
|
|
|
# Verify there is no file in mount dir now
|
|
if [ -f ${mount_dir}/rand_file ]; then
|
|
false
|
|
fi
|
|
|
|
# use blobfs mount RPC
|
|
blobfs_start_app
|
|
$rpc_py blobfs_mount ${bdevname} $mount_dir
|
|
|
|
# read and delete the rand file
|
|
md5sum ${mount_dir}/rand_file
|
|
rm ${mount_dir}/rand_file
|
|
|
|
umount ${mount_dir}
|
|
killprocess $blobfs_pid
|
|
}
|
|
|
|
trap 'cleanup' EXIT
|
|
|
|
# Create one temp file as test bdev
|
|
dd if=/dev/zero of=${tmp_file} bs=4k count=1M
|
|
echo "[AIO]" > ${conf_file}
|
|
echo "AIO ${tmp_file} ${bdevname} 4096" >> ${conf_file}
|
|
|
|
blobfs_detect_test
|
|
|
|
# Clear blobfs on temp file
|
|
dd if=/dev/zero of=${tmp_file} bs=4k count=1M
|
|
|
|
blobfs_create_test
|
|
|
|
# Create dir for FUSE mount
|
|
mkdir -p $mount_dir
|
|
blobfs_fuse_test
|