#!/bin/sh
# Use this script if you need to regenerate the digest values
# in test.sh, or if you don't care about digests and you just
# want to see some fsck results. Should be run as root.
set -e
. ./test-gen.lib
test_cleanup () {
umount mnt 2>/dev/null || true
rm -rf mnt fout lsout
}
fail () {
echo FAILED
test_cleanup
gen_cleanup
exit 1
}
pass () {
md5=`calc_digest`
echo PASSED
echo $@ $md5
test_cleanup
gen_cleanup
}
# dtest-mount - Exercise the -d directory option of genext2fs
# Creates an image with a file of given size, verifies it
# and returns the command line with which to invoke dtest()
# Usage: dtest-mount file-size number-of-blocks
dtest_mount () {
size=$1; blocks=$2
echo Testing with file of size $size
dgen $size $blocks
/sbin/e2fsck -fn ext2.img || fail
mkdir -p mnt
mount -t ext2 -o ro,loop ext2.img mnt || fail
if (! [ -f mnt/file.$size ]) || \
[ $size != "`ls -al mnt | grep file.$size |
awk '{print $5}'`" ] ; then
fail
fi
pass dtest $size $blocks
}
# ftest-mount - Exercise the -f spec-file option of genext2fs
# Creates an image with the devices mentioned in the given spec
# file, verifies it, and returns the command line with which to
# invoke ftest()
# Usage: ftest-mount spec-file number-of-blocks
ftest_mount () {
fname=$1; blocks=$2
echo Testing with devices file $fname
fgen $fname $blocks
/sbin/e2fsck -fn ext2.img || fail
mkdir -p mnt
mount -t ext2 -o ro,loop ext2.img mnt || fail
[ -d mnt/dev ] || fail
# Exclude those devices that have interpolated
# minor numbers, as being too hard to match.
egrep -v "(hda|hdb|tty|loop|ram|ubda)" $fname | \
grep '^[^ #]* [bc]' | \
awk '{print $1,$4,$5,$6","$7}'| \
sort -d -k3.6 > fout
ls -aln mnt/dev | \
egrep -v "(hda|hdb|tty|loop|ram|ubda)" | \
grep ^[bc] | \
awk '{ print "/dev/"$10,$3,$4,$5$6}' | \
sort -d -k3.6 > lsout
diff fout lsout || fail
pass ftest $fname $blocks
}
dtest_mount 0 4096
dtest_mount 0 8193
dtest_mount 0 8194
dtest_mount 1 4096
dtest_mount 12288 4096
dtest_mount 274432 4096
dtest_mount 8388608 9000
dtest_mount 16777216 20000
ftest_mount device_table.txt 4096