e2fsprogs/tests/d_fallocate/script
Andreas Dilger c5d9d3ce5f tests: don't run sed multiple times on test output
Don't call sed multiple times on the output, and avoid the use
of temporary files, or if possible.  It would be convenient to
use "sed -i" to only update the output file once, but this is
not portable to all platforms.

[ Fixed a few test regression failures --tytso ]

Signed-off-by: Andreas Dilger <adilger@dilger.ca>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2018-06-22 17:59:35 -04:00

167 lines
4.0 KiB
Plaintext

if ! test -x $DEBUGFS_EXE; then
echo "$test_name: $test_description: skipped (no debugfs)"
return 0
fi
FSCK_OPT=-fy
OUT=$test_name.log
if [ -f $test_dir/expect.gz ]; then
EXP=$test_name.tmp
gunzip < $test_dir/expect.gz > $EXP
else
EXP=$test_dir/expect
fi
cat > $TMPFILE.conf << ENDL
[fs_types]
ext4 = {
base_features = sparse_super,filetype,resize_inode,dir_index,ext_attr,^has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize,64bit
blocksize = 1024
inode_size = 256
inode_ratio = 16384
}
ENDL
MKE2FS_CONFIG=$TMPFILE.conf $MKE2FS -F -o Linux -b 1024 -O ^bigalloc -T ext4 $TMPFILE 65536 > $OUT.new 2>&1
rm -f $TMPFILE.conf
$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
status=$?
echo Exit status is $status >> $OUT.new
echo "debugfs write files" >> $OUT.new
make_file() {
name="$1"
start="$2"
flag="$3"
cat << ENDL
write /dev/null $name
sif /$name size 40960
eo /$name
set_bmap $flag 10 $((start + 10))
set_bmap $flag 13 $((start + 13))
set_bmap $flag 26 $((start + 26))
set_bmap $flag 29 $((start + 29))
ec
sif /$name blocks 8
setb $((start + 10))
setb $((start + 13))
setb $((start + 26))
setb $((start + 29))
ENDL
}
#Files we create:
# a: fallocate a 40k file
# b*: falloc sparse file starting at b*
# c*: falloc spare file ending at c*
# d: midcluster to midcluster, surrounding sparse
# e: partial middle cluster alloc
# f: one big file
# g*: falloc sparse init file starting at g*
# h*: falloc sparse init file ending at h*
# i: midcluster to midcluster, surrounding sparse init
# j: partial middle cluster alloc
# k: one big init file
base=5000
cat > $TMPFILE.cmd << ENDL
write /dev/null a
sif /a size 40960
fallocate /a 0 39
ENDL
echo "ex /a" >> $TMPFILE.cmd2
make_file sample $base --uninit >> $TMPFILE.cmd
echo "ex /sample" >> $TMPFILE.cmd2
base=10000
for i in 8 9 10 11 12 13 14 15; do
make_file b$i $(($base + (40 * ($i - 8)))) --uninit >> $TMPFILE.cmd
echo "fallocate /b$i $i 39" >> $TMPFILE.cmd
echo "ex /b$i" >> $TMPFILE.cmd2
done
for i in 24 25 26 27 28 29 30 31; do
make_file c$i $(($base + 320 + (40 * ($i - 24)))) --uninit >> $TMPFILE.cmd
echo "fallocate /c$i 0 $i" >> $TMPFILE.cmd
echo "ex /c$i" >> $TMPFILE.cmd2
done
make_file d $(($base + 640)) --uninit >> $TMPFILE.cmd
echo "fallocate /d 4 35" >> $TMPFILE.cmd
echo "ex /d" >> $TMPFILE.cmd2
make_file e $(($base + 680)) --uninit >> $TMPFILE.cmd
echo "fallocate /e 19 20" >> $TMPFILE.cmd
echo "ex /e" >> $TMPFILE.cmd2
cat >> $TMPFILE.cmd << ENDL
write /dev/null f
sif /f size 1024
eo /f
set_bmap --uninit 0 9000
ec
sif /f blocks 2
setb 9000
fallocate /f 0 8999
ENDL
echo "ex /f" >> $TMPFILE.cmd2
# Now do it again, but with initialized blocks
base=20000
for i in 8 9 10 11 12 13 14 15; do
make_file g$i $(($base + (40 * ($i - 8)))) >> $TMPFILE.cmd
echo "fallocate /g$i $i 39" >> $TMPFILE.cmd
echo "ex /g$i" >> $TMPFILE.cmd2
done
for i in 24 25 26 27 28 29 30 31; do
make_file h$i $(($base + 320 + (40 * ($i - 24)))) >> $TMPFILE.cmd
echo "fallocate /h$i 0 $i" >> $TMPFILE.cmd
echo "ex /h$i" >> $TMPFILE.cmd2
done
make_file i $(($base + 640)) >> $TMPFILE.cmd
echo "fallocate /i 4 35" >> $TMPFILE.cmd
echo "ex /i" >> $TMPFILE.cmd2
make_file j $(($base + 680)) >> $TMPFILE.cmd
echo "fallocate /j 19 20" >> $TMPFILE.cmd
echo "ex /j" >> $TMPFILE.cmd2
cat >> $TMPFILE.cmd << ENDL
write /dev/null k
sif /k size 1024
eo /k
set_bmap 0 19000
ec
sif /k blocks 2
setb 19000
fallocate /k 0 8999
sif /k size 9216000
ENDL
echo "ex /k" >> $TMPFILE.cmd2
$DEBUGFS -w -f $TMPFILE.cmd $TMPFILE > /dev/null 2>&1
$DEBUGFS -f $TMPFILE.cmd2 $TMPFILE >> $OUT.new 2>&1
$FSCK -fy -N test_filesys $TMPFILE >> $OUT.new 2>&1
status=$?
echo Exit status is $status >> $OUT.new
sed -f $cmd_dir/filter.sed $OUT.new > $OUT
rm -f $TMPFILE $TMPFILE.cmd $TMPFILE.cmd2 $OUT.new
cmp -s $OUT $EXP
status=$?
if [ "$status" = 0 ] ; then
echo "$test_name: $test_description: ok"
touch $test_name.ok
else
echo "$test_name: $test_description: failed"
diff $DIFF_OPTS $EXP $OUT > $test_name.failed
fi
rm -f $EXP
unset IMAGE FSCK_OPT OUT EXP