Whamcloud - gitweb
land b_md onto HEAD. the highlights:
[fs/lustre-release.git] / lustre / tests / sanity.sh
1 #!/bin/bash
2
3 set -e
4
5 CHECKSTAT=${CHECKSTAT:-"./checkstat -v"}
6 MOUNT=${MOUNT:-/mnt/lustre}
7 export NAME=$NAME
8 clean() {
9         echo -n "cleanup..."
10         sh llmountcleanup.sh > /dev/null
11 }
12 CLEAN=${CLEAN:-clean}
13 start() {
14         echo -n "mounting..."
15         sh llrmount.sh > /dev/null
16         echo -n "mounted"
17 }
18 START=${START:-start}
19
20 error () { 
21     echo FAIL
22     exit 1
23 }
24
25 pass() { 
26     echo PASS
27 }
28
29 echo '== touch .../f ; rm .../f ======================== test 0'
30 touch $MOUNT/f
31 $CHECKSTAT -t file $MOUNT/f || error 
32 rm $MOUNT/f
33 $CHECKSTAT -a $MOUNT/f || error
34 pass
35 $CLEAN
36 $START
37
38 echo '== mkdir .../d1; mkdir .../d1/d2 ================= test 1'
39 mkdir $MOUNT/d1
40 mkdir $MOUNT/d1/d2
41 $CHECKSTAT -t dir $MOUNT/d1/d2 || error
42 pass
43 $CLEAN
44 $START
45
46 echo '== rmdir .../d1/d2; rmdir .../d1 ================= test 1b'
47 rmdir $MOUNT/d1/d2
48 rmdir $MOUNT/d1
49 $CHECKSTAT -a $MOUNT/d1 || error
50 pass
51 $CLEAN
52 $START
53
54 echo '== mkdir .../d2; touch .../d2/f ================== test 2'
55 mkdir $MOUNT/d2
56 touch $MOUNT/d2/f
57 $CHECKSTAT -t file $MOUNT/d2/f || error
58 pass
59 $CLEAN
60 $START
61
62 echo '== rm -r .../d2; touch .../d2/f ================== test 2b'
63 rm -r $MOUNT/d2
64 $CHECKSTAT -a $MOUNT/d2 || error
65 pass
66 $CLEAN
67 $START
68
69 echo '== mkdir .../d3 ================================== test 3'
70 mkdir $MOUNT/d3
71 $CHECKSTAT -t dir $MOUNT/d3 || error
72 pass
73 $CLEAN
74 $START
75 echo '== touch .../d3/f ================================ test 3b'
76 touch $MOUNT/d3/f
77 $CHECKSTAT -t file $MOUNT/d3/f || error
78 pass
79 $CLEAN
80 $START
81 echo '== rm -r .../d3 ================================== test 3c'
82 rm -r $MOUNT/d3
83 $CHECKSTAT -a $MOUNT/d3 || error
84 pass
85 $CLEAN
86 $START
87
88 echo '== mkdir .../d4 ================================== test 4'
89 mkdir $MOUNT/d4
90 $CHECKSTAT -t dir $MOUNT/d4 || error
91 pass
92 $CLEAN
93 $START
94 echo '== mkdir .../d4/d2 =============================== test 4b'
95 mkdir $MOUNT/d4/d2
96 $CHECKSTAT -t dir $MOUNT/d4/d2 || error
97 pass
98 $CLEAN
99 $START
100
101 echo '== mkdir .../d5; mkdir .../d5/d2; chmod .../d5/d2 = test 5'
102 mkdir $MOUNT/d5
103 mkdir $MOUNT/d5/d2
104 chmod 0666 $MOUNT/d5/d2
105 $CHECKSTAT -t dir -p 0666 $MOUNT/d5/d2 || error
106 pass
107 $CLEAN
108 $START
109
110 echo '== touch .../f6; chmod .../f6 ==================== test 6'
111 touch $MOUNT/f6
112 chmod 0666 $MOUNT/f6
113 $CHECKSTAT -t file -p 0666 $MOUNT/f6 || error
114 pass
115 $CLEAN
116 $START
117
118 echo '== mkdir .../d7; mcreate .../d7/f; chmod .../d7/f = test 7'
119 mkdir $MOUNT/d7
120 ./mcreate $MOUNT/d7/f
121 chmod 0666 $MOUNT/d7/f
122 $CHECKSTAT -t file -p 0666 $MOUNT/d7/f || error
123 pass
124 $CLEAN
125 $START
126
127 echo '== mkdir .../d8; touch .../d8/f; chmod .../d8/f == test 8'
128 mkdir $MOUNT/d8
129 touch $MOUNT/d8/f
130 chmod 0666 $MOUNT/d8/f
131 $CHECKSTAT -t file -p 0666 $MOUNT/d8/f || error
132 pass
133 $CLEAN
134 $START
135
136
137 echo '== mkdir .../d9 .../d9/d2 .../d9/d2/d3 =========== test 9'
138 mkdir $MOUNT/d9
139 mkdir $MOUNT/d9/d2
140 mkdir $MOUNT/d9/d2/d3
141 $CHECKSTAT -t dir $MOUNT/d9/d2/d3 || error
142 pass
143 $CLEAN
144 $START
145
146
147 echo '== mkdir .../d10; mkdir .../d10/d2; touch .../d10/d2/f = test 10'
148 mkdir $MOUNT/d10
149 mkdir $MOUNT/d10/d2
150 touch $MOUNT/d10/d2/f
151 $CHECKSTAT -t file $MOUNT/d10/d2/f || error
152 pass
153 $CLEAN
154 $START
155
156 echo '== mkdir .../d11 d11/d2; chmod .../d11/d2 .../d11/d2 == test 11'
157 mkdir $MOUNT/d11
158 mkdir $MOUNT/d11/d2
159 chmod 0666 $MOUNT/d11/d2
160 chmod 0555 $MOUNT/d11/d2
161 $CHECKSTAT -t dir -p 0555 $MOUNT/d11/d2 || error
162 pass
163 $CLEAN
164 $START
165
166 echo '== mkdir .../d12; touch .../d12/f; chmod .../d12/f d12/f == test 12'
167 mkdir $MOUNT/d12
168 touch $MOUNT/d12/f
169 chmod 0666 $MOUNT/d12/f
170 chmod 0555 $MOUNT/d12/f
171 $CHECKSTAT -t file -p 0555 $MOUNT/d12/f || error
172 pass
173 $CLEAN
174 $START
175
176 echo '== mkdir .../d13; cp /etc/passwd .../d13/f; > .../d13/f == test 13'
177 mkdir $MOUNT/d13
178 cp /etc/hosts $MOUNT/d13/f
179 >  $MOUNT/d13/f
180 $CHECKSTAT -t file -s 0 $MOUNT/d13/f || error
181 pass
182 $CLEAN
183 $START
184
185
186 echo '================================================== test 14'
187 mkdir $MOUNT/d14
188 touch $MOUNT/d14/f
189 rm $MOUNT/d14/f
190 $CHECKSTAT -a $MOUNT/d14/f || error
191 pass
192 $CLEAN
193 $START
194
195
196 echo '================================================== test 15'
197 mkdir $MOUNT/d15
198 touch $MOUNT/d15/f
199 mv $MOUNT/d15/f $MOUNT/d15/f2
200 $CHECKSTAT -t file $MOUNT/d15/f2 || error
201 pass
202 $CLEAN
203 $START
204
205 echo '================================================== test 16'
206 mkdir $MOUNT/d16
207 touch $MOUNT/d16/f
208 rm -rf $MOUNT/d16/f
209 $CHECKSTAT -a $MOUNT/d16/f || error
210 pass
211 $CLEAN
212 $START
213
214 echo '== symlinks: create, remove (dangling and real) == test 17'
215 mkdir $MOUNT/d17
216 touch $MOUNT/d17/f
217 ln -s $MOUNT/d17/f $MOUNT/d17/l-exist
218 ln -s no-such-file $MOUNT/d17/l-dangle
219 ls -l $MOUNT/d17
220 $CHECKSTAT -l $MOUNT/d17/f $MOUNT/d17/l-exist || error
221 $CHECKSTAT -f -t f $MOUNT/d17/l-exist || error
222 $CHECKSTAT -l no-such-file $MOUNT/d17/l-dangle || error
223 $CHECKSTAT -fa $MOUNT/d17/l-dangle || error
224 rm -f $MOUNT/l-dangle
225 rm -f $MOUNT/l-exist
226 $CHECKSTAT -a $MOUNT/l-dangle || error
227 $CHECKSTAT -a $MOUNT/l-exist || error
228 pass
229 $CLEAN
230 $START
231
232 echo "== touch $MOUNT/f ; ls $MOUNT ==================== test 18"
233 touch $MOUNT/f
234 ls $MOUNT || error
235 pass
236 $CLEAN
237 $START
238
239 echo "== touch $MOUNT/f ; ls -l $MOUNT ================= test 19"
240 touch $MOUNT/f
241 ls -l $MOUNT
242 rm $MOUNT/f
243 $CHECKSTAT -a $MOUNT/f || error
244 pass
245 $CLEAN
246 $START
247
248 echo "== touch $MOUNT/f ; ls -l $MOUNT ================= test 20"
249 touch $MOUNT/f
250 rm $MOUNT/f
251 echo "1 done"
252 touch $MOUNT/f
253 rm $MOUNT/f
254 echo "2 done"
255 touch $MOUNT/f
256 rm $MOUNT/f
257 echo "3 done"
258 $CHECKSTAT -a $MOUNT/f || error
259 pass
260 $CLEAN
261 $START
262
263 echo '== write to dangling link ======================== test 21'
264 mkdir $MOUNT/d21
265 [ -f $MOUNT/d21/dangle ] && rm -f $MOUNT/d21/dangle
266 ln -s dangle $MOUNT/d21/link
267 echo foo >> $MOUNT/d21/link
268 cat $MOUNT/d21/dangle
269 $CHECKSTAT -t link $MOUNT/d21/link || error
270 $CHECKSTAT -f -t file $MOUNT/d21/link || error
271 pass
272 $CLEAN
273 $START
274
275 echo '== unpack tar archive as non-root user =========== test 22'
276 mkdir $MOUNT/d22
277 which sudo && chown 4711 $MOUNT/d22
278 SUDO=`which sudo 2> /dev/null` && SUDO="$SUDO -u #4711" || SUDO=""
279 $SUDO tar cf - /etc/hosts /etc/sysconfig/network | $SUDO tar xfC - $MOUNT/d22
280 ls -lR $MOUNT/d22/etc
281 $CHECKSTAT -t dir $MOUNT/d22/etc || error
282 [ -z "$SUDO" ] || $CHECKSTAT -u \#4711 $MOUNT/d22/etc || error
283 pass
284 $CLEAN
285 $START
286
287 echo '== O_CREAT|O_EXCL in subdir ====================== test 23'
288 mkdir $MOUNT/d23
289 ./toexcl $MOUNT/d23/f23
290 ./toexcl -e $MOUNT/d23/f23 || error
291 pass
292 $CLEAN
293 $START
294
295 echo '== rename sanity ================================= test24'
296 echo '-- same directory rename'
297 echo '-- test 24-R1: touch a ; rename a b'
298 mkdir $MOUNT/R1
299 touch $MOUNT/R1/f
300 mv $MOUNT/R1/f $MOUNT/R1/g
301 $CHECKSTAT -t file $MOUNT/R1/g || error
302 pass
303 $CLEAN
304 $START
305
306 echo '-- test 24-R2: touch a b ; rename a b;'
307 mkdir $MOUNT/R2
308 touch $MOUNT/R2/{f,g}
309 mv $MOUNT/R2/f $MOUNT/R2/g
310 $CHECKSTAT -a $MOUNT/R2/f || error
311 $CHECKSTAT -t file $MOUNT/R2/g || error
312 pass
313 $CLEAN
314 $START
315
316 echo '-- test 24-R3: mkdir a  ; rename a b;'
317 mkdir $MOUNT/R3
318 mkdir $MOUNT/R3/f
319 mv $MOUNT/R3/f $MOUNT/R3/g
320 $CHECKSTAT -a $MOUNT/R3/f || error
321 $CHECKSTAT -t dir $MOUNT/R3/g || error
322 pass
323 $CLEAN
324 $START
325
326 echo '-- test 24-R4: mkdir a b ; rename a b;'
327 mkdir $MOUNT/R4
328 mkdir $MOUNT/R4/{f,g}
329 perl -e "rename \"$MOUNT/R4/f\", \"$MOUNT/R4/g\";"
330 $CHECKSTAT -a $MOUNT/R4/f || error
331 $CHECKSTAT -t dir $MOUNT/R4/g || error
332 pass
333 $CLEAN
334 $START
335
336 echo '-- cross directory renames --' 
337 echo '-- test 24-R5: touch a ; rename a b'
338 mkdir $MOUNT/R5{a,b}
339 touch $MOUNT/R5a/f
340 mv $MOUNT/R5a/f $MOUNT/R5b/g
341 $CHECKSTAT -a $MOUNT/R5a/f || error
342 $CHECKSTAT -t file $MOUNT/R5b/g || error
343 pass
344 $CLEAN
345 $START
346
347 echo '-- test 24-R6: touch a ; rename a b'
348 mkdir $MOUNT/R6{a,b}
349 touch $MOUNT/R6a/f $MOUNT/R6b/g
350 mv $MOUNT/R6a/f $MOUNT/R6b/g
351 $CHECKSTAT -a $MOUNT/R6a/f || error
352 $CHECKSTAT -t file $MOUNT/R6b/g || error
353 pass
354 $CLEAN
355 $START
356
357 echo '-- test 24-R7: touch a ; rename a b'
358 mkdir $MOUNT/R7{a,b}
359 mkdir $MOUNT/R7a/f
360 mv $MOUNT/R7a/f $MOUNT/R7b/g
361 $CHECKSTAT -a $MOUNT/R7a/f || error
362 $CHECKSTAT -t dir $MOUNT/R7b/g || error
363 pass
364 $CLEAN
365 $START
366
367 echo '-- test 24-R8: touch a ; rename a b'
368 mkdir $MOUNT/R8{a,b}
369 mkdir $MOUNT/R8a/f $MOUNT/R8b/g
370 perl -e "rename \"$MOUNT/R8a/f\", \"$MOUNT/R8b/g\";"
371 $CHECKSTAT -a $MOUNT/R8a/f || error
372 $CHECKSTAT -t dir $MOUNT/R8b/g || error
373 pass
374 $CLEAN
375 $START
376
377 echo "-- rename error cases"
378 echo "-- test 24-R9 target error: touch f ; mkdir a ; rename f a"
379 mkdir $MOUNT/R9
380 mkdir $MOUNT/R9/a
381 touch $MOUNT/R9/f
382 perl -e "rename \"$MOUNT/R9/f\", \"$MOUNT/R9/a\";"
383 $CHECKSTAT -t file $MOUNT/R9/f || error
384 $CHECKSTAT -t dir  $MOUNT/R9/a || error
385 $CHECKSTAT -a file $MOUNT/R9/a/f || error
386 pass
387 $CLEAN
388 $START
389
390 echo "--test 24-R10 source does not exist" 
391 mkdir $MOUNT/R10
392 perl -e "rename \"$MOUNT/R10/f\", \"$MOUNT/R10/g\"" 
393 $CHECKSTAT -t dir $MOUNT/R10 || error
394 $CHECKSTAT -a $MOUNT/R10/f || error
395 $CHECKSTAT -a $MOUNT/R10/g || error
396 pass
397 $CLEAN
398 $START
399
400 echo '======================= finished ======================='
401 exit