]> git.ipfire.org Git - thirdparty/mdadm.git/blame - test
mdadm/test: enable clustermd testing under clustermd_tests/
[thirdparty/mdadm.git] / test
CommitLineData
23b7d3b9 1#!/bin/bash
5e7519fa
NB
2#
3# run test suite for mdadm
cbb8d34a
ZL
4
5. tests/func.sh
6
7mdadm=$PWD/mdadm
60381555 8testdir="tests"
20d10b4b
ZL
9targetdir="/var/tmp"
10logdir="$targetdir"
11config=/tmp/mdadm.conf
60381555 12
20d10b4b
ZL
13savelogs=0
14exitonerror=1
15prefix='[0-9][0-9]'
98a92cff 16
20d10b4b 17# use loop devices by default if doesn't specify --dev
7d8a70bf 18DEVTYPE=loop
20d10b4b 19INTEGRITY=yes
7d8a70bf 20LVM_VOLGROUP=mdtest
04c1ca5f 21
9540cc24
N
22# make sure to test local mdmon, not system one
23export MDADM_NO_SYSTEMCTL=1
24
5e7519fa 25# assume md0, md1, md2 exist in /dev
662c349a
ZL
26md0=/dev/md0
27md1=/dev/md1
28md2=/dev/md2
1f48664b
NB
29mdp0=/dev/md_d0
30mdp1=/dev/md_d1
5e7519fa 31
20d10b4b
ZL
32die() {
33 echo -e "\n\tERROR: $* \n"
34 save_log fail
35 exit 2
36}
ed02d9cc 37
d5a221a5 38ctrl_c() {
4d5995c4
GE
39 exitonerror=1
40}
41
dab6685f
NB
42# mdadm always adds --quiet, and we want to see any unexpected messages
43mdadm() {
662c349a
ZL
44 rm -f $targetdir/stderr
45 case $* in
46 *-S* )
47 udevadm settle
48 p=`cat /proc/sys/dev/raid/speed_limit_max`
49 echo 20000 > /proc/sys/dev/raid/speed_limit_max
50 ;;
51 esac
52 case $* in
20d10b4b
ZL
53 *-C* | *--create* | *-B* | *--build* )
54 # clear superblock every time once creating or
55 # building arrays, because it's always creating
56 # and building array many times in a test case.
57 for args in $*
58 do
59 [[ $args =~ "/dev/" ]] && {
60 [[ $args =~ "md" ]] ||
61 $mdadm --zero $args > /dev/null
62 }
63 done
662c349a
ZL
64 $mdadm 2> $targetdir/stderr --quiet "$@" --auto=yes
65 ;;
66 * )
67 $mdadm 2> $targetdir/stderr --quiet "$@"
68 ;;
69 esac
70 rv=$?
71 case $* in
72 *-S* )
73 udevadm settle
74 echo $p > /proc/sys/dev/raid/speed_limit_max
75 ;;
76 esac
77 cat >&2 $targetdir/stderr
78 return $rv
dab6685f
NB
79}
80
4e5ce543 81do_test() {
662c349a
ZL
82 _script=$1
83 _basename=`basename $_script`
84 if [ -f "$_script" ]
85 then
86 rm -f $targetdir/stderr
87 # stop all arrays, just incase some script left an array active.
88 $mdadm -Ssq 2> /dev/null
89 mdadm --zero $devlist 2> /dev/null
662c349a
ZL
90 # this might have been reset: restore the default.
91 echo 2000 > /proc/sys/dev/raid/speed_limit_max
92 # source script in a subshell, so it has access to our
93 # namespace, but cannot change it.
94 echo -ne "$_script... "
95 if ( set -ex ; . $_script ) &> $targetdir/log
96 then
20d10b4b
ZL
97 dmesg | grep -iq "error\|call trace\|segfault" &&
98 die "dmesg prints errors when testing $_basename!"
662c349a
ZL
99 echo "succeeded"
100 _fail=0
101 else
20d10b4b 102 save_log fail
662c349a
ZL
103 _fail=1
104 fi
20d10b4b
ZL
105 [ "$savelogs" == "1" ] &&
106 mv -f $targetdir/log $logdir/$_basename.log
107 [ "$_fail" == "1" -a "$exitonerror" == "1" ] && exit 1
662c349a 108 fi
4e5ce543
JS
109}
110
111do_help() {
20d10b4b
ZL
112 cat <<-EOF
113 Usage: $0 [options]
25357919 114 Example for disk mode: ./test --dev=disk --disks=/dev/sda{2..15}
20d10b4b
ZL
115 Options:
116 --tests=test1,test2,... Comma separated list of tests to run
8403b202 117 --raidtype= raid0|linear|raid1|raid456|raid10|ddf|imsm
20d10b4b
ZL
118 --disable-multipath Disable any tests involving multipath
119 --disable-integrity Disable slow tests of RAID[56] consistency
120 --logdir=directory Directory to save all logfiles in
121 --save-logs Usually use with --logdir together
122 --keep-going | --no-error Don't stop on error, ie. run all tests
25357919
ZL
123 --dev=loop|lvm|ram|disk Use loop devices (default), LVM, RAM or disk
124 --disks= Provide a bunch of physical devices for test
20d10b4b
ZL
125 --volgroup=name LVM volume group for LVM test
126 setup Setup test environment and exit
127 cleanup Cleanup test environment
128 prefix Run tests with <prefix>
129 --help | -h Print this usage
130 EOF
4e5ce543
JS
131}
132
133parse_args() {
662c349a
ZL
134 for i in $*
135 do
136 case $i in
20d10b4b 137 [0-9][0-9] )
662c349a
ZL
138 prefix=$i
139 ;;
140 setup )
141 echo "mdadm test environment setup"
142 do_setup
143 trap 0
144 exit 0
145 ;;
146 cleanup )
147 cleanup
148 exit 0
149 ;;
150 --tests=* )
20d10b4b 151 TESTLIST=($(echo ${i##*=} | sed -e 's/,/ /g'))
662c349a 152 ;;
8403b202
ZL
153 --raidtype=* )
154 case ${i##*=} in
155 raid0 )
156 TESTLIST=($(ls $testdir | grep "[0-9][0-9]r0\|raid0"))
157 ;;
158 linear )
159 TESTLIST=($(ls $testdir | grep "linear"))
160 ;;
161 raid1 )
162 TESTLIST=($(ls $testdir | grep "[0-9][0-9]r1\|raid1" | grep -vi raid10))
163 ;;
164 raid456 )
165 TESTLIST=($(ls $testdir | grep "[0-9][0-9]r[4-6]\|raid[4-6]"))
166 ;;
167 raid10 )
168 TESTLIST=($(ls $testdir | grep "[0-9][0-9]r10\|raid10"))
169 ;;
170 ddf )
171 TESTLIST=($(ls $testdir | grep "[0-9][0-9]ddf"))
172 ;;
173 imsm )
174 TESTLIST=($(ls $testdir | grep "[0-9][0-9]imsm"))
175 ;;
176 * )
177 echo "Unknown argument: $i"
178 do_help
179 exit 1
180 ;;
181 esac
182 ;;
662c349a 183 --logdir=* )
20d10b4b 184 logdir="${i##*=}"
662c349a
ZL
185 ;;
186 --save-logs )
187 savelogs=1
188 ;;
189 --keep-going | --no-error )
190 exitonerror=0
191 ;;
192 --disable-multipath )
193 unset MULTIPATH
194 ;;
195 --disable-integrity )
196 unset INTEGRITY
197 ;;
20d10b4b
ZL
198 --dev=* )
199 case ${i##*=} in
200 loop )
201 DEVTYPE=loop
202 ;;
203 lvm )
204 DEVTYPE=lvm
205 ;;
206 ram )
207 DEVTYPE=ram
208 ;;
25357919
ZL
209 disk )
210 DEVTYPE=disk
211 ;;
20d10b4b
ZL
212 * )
213 echo "Unknown argument: $i"
214 do_help
215 exit 1
216 ;;
217 esac
662c349a 218 ;;
25357919
ZL
219 --disks=* )
220 disks=(${disks[*]} ${i##*=})
221 ;;
662c349a
ZL
222 --volgroup=* )
223 LVM_VOLGROUP=`expr "x$i" : 'x[^=]*=\(.*\)'`
224 ;;
20d10b4b 225 --help | -h )
662c349a
ZL
226 do_help
227 exit 0
228 ;;
20d10b4b 229 * )
662c349a
ZL
230 echo " $0: Unknown argument: $i"
231 do_help
20d10b4b 232 exit 1
662c349a
ZL
233 ;;
234 esac
235 done
4e5ce543
JS
236}
237
20d10b4b 238main() {
20d10b4b 239 do_setup
572d7091 240
20d10b4b
ZL
241 echo "Testing on linux-$(uname -r) kernel"
242 [ "$savelogs" == "1" ] &&
243 echo "Saving logs to $logdir"
244 if [ "x$TESTLIST" != "x" ]
245 then
246 for script in ${TESTLIST[@]}
247 do
248 do_test $testdir/$script
249 done
250 else
251 for script in $testdir/$prefix $testdir/$prefix*[^~]
252 do
253 do_test $script
254 done
255 fi
60381555 256
20d10b4b
ZL
257 exit 0
258}
259
260parse_args $@
261main