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