Whamcloud - gitweb
tests: try using truncate command before falling back to using dd
[tools/e2fsprogs.git] / tests / scripts / resize_test
1 #!/bin/sh
2
3 # old distros are missing "truncate", emulate it with "dd" if necessary
4 do_truncate()
5 {
6         [ "$1" = "-s" ] && size=$2 && shift 2
7
8         if ! truncate -s $size $1 >> $LOG 2>&1 ; then
9                 dd if=/dev/zero of=$1 bs=1 count=0 seek=$size >> $LOG 2>&1
10         fi
11 }
12
13 resize_test () {
14 DBG_FLAGS=63
15
16 echo $test_description starting > $LOG
17 rm -f $TMPFILE
18 touch $TMPFILE
19
20 # Verify that the $TMP filesystem handles $SIZE_2 sparse files.
21 # If that fails, try the local filesystem instead.
22 if do_truncate -s $SIZE_2 $TMPFILE 2> /dev/null; then
23         echo "using $TMPFILE" >> $LOG
24 else
25         rm $TMPFILE
26         export TMPFILE=$(mktemp ./$test_name.tmp.XXXXXX)
27         touch $TMPFILE
28         echo "using $TMPFILE" >> $LOG
29         if ! do_truncate -s $SIZE_2 $TMPFILE >> $LOG 2>&1; then
30                 rm $TMPFILE
31                 return 111
32         fi
33 fi
34 > $TMPFILE
35
36 echo $MKE2FS $FEATURES -qF $TMPFILE $SIZE_1 >> $LOG
37 $MKE2FS $FEATURES -qF $TMPFILE $SIZE_1 >> $LOG
38
39 OUT_TMP=$(mktemp ${TMPDIR:-/tmp}/csum-tmp.XXXXXX)
40
41 date > $OUT_TMP
42 cat $E2FSCK >> $OUT_TMP
43 echo $CRCSUM $OUT_TMP >> $LOG 2>&1
44 CSUM_1=$($CRCSUM $OUT_TMP)
45 echo Checksum is $CSUM_1 >> $LOG
46
47 echo Setting up file system >> $LOG
48 $DEBUGFS -w $TMPFILE  >> $LOG 2>&1 << EOF
49 mkdir test
50 cd test
51 write $OUT_TMP e2fsck
52 ls /test
53 stat /test/e2fsck
54 quit
55 EOF
56 echo " " >> $LOG
57
58 rm -f $OUT_TMP
59
60 echo $FSCK -fy $TMPFILE >> $LOG 2>&1 
61 $FSCK -fy $TMPFILE >> $LOG 2>&1 
62
63 echo $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS $TMPFILE $SIZE_2 >> $LOG 2>&1
64 if ! $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS $TMPFILE $SIZE_2 >> $LOG 2>&1
65 then
66         return 1
67 fi
68
69 echo $FSCK -fy $TMPFILE >> $LOG 2>&1
70 if ! $FSCK -fy $TMPFILE >> $LOG 2>&1
71 then
72         $DUMPE2FS $TMPFILE >> $LOG
73         return 1
74 fi
75
76 echo $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1
77 $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1
78
79 echo $CRCSUM $OUT_TMP >> $LOG 2>&1
80 CSUM_2=$($CRCSUM $OUT_TMP)
81 echo Checksum is $CSUM_2 >> $LOG
82
83 if test "$CSUM_1" != "$CSUM_2"
84 then
85         return 1
86 fi
87
88 # Uncomment to grab extra debugging image
89 #
90 #mv $TMPFILE /tmp/foo.img
91 #return 0
92
93 echo $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS -M $TMPFILE $SIZE_2 >> $LOG 2>&1
94 if ! $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS -M $TMPFILE $SIZE_2 >> $LOG 2>&1
95 then
96         return 1
97 fi
98
99 echo $FSCK -fy $TMPFILE >> $LOG 2>&1
100 if ! $FSCK -fy $TMPFILE >> $LOG 2>&1
101 then
102         $DUMPE2FS $TMPFILE >> $LOG
103         return 1
104 fi
105
106 echo $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1
107 $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1
108
109 echo $CRCSUM $OUT_TMP >> $LOG 2>&1
110 CSUM_2=$($CRCSUM $OUT_TMP)
111 echo Checksum is $CSUM_2 >> $LOG
112
113 if test "$CSUM_1" != "$CSUM_2"
114 then
115         return 1
116 fi
117
118 echo $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS -M $TMPFILE $SIZE_2 >> $LOG 2>&1
119 if ! $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS -M $TMPFILE $SIZE_2 >> $LOG 2>&1
120 then
121         return 1
122 fi
123
124 echo $FSCK -fy $TMPFILE >> $LOG 2>&1
125 if ! $FSCK -fy $TMPFILE >> $LOG 2>&1
126 then
127         $DUMPE2FS $TMPFILE >> $LOG
128         return 1
129 fi
130
131 echo $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1
132 $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1
133
134 echo $CRCSUM $OUT_TMP >> $LOG 2>&1
135 CSUM_2=$($CRCSUM $OUT_TMP)
136 echo Checksum is $CSUM_2 >> $LOG
137
138 if test "$CSUM_1" != "$CSUM_2"
139 then
140         return 1
141 fi
142
143 echo $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS -M $TMPFILE $SIZE_2 >> $LOG 2>&1
144 if ! $RESIZE2FS $RESIZE2FS_OPTS -d $DBG_FLAGS -M $TMPFILE $SIZE_2 >> $LOG 2>&1
145 then
146         return 1
147 fi
148
149 echo $FSCK -fy $TMPFILE >> $LOG 2>&1
150 if ! $FSCK -fy $TMPFILE >> $LOG 2>&1
151 then
152         $DUMPE2FS $TMPFILE >> $LOG
153         return 1
154 fi
155
156 echo $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1
157 $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1
158
159 echo $CRCSUM $OUT_TMP >> $LOG 2>&1
160 CSUM_2=$($CRCSUM $OUT_TMP)
161 echo Checksum is $CSUM_2 >> $LOG
162
163 rm $OUT_TMP
164 unset OUT_TMP
165
166 rm -f $TMPFILE
167
168 if test "$CSUM_1" != "$CSUM_2"
169 then
170         return 1
171 fi
172
173 return 0
174
175 }