xfstests: stop special casing nfs and udf
[xfstests-dev.git] / tests / xfs / 012
1 #! /bin/bash
2 # FS QA Test No. 012
3 #
4 # holes
5 #
6 #-----------------------------------------------------------------------
7 # Copyright (c) 2000-2001 Silicon Graphics, Inc.  All Rights Reserved.
8 #
9 # This program is free software; you can redistribute it and/or
10 # modify it under the terms of the GNU General Public License as
11 # published by the Free Software Foundation.
12 #
13 # This program is distributed in the hope that it would be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 # GNU General Public License for more details.
17 #
18 # You should have received a copy of the GNU General Public License
19 # along with this program; if not, write the Free Software Foundation,
20 # Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
21 #
22 #-----------------------------------------------------------------------
23 #
24
25 seq=`basename $0`
26 seqres=$RESULT_DIR/$seq
27 echo "QA output created by $seq"
28
29 here=`pwd`
30 tmp=/tmp/$$
31 status=0        # success is the default!
32 trap "_cleanup; exit \$status" 0 1 2 3 15
33
34 _cleanup()
35 {
36     cd /
37     rm -f $tmp.*
38     rm -rf $TEST_DIR/holes.$$.*
39 }
40
41 _filesize()
42 {
43     ls -l $1 | $AWK_PROG '{print "    filesize = " $5}'
44 }
45
46 # get standard environment, filters and checks
47 . ./common/rc
48 . ./common/filter
49
50 _do_test()
51 {
52     _n="$1"
53     _param="$2"
54     _count="$3"
55     
56     failed=0
57     
58     out=$TEST_DIR/holes.$$.$_n
59     echo ""
60     echo "holes.$_n : $_param"
61     echo "-----------------------------------------------"
62     if  ! $here/src/holes $_param $out >$tmp.out
63     then
64         echo "    holes returned $? - see $seqres.full"
65         failed=1
66         status=1
67     fi
68         
69
70     if [ $failed -eq 0 ]
71     then        
72         # quick check - how many holes did we get?
73         count=`xfs_bmap $out | egrep -c ': hole'`
74         echo "    $count hole(s) detected"
75         # and how big was the file?
76         _filesize $out
77         
78         if [ $count -ne $_count ]
79         then
80             echo "    unexpected number of holes - see $seqres.full"
81             status=1
82             failed=1
83         fi
84     fi
85         
86     if [ $failed -eq 1 ]
87     then
88         echo "--------------------------------------"       >>$seqres.full
89         echo "$_n - output from holes:"                     >>$seqres.full
90         echo "--------------------------------------"       >>$seqres.full
91         cat $tmp.out                                        >>$seqres.full
92         echo "--------------------------------------"       >>$seqres.full
93         echo "$_n - output from bmap:"                      >>$seqres.full
94         echo "--------------------------------------"       >>$seqres.full
95         xfs_bmap -vvv $out                                  >>$seqres.full
96         echo "--------------------------------------"       >>$seqres.full
97         echo "$_n - output from ls -li:"                    >>$seqres.full
98         echo "--------------------------------------"       >>$seqres.full
99         ls -li $out                                         >>$seqres.full
100         status=1
101     fi
102 }
103
104 # real QA test starts here
105 _supported_fs xfs
106 _supported_os IRIX Linux
107
108 rm -f $seqres.full
109
110 # small & fairly dense
111 _do_test 1 "-l 40960000 -b 40960 -i 10 -c 1" 100
112
113 # big & sparse
114 _do_test 2 "-l 409600000 -b 40960 -i 1000 -c 1" 10
115
116 # no holes, but a very nasty way to write a file (lots of extents)
117 _do_test 3 "-l 40960000 -b 40960 -i 10 -c 10" 0
118
119 exit