summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2005-08-15 06:14:27 +0000
committerNeil Brown <neilb@suse.de>2005-08-15 06:14:27 +0000
commitdab6685f3d9982b697d938d99737897ea8ac768c (patch)
treef68788b7c36feabc151e96d622dffd44644fbbac /test
parent7358e196679a5fba3f447c26c7133cba2aa44928 (diff)
downloadmdadm-dab6685f3d9982b697d938d99737897ea8ac768c.tar.gz
mdadm-dab6685f3d9982b697d938d99737897ea8ac768c.tar.xz
mdadm-dab6685f3d9982b697d938d99737897ea8ac768c.zip
Add 'quite' option and tidy up some tests.
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
Diffstat (limited to 'test')
-rw-r--r--test75
1 files changed, 67 insertions, 8 deletions
diff --git a/test b/test
index 3e79909..5008c49 100644
--- a/test
+++ b/test
@@ -14,7 +14,6 @@ fi
dir=`pwd`
mdadm=$dir/mdadm
-export mdadm
if [ \! -x $mdadm ]
then
echo >&2 "test: $mdadm isn't usable."
@@ -23,16 +22,14 @@ fi
export check="sh $dir/tests/check"
# assume md0, md1, md2 exist in /dev
-export md0=/dev/md0 md1=/dev/md1 md2=/dev/md2
+md0=/dev/md0 md1=/dev/md1 md2=/dev/md2
# We test mdadm on loop-back block devices.
# dir for storing files should be settable by command line maybe
targetdir=/tmp
-export targetdir dir
size=20000
mdsize0=19904
mdsize1=19992
-export size mdsize0 mdsize1
cleanup() {
$mdadm -Ss
@@ -48,16 +45,78 @@ for d in 0 1 2 3 4 5 6 7
do
[ -f $targetdir/mdtest$d ] || dd if=/dev/zero of=$targetdir/mdtest$d count=$size bs=1K > /dev/null 2>&1
losetup /dev/loop$d $targetdir/mdtest$d
- export dev$d=/dev/loop$d
+ eval dev$d=/dev/loop$d
eval devlist=\"\$devlist \$dev$d\"
done
-export devlist
+
+# mdadm always adds --quiet, and we want to see any unexpected messages
+mdadm() {
+ $mdadm 2>&1 --quiet "$@"
+}
+
+# check various things
+check() {
+ case $1 in
+ raid* | linear )
+ grep -s "active $1 " /proc/mdstat > /dev/null || {
+ echo >&2 "ERROR active $1 not found" ; cat /proc/mdstat ; exit 1;}
+ ;;
+ resync | recovery )
+ sleep 0.1
+ grep -s $1 /proc/mdstat > /dev/null || {
+ echo >&2 ERROR no $1 happening; cat /proc/mdstat; exit 1; }
+ ;;
+
+ nosync )
+ sleep 0.5
+ if grep -s 're[synccovery]* =' > /dev/null /proc/mdstat ; then
+ echo >&2 "ERROR resync or recovery is happening!"; cat /proc/mdstat ; exit 1;
+ fi
+ ;;
+
+ wait )
+ sleep 0.1
+ while grep 're[synccovery]* =' > /dev/null /proc/mdstat
+ do sleep 2;
+ done
+ ;;
+
+ state )
+ grep -s "blocks.*\[$2\]\$" /proc/mdstat > /dev/null || {
+ echo >&2 "ERROR state $2 not found!"; cat /proc/mdstat ; exit 1; }
+ sleep 0.5
+ ;;
+
+ * ) echo >&2 ERROR unknown check $1 ; exit 1;
+ esac
+}
+
+# basic device test
+
+testdev() {
+ dev=$1
+ cnt=$2
+ dvsize=$3
+ chunk=$4
+ mkfs -j $dev > /dev/null 2>&1 && fsck -fn $dev >&2
+ dsize=$[dvsize/chunk]
+ dsize=$[dsize*chunk]
+ rasize=$[dsize*1024*cnt]
+ if [ $rasize -ne `/sbin/blockdev --getsize64 $dev` ]
+ then
+ echo "ERROR: size is wrong for $dev: $cnt * $dvsize (chunk=$chunk) = $rasize, not `/sbin/blockdev --getsize64 $dev`"
+ exit 1
+ fi
+}
+
for script in tests/$prefix*[^~]
do
- if sh -x $script > $targetdir/log 2>&1
- then echo "$script succeeded"
+ # source script in a subshell, so it has access to our
+ # namespace, but cannot change it.
+ if ( set -ex ; . $script ) 2> $targetdir/log
+ then echo "$script succeeded"
else cat $targetdir/log
echo "$script failed"
exit 1