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