From: Darrick J. Wong Date: Sun, 3 Aug 2014 03:50:34 +0000 (-0400) Subject: tests: add regression tests for superblocks with bad checksums X-Git-Tag: v1.43-WIP-2015-05-18~250 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f882feb3bbf7f2930a915549887e56eee8160811;p=thirdparty%2Fe2fsprogs.git tests: add regression tests for superblocks with bad checksums Add regression tests to examine how e2fsck deals with random superblock corruption such as obviously wrong fields and the checksum itself being incorrect. Signed-off-by: Darrick J. Wong Signed-off-by: Theodore Ts'o --- diff --git a/tests/f_super_bad_csum/expect.1 b/tests/f_super_bad_csum/expect.1 new file mode 100644 index 000000000..25ced5c8a --- /dev/null +++ b/tests/f_super_bad_csum/expect.1 @@ -0,0 +1,13 @@ +ext2fs_open2: Superblock checksum does not match superblock +../e2fsck/e2fsck: Superblock invalid, trying backup blocks... +Pass 1: Checking inodes, blocks, and sizes +Pass 2: Checking directory structure +Pass 3: Checking directory connectivity +Pass 4: Checking reference counts +Pass 5: Checking group summary information +Inode bitmap differences: Group 1 inode bitmap does not match checksum. +FIXED. + +test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** +test_filesys: 11/1024 files (0.0% non-contiguous), 1557/16384 blocks +Exit status is 0 diff --git a/tests/f_super_bad_csum/expect.2 b/tests/f_super_bad_csum/expect.2 new file mode 100644 index 000000000..dd209193e --- /dev/null +++ b/tests/f_super_bad_csum/expect.2 @@ -0,0 +1,7 @@ +Pass 1: Checking inodes, blocks, and sizes +Pass 2: Checking directory structure +Pass 3: Checking directory connectivity +Pass 4: Checking reference counts +Pass 5: Checking group summary information +test_filesys: 11/1024 files (0.0% non-contiguous), 1557/16384 blocks +Exit status is 0 diff --git a/tests/f_super_bad_csum/image.bz2 b/tests/f_super_bad_csum/image.bz2 new file mode 100644 index 000000000..cd80d4b83 Binary files /dev/null and b/tests/f_super_bad_csum/image.bz2 differ diff --git a/tests/f_super_bad_csum/name b/tests/f_super_bad_csum/name new file mode 100644 index 000000000..745562f59 --- /dev/null +++ b/tests/f_super_bad_csum/name @@ -0,0 +1 @@ +bad csum in superblock (metadata_csum) diff --git a/tests/f_super_bad_csum/script b/tests/f_super_bad_csum/script new file mode 100755 index 000000000..cfd41894c --- /dev/null +++ b/tests/f_super_bad_csum/script @@ -0,0 +1,33 @@ +#!/bin/bash + +FSCK_OPT=-fy +IMAGE=$test_dir/image.bz2 + +bzip2 -d < $IMAGE > $TMPFILE +#e2label $TMPFILE test_filesys + +# Run fsck to fix things? +EXP1=$test_dir/expect.1 +OUT1=$test_name.1.log +rm -rf $test_name.failed $test_name.ok + +$FSCK $FSCK_OPT $TMPFILE 2>&1 | head -n 1000 | tail -n +2 > $OUT1 +echo "Exit status is $?" >> $OUT1 + +# Run a second time +EXP2=$test_dir/expect.2 +OUT2=$test_name.2.log + +$FSCK $FSCK_OPT $TMPFILE 2>&1 | head -n 1000 | tail -n +2 > $OUT2 +echo "Exit status is $?" >> $OUT2 + +# Figure out what happened +if cmp -s $EXP1 $OUT1 && cmp -s $EXP2 $OUT2; then + echo "$test_name: $test_description: ok" + touch $test_name.ok +else + echo "$test_name: $test_description: failed" + diff -u $EXP1 $OUT1 >> $test_name.failed + diff -u $EXP2 $OUT2 >> $test_name.failed +fi +unset EXP1 OUT1 EXP2 OUT2 FSCK_OPT IMAGE