BRT: Fix tests to work on non-empty pools
It should not normally happen, but if it does, better to not fail everything for no good reason, or it may be hard to debug. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Alexander Motin <mav@FreeBSD.org> Sponsored by: iXsystems, Inc. Closes #16007
This commit is contained in:
parent
2ea370a4e3
commit
e3c1c9153f
|
@ -97,20 +97,19 @@ function verify_pool_prop_eq
|
||||||
|
|
||||||
function verify_pool_props
|
function verify_pool_props
|
||||||
{
|
{
|
||||||
typeset -r dsize=$1
|
typeset -r oused=$1
|
||||||
typeset -r ratio=$2
|
typeset -r osaved=$2
|
||||||
|
typeset dsize=$3
|
||||||
|
typeset ratio=$4
|
||||||
|
|
||||||
if [[ $dsize -eq 0 ]]; then
|
if [[ $dsize -eq 0 ]]; then
|
||||||
verify_pool_prop_eq bcloneused 0
|
ratio=1
|
||||||
verify_pool_prop_eq bclonesaved 0
|
elif [[ $ratio -eq 1 ]]; then
|
||||||
verify_pool_prop_eq bcloneratio 1.00
|
dsize=0
|
||||||
else
|
fi
|
||||||
if [[ $ratio -eq 1 ]]; then
|
verify_pool_prop_eq bcloneused $(($oused+$dsize))
|
||||||
verify_pool_prop_eq bcloneused 0
|
verify_pool_prop_eq bclonesaved $(($osaved+dsize*(ratio-1)))
|
||||||
else
|
if [[ $oused -eq 0 ]]; then
|
||||||
verify_pool_prop_eq bcloneused $dsize
|
|
||||||
fi
|
|
||||||
verify_pool_prop_eq bclonesaved $((dsize*(ratio-1)))
|
|
||||||
verify_pool_prop_eq bcloneratio "${ratio}.00"
|
verify_pool_prop_eq bcloneratio "${ratio}.00"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
@ -124,16 +123,22 @@ function bclone_test
|
||||||
typeset -r srcdir=$4
|
typeset -r srcdir=$4
|
||||||
typeset -r dstdir=$5
|
typeset -r dstdir=$5
|
||||||
typeset dsize
|
typeset dsize
|
||||||
|
typeset oused
|
||||||
|
typeset osaved
|
||||||
|
|
||||||
typeset -r original="${srcdir}/original"
|
typeset -r original="${srcdir}/original"
|
||||||
typeset -r clone="${dstdir}/clone"
|
typeset -r clone="${dstdir}/clone"
|
||||||
|
|
||||||
log_note "Testing file copy with datatype $datatype, file size $filesize, embedded $embedded"
|
log_note "Testing file copy with datatype $datatype, file size $filesize, embedded $embedded"
|
||||||
|
|
||||||
|
# Save current block cloning stats for later use.
|
||||||
|
sync_pool $TESTPOOL
|
||||||
|
oused=$(get_pool_prop bcloneused $TESTPOOL)
|
||||||
|
osaved=$(get_pool_prop bclonesaved $TESTPOOL)
|
||||||
|
|
||||||
# Create a test file with known content.
|
# Create a test file with known content.
|
||||||
case $datatype in
|
case $datatype in
|
||||||
random|text)
|
random|text)
|
||||||
sync_pool $TESTPOOL
|
|
||||||
if [[ $datatype = "random" ]]; then
|
if [[ $datatype = "random" ]]; then
|
||||||
dd if=/dev/urandom of=$original bs=$filesize count=1 2>/dev/null
|
dd if=/dev/urandom of=$original bs=$filesize count=1 2>/dev/null
|
||||||
else
|
else
|
||||||
|
@ -146,13 +151,13 @@ function bclone_test
|
||||||
sync_pool $TESTPOOL
|
sync_pool $TESTPOOL
|
||||||
# It is hard to predict block sizes that will be used,
|
# It is hard to predict block sizes that will be used,
|
||||||
# so just do one clone and take it from bcloneused.
|
# so just do one clone and take it from bcloneused.
|
||||||
filesize=$(zpool get -Hp -o value bcloneused $TESTPOOL)
|
dsize=$(get_pool_prop bcloneused $TESTPOOL)
|
||||||
|
dsize=$(($dsize-$oused))
|
||||||
if [[ $embedded = "false" ]]; then
|
if [[ $embedded = "false" ]]; then
|
||||||
log_must test $filesize -gt 0
|
log_must test $dsize -gt 0
|
||||||
fi
|
fi
|
||||||
rm -f "${clone}-tmp"
|
rm -f "${clone}-tmp"
|
||||||
sync_pool $TESTPOOL
|
sync_pool $TESTPOOL
|
||||||
dsize=$filesize
|
|
||||||
;;
|
;;
|
||||||
hole)
|
hole)
|
||||||
log_must truncate_test -s $filesize -f $original
|
log_must truncate_test -s $filesize -f $original
|
||||||
|
@ -217,7 +222,7 @@ function bclone_test
|
||||||
test_file_integrity $original_checksum "${clone}4" $filesize
|
test_file_integrity $original_checksum "${clone}4" $filesize
|
||||||
test_file_integrity $original_checksum "${clone}5" $filesize
|
test_file_integrity $original_checksum "${clone}5" $filesize
|
||||||
|
|
||||||
verify_pool_props $dsize 7
|
verify_pool_props $oused $osaved $dsize 7
|
||||||
|
|
||||||
# Clear cache and test after fresh import.
|
# Clear cache and test after fresh import.
|
||||||
log_must zpool export $TESTPOOL
|
log_must zpool export $TESTPOOL
|
||||||
|
@ -240,7 +245,7 @@ function bclone_test
|
||||||
|
|
||||||
sync_pool $TESTPOOL
|
sync_pool $TESTPOOL
|
||||||
|
|
||||||
verify_pool_props $dsize 11
|
verify_pool_props $oused $osaved $dsize 11
|
||||||
|
|
||||||
log_must zpool export $TESTPOOL
|
log_must zpool export $TESTPOOL
|
||||||
log_must zpool import $TESTPOOL
|
log_must zpool import $TESTPOOL
|
||||||
|
@ -268,7 +273,7 @@ function bclone_test
|
||||||
test_file_integrity $original_checksum "${clone}8" $filesize
|
test_file_integrity $original_checksum "${clone}8" $filesize
|
||||||
test_file_integrity $original_checksum "${clone}9" $filesize
|
test_file_integrity $original_checksum "${clone}9" $filesize
|
||||||
|
|
||||||
verify_pool_props $dsize 6
|
verify_pool_props $oused $osaved $dsize 6
|
||||||
|
|
||||||
rm -f "${clone}0" "${clone}2" "${clone}4" "${clone}8" "${clone}9"
|
rm -f "${clone}0" "${clone}2" "${clone}4" "${clone}8" "${clone}9"
|
||||||
|
|
||||||
|
@ -276,11 +281,11 @@ function bclone_test
|
||||||
|
|
||||||
test_file_integrity $original_checksum "${clone}6" $filesize
|
test_file_integrity $original_checksum "${clone}6" $filesize
|
||||||
|
|
||||||
verify_pool_props $dsize 1
|
verify_pool_props $oused $osaved $dsize 1
|
||||||
|
|
||||||
rm -f "${clone}6"
|
rm -f "${clone}6"
|
||||||
|
|
||||||
sync_pool $TESTPOOL
|
sync_pool $TESTPOOL
|
||||||
|
|
||||||
verify_pool_props $dsize 1
|
verify_pool_props $oused $osaved $dsize 1
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue