diff options
-rwxr-xr-x | run-tests.sh | 20 | ||||
-rw-r--r-- | tests/bugs/bug-1099890.t | 19 | ||||
-rw-r--r-- | tests/bugs/bug-858488-min-free-disk.t | 15 | ||||
-rw-r--r-- | tests/bugs/bug-948729/bug-948729-force.t | 55 | ||||
-rw-r--r-- | tests/bugs/bug-948729/bug-948729-mode-script.t | 29 | ||||
-rw-r--r-- | tests/bugs/bug-948729/bug-948729.t | 30 | ||||
-rwxr-xr-x | tests/features/weighted-rebalance.t | 14 | ||||
-rw-r--r-- | tests/include.rc | 150 |
8 files changed, 267 insertions, 65 deletions
diff --git a/run-tests.sh b/run-tests.sh index 823814db85f..f95c8f978cb 100755 --- a/run-tests.sh +++ b/run-tests.sh @@ -31,10 +31,12 @@ function check_dependencies() MISSING="$MISSING rpmbuild" fi - # Check for nfs-utils - env mount.nfs -V > /dev/null 2>&1 - if [ $? -ne 0 ]; then - MISSING="$MISSING nfs-utils" + # Check for nfs-utils (Linux-only: built-in NetBSD with different name) + if [ "x`uname -s`" = "xLinux" ] ; then + env mount.nfs -V > /dev/null 2>&1 + if [ $? -ne 0 ]; then + MISSING="$MISSING nfs-utils" + fi fi # Check for the Perl Test Harness @@ -48,10 +50,12 @@ function check_dependencies() MISSING="$MISSING json_verify" fi - # Check for XFS programs - env mkfs.xfs -V > /dev/null 2>&1 - if [ $? -ne 0 ]; then - MISSING="$MISSING xfsprogs" + # Check for XFS programs (Linux Only: NetBSD does without) + if [ "x`uname -s`" = "xLinux" ] ; then + env mkfs.xfs -V > /dev/null 2>&1 + if [ $? -ne 0 ]; then + MISSING="$MISSING xfsprogs" + fi fi # Check for attr diff --git a/tests/bugs/bug-1099890.t b/tests/bugs/bug-1099890.t index a27d4e74fbf..c4be2cf56ba 100644 --- a/tests/bugs/bug-1099890.t +++ b/tests/bugs/bug-1099890.t @@ -17,16 +17,16 @@ TEST pidof glusterd; TEST truncate -s 100M $B0/brick1 TEST truncate -s 100M $B0/brick2 -TEST L1=`losetup --find --show $B0/brick1` -TEST mkfs.xfs $L1 +TEST L1=`SETUP_LOOP $B0/brick1` +TEST MKFS_LOOP $L1 -TEST L2=`losetup --find --show $B0/brick2` -TEST mkfs.xfs $L2 +TEST L2=`SETUP_LOOP $B0/brick2` +TEST MKFS_LOOP $L2 TEST mkdir -p $B0/${V0}{1,2} -TEST mount -t xfs $L1 $B0/${V0}1 -TEST mount -t xfs $L2 $B0/${V0}2 +TEST MOUNT_LOOP $L1 $B0/${V0}1 +TEST MOUNT_LOOP $L2 $B0/${V0}2 # Create a plain distribute volume with 2 subvols. TEST $CLI volume create $V0 $H0:$B0/${V0}{1,2}; @@ -117,4 +117,9 @@ EXPECT "$V0-client-1" dht_get_linkto_target "$B0/${V0}1/zz" EXPECT "1" is_dht_linkfile "$B0/${V0}1/zz" -cleanup; +force_umount $M0 +$CLI volume stop $V0 +UMOUNT_LOOP ${B0}/${V0}{1,2} +rm -f ${B0}/brick{1,2} + +cleanup diff --git a/tests/bugs/bug-858488-min-free-disk.t b/tests/bugs/bug-858488-min-free-disk.t index babb27c4e25..1933f707e9c 100644 --- a/tests/bugs/bug-858488-min-free-disk.t +++ b/tests/bugs/bug-858488-min-free-disk.t @@ -13,13 +13,13 @@ TEST $CLI volume info; ## Lets create partitions for bricks TEST truncate -s 100M $B0/brick1 TEST truncate -s 200M $B0/brick2 -TEST LO1=`losetup --find --show $B0/brick1` -TEST mkfs.xfs $LO1 -TEST LO2=`losetup --find --show $B0/brick2` -TEST mkfs.xfs $LO2 +TEST LO1=`SETUP_LOOP $B0/brick1` +TEST MKFS_LOOP $LO1 +TEST LO2=`SETUP_LOOP $B0/brick2` +TEST MKFS_LOOP $LO2 TEST mkdir -p $B0/${V0}1 $B0/${V0}2 -TEST mount -t xfs $LO1 $B0/${V0}1 -TEST mount -t xfs $LO2 $B0/${V0}2 +TEST MOUNT_LOOP $LO1 $B0/${V0}1 +TEST MOUNT_LOOP $LO2 $B0/${V0}2 ## Lets create volume TEST $CLI volume create $V0 $H0:$B0/${V0}{1,2}; @@ -102,4 +102,7 @@ TEST $CLI volume stop $V0; EXPECT 'Stopped' volinfo_field $V0 'Status'; $CLI volume delete $V0; +UMOUNT_LOOP ${B0}/${V0}{1,2} +rm -f ${B0}/brick{1,2} + cleanup; diff --git a/tests/bugs/bug-948729/bug-948729-force.t b/tests/bugs/bug-948729/bug-948729-force.t index b68b8b88bdd..b4106a58736 100644 --- a/tests/bugs/bug-948729/bug-948729-force.t +++ b/tests/bugs/bug-948729/bug-948729-force.t @@ -1,6 +1,7 @@ #!/bin/bash . $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc . $(dirname $0)/../../cluster.rc function check_peers { @@ -35,27 +36,27 @@ TEST truncate -s 16M $B4/brick4 TEST truncate -s 16M $B5/brick5 TEST truncate -s 16M $B6/brick6 -TEST LD1=`losetup --find --show $B1/brick1` -TEST mkfs.xfs $LD1 -TEST LD2=`losetup --find --show $B2/brick2` -TEST mkfs.xfs $LD2 -TEST LD3=`losetup --find --show $B3/brick3` -TEST mkfs.xfs $LD3 -TEST LD4=`losetup --find --show $B4/brick4` -TEST mkfs.xfs $LD4 -TEST LD5=`losetup --find --show $B5/brick5` -TEST mkfs.xfs $LD5 -TEST LD6=`losetup --find --show $B6/brick6` -TEST mkfs.xfs $LD6 +TEST LD1=`SETUP_LOOP $B1/brick1` +TEST MKFS_LOOP $LD1 +TEST LD2=`SETUP_LOOP $B2/brick2` +TEST MKFS_LOOP $LD2 +TEST LD3=`SETUP_LOOP $B3/brick3` +TEST MKFS_LOOP $LD3 +TEST LD4=`SETUP_LOOP $B4/brick4` +TEST MKFS_LOOP $LD4 +TEST LD5=`SETUP_LOOP $B5/brick5` +TEST MKFS_LOOP $LD5 +TEST LD6=`SETUP_LOOP $B6/brick6` +TEST MKFS_LOOP $LD6 mkdir -p $B1/$V0 $B2/$V0 $B3/$V0 $B4/$V0 $B5/$V0 $B6/$V0 -TEST mount -t xfs $LD1 $B1/$V0 -TEST mount -t xfs $LD2 $B2/$V0 -TEST mount -t xfs $LD3 $B3/$V0 -TEST mount -t xfs $LD4 $B4/$V0 -TEST mount -t xfs $LD5 $B5/$V0 -TEST mount -t xfs $LD6 $B6/$V0 +TEST MOUNT_LOOP $LD1 $B1/$V0 +TEST MOUNT_LOOP $LD2 $B2/$V0 +TEST MOUNT_LOOP $LD3 $B3/$V0 +TEST MOUNT_LOOP $LD4 $B4/$V0 +TEST MOUNT_LOOP $LD5 $B5/$V0 +TEST MOUNT_LOOP $LD6 $B6/$V0 #Case 0: Parent directory of the brick is absent TEST ! $CLI1 volume create $V0 $H1:$B1/$V0/nonexistent/b1 $H2:$B2/$V0/nonexistent/b2 force @@ -81,4 +82,22 @@ TEST $CLI1 volume add-brick $V2 $H1:$B4/$V0/brick3 force rmdir /$uuid1 /$uuid2 /$uuid3; +$CLI volume stop $V0 +$CLI volume stop $V1 +$CLI volume stop $V2 + +UMOUNT_LOOP $B1/$V0 +UMOUNT_LOOP $B2/$V0 +UMOUNT_LOOP $B3/$V0 +UMOUNT_LOOP $B4/$V0 +UMOUNT_LOOP $B5/$V0 +UMOUNT_LOOP $B6/$V0 + +rm -f $B1/brick1 +rm -f $B2/brick2 +rm -f $B3/brick3 +rm -f $B4/brick4 +rm -f $B5/brick5 +rm -f $B6/brick6 + cleanup; diff --git a/tests/bugs/bug-948729/bug-948729-mode-script.t b/tests/bugs/bug-948729/bug-948729-mode-script.t index 5ac133a5bfe..6264e18f1bd 100644 --- a/tests/bugs/bug-948729/bug-948729-mode-script.t +++ b/tests/bugs/bug-948729/bug-948729-mode-script.t @@ -1,6 +1,7 @@ #!/bin/bash . $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc . $(dirname $0)/../../cluster.rc function check_peers { @@ -26,18 +27,18 @@ TEST truncate -s 16M $B1/brick1 TEST truncate -s 16M $B2/brick2 TEST truncate -s 16M $B3/brick3 -TEST LD1=`losetup --find --show $B1/brick1` -TEST mkfs.xfs $LD1 -TEST LD2=`losetup --find --show $B2/brick2` -TEST mkfs.xfs $LD2 -TEST LD3=`losetup --find --show $B3/brick3` -TEST mkfs.xfs $LD3 +TEST LD1=`SETUP_LOOP $B1/brick1` +TEST MKFS_LOOP $LD1 +TEST LD2=`SETUP_LOOP $B2/brick2` +TEST MKFS_LOOP $LD2 +TEST LD3=`SETUP_LOOP $B3/brick3` +TEST MKFS_LOOP $LD3 mkdir -p $B1/$V0 $B2/$V0 $B3/$V0 -TEST mount -t xfs $LD1 $B1/$V0 -TEST mount -t xfs $LD2 $B2/$V0 -TEST mount -t xfs $LD3 $B3/$V0 +TEST MOUNT_LOOP $LD1 $B1/$V0 +TEST MOUNT_LOOP $LD2 $B2/$V0 +TEST MOUNT_LOOP $LD3 $B3/$V0 cli1=$(echo $CLI1 | sed 's/ --wignore//') @@ -63,4 +64,14 @@ TEST $cli1 volume add-brick $V0 $H1:$B3/$V0/brick3 #FIX-ME : replace-brick does not currently work in the newly introduced #####cluster test framework +$CLI1 volume stop $V0 + +UMOUNT_LOOP $B1/$V0 +UMOUNT_LOOP $B2/$V0 +UMOUNT_LOOP $B3/$V0 + +rm -f $B1/brick1 +rm -f $B2/brick2 +rm -f $B3/brick3 + cleanup; diff --git a/tests/bugs/bug-948729/bug-948729.t b/tests/bugs/bug-948729/bug-948729.t index 8a0620a7d60..46cdb3d8e8c 100644 --- a/tests/bugs/bug-948729/bug-948729.t +++ b/tests/bugs/bug-948729/bug-948729.t @@ -1,6 +1,7 @@ #!/bin/bash . $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc . $(dirname $0)/../../cluster.rc function check_peers { @@ -27,18 +28,18 @@ TEST truncate -s 16M $B1/brick1 TEST truncate -s 16M $B2/brick2 TEST truncate -s 16M $B3/brick3 -TEST LD1=`losetup --find --show $B1/brick1` -TEST mkfs.xfs $LD1 -TEST LD2=`losetup --find --show $B2/brick2` -TEST mkfs.xfs $LD2 -TEST LD3=`losetup --find --show $B3/brick3` -TEST mkfs.xfs $LD3 +TEST LD1=`SETUP_LOOP $B1/brick1` +TEST MKFS_LOOP $LD1 +TEST LD2=`SETUP_LOOP $B2/brick2` +TEST MKFS_LOOP $LD2 +TEST LD3=`SETUP_LOOP $B3/brick3` +TEST MKFS_LOOP $LD3 mkdir -p $B1/$V0 $B2/$V0 $B3/$V0 -TEST mount -t xfs $LD1 $B1/$V0 -TEST mount -t xfs $LD2 $B2/$V0 -TEST mount -t xfs $LD3 $B3/$V0 +TEST MOUNT_LOOP $LD1 $B1/$V0 +TEST MOUNT_LOOP $LD2 $B2/$V0 +TEST MOUNT_LOOP $LD3 $B3/$V0 #Tests without options 'mode=script' and 'wignore' cli1=$(echo $CLI1 | sed 's/ --mode=script//') @@ -65,4 +66,15 @@ TEST $cli1 volume add-brick $V0 $H1:$B3/$V0/brick3 #FIX-ME: Replace-brick does not work currently in the newly introduced cluster #####test framework. +$CLI1 volume stop $V0 + +UMOUNT_LOOP $B1/$V0 +UMOUNT_LOOP $B2/$V0 +UMOUNT_LOOP $B3/$V0 + +rm -f $B1/brick1 +rm -f $B2/brick2 +rm -f $B3/brick3 + + cleanup; diff --git a/tests/features/weighted-rebalance.t b/tests/features/weighted-rebalance.t index 3964fb22290..fbda32e50a2 100755 --- a/tests/features/weighted-rebalance.t +++ b/tests/features/weighted-rebalance.t @@ -47,12 +47,12 @@ TEST $CLI volume info TEST mkdir ${B0}/${V0}{1,2} TEST truncate -s $((40*1024*1024)) ${B0}/disk1 -TEST mkfs.xfs -f -i size=512 ${B0}/disk1 -TEST mount -o loop ${B0}/disk1 ${B0}/${V0}1 +TEST MKFS_LOOP -i 512 ${B0}/disk1 +TEST MOUNT_LOOP ${B0}/disk1 ${B0}/${V0}1 TEST truncate -s $((80*1024*1024)) ${B0}/disk2 -TEST mkfs.xfs -f -i size=512 ${B0}/disk2 -TEST mount -o loop ${B0}/disk2 ${B0}/${V0}2 +TEST MKFS_LOOP -i 512 ${B0}/disk2 +TEST MOUNT_LOOP ${B0}/disk2 ${B0}/${V0}2 TEST $CLI volume create $V0 $H0:$B0/${V0}{1,2} EXPECT "$V0" volinfo_field $V0 'Volume Name' @@ -65,7 +65,7 @@ EXPECT 'Started' volinfo_field $V0 'Status' TEST $GFS -s $H0 --volfile-id $V0 $M0 TEST mkdir $M0/dir TEST touch_files -TEST umount $M0 +EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" force_umount $M0 # Check that the larger brick got more of the files. nfiles=$(count_files ${B0}/${V0}2) @@ -82,10 +82,8 @@ nfiles=$(count_files ${B0}/${V0}2) #echo $nfiles $(get_xattr ${B0}/${V0}1) $(get_xattr ${B0}/${V0}2) 3>&2 2>&1 1>&3 3>&- TEST [ $nfiles -le 580 ] -exit 0 - $CLI volume stop $V0 -umount ${B0}/${V0}{1,2} +UMOUNT_LOOP ${B0}/${V0}{1,2} rm -f ${B0}/disk{1,2} cleanup diff --git a/tests/include.rc b/tests/include.rc index 3af4764b1e4..1a0fb06002f 100644 --- a/tests/include.rc +++ b/tests/include.rc @@ -652,3 +652,153 @@ fi # probably the safest option there and on anything we don't recognize, but # if you want to reduce the noise level and know the correct option for # your favorite platform please feel free to add it here. + +function SETUP_LOOP () +{ + if [ $# != 1 ] ; then + echo "SETUP_LOOP usage" >&2 + exit 1; + fi + + backend=$1 + + case ${OSTYPE} in + Linux) + losetup --find --show ${backend} + ;; + NetBSD) + vnd=`vnconfig -l|awk -F: '/not in use/{print $1; exit}'` + if [ "x${vnd}" = "x" ] ; then + echo "no more vnd" >&2 + exit 1; + fi + vnconfig ${vnd} ${backend} + echo ${vnd} + ;; + *) + echo "Please define SETUP_LOOP for ${OSTYPE} in include.rc" >&2 + exit 1; + ;; + esac +} + +function MKFS_LOOP () +{ + args=`getopt i: $*` + if [ $? -ne 0 ] ; then + echo "MKFS_LOOP usage" >&2 + exit 1; + fi + set -- ${args} + + isize="" + while test $# -gt 0; do + case "$1" in + -i) isize=$2; shift ;; + --) shift; break ;; + esac + shift + done + + dev=$1 + + case ${OSTYPE} in + Linux) + test "x${isize}" != "x" && isize="-i size=${isize}" + mkfs.xfs -f ${isize} ${dev} + ;; + NetBSD) + test "x${isize}" != "x" && isize="-i ${isize}" + + echo ${dev} | grep -q '^vnd' + if [ $? -ne 0 ] ; then + vnd=`vnconfig -l|awk -F: '/not in use/{print $1; exit}'` + if [ "x${vnd}" = "x" ] ; then + echo "no more vnd" >&2 + exit 1; + fi + vnconfig ${vnd} ${dev} + else + vnd=${dev} + fi + newfs ${isize} /dev/r${vnd}a + ;; + *) + echo "Please define MKFS_LOOP for ${OSTYPE} in include.rc" >&2 + exit 1; + ;; + esac +} + +function MOUNT_LOOP () +{ + if [ $# != 2 ] ; then + echo "MOUNT_LOOP usage" >&2 + exit 1; + fi + + dev=$1 + target=$2 + + case ${OSTYPE} in + Linux) + echo ${dev} | grep -q '^/dev/loop' + if [ $? -eq 0 ] ; then + mount -t xfs ${dev} ${target} + else + mount -o loop ${dev} ${target} + fi + ;; + NetBSD) + echo ${dev} | grep -q '^vnd' + if [ $? -ne 0 ] ; then + ino=`/usr/bin/stat -f %i ${dev}` + dev=`vnconfig -l | awk -v ino=${ino} -F'[: ]*' '($5 == ino) {print $1}'` + fi + + mount /dev/${dev}a ${target} >&2 + if [ $? -ne 0 ] ; then + echo "failed to mount /dev/${dev}a on ${target}" >&2 + exit 1 + fi + + mkdir -p ${target}/.attribute/system ${target}/.attribute/user + mount -u -o extattr ${target} >&2 + + ;; + *) + echo "Please define MOUNT_LOOP for ${OSTYPE} in include.rc" >&2 + exit 1; + ;; + esac +} + +function UMOUNT_LOOP () +{ + case ${OSTYPE} in + Linux) + force_umount $* + ;; + NetBSD) + for target in $* ; do + dev=`mount | awk -v target=${target} '($3 == target) {print $1}'` + force_umount ${target} + echo ${dev} | grep -q '^/dev/vnd' + if [ $? -eq 0 ] ; then + dev=`echo ${dev} | sed 's|^/dev/||; s|a$||'` + vnconfig -u ${dev} + else + ino=`/usr/bin/stat -f %i ${dev}` + dev=`vnconfig -l | awk -v ino=${ino} -F'[: ]*' '($5 == ino) {print $1}'` + if [ "x${dev}" != "x" ] ; then + vnconfig -u ${dev} + fi + fi + done + ;; + *) + echo "Please define UMOUNT_LOOP for ${OSTYPE} in include.rc" >&2 + exit 1; + ;; + esac +} |