You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
806 lines
20 KiB
806 lines
20 KiB
From 662c349a5a995c270c8f7bcf0a4b4a0408c813fd Mon Sep 17 00:00:00 2001 |
|
From: Zhilong Liu <zlliu@suse.com> |
|
Date: Wed, 7 Jun 2017 17:31:26 +0800 |
|
Subject: [RHEL7.5 PATCH 154/169] mdadm/test: Convert code format to use |
|
Tab |
|
|
|
In case to make codes neat, this commit didn't change |
|
any codes, just tidy up and use Tab as code format. |
|
|
|
Signed-off-by: Zhilong Liu <zlliu@suse.com> |
|
Signed-off-by: Jes Sorensen <jsorensen@fb.com> |
|
--- |
|
test | 702 ++++++++++++++++++++++++++++++++++++------------------------------- |
|
1 file changed, 378 insertions(+), 324 deletions(-) |
|
|
|
diff --git a/test b/test |
|
index 13f1bda..7942d6e 100755 |
|
--- a/test |
|
+++ b/test |
|
@@ -3,8 +3,9 @@ |
|
# run test suite for mdadm |
|
user=`id -un` |
|
if [ " $user" != " root" ] |
|
-then echo >&2 "test: testing can only be done as 'root'." |
|
- exit 1; |
|
+then |
|
+ echo >&2 "test: testing can only be done as 'root'." |
|
+ exit 1 |
|
fi |
|
|
|
prefix='[0-9][0-9]' |
|
@@ -13,7 +14,7 @@ dir=`pwd` |
|
mdadm=$dir/mdadm |
|
if [ \! -x $mdadm ] |
|
then |
|
- echo >&2 "test: $mdadm isn't usable." |
|
+ echo >&2 "test: $mdadm isn't usable." |
|
fi |
|
|
|
testdir="tests" |
|
@@ -25,8 +26,9 @@ echo "Testing on linux-$(uname -r) kernel" |
|
|
|
# Check whether to run multipath tests |
|
modprobe multipath 2> /dev/null |
|
-if grep -s 'Personalities : .*multipath' > /dev/null /proc/mdstat ; then |
|
- MULTIPATH="yes" |
|
+if grep -s 'Personalities : .*multipath' > /dev/null /proc/mdstat |
|
+then |
|
+ MULTIPATH="yes" |
|
fi |
|
INTEGRITY=yes |
|
DEVTYPE=loop |
|
@@ -36,7 +38,9 @@ LVM_VOLGROUP=mdtest |
|
export MDADM_NO_SYSTEMCTL=1 |
|
|
|
# assume md0, md1, md2 exist in /dev |
|
-md0=/dev/md0 md1=/dev/md1 md2=/dev/md2 |
|
+md0=/dev/md0 |
|
+md1=/dev/md1 |
|
+md2=/dev/md2 |
|
mdp0=/dev/md_d0 |
|
mdp1=/dev/md_d1 |
|
|
|
@@ -69,21 +73,21 @@ config=/tmp/mdadm.conf |
|
cleanup() { |
|
udevadm settle |
|
$mdadm -Ssq 2> /dev/null |
|
- case $DEVTYPE in |
|
- loop) |
|
- for d in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
- do |
|
- losetup -d /dev/loop$d ; # rm -f $targetdir/mdtest$d |
|
- rm -f /dev/disk/by-path/loop* |
|
- done |
|
- ;; |
|
- lvm) |
|
- for d in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
- do |
|
- eval "lvremove --quiet -f \$dev$d" |
|
- done |
|
- ;; |
|
- esac |
|
+ case $DEVTYPE in |
|
+ loop) |
|
+ for d in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
+ do |
|
+ losetup -d /dev/loop$d # rm -f $targetdir/mdtest$d |
|
+ rm -f /dev/disk/by-path/loop* |
|
+ done |
|
+ ;; |
|
+ lvm) |
|
+ for d in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
+ do |
|
+ eval "lvremove --quiet -f \$dev$d" |
|
+ done |
|
+ ;; |
|
+ esac |
|
} |
|
|
|
ctrl_c() { |
|
@@ -91,329 +95,377 @@ ctrl_c() { |
|
} |
|
|
|
do_setup() { |
|
- trap cleanup 0 1 3 15 |
|
- trap ctrl_c 2 |
|
+ trap cleanup 0 1 3 15 |
|
+ trap ctrl_c 2 |
|
|
|
- # make sure there are no loop devices remaining. |
|
- # udev started things can sometimes prevent them being stopped |
|
- # immediately |
|
- while grep loop /proc/partitions > /dev/null 2>&1 |
|
- do |
|
- mdadm -Ss |
|
- losetup -d /dev/loop[0-9]* 2> /dev/null |
|
- sleep 1 |
|
- done |
|
- devlist= |
|
- for d in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
- do |
|
- sz=$size |
|
- if [ $d -gt 7 ]; then sz=$ddfsize ; fi |
|
- case $DEVTYPE in |
|
- loop) |
|
- [ -f $targetdir/mdtest$d ] || dd if=/dev/zero of=$targetdir/mdtest$d count=$sz bs=1K > /dev/null 2>&1 |
|
- # make sure udev doesn't touch |
|
- mdadm --zero $targetdir/mdtest$d 2> /dev/null |
|
- [ -b /dev/loop$d ] || mknod /dev/loop$d b 7 $d |
|
- if [ $d -eq 7 ] |
|
- then |
|
- losetup /dev/loop$d $targetdir/mdtest6 # for multipath use |
|
- else |
|
- losetup /dev/loop$d $targetdir/mdtest$d |
|
- fi |
|
- eval dev$d=/dev/loop$d |
|
- eval file$d=$targetdir/mdtest$d |
|
- ;; |
|
- lvm) |
|
- unset MULTIPATH |
|
- eval dev$d=/dev/mapper/${LVM_VOLGROUP}-mdtest$d |
|
- if ! lvcreate --quiet -L ${sz}K -n mdtest$d $LVM_VOLGROUP; then |
|
- trap '' 0 # make sure lvremove is not called |
|
- eval echo error creating \$dev$d |
|
- exit 129 |
|
- fi |
|
- ;; |
|
- ram) |
|
- unset MULTIPATH |
|
- eval dev$d=/dev/ram$d |
|
- ;; |
|
- esac |
|
- eval devlist=\"\$devlist \$dev$d\" |
|
- eval devlist$d=\"\$devlist\" |
|
- #" <-- add this quote to un-confuse vim syntax highlighting |
|
- done |
|
- path0=$dev6 |
|
- path1=$dev7 |
|
- |
|
- ulimit -c unlimited |
|
- [ -f /proc/mdstat ] || modprobe md_mod |
|
- echo 2000 > /proc/sys/dev/raid/speed_limit_max |
|
- echo 0 > /sys/module/md_mod/parameters/start_ro |
|
+ # make sure there are no loop devices remaining. |
|
+ # udev started things can sometimes prevent them being stopped |
|
+ # immediately |
|
+ while grep loop /proc/partitions > /dev/null 2>&1 |
|
+ do |
|
+ mdadm -Ss |
|
+ losetup -d /dev/loop[0-9]* 2> /dev/null |
|
+ sleep 1 |
|
+ done |
|
+ devlist= |
|
+ for d in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
+ do |
|
+ sz=$size |
|
+ if [ $d -gt 7 ] |
|
+ then |
|
+ sz=$ddfsize |
|
+ fi |
|
+ case $DEVTYPE in |
|
+ loop) |
|
+ [ -f $targetdir/mdtest$d ] || |
|
+ dd if=/dev/zero of=$targetdir/mdtest$d count=$sz bs=1K > /dev/null 2>&1 |
|
+ # make sure udev doesn't touch |
|
+ mdadm --zero $targetdir/mdtest$d 2> /dev/null |
|
+ [ -b /dev/loop$d ] || mknod /dev/loop$d b 7 $d |
|
+ if [ $d -eq 7 ] |
|
+ then |
|
+ losetup /dev/loop$d $targetdir/mdtest6 # for multipath use |
|
+ else |
|
+ losetup /dev/loop$d $targetdir/mdtest$d |
|
+ fi |
|
+ eval dev$d=/dev/loop$d |
|
+ eval file$d=$targetdir/mdtest$d |
|
+ ;; |
|
+ lvm) |
|
+ unset MULTIPATH |
|
+ eval dev$d=/dev/mapper/${LVM_VOLGROUP}-mdtest$d |
|
+ if ! lvcreate --quiet -L ${sz}K -n mdtest$d $LVM_VOLGROUP |
|
+ then |
|
+ trap '' 0 # make sure lvremove is not called |
|
+ eval echo error creating \$dev$d |
|
+ exit 129 |
|
+ fi |
|
+ ;; |
|
+ ram) |
|
+ unset MULTIPATH |
|
+ eval dev$d=/dev/ram$d |
|
+ ;; |
|
+ esac |
|
+ eval devlist=\"\$devlist \$dev$d\" |
|
+ eval devlist$d=\"\$devlist\" |
|
+ #" <-- add this quote to un-confuse vim syntax highlighting |
|
+ done |
|
+ path0=$dev6 |
|
+ path1=$dev7 |
|
+ ulimit -c unlimited |
|
+ [ -f /proc/mdstat ] || modprobe md_mod |
|
+ echo 2000 > /proc/sys/dev/raid/speed_limit_max |
|
+ echo 0 > /sys/module/md_mod/parameters/start_ro |
|
} |
|
|
|
# mdadm always adds --quiet, and we want to see any unexpected messages |
|
mdadm() { |
|
- rm -f $targetdir/stderr |
|
- case $* in |
|
- *-S* ) udevadm settle |
|
- p=`cat /proc/sys/dev/raid/speed_limit_max` |
|
- echo 20000 > /proc/sys/dev/raid/speed_limit_max |
|
- esac |
|
- case $* in |
|
- *-C* ) $mdadm 2> $targetdir/stderr --quiet "$@" --auto=yes;; |
|
- * ) $mdadm 2> $targetdir/stderr --quiet "$@" |
|
- esac |
|
- rv=$? |
|
- case $* in |
|
- *-S* ) udevadm settle |
|
- echo $p > /proc/sys/dev/raid/speed_limit_max |
|
- esac |
|
- cat >&2 $targetdir/stderr |
|
- return $rv |
|
+ rm -f $targetdir/stderr |
|
+ case $* in |
|
+ *-S* ) |
|
+ udevadm settle |
|
+ p=`cat /proc/sys/dev/raid/speed_limit_max` |
|
+ echo 20000 > /proc/sys/dev/raid/speed_limit_max |
|
+ ;; |
|
+ esac |
|
+ case $* in |
|
+ *-C* ) |
|
+ $mdadm 2> $targetdir/stderr --quiet "$@" --auto=yes |
|
+ ;; |
|
+ * ) |
|
+ $mdadm 2> $targetdir/stderr --quiet "$@" |
|
+ ;; |
|
+ esac |
|
+ rv=$? |
|
+ case $* in |
|
+ *-S* ) |
|
+ udevadm settle |
|
+ echo $p > /proc/sys/dev/raid/speed_limit_max |
|
+ ;; |
|
+ esac |
|
+ cat >&2 $targetdir/stderr |
|
+ return $rv |
|
} |
|
|
|
# check various things |
|
check() { |
|
- case $1 in |
|
- spares ) |
|
- spares=`tr '] ' '\012\012' < /proc/mdstat | grep -c '(S)' || exit 0` |
|
- if [ $spares -ne $2 ] |
|
- then |
|
- echo >&2 "ERROR expected $2 spares, found $spares"; exit 1; |
|
- fi |
|
- ;; |
|
- raid* | linear ) |
|
- grep -s "active $1 " /proc/mdstat > /dev/null || { |
|
- echo >&2 "ERROR active $1 not found" ; cat /proc/mdstat ; exit 1;} |
|
- ;; |
|
- algorithm ) |
|
- grep -s " algorithm $2 " /proc/mdstat > /dev/null || { |
|
- echo >&2 "ERROR algorithm $2 not found"; cat /proc/mdstat; exit 1;} |
|
- ;; |
|
- resync | recovery | reshape) |
|
- cnt=5 |
|
- while ! grep -s $1 /proc/mdstat > /dev/null |
|
- do |
|
- if [ $cnt -gt 0 ] && grep -v idle /sys/block/md*/md/sync_action > /dev/null |
|
- then # Something isn't idle - wait a bit |
|
+ case $1 in |
|
+ spares ) |
|
+ spares=`tr '] ' '\012\012' < /proc/mdstat | grep -c '(S)' || exit 0` |
|
+ if [ $spares -ne $2 ] |
|
+ then |
|
+ echo >&2 "ERROR expected $2 spares, found $spares" |
|
+ exit 1 |
|
+ fi |
|
+ ;; |
|
+ raid* | linear ) |
|
+ grep -s "active $1 " /proc/mdstat > /dev/null || { |
|
+ echo >&2 "ERROR active $1 not found" |
|
+ cat /proc/mdstat |
|
+ exit 1 |
|
+ } |
|
+ ;; |
|
+ algorithm ) |
|
+ grep -s " algorithm $2 " /proc/mdstat > /dev/null || { |
|
+ echo >&2 "ERROR algorithm $2 not found" |
|
+ cat /proc/mdstat |
|
+ exit 1 |
|
+ } |
|
+ ;; |
|
+ resync | recovery | reshape ) |
|
+ cnt=5 |
|
+ while ! grep -s $1 /proc/mdstat > /dev/null |
|
+ do |
|
+ if [ $cnt -gt 0 ] && grep -v idle /sys/block/md*/md/sync_action > /dev/null |
|
+ then # Something isn't idle - wait a bit |
|
+ sleep 0.5 |
|
+ cnt=$[cnt-1] |
|
+ else |
|
+ echo >&2 ERROR no $1 happening |
|
+ cat /proc/mdstat |
|
+ exit 1 |
|
+ fi |
|
+ done |
|
+ ;; |
|
+ nosync ) |
|
sleep 0.5 |
|
- cnt=$[cnt-1] |
|
- else |
|
- echo >&2 ERROR no $1 happening; cat /proc/mdstat; exit 1 |
|
- fi |
|
- done |
|
- ;; |
|
- |
|
- nosync ) |
|
- sleep 0.5 |
|
- # Since 4.2 we delay the close of recovery until there has been a chance for |
|
- # spares to be activated. That means that a recovery that finds nothing |
|
- # to do can still take a little longer than expected. |
|
- # add an extra check: is sync_completed shows the end is reached, assume |
|
- # there is no recovery. |
|
- if grep -s -E '(resync|recovery|reshape) *=' > /dev/null /proc/mdstat ; then |
|
- incomplete=`grep / /sys/block/md*/md/sync_completed 2> /dev/null | sed '/^ *\([0-9]*\) \/ \1/d'` |
|
- if [ -n "$incomplete" ]; then |
|
- echo >&2 "ERROR resync or recovery is happening!"; cat /proc/mdstat ; exit 1; |
|
- fi |
|
- fi |
|
- ;; |
|
- |
|
- wait ) |
|
- p=`cat /proc/sys/dev/raid/speed_limit_max` |
|
- echo 2000000 > /proc/sys/dev/raid/speed_limit_max |
|
- sleep 0.1 |
|
- while grep -E '(resync|recovery|reshape|check|repair) *=' > /dev/null /proc/mdstat || |
|
- grep -v idle > /dev/null /sys/block/md*/md/sync_action |
|
- do sleep 0.5; |
|
- done |
|
- echo $p > /proc/sys/dev/raid/speed_limit_max |
|
- ;; |
|
- |
|
- state ) |
|
- grep -s "blocks.*\[$2\]\$" /proc/mdstat > /dev/null || { |
|
- echo >&2 "ERROR state $2 not found!"; cat /proc/mdstat ; exit 1; } |
|
- sleep 0.5 |
|
- ;; |
|
- |
|
- bitmap ) |
|
- grep -s bitmap > /dev/null /proc/mdstat || { |
|
- echo >&2 ERROR no bitmap ; cat /proc/mdstat ; exit 1; } |
|
- ;; |
|
- nobitmap ) |
|
- if grep -s "bitmap" > /dev/null /proc/mdstat |
|
- then |
|
- echo >&2 ERROR bitmap present ; cat /proc/mdstat ; exit 1; |
|
- fi |
|
- ;; |
|
- |
|
- readonly ) |
|
- grep -s "read-only" > /dev/null /proc/mdstat || { |
|
- echo >&2 "ERROR array is not read-only!"; cat /proc/mdstat ; exit 1; } |
|
- ;; |
|
- |
|
- inactive ) |
|
- grep -s "inactive" > /dev/null /proc/mdstat || { |
|
- echo >&2 "ERROR array is not inactive!"; cat /proc/mdstat ; exit 1; } |
|
- ;; |
|
- * ) echo >&2 ERROR unknown check $1 ; exit 1; |
|
- esac |
|
+ # Since 4.2 we delay the close of recovery until there has been a chance for |
|
+ # spares to be activated. That means that a recovery that finds nothing |
|
+ # to do can still take a little longer than expected. |
|
+ # add an extra check: is sync_completed shows the end is reached, assume |
|
+ # there is no recovery. |
|
+ if grep -s -E '(resync|recovery|reshape) *=' > /dev/null /proc/mdstat |
|
+ then |
|
+ incomplete=`grep / /sys/block/md*/md/sync_completed 2> /dev/null | sed '/^ *\([0-9]*\) \/ \1/d'` |
|
+ if [ -n "$incomplete" ] |
|
+ then |
|
+ echo >&2 "ERROR resync or recovery is happening!" |
|
+ cat /proc/mdstat |
|
+ exit 1 |
|
+ fi |
|
+ fi |
|
+ ;; |
|
+ wait ) |
|
+ p=`cat /proc/sys/dev/raid/speed_limit_max` |
|
+ echo 2000000 > /proc/sys/dev/raid/speed_limit_max |
|
+ sleep 0.1 |
|
+ while grep -E '(resync|recovery|reshape|check|repair) *=' > /dev/null /proc/mdstat || |
|
+ grep -v idle > /dev/null /sys/block/md*/md/sync_action |
|
+ do |
|
+ sleep 0.5 |
|
+ done |
|
+ echo $p > /proc/sys/dev/raid/speed_limit_max |
|
+ ;; |
|
+ state ) |
|
+ grep -s "blocks.*\[$2\]\$" /proc/mdstat > /dev/null || { |
|
+ echo >&2 "ERROR state $2 not found!" |
|
+ cat /proc/mdstat |
|
+ exit 1 |
|
+ } |
|
+ sleep 0.5 |
|
+ ;; |
|
+ bitmap ) |
|
+ grep -s bitmap > /dev/null /proc/mdstat || { |
|
+ echo >&2 ERROR no bitmap |
|
+ cat /proc/mdstat |
|
+ exit 1 |
|
+ } |
|
+ ;; |
|
+ nobitmap ) |
|
+ if grep -s "bitmap" > /dev/null /proc/mdstat |
|
+ then |
|
+ echo >&2 ERROR bitmap present |
|
+ cat /proc/mdstat |
|
+ exit 1 |
|
+ fi |
|
+ ;; |
|
+ readonly ) |
|
+ grep -s "read-only" > /dev/null /proc/mdstat || { |
|
+ echo >&2 "ERROR array is not read-only!" |
|
+ cat /proc/mdstat |
|
+ exit 1 |
|
+ } |
|
+ ;; |
|
+ inactive ) |
|
+ grep -s "inactive" > /dev/null /proc/mdstat || { |
|
+ echo >&2 "ERROR array is not inactive!" |
|
+ cat /proc/mdstat |
|
+ exit 1 |
|
+ } |
|
+ ;; |
|
+ * ) |
|
+ echo >&2 ERROR unknown check $1 |
|
+ exit 1 |
|
+ ;; |
|
+ esac |
|
} |
|
|
|
no_errors() { |
|
- if [ -s $targetdir/stderr ] |
|
- then echo Bad errors from mdadm: ; cat $targetdir/stderr; exit 2; |
|
- fi |
|
+ if [ -s $targetdir/stderr ] |
|
+ then |
|
+ echo Bad errors from mdadm: |
|
+ cat $targetdir/stderr |
|
+ exit 2 |
|
+ fi |
|
} |
|
-# basic device test |
|
|
|
+# basic device test |
|
testdev() { |
|
- udevadm settle |
|
- dev=$1 |
|
- cnt=$2 |
|
- dvsize=$3 |
|
- chunk=$4 |
|
- if [ -z "$5" ]; then |
|
- mkfs.ext3 -F -j $dev > /dev/null 2>&1 && fsck -fn $dev >&2 |
|
- fi |
|
- dsize=$[dvsize/chunk] |
|
- dsize=$[dsize*chunk] |
|
- rasize=$[dsize*2*cnt] |
|
- # rasize is in sectors |
|
- if [ -n "$DEV_ROUND_K" ]; then |
|
- rasize=$[rasize/DEV_ROUND_K/2] |
|
- rasize=$[rasize*DEV_ROUND_K*2] |
|
- fi |
|
- if [ `/sbin/blockdev --getsize $dev` -eq 0 ]; then sleep 2 ; fi |
|
- _sz=`/sbin/blockdev --getsize $dev` |
|
- if [ $rasize -lt $_sz -o $[rasize*4/5] -gt $_sz ] |
|
- then |
|
- echo "ERROR: size is wrong for $dev: $cnt * $dvsize (chunk=$chunk) = $rasize, not $_sz" |
|
- exit 1 |
|
- fi |
|
+ udevadm settle |
|
+ dev=$1 |
|
+ cnt=$2 |
|
+ dvsize=$3 |
|
+ chunk=$4 |
|
+ if [ -z "$5" ] |
|
+ then |
|
+ mkfs.ext3 -F -j $dev > /dev/null 2>&1 && fsck -fn $dev >&2 |
|
+ fi |
|
+ dsize=$[dvsize/chunk] |
|
+ dsize=$[dsize*chunk] |
|
+ rasize=$[dsize*2*cnt] |
|
+ # rasize is in sectors |
|
+ if [ -n "$DEV_ROUND_K" ] |
|
+ then |
|
+ rasize=$[rasize/DEV_ROUND_K/2] |
|
+ rasize=$[rasize*DEV_ROUND_K*2] |
|
+ fi |
|
+ if [ `/sbin/blockdev --getsize $dev` -eq 0 ] |
|
+ then |
|
+ sleep 2 |
|
+ fi |
|
+ _sz=`/sbin/blockdev --getsize $dev` |
|
+ if [ $rasize -lt $_sz -o $[rasize*4/5] -gt $_sz ] |
|
+ then |
|
+ echo "ERROR: size is wrong for $dev: $cnt * $dvsize (chunk=$chunk) = $rasize, not $_sz" |
|
+ exit 1 |
|
+ fi |
|
} |
|
|
|
fast_sync() { |
|
- echo 200000 > /proc/sys/dev/raid/speed_limit_max |
|
+ echo 200000 > /proc/sys/dev/raid/speed_limit_max |
|
} |
|
|
|
rotest() { |
|
- dev=$1 |
|
- fsck -fn $dev >&2 |
|
+ dev=$1 |
|
+ fsck -fn $dev >&2 |
|
} |
|
|
|
do_test() { |
|
- _script=$1 |
|
- _basename=`basename $_script` |
|
- if [ -f "$_script" ] |
|
- then |
|
- rm -f $targetdir/stderr |
|
- # stop all arrays, just incase some script left an array active. |
|
- $mdadm -Ssq 2> /dev/null |
|
- mdadm --zero $devlist 2> /dev/null |
|
- mdadm --zero $devlist 2> /dev/null |
|
- # this might have been reset: restore the default. |
|
- echo 2000 > /proc/sys/dev/raid/speed_limit_max |
|
- # source script in a subshell, so it has access to our |
|
- # namespace, but cannot change it. |
|
- echo -ne "$_script... " |
|
- if ( set -ex ; . $_script ) &> $targetdir/log |
|
- then |
|
- echo "succeeded" |
|
- _fail=0 |
|
- else |
|
- log=log |
|
- cat $targetdir/stderr >> $targetdir/log |
|
- echo "=======================dmesg=================" >> $targetdir/log |
|
- dmesg | tail -n 200 >> $targetdir/log |
|
- if [ $exitonerror == 0 ]; then |
|
- log=log-`basename $_script` |
|
- mv $targetdir/log $logdir/$log |
|
- fi |
|
- echo "FAILED - see $logdir/$log for details" |
|
- _fail=1 |
|
- fi |
|
- if [ "$savelogs" == "1" ]; then |
|
- cp $targetdir/log $logdir/$_basename.log |
|
- fi |
|
- if [ "$_fail" == "1" -a "$exitonerror" == "1" ]; then |
|
- exit 1 |
|
- fi |
|
- fi |
|
+ _script=$1 |
|
+ _basename=`basename $_script` |
|
+ if [ -f "$_script" ] |
|
+ then |
|
+ rm -f $targetdir/stderr |
|
+ # stop all arrays, just incase some script left an array active. |
|
+ $mdadm -Ssq 2> /dev/null |
|
+ mdadm --zero $devlist 2> /dev/null |
|
+ mdadm --zero $devlist 2> /dev/null |
|
+ # this might have been reset: restore the default. |
|
+ echo 2000 > /proc/sys/dev/raid/speed_limit_max |
|
+ # source script in a subshell, so it has access to our |
|
+ # namespace, but cannot change it. |
|
+ echo -ne "$_script... " |
|
+ if ( set -ex ; . $_script ) &> $targetdir/log |
|
+ then |
|
+ echo "succeeded" |
|
+ _fail=0 |
|
+ else |
|
+ log=log |
|
+ cat $targetdir/stderr >> $targetdir/log |
|
+ echo "=======================dmesg=================" >> $targetdir/log |
|
+ dmesg | tail -n 200 >> $targetdir/log |
|
+ if [ $exitonerror == 0 ]; then |
|
+ log=log-`basename $_script` |
|
+ mv $targetdir/log $logdir/$log |
|
+ fi |
|
+ echo "FAILED - see $logdir/$log for details" |
|
+ _fail=1 |
|
+ fi |
|
+ if [ "$savelogs" == "1" ] |
|
+ then |
|
+ cp $targetdir/log $logdir/$_basename.log |
|
+ fi |
|
+ if [ "$_fail" == "1" -a "$exitonerror" == "1" ] |
|
+ then |
|
+ exit 1 |
|
+ fi |
|
+ fi |
|
} |
|
|
|
do_help() { |
|
- echo "Usage: $0 [options]" |
|
- echo " Options:" |
|
- echo " --tests=<test1,test2,..> Comma separated list of tests to run" |
|
- echo " --disable-multipath Disable any tests involving multipath" |
|
- echo " --disable-integrity Disable slow tests of RAID[56] consistency" |
|
- echo " --logdir=<directory> Directory to save logfiles in" |
|
- echo " --save-logs Save all logs in <logdir>" |
|
- echo " --keep-going Don't stop on error, ie. run all tests" |
|
- echo " --dev=[loop|lvm|ram] Use loop devices (default), LVM, or RAM disk" |
|
- echo " --volgroup=<name> LVM volume group for LVM test" |
|
- echo " setup Setup test environment and exit" |
|
- echo " cleanup Cleanup test environment" |
|
- echo " <prefix> Run tests with <prefix>" |
|
+ echo "Usage: $0 [options]" |
|
+ echo " Options:" |
|
+ echo " --tests=<test1,test2,..> Comma separated list of tests to run" |
|
+ echo " --disable-multipath Disable any tests involving multipath" |
|
+ echo " --disable-integrity Disable slow tests of RAID[56] consistency" |
|
+ echo " --logdir=<directory> Directory to save logfiles in" |
|
+ echo " --save-logs Save all logs in <logdir>" |
|
+ echo " --keep-going Don't stop on error, ie. run all tests" |
|
+ echo " --dev=[loop|lvm|ram] Use loop devices (default), LVM, or RAM disk" |
|
+ echo " --volgroup=<name> LVM volume group for LVM test" |
|
+ echo " setup Setup test environment and exit" |
|
+ echo " cleanup Cleanup test environment" |
|
+ echo " <prefix> Run tests with <prefix>" |
|
} |
|
|
|
parse_args() { |
|
- for i in $* |
|
- do |
|
- case $i in |
|
- [0-9]*) |
|
- prefix=$i |
|
- ;; |
|
- setup) |
|
- echo "mdadm test environment setup" |
|
- do_setup |
|
- trap 0; exit 0 |
|
- ;; |
|
- cleanup) |
|
- cleanup |
|
- exit 0 |
|
- ;; |
|
- --tests=*) |
|
- TESTLIST=`expr "x$i" : 'x[^=]*=\(.*\)' | sed -e 's/,/ /g'` |
|
- ;; |
|
- --logdir=*) |
|
- logdir=`expr "x$i" : 'x[^=]*=\(.*\)'` |
|
- ;; |
|
- --save-logs) |
|
- savelogs=1 |
|
- ;; |
|
- --keep-going | --no-error) |
|
- exitonerror=0 |
|
- ;; |
|
- --disable-multipath) |
|
- unset MULTIPATH |
|
- ;; |
|
- --disable-integrity) |
|
- unset INTEGRITY |
|
- ;; |
|
- --dev=loop) |
|
- DEVTYPE=loop |
|
- ;; |
|
- --dev=lvm) |
|
- DEVTYPE=lvm |
|
- ;; |
|
- --dev=ram) |
|
- DEVTYPE=ram |
|
- ;; |
|
- --volgroup=*) |
|
- LVM_VOLGROUP=`expr "x$i" : 'x[^=]*=\(.*\)'` |
|
- ;; |
|
- --help) |
|
- do_help |
|
- exit 0; |
|
- ;; |
|
- -*) |
|
- echo " $0: Unknown argument: $i" |
|
- do_help |
|
- exit 0; |
|
- ;; |
|
- esac |
|
-done |
|
+ for i in $* |
|
+ do |
|
+ case $i in |
|
+ [0-9]* ) |
|
+ prefix=$i |
|
+ ;; |
|
+ setup ) |
|
+ echo "mdadm test environment setup" |
|
+ do_setup |
|
+ trap 0 |
|
+ exit 0 |
|
+ ;; |
|
+ cleanup ) |
|
+ cleanup |
|
+ exit 0 |
|
+ ;; |
|
+ --tests=* ) |
|
+ TESTLIST=`expr "x$i" : 'x[^=]*=\(.*\)' | sed -e 's/,/ /g'` |
|
+ ;; |
|
+ --logdir=* ) |
|
+ logdir=`expr "x$i" : 'x[^=]*=\(.*\)'` |
|
+ ;; |
|
+ --save-logs ) |
|
+ savelogs=1 |
|
+ ;; |
|
+ --keep-going | --no-error ) |
|
+ exitonerror=0 |
|
+ ;; |
|
+ --disable-multipath ) |
|
+ unset MULTIPATH |
|
+ ;; |
|
+ --disable-integrity ) |
|
+ unset INTEGRITY |
|
+ ;; |
|
+ --dev=loop ) |
|
+ DEVTYPE=loop |
|
+ ;; |
|
+ --dev=lvm ) |
|
+ DEVTYPE=lvm |
|
+ ;; |
|
+ --dev=ram ) |
|
+ DEVTYPE=ram |
|
+ ;; |
|
+ --volgroup=* ) |
|
+ LVM_VOLGROUP=`expr "x$i" : 'x[^=]*=\(.*\)'` |
|
+ ;; |
|
+ --help ) |
|
+ do_help |
|
+ exit 0 |
|
+ ;; |
|
+ -* ) |
|
+ echo " $0: Unknown argument: $i" |
|
+ do_help |
|
+ exit 0 |
|
+ ;; |
|
+ esac |
|
+ done |
|
} |
|
|
|
logdir=$targetdir |
|
@@ -422,19 +474,21 @@ parse_args $@ |
|
do_setup |
|
mkdir -p $logdir |
|
|
|
-if [ "$savelogs" == "1" ]; then |
|
- echo "Saving logs to $logdir" |
|
+if [ "$savelogs" == "1" ] |
|
+then |
|
+ echo "Saving logs to $logdir" |
|
fi |
|
|
|
-if [ "x$TESTLIST" != "x" ]; then |
|
- for script in $TESTLIST |
|
- do |
|
- do_test $testdir/$script |
|
- done |
|
+if [ "x$TESTLIST" != "x" ] |
|
+then |
|
+ for script in $TESTLIST |
|
+ do |
|
+ do_test $testdir/$script |
|
+ done |
|
else |
|
- for script in $testdir/$prefix $testdir/$prefix*[^~] |
|
- do |
|
- do_test $script |
|
- done |
|
+ for script in $testdir/$prefix $testdir/$prefix*[^~] |
|
+ do |
|
+ do_test $script |
|
+ done |
|
fi |
|
exit 0 |
|
-- |
|
2.7.4 |
|
|
|
|