tests: add regression tests for inodes with bad checksums

Add regression tests to e2fsck to examine how it deals with inode
table blocks which (a) have been zero'd; (b) have been one'd; (c) have
corrupt inodes with obvious problems; and (d) have inodes with
non-obvious problems.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
diff --git a/tests/f_bad_inode_csum/expect.1 b/tests/f_bad_inode_csum/expect.1
new file mode 100644
index 0000000..b3c628d
--- /dev/null
+++ b/tests/f_bad_inode_csum/expect.1
@@ -0,0 +1,126 @@
+Pass 1: Checking inodes, blocks, and sizes
+Inode 33 has a extra size (65535) which is invalid
+Fix? yes
+
+Inode 49 passes checks, but checksum does not match inode.  Fix? yes
+
+Inode 65 passes checks, but checksum does not match inode.  Fix? yes
+
+Inode 81 passes checks, but checksum does not match inode.  Fix? yes
+
+Inode 97 seems to contain garbage.  Clear? yes
+
+Inode 98 seems to contain garbage.  Clear? yes
+
+Inode 99 seems to contain garbage.  Clear? yes
+
+Inode 100 seems to contain garbage.  Clear? yes
+
+Inode 101 seems to contain garbage.  Clear? yes
+
+Inode 102 seems to contain garbage.  Clear? yes
+
+Inode 103 seems to contain garbage.  Clear? yes
+
+Inode 104 seems to contain garbage.  Clear? yes
+
+Inode 105 seems to contain garbage.  Clear? yes
+
+Inode 106 seems to contain garbage.  Clear? yes
+
+Inode 107 seems to contain garbage.  Clear? yes
+
+Inode 108 seems to contain garbage.  Clear? yes
+
+Inode 109 seems to contain garbage.  Clear? yes
+
+Inode 110 seems to contain garbage.  Clear? yes
+
+Inode 111 seems to contain garbage.  Clear? yes
+
+Inode 112 seems to contain garbage.  Clear? yes
+
+Pass 2: Checking directory structure
+Extended attribute block for inode 49 (/38) is invalid (4294967295).
+Clear? yes
+
+Entry '86' in / (2) has deleted/unused inode 97.  Clear? yes
+
+Entry '87' in / (2) has deleted/unused inode 98.  Clear? yes
+
+Entry '88' in / (2) has deleted/unused inode 99.  Clear? yes
+
+Entry '89' in / (2) has deleted/unused inode 100.  Clear? yes
+
+Entry '90' in / (2) has deleted/unused inode 101.  Clear? yes
+
+Entry '91' in / (2) has deleted/unused inode 102.  Clear? yes
+
+Entry '92' in / (2) has deleted/unused inode 103.  Clear? yes
+
+Entry '93' in / (2) has deleted/unused inode 104.  Clear? yes
+
+Entry '94' in / (2) has deleted/unused inode 105.  Clear? yes
+
+Entry '95' in / (2) has deleted/unused inode 106.  Clear? yes
+
+Entry '96' in / (2) has deleted/unused inode 107.  Clear? yes
+
+Entry '97' in / (2) has deleted/unused inode 108.  Clear? yes
+
+Entry '98' in / (2) has deleted/unused inode 109.  Clear? yes
+
+Entry '99' in / (2) has deleted/unused inode 110.  Clear? yes
+
+Entry '100' in / (2) has deleted/unused inode 111.  Clear? yes
+
+Entry '101' in / (2) has deleted/unused inode 112.  Clear? yes
+
+Entry '102' in / (2) has deleted/unused inode 113.  Clear? yes
+
+Entry '103' in / (2) has deleted/unused inode 114.  Clear? yes
+
+Entry '104' in / (2) has deleted/unused inode 115.  Clear? yes
+
+Entry '105' in / (2) has deleted/unused inode 116.  Clear? yes
+
+Entry '106' in / (2) has deleted/unused inode 117.  Clear? yes
+
+Entry '107' in / (2) has deleted/unused inode 118.  Clear? yes
+
+Entry '108' in / (2) has deleted/unused inode 119.  Clear? yes
+
+Entry '109' in / (2) has deleted/unused inode 120.  Clear? yes
+
+Entry '110' in / (2) has deleted/unused inode 121.  Clear? yes
+
+Entry '111' in / (2) has deleted/unused inode 122.  Clear? yes
+
+Entry '112' in / (2) has deleted/unused inode 123.  Clear? yes
+
+Entry '113' in / (2) has deleted/unused inode 124.  Clear? yes
+
+Entry '114' in / (2) has deleted/unused inode 125.  Clear? yes
+
+Entry '115' in / (2) has deleted/unused inode 126.  Clear? yes
+
+Entry '116' in / (2) has deleted/unused inode 127.  Clear? yes
+
+Entry '117' in / (2) has deleted/unused inode 128.  Clear? yes
+
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+Inode bitmap differences:  -(97--128)
+Fix? yes
+
+Free inodes count wrong for group #0 (0, counted=32).
+Fix? yes
+
+Free inodes count wrong (0, counted=32).
+Fix? yes
+
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 96/128 files (0.0% non-contiguous), 18/512 blocks
+Exit status is 1
diff --git a/tests/f_bad_inode_csum/expect.2 b/tests/f_bad_inode_csum/expect.2
new file mode 100644
index 0000000..b97a902
--- /dev/null
+++ b/tests/f_bad_inode_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: 96/128 files (0.0% non-contiguous), 18/512 blocks
+Exit status is 0
diff --git a/tests/f_bad_inode_csum/image.gz b/tests/f_bad_inode_csum/image.gz
new file mode 100644
index 0000000..221920b
--- /dev/null
+++ b/tests/f_bad_inode_csum/image.gz
Binary files differ
diff --git a/tests/f_bad_inode_csum/name b/tests/f_bad_inode_csum/name
new file mode 100644
index 0000000..68bf7ce
--- /dev/null
+++ b/tests/f_bad_inode_csum/name
@@ -0,0 +1 @@
+inode table corruption (metadata_csum)