#!/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