]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
mdadm/test: Add '--disks=' to support testing phsical devices
authorZhilong Liu <zlliu@suse.com>
Wed, 14 Jun 2017 13:02:53 +0000 (21:02 +0800)
committerJes Sorensen <jsorensen@fb.com>
Mon, 10 Jul 2017 17:37:54 +0000 (13:37 -0400)
If test mode has set as '--dev=disk', then users can specify
the argument of "--disks" to test a bunch of physical devices.
For example: ./test --dev=disk --disks=/dev/sda{2..15}
could execute all test cases on physical devices.

Currently, the --dev=disk mode would confilct with testdev()
in current test cases, thus ignore testing testdev() if has
set --dev=disk mode.

Signed-off-by: Zhilong Liu <zlliu@suse.com>
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
test

diff --git a/test b/test
index df2eeab8de2cb86330a085a7155aa9d8ac093f4d..87e2df2d0164999a6dbf1779eaccf94daddf05a5 100755 (executable)
--- a/test
+++ b/test
@@ -73,11 +73,11 @@ save_log() {
        then
                # not supported lvm type yet
                echo
-       elif [ $DEVTYPE == 'loop' ]
+       elif [ "$DEVTYPE" == 'loop' -o "$DEVTYPE" == 'disk' ]
        then
                if [ ! -z ${array[@]} -a ${#array[@]} -ge 1 ]
                then
-                       md_disks=($($mdadm -D -Y ${array[@]} | grep "/dev/$DEVTYPE" | cut -d'=' -f2))
+                       md_disks=($($mdadm -D -Y ${array[@]} | grep "/dev/" | cut -d'=' -f2))
                        cat /proc/mdstat | grep -q "bitmap"
                        if [ $? -eq 0 ]
                        then
@@ -114,6 +114,9 @@ cleanup() {
                        eval "lvremove --quiet -f \$dev$d"
                done
                ;;
+       disk )
+               $mdadm --zero ${disks[@]} &> /dev/null
+               ;;
        esac
 }
 
@@ -128,6 +131,7 @@ do_setup() {
        [ -d $logdir ] || mkdir -p $logdir
        dmesg -c > /dev/null
 
+       devlist=
        if [ "$DEVTYPE" == "loop" ]
        then
                # make sure there are no loop devices remaining.
@@ -139,8 +143,22 @@ do_setup() {
                        losetup -d /dev/loop[0-9]* 2> /dev/null
                        sleep 0.2
                done
+       elif [ "$DEVTYPE" == "disk" ]
+       then
+               if [ ! -z "$disks" ]
+               then
+                       for d in $(seq 0 ${#disks[@]})
+                       do
+                               eval "dev$d=${disks[$d]}"
+                               eval devlist=\"\$devlist \$dev$d\"
+                               eval devlist$d=\"\$devlist\"
+                       done
+                       $mdadm --zero ${disks[@]} &> /dev/null
+               else
+                       echo "Forget to provide physical devices for disk mode."
+                       exit 1
+               fi
        fi
-       devlist=
        for d in 0 1 2 3 4 5 6 7 8 9 10 11 12 13
        do
                sz=$size
@@ -320,6 +338,7 @@ no_errors() {
 # basic device test
 testdev() {
        [ -b $1 ] || die "$1 isn't a block device."
+       [ "$DEVTYPE" == "disk" ] && return 0
        udevadm settle
        dev=$1
        cnt=$2
@@ -383,6 +402,7 @@ do_test() {
 do_help() {
        cat <<-EOF
        Usage: $0 [options]
+       Example for disk mode: ./test --dev=disk --disks=/dev/sda{2..15}
        Options:
                --tests=test1,test2,...     Comma separated list of tests to run
                --raidtype=                 raid0|linear|raid1|raid456|raid10|ddf|imsm
@@ -391,7 +411,8 @@ do_help() {
                --logdir=directory          Directory to save all logfiles in
                --save-logs                 Usually use with --logdir together
                --keep-going | --no-error   Don't stop on error, ie. run all tests
-               --dev=loop|lvm|ram          Use loop devices (default), LVM, or RAM disk
+               --dev=loop|lvm|ram|disk     Use loop devices (default), LVM, RAM or disk
+               --disks=                    Provide a bunch of physical devices for test
                --volgroup=name             LVM volume group for LVM test
                setup                       Setup test environment and exit
                cleanup                     Cleanup test environment
@@ -476,6 +497,9 @@ parse_args() {
                        ram )
                                DEVTYPE=ram
                                ;;
+                       disk )
+                               DEVTYPE=disk
+                               ;;
                        * )
                                echo "Unknown argument: $i"
                                do_help
@@ -483,6 +507,9 @@ parse_args() {
                                ;;
                        esac
                        ;;
+               --disks=* )
+                       disks=(${disks[*]} ${i##*=})
+                       ;;
                --volgroup=* )
                        LVM_VOLGROUP=`expr "x$i" : 'x[^=]*=\(.*\)'`
                        ;;
@@ -509,7 +536,7 @@ check_env() {
                echo "test: please run 'make everything' before perform testing."
                exit 1
        }
-       cmds=(mdadm lsblk df udevadm losetup mkfs.ext3 fsck)
+       cmds=(mdadm lsblk df udevadm losetup mkfs.ext3 fsck seq)
        for cmd in ${cmds[@]}
        do
                which $cmd > /dev/null || {