diff options
author | Jeff Darcy <jdarcy@redhat.com> | 2014-03-25 23:58:50 +0000 |
---|---|---|
committer | Jeff Darcy <jdarcy@redhat.com> | 2014-04-22 14:56:35 +0000 |
commit | acd2292f085b15c2c5c28169d11f20dca90f5ec9 (patch) | |
tree | 35e691e0ab15a361595cbf8c53ae1d7e99830d16 /tests | |
parent | 90366df60fa3b9b2915a4a8d804c2e95ae1948e7 (diff) |
nsr: expand coverage of reconciliation test
This version tests eight kinds of modifying operations instead of just
two, and tests those two a bit better than before. Symlink had to be
fixed because there was a mismatch between the actual changelog format
and the nsr-recon parsing code. Setxattr and removexattr are still
hopelessly broken, but that code needs to be replaced anyway when we
start putting the xattr names into the changelog so it's not worth
fixing them right now. When that's done we'll be up to ten kinds of
operations, missing only rename.
Change-Id: I3d805cf8fd324221be03edc3e5fc26d7656e4af9
Signed-off-by: Jeff Darcy <jdarcy@redhat.com>
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/basic/recon.t | 141 |
1 files changed, 119 insertions, 22 deletions
diff --git a/tests/basic/recon.t b/tests/basic/recon.t index ab2241c7d..fac454530 100755 --- a/tests/basic/recon.t +++ b/tests/basic/recon.t @@ -6,14 +6,18 @@ . $(dirname $0)/../include.rc . $(dirname $0)/../volume.rc +function my_getfattr { + getfattr --only-values -e text $* 2> /dev/null +} + function get_rep_count { - v=$(getfattr --only-values -e text -n trusted.nsr.rep-count $1 2> /dev/null) + v=$(my_getfattr -n trusted.nsr.rep-count $1) #echo $v > /dev/tty echo $v } -function ping_file { - dd if=/dev/urandom of=$1 bs=4k count=100 2> /dev/null +function create_file { + dd if=/dev/urandom of=$1 bs=4k count=$2 conv=sync 2> /dev/null } function kill_a_brick { @@ -31,15 +35,73 @@ function kill_a_brick { return 1 } -function count_matches { - n=0 - for f in $B0/$V0[12]/$1; do - cmp $M0/$1 $f 2> /dev/null - if [ $? = 0 ]; then - n=$((n+1)) - fi +# Functions to check reconciliation for specific operation types. + +function check_create_write { + for b in $*; do + cmp $tmpdir/create-write $b/create-write || return 1 + done + return 0 +} + +function check_truncate { + truncate --size=8192 $tmpdir/truncate + for b in $*; do + cmp $tmpdir/truncate $b/truncate || return 1 + done + return 0 +} + +function check_hard_link { + for b in $*; do + inum1=$(ls -i $b/hard-link-1 | cut -d' ' -f1) + inum2=$(ls -i $b/hard-link-2 | cut -d' ' -f1) + [ "$inum1" = "$inum2" ] || return 1 + done + return 0 +} + +function check_soft_link { + for b in $*; do + [ "$(readlink $b/soft-link)" = "soft-link-tgt" ] || return 1 + done + return 0 +} + +function check_unlink { + for b in $*; do + [ ! -e $b/unlink ] || return 1 + done + return 0 +} + +function check_mkdir { + for b in $*; do + [ -d $b/mkdir ] || return 1 + done + return 0 +} + +function check_rmdir { + for b in $*; do + [ ! -e $b/rmdir ] || return 1 done - echo $n +} + +function check_setxattr { + for b in $*; do + v=$(my_getfattr -n user.foo $b/setxattr) + [ "$v" = "ash_nazg_durbatuluk" ] || return 1 + done + return 0 +} + +function check_removexattr { + for b in $*; do + my_getfattr -n user.bar $b/removexattr 2> /dev/null + [ $? = 0 ] && return 1 + done + return 0 } cleanup @@ -60,30 +122,65 @@ TEST $CLI volume set $V0 cluster.nsr.recon on TEST $CLI volume start $V0 EXPECT 'Started' volinfo_field $V0 'Status' -## Mount FUSE with caching disabled (read-only) +# Mount FUSE with caching disabled TEST glusterfs --entry-timeout=0 --attribute-timeout=0 -s $H0 --volfile-id $V0 $M0 # Give the bricks a chance to connect to each other. EXPECT_WITHIN 10 "2" get_rep_count $M0 -TEST ping_file $M0/probe -TEST cmp ${M0}/probe ${B0}/${V0}1/probe -TEST cmp ${M0}/probe ${B0}/${V0}2/probe - +# Create local files for comparisons etc. +tmpdir=$(mktemp -d) +trap "rm -rf $tmpdir" EXIT +TEST create_file $tmpdir/create-write 10 +TEST create_file $tmpdir/truncate 10 + +# Prepare files and directories we'll need later. +TEST cp $tmpdir/truncate $M0/ +TEST touch $M0/hard-link-1 +TEST touch $M0/unlink +TEST mkdir $M0/rmdir +TEST touch $M0/setxattr +TEST touch $M0/removexattr +TEST setfattr -n user.bar -v "ash_nazg_gimbatul" $M0/removexattr + +# Kill a brick and wait for a new leader to take over. TEST kill_a_brick sleep 10 -# Make sure only one copy makes it while degraded. -TEST ping_file $M0/probe2 -TEST [ $(count_matches probe2) = 1 ] +# Test create+write +TEST cp $tmpdir/create-write $M0/ +# Test truncate +TEST truncate --size=8192 $M0/truncate +# Test hard link +TEST ln $M0/hard-link-1 $M0/hard-link-2 +# Test soft link +# Disabled here because it not only fails but crashes the recon daemon. +TEST ln -s soft-link-tgt $M0/soft-link +# Test unlink +TEST rm $M0/unlink +# Test mkdir +TEST mkdir $M0/mkdir +# Test rmdir +TEST rmdir $M0/rmdir +# Test setxattr +TEST setfattr -n user.foo -v "ash_nazg_durbatuluk" $M0/setxattr +# Test removexattr +TEST setfattr -x user.bar $M0/removexattr # Restart the brick and give reconciliation a chance to run. -# TBD: figure out why reconciliation takes so $#@! long to run TEST $CLI volume start $V0 force sleep 20 -# Make sure *both* copies are valid after reconciliation. -TEST [ $(count_matches probe2) = 2 ] +# Make sure everything is as it should be. +TEST check_create_write $B0/${V0}{1,2} +TEST check_truncate $B0/${V0}{1,2} +TEST check_hard_link $B0/${V0}{1,2} +TEST check_soft_link $B0/${V0}{1,2} +TEST check_unlink $B0/${V0}{1,2} +TEST check_mkdir $B0/${V0}{1,2} +TEST check_rmdir $B0/${V0}{1,2} +#EST check_setxattr $B0/${V0}{1,2} +#EST check_removexattr $B0/${V0}{1,2} cleanup #killall -9 etcd |