-#!/bin/sh
+#!/bin/bash
#
# run test suite for mdadm
user=`id -un`
testdir="tests"
logdir="$testdir/logs"
logsave=0
+exitonerror=1
# Check whether to run multipath tests
modprobe multipath 2> /dev/null
done
}
-trap cleanup 0 1 2 3 15
+ctrl-c() {
+ exitonerror=1
+}
-devlist=
-for d in 0 1 2 3 4 5 6 7 8 9 10 11 12
-do
- sz=$size
- if [ $d -gt 7 ]; then sz=$ddfsize ; fi
- [ -f $targetdir/mdtest$d ] || dd if=/dev/zero of=$targetdir/mdtest$d count=$sz bs=1K > /dev/null 2>&1
- [ -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
- eval devlist=\"\$devlist \$dev$d\"
+do_setup() {
+ trap cleanup 0 1 3 15
+ trap ctrl-c 2
+
+ devlist=
+ for d in 0 1 2 3 4 5 6 7 8 9 10 11 12
+ do
+ sz=$size
+ if [ $d -gt 7 ]; then sz=$ddfsize ; fi
+ [ -f $targetdir/mdtest$d ] || dd if=/dev/zero of=$targetdir/mdtest$d count=$sz bs=1K > /dev/null 2>&1
+ [ -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
+ eval devlist=\"\$devlist \$dev$d\"
#" <-- add this quote to un-confuse vim syntax highlighting
-done
-path0=$dev6
-path1=$dev7
+ 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
+ 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() {
# source script in a subshell, so it has access to our
# namespace, but cannot change it.
echo -ne "$_script... "
- if ( set -ex ; . $_script ) 2> $targetdir/log
+ if ( set -ex ; . $_script ) &> $targetdir/log
then
echo "succeeded"
_fail=0
else
- echo "FAILED - see $targetdir/log for details"
+ log=log
+ if [ $exitonerror == 0 ]; then
+ log=log-`basename $_script`
+ mv $targetdir/log $targetdir/$log
+ fi
+ echo "FAILED - see $targetdir/$log for details"
_fail=1
fi
if [ "$savelogs" == "1" ]; then
cp $targetdir/log $logdir/$_basename.log
fi
- if [ "$_fail" == "1" ]; then
+ if [ "$_fail" == "1" -a "$exitonerror" == "1" ]; then
exit 1
fi
fi
}
do_help() {
- echo "Usage: "
- echo " $0 [--tests=<test1,test2,..>] [--disable-multipath] [--logdir] [--save-logs] [setup] [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 " --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 " setup Setup test environment and exit"
+ echo " cleanup Cleanup test environment"
+ echo " <prefix> Run tests with <prefix>"
}
parse_args() {
;;
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'`
;;
fi
fi
;;
+ --keep-going | --no-error)
+ exitonerror=0
+ ;;
--disable-multipath)
unset MULTIPATH
;;
parse_args $@
+do_setup
+
if [ "$savelogs" == "1" ]; then
echo "Saving logs to $logdir"
fi