X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fmdadm.git;a=blobdiff_plain;f=test;h=1cd341f19b6a63a111070610543a2a7b9289497b;hp=a83b68e69d181f737f17696a5b79656c76c04403;hb=da1887895404506708387fa3781bf0df0a2664ff;hpb=beae1dfe2e5a3f11e6e52a93fbf617d644708415 diff --git a/test b/test index a83b68e6..1cd341f1 100644 --- a/test +++ b/test @@ -21,18 +21,27 @@ fi # assume md0, md1, md2 exist in /dev md0=/dev/md0 md1=/dev/md1 md2=/dev/md2 +mdp0=/dev/md_d0 +mdp1=/dev/md_d1 # We test mdadm on loop-back block devices. # dir for storing files should be settable by command line maybe targetdir=/var/tmp size=20000 +# super0, round down to multiple of 64 and substract 64 mdsize0=19904 +# super00 is nested, subtract 128 +mdsize00=19840 +# super1.0 round down to multiple of 2, subtract 8 mdsize1=19992 -mdsize11=19996 -mdsize12=19992 +# subtract another 4 for bitmaps +mdsize1b=19988 +mdsize11=19992 +mdsize12=19988 cleanup() { - $mdadm -Ss + udevadm settle + $mdadm -Ssq for d in 0 1 2 3 4 5 6 7 do losetup -d /dev/loop$d ; # rm -f $targetdir/mdtest$d @@ -55,10 +64,14 @@ do eval dev$d=/dev/loop$d eval file$d=$targetdir/mdtest$d eval devlist=\"\$devlist \$dev$d\" + #" <-- add this quote to un-confuse vim syntax highlighting done path0=$dev6 path1=$dev7 +echo 2000 > /proc/sys/dev/raid/speed_limit_max +echo 0 > /sys/module/md_mod/parameters/start_ro + if [ " $1" = " setup" ] then trap 0 ; exit 0 fi @@ -66,6 +79,9 @@ fi # mdadm always adds --quiet, and we want to see any unexpected messages mdadm() { rm -f $targetdir/stderr + case $* in + *-S* ) udevadm settle;; + esac case $* in *-C* ) $mdadm 2> $targetdir/stderr --quiet "$@" --auto=yes;; * ) $mdadm 2> $targetdir/stderr --quiet "$@" @@ -87,7 +103,7 @@ check() { grep -s "active $1 " /proc/mdstat > /dev/null || { echo >&2 "ERROR active $1 not found" ; cat /proc/mdstat ; exit 1;} ;; - resync | recovery ) + resync | recovery | reshape) sleep 0.5 grep -s $1 /proc/mdstat > /dev/null || { echo >&2 ERROR no $1 happening; cat /proc/mdstat; exit 1; } @@ -95,14 +111,14 @@ check() { nosync ) sleep 0.5 - if grep -s 're[synccovery]* =' > /dev/null /proc/mdstat ; then + if grep -s -E '(resync|recovery|reshape) =' > /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 + while grep -E '(resync|recovery|reshape|check|repair) =' > /dev/null /proc/mdstat do sleep 2; done ;; @@ -144,6 +160,7 @@ testdev() { dsize=$[dvsize/chunk] dsize=$[dsize*chunk] rasize=$[dsize*2*cnt] + if [ `/sbin/blockdev --getsize $dev` -eq 0 ]; then sleep 2 ; fi if [ $rasize -ne `/sbin/blockdev --getsize $dev` ] then echo "ERROR: size is wrong for $dev: $cnt * $dvsize (chunk=$chunk) = $rasize, not `/sbin/blockdev --getsize $dev`" @@ -156,21 +173,42 @@ rotest() { fsck -fn $dev >&2 } +setup_environment() { + if [ -f $1 ]; then + . $environment + setup_env + fi +} +reset_environment() { + if [ -f $1 ]; then + reset_env + unset setup_env + unset reset_env + fi +} for script in tests/$prefix tests/$prefix*[^~] do if [ -f "$script" ] then rm -f $targetdir/stderr + # stop all arrays, just incase some script left an array active. + mdadm -Ssq + mdadm --zero $devlist 2> /dev/null + mdadm --zero $devlist 2> /dev/null + environment="tests/env-`basename $script`" + setup_environment $environment # 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 ; cat $targetdir/stderr echo "$script failed" + reset_environment $environment exit 1 fi + reset_environment $environment fi done exit 0