summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmmanuel Dreyfus <manu@netbsd.org>2014-10-09 09:08:57 +0200
committerVijay Bellur <vbellur@redhat.com>2014-10-30 01:34:11 -0700
commitd2da726fe76e61f4c499421d8d2bd588ca41b770 (patch)
tree8a6032e7599d9a5908385bb90d01e74148ab062d
parent92c4650ac809ee227c6591397a64269850f3217e (diff)
Regression test portability: loopback devices
Introduce functions to deal with loopback devices setup, mount and umount. Remove test for xfsprogs for non Linux systems, as loopback devices can be populated with other filesystems (e.g.: FFS for NetBSD) While there, remove mount.nfs test for non Linux systems. At least NetBSD has it in base system as mount_nfs. BUG: 1129939 Change-Id: I816b36e1d3e6933f92acf19d9be8eeaaa333356e Signed-off-by: Emmanuel Dreyfus <manu@netbsd.org> Reviewed-on: http://review.gluster.org/8914 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Vijay Bellur <vbellur@redhat.com>
-rwxr-xr-xrun-tests.sh20
-rw-r--r--tests/bugs/bug-1099890.t19
-rw-r--r--tests/bugs/bug-858488-min-free-disk.t15
-rw-r--r--tests/bugs/bug-948729/bug-948729-force.t55
-rw-r--r--tests/bugs/bug-948729/bug-948729-mode-script.t29
-rw-r--r--tests/bugs/bug-948729/bug-948729.t30
-rwxr-xr-xtests/features/weighted-rebalance.t14
-rw-r--r--tests/include.rc150
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
+}