]> git.ipfire.org Git - thirdparty/mdadm.git/blame - test
Create.c: fix uclibc build
[thirdparty/mdadm.git] / test
CommitLineData
23b7d3b9 1#!/bin/bash
5e7519fa
NB
2#
3# run test suite for mdadm
4c12714d 4mdadm=`which mdadm`
20d10b4b
ZL
5targetdir="/var/tmp"
6logdir="$targetdir"
7config=/tmp/mdadm.conf
59416da7 8testdir=$PWD/tests
4c12714d 9system_speed_limit=`cat /proc/sys/dev/raid/speed_limit_max`
6c33d34d 10devlist=
60381555 11
20d10b4b
ZL
12savelogs=0
13exitonerror=1
28520bf1
LG
14ctrl_c_error=0
15skipbroken=0
a7bfcc71 16loop=1
20d10b4b 17prefix='[0-9][0-9]'
98a92cff 18
20d10b4b 19# use loop devices by default if doesn't specify --dev
7d8a70bf 20DEVTYPE=loop
20d10b4b 21INTEGRITY=yes
7d8a70bf 22LVM_VOLGROUP=mdtest
04c1ca5f 23
5e7519fa 24# assume md0, md1, md2 exist in /dev
662c349a
ZL
25md0=/dev/md0
26md1=/dev/md1
27md2=/dev/md2
1f48664b
NB
28mdp0=/dev/md_d0
29mdp1=/dev/md_d1
5e7519fa 30
20d10b4b
ZL
31die() {
32 echo -e "\n\tERROR: $* \n"
33 save_log fail
34 exit 2
35}
ed02d9cc 36
d5a221a5 37ctrl_c() {
4d5995c4 38 exitonerror=1
28520bf1 39 ctrl_c_error=1
4d5995c4
GE
40}
41
4c12714d
MK
42restore_system_speed_limit() {
43 echo $system_speed_limit > /proc/sys/dev/raid/speed_limit_max
44}
45
dab6685f 46mdadm() {
662c349a
ZL
47 rm -f $targetdir/stderr
48 case $* in
49 *-S* )
50 udevadm settle
51 p=`cat /proc/sys/dev/raid/speed_limit_max`
52 echo 20000 > /proc/sys/dev/raid/speed_limit_max
53 ;;
54 esac
55 case $* in
20d10b4b
ZL
56 *-C* | *--create* | *-B* | *--build* )
57 # clear superblock every time once creating or
58 # building arrays, because it's always creating
59 # and building array many times in a test case.
60 for args in $*
61 do
62 [[ $args =~ "/dev/" ]] && {
63 [[ $args =~ "md" ]] ||
64 $mdadm --zero $args > /dev/null
65 }
66 done
4c12714d 67 $mdadm 2> $targetdir/stderr "$@" --auto=yes
662c349a
ZL
68 ;;
69 * )
4c12714d 70 $mdadm 2> $targetdir/stderr "$@"
662c349a
ZL
71 ;;
72 esac
73 rv=$?
74 case $* in
75 *-S* )
76 udevadm settle
77 echo $p > /proc/sys/dev/raid/speed_limit_max
78 ;;
79 esac
80 cat >&2 $targetdir/stderr
81 return $rv
dab6685f
NB
82}
83
4e5ce543 84do_test() {
662c349a
ZL
85 _script=$1
86 _basename=`basename $_script`
28520bf1
LG
87 _broken=0
88
662c349a
ZL
89 if [ -f "$_script" ]
90 then
28520bf1
LG
91 if [ -f "${_script}.broken" ]; then
92 _broken=1
93 _broken_msg=$(head -n1 "${_script}.broken" | tr -d '\n')
94 if [ "$skipbroken" == "all" ]; then
95 return
96 elif [ "$skipbroken" == "always" ] &&
97 [[ "$_broken_msg" == *always* ]]; then
98 return
99 fi
100 fi
101
662c349a 102 rm -f $targetdir/stderr
064bd3f5 103 do_clean
662c349a
ZL
104 # source script in a subshell, so it has access to our
105 # namespace, but cannot change it.
106 echo -ne "$_script... "
107 if ( set -ex ; . $_script ) &> $targetdir/log
108 then
0ef9465f
YK
109 if [ -f "${_script}.inject_error" ]; then
110 echo "dmesg checking is skipped because test inject error"
111 else
112 dmesg | grep -iq "error\|call trace\|segfault" &&
113 die "dmesg prints errors when testing $_basename!"
114 fi
662c349a
ZL
115 echo "succeeded"
116 _fail=0
117 else
20d10b4b 118 save_log fail
662c349a 119 _fail=1
28520bf1
LG
120 if [ "$_broken" == "1" ]; then
121 echo " (KNOWN BROKEN TEST: $_broken_msg)"
122 fi
662c349a 123 fi
4c12714d 124 restore_system_speed_limit
20d10b4b
ZL
125 [ "$savelogs" == "1" ] &&
126 mv -f $targetdir/log $logdir/$_basename.log
28520bf1
LG
127 [ "$ctrl_c_error" == "1" ] && exit 1
128 [ "$_fail" == "1" -a "$exitonerror" == "1" \
129 -a "$_broken" == "0" ] && exit 1
662c349a 130 fi
4e5ce543
JS
131}
132
133do_help() {
20d10b4b
ZL
134 cat <<-EOF
135 Usage: $0 [options]
25357919 136 Example for disk mode: ./test --dev=disk --disks=/dev/sda{2..15}
20d10b4b
ZL
137 Options:
138 --tests=test1,test2,... Comma separated list of tests to run
6c33d34d 139 --testdir= Specify testdir as tests|clustermd_tests
8403b202 140 --raidtype= raid0|linear|raid1|raid456|raid10|ddf|imsm
20d10b4b
ZL
141 --disable-multipath Disable any tests involving multipath
142 --disable-integrity Disable slow tests of RAID[56] consistency
64a4fcb4 143 --disable-linear Disable any tests involving linear
20d10b4b
ZL
144 --logdir=directory Directory to save all logfiles in
145 --save-logs Usually use with --logdir together
146 --keep-going | --no-error Don't stop on error, ie. run all tests
a7bfcc71 147 --loop=N Run tests N times (0 to run forever)
28520bf1
LG
148 --skip-broken Skip tests that are known to be broken
149 --skip-always-broken Skip tests that are known to always fail
25357919
ZL
150 --dev=loop|lvm|ram|disk Use loop devices (default), LVM, RAM or disk
151 --disks= Provide a bunch of physical devices for test
20d10b4b
ZL
152 --volgroup=name LVM volume group for LVM test
153 setup Setup test environment and exit
154 cleanup Cleanup test environment
155 prefix Run tests with <prefix>
156 --help | -h Print this usage
157 EOF
4e5ce543
JS
158}
159
160parse_args() {
6c33d34d
ZL
161 for i in $*
162 do
163 case $i in
164 --testdir=* )
165 case ${i##*=} in
166 tests )
167 testdir=tests
168 ;;
169 clustermd_tests )
170 testdir=clustermd_tests
171 CLUSTER_CONF="$PWD/$testdir/cluster_conf"
172 ;;
173 * )
174 echo "Unknown argument: $i"
175 do_help
176 exit 1
177 ;;
178 esac
179 ;;
180 esac
181 done
182 [ -z "$testdir" ] && testdir=tests
183 . $testdir/func.sh
662c349a
ZL
184 for i in $*
185 do
186 case $i in
20d10b4b 187 [0-9][0-9] )
662c349a
ZL
188 prefix=$i
189 ;;
190 setup )
191 echo "mdadm test environment setup"
192 do_setup
193 trap 0
194 exit 0
195 ;;
196 cleanup )
197 cleanup
198 exit 0
199 ;;
6c33d34d
ZL
200 --testdir=* )
201 ;;
662c349a 202 --tests=* )
20d10b4b 203 TESTLIST=($(echo ${i##*=} | sed -e 's/,/ /g'))
662c349a 204 ;;
8403b202
ZL
205 --raidtype=* )
206 case ${i##*=} in
207 raid0 )
208 TESTLIST=($(ls $testdir | grep "[0-9][0-9]r0\|raid0"))
209 ;;
210 linear )
211 TESTLIST=($(ls $testdir | grep "linear"))
212 ;;
213 raid1 )
05e0e58f 214 TESTLIST=($(ls $testdir | grep "[0-9][0-9]r1\|raid1" | grep -vi "r10\|raid10"))
8403b202
ZL
215 ;;
216 raid456 )
217 TESTLIST=($(ls $testdir | grep "[0-9][0-9]r[4-6]\|raid[4-6]"))
218 ;;
219 raid10 )
220 TESTLIST=($(ls $testdir | grep "[0-9][0-9]r10\|raid10"))
221 ;;
222 ddf )
223 TESTLIST=($(ls $testdir | grep "[0-9][0-9]ddf"))
224 ;;
225 imsm )
226 TESTLIST=($(ls $testdir | grep "[0-9][0-9]imsm"))
227 ;;
228 * )
229 echo "Unknown argument: $i"
230 do_help
231 exit 1
232 ;;
233 esac
234 ;;
662c349a 235 --logdir=* )
20d10b4b 236 logdir="${i##*=}"
662c349a
ZL
237 ;;
238 --save-logs )
239 savelogs=1
240 ;;
241 --keep-going | --no-error )
242 exitonerror=0
243 ;;
a7bfcc71
LG
244 --loop=* )
245 loop="${i##*=}"
246 ;;
28520bf1
LG
247 --skip-broken )
248 skipbroken=all
249 ;;
250 --skip-always-broken )
251 skipbroken=always
252 ;;
662c349a
ZL
253 --disable-multipath )
254 unset MULTIPATH
255 ;;
256 --disable-integrity )
257 unset INTEGRITY
258 ;;
64a4fcb4
SL
259 --disable-linear )
260 unset LINEAR
261 ;;
20d10b4b
ZL
262 --dev=* )
263 case ${i##*=} in
264 loop )
265 DEVTYPE=loop
266 ;;
267 lvm )
268 DEVTYPE=lvm
269 ;;
270 ram )
271 DEVTYPE=ram
272 ;;
25357919
ZL
273 disk )
274 DEVTYPE=disk
275 ;;
20d10b4b
ZL
276 * )
277 echo "Unknown argument: $i"
278 do_help
279 exit 1
280 ;;
281 esac
662c349a 282 ;;
25357919
ZL
283 --disks=* )
284 disks=(${disks[*]} ${i##*=})
285 ;;
662c349a
ZL
286 --volgroup=* )
287 LVM_VOLGROUP=`expr "x$i" : 'x[^=]*=\(.*\)'`
288 ;;
20d10b4b 289 --help | -h )
662c349a
ZL
290 do_help
291 exit 0
292 ;;
20d10b4b 293 * )
662c349a
ZL
294 echo " $0: Unknown argument: $i"
295 do_help
20d10b4b 296 exit 1
662c349a
ZL
297 ;;
298 esac
299 done
4e5ce543
JS
300}
301
4c12714d
MK
302print_warning() {
303 cat <<-EOF
304 Warning! Tests are performed on system level mdadm!
305 If you want to test local build, you need to install it first!
306 EOF
307}
308
20d10b4b 309main() {
4c12714d 310 print_warning
20d10b4b 311 do_setup
572d7091 312
20d10b4b
ZL
313 echo "Testing on linux-$(uname -r) kernel"
314 [ "$savelogs" == "1" ] &&
315 echo "Saving logs to $logdir"
60381555 316
a7bfcc71
LG
317 while true; do
318 if [ "x$TESTLIST" != "x" ]
319 then
320 for script in ${TESTLIST[@]}
321 do
322 do_test $testdir/$script
323 done
324 else
325 for script in $testdir/$prefix $testdir/$prefix*[^~]
326 do
28520bf1
LG
327 case $script in
328 *.broken) ;;
329 *)
330 do_test $script
331 esac
a7bfcc71
LG
332 done
333 fi
334
335 let loop=$loop-1
336 if [ "$loop" == "0" ]; then
337 break
338 fi
339 done
4c12714d 340
20d10b4b
ZL
341 exit 0
342}
343
344parse_args $@
345main