From dab6685f3d9982b697d938d99737897ea8ac768c Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Mon, 15 Aug 2005 06:14:27 +0000 Subject: Add 'quite' option and tidy up some tests. Signed-off-by: Neil Brown --- test | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 67 insertions(+), 8 deletions(-) (limited to 'test') 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 -- cgit