Hi, folks, This patchset tries to add an auto testsuit for f2fs-tools, including fsck.f2fs, inject.f2fs for now.
The patchset can splited into 3 parts: PATCH 1~9: is a preparation for testcases. It fixes some errors in fsck and inject, and do some cleanup and improvement for f2fs-tools. PATCH 10~13: add new injection members PATCH 14~32: add testcases thanks, shengyong -8<- The following is almost quoted from v1: The basic idea of these testcases are: 1. create f2fs image 2. corrupt the image by inject specific fields 3. fsck fixes the image 4. verify fsck output with expected message Some helper scripts are provided: * test_config.in: is used to derive basic configurations of all testcases. * runtests.in: is used to derive `runtests' which is used to run testcases. * filter.sed: removes unnecessary messages and cleanup arbitrary values. * helpers: provides helper functions The usage of `runtests': * run all testcases: runtests * run one testcase: runtests <testcase directory path> * cleanup previous results: runtests clean To run the testcases on Android, only have to change settings in test_config: * set path of $META and $DATA * set path of tools * push tests directory to an Android phone NOTE TAHT: the testcases will format $META!!! Some testcase requires root permission to mount the image and create files. Each testcase should have a sub-directory, where three files are needed: * README: describe information of the testcase * script: testcase itself * expect.in: is used to derive expected output message New files are generated in the testcase directory after test: * log: output in detail * expect: derived from expect.in * out: output that will be compared with expect * PASS: testcase is passed * FAIL: testcase is failed, in which differ of out and expect is saved The name of testcase directory has some optional prefix: * f_: fsck testcase * i_: inject testcase * m_: mkfs testcase But there are only fsck and inject testcases for now. To run testcases, it's better to compile fsck.f2fs as statically linked executable, or `make install' installs tools and libraries. Otherwise, libtool compiles f2fs-tools in debug mode and create a wrapper script to locate elf executable and libraries. However, dump.f2fs and inject.f2fs cannot be used in the wrapper way. v2: * add some fix and cleanup * remove img.tar.gz from testcases * add testcases for injection * cleanup helpers script and simplify filter.sed and expected.in v1: https://lore.kernel.org/linux-f2fs-devel/20241029120956.4186731-1-shengy...@oppo.com/ Sheng Yong (32): fsck.f2fs: do not finish/reset zone if dry-run is true f2fs-tools: add option N to answer no for all questions f2fs-tools: cleanup {nid|segno}_in_journal fsck.f2fs: fix invalidate checkpoint dump.f2fs: print more info f2fs-tools: add and export lookup_sit_in_journal inject.f2fs: fix injecting sit/nat in journal inject.f2fs: fix injection on zoned device inject.f2fs: fix and cleanup parsing numeric options inject.f2fs: add members in inject_cp inject.f2fs: add member `feature' in inject_sb inject.f2fs: add members in inject_node inject.f2fs: add member `filename' in inject_dentry tests: prepare helper scripts for testcases tests: add fsck testcase of fixing bad super magic tests: add fsck testcase of fixing errors recorded in sb tests: add fsck testcase of fixing cp crc tests: add fsck testcase of fixing nat entry with invalid ino tests: add fsck testcase of fixing nat entry with invalid blkaddr tests: add fsck testcase of fixing sit entry type tests: add fsck testcase of fixing sit entry vblocks tests: add fsck testcase of fixing sit entry valid_map tests: add fsck testcase of fixing sum entry nid tests: add fsck testcase of fixing sum footer type tests: add fsck testcase of fixing sum entry ofs_in_node tests: add fsck testcase of fixing inode invalid i_addr tests: add fsck testcase of fixing dentry hash code tests: add fsck testcase of fixing lost dots tests: add fsck testcase of fixing duplicated dots tests: add fsck testcase of fixing loop fsync dnodes tests: add inject testcase of injecting META area tests: add inject testcase of injecting node block .gitignore | 14 + Makefile.am | 2 +- configure.ac | 1 + fsck/dump.c | 15 +- fsck/f2fs.h | 12 +- fsck/fsck.c | 2 +- fsck/fsck.h | 4 +- fsck/inject.c | 438 +++++++++++++++++++++----- fsck/inject.h | 1 + fsck/main.c | 14 +- fsck/mount.c | 61 ++-- include/f2fs_fs.h | 1 + lib/libf2fs_zoned.c | 6 +- man/inject.f2fs.8 | 43 ++- tests/Makefile.am | 26 ++ tests/f_cp_bad_crc/README | 5 + tests/f_cp_bad_crc/expect.in | 4 + tests/f_cp_bad_crc/script | 38 +++ tests/f_dentry_bad_hash/README | 8 + tests/f_dentry_bad_hash/expect.in | 8 + tests/f_dentry_bad_hash/script | 56 ++++ tests/f_dentry_dup_dots/README | 11 + tests/f_dentry_dup_dots/expect.in | 26 ++ tests/f_dentry_dup_dots/script | 49 +++ tests/f_dentry_lost_dots/README | 7 + tests/f_dentry_lost_dots/expect.in | 16 + tests/f_dentry_lost_dots/script | 37 +++ tests/f_inode_bad_iaddr/README | 6 + tests/f_inode_bad_iaddr/expect.in | 13 + tests/f_inode_bad_iaddr/script | 50 +++ tests/f_loop_fsync_dnodes/README | 5 + tests/f_loop_fsync_dnodes/expect.in | 6 + tests/f_loop_fsync_dnodes/script | 46 +++ tests/f_nat_bad_blkaddr/README | 4 + tests/f_nat_bad_blkaddr/expect.in | 12 + tests/f_nat_bad_blkaddr/script | 25 ++ tests/f_nat_bad_ino/README | 4 + tests/f_nat_bad_ino/expect.in | 12 + tests/f_nat_bad_ino/script | 31 ++ tests/f_sb_bad_magic/README | 3 + tests/f_sb_bad_magic/expect.in | 5 + tests/f_sb_bad_magic/script | 15 + tests/f_sb_errors/README | 5 + tests/f_sb_errors/expect.in | 7 + tests/f_sb_errors/script | 22 ++ tests/f_sit_bad_type/README | 5 + tests/f_sit_bad_type/expect.in | 3 + tests/f_sit_bad_type/script | 38 +++ tests/f_sit_bad_valid_map/README | 5 + tests/f_sit_bad_valid_map/expect.in | 4 + tests/f_sit_bad_valid_map/script | 43 +++ tests/f_sit_bad_vblocks/README | 5 + tests/f_sit_bad_vblocks/expect.in | 3 + tests/f_sit_bad_vblocks/script | 38 +++ tests/f_ssa_bad_nid/README | 5 + tests/f_ssa_bad_nid/expect.in | 3 + tests/f_ssa_bad_nid/script | 36 +++ tests/f_ssa_bad_ofs_in_node/README | 5 + tests/f_ssa_bad_ofs_in_node/expect.in | 3 + tests/f_ssa_bad_ofs_in_node/script | 36 +++ tests/f_ssa_bad_type/README | 5 + tests/f_ssa_bad_type/expect.in | 3 + tests/f_ssa_bad_type/script | 31 ++ tests/filter.sed | 69 ++++ tests/helpers | 269 ++++++++++++++++ tests/i_meta/README | 5 + tests/i_meta/expect.in | 60 ++++ tests/i_meta/script | 212 +++++++++++++ tests/i_node/README | 5 + tests/i_node/expect.in | 66 ++++ tests/i_node/script | 166 ++++++++++ tests/runtests.in | 48 +++ tests/test_config.in | 53 ++++ 73 files changed, 2284 insertions(+), 116 deletions(-) create mode 100644 tests/Makefile.am create mode 100644 tests/f_cp_bad_crc/README create mode 100644 tests/f_cp_bad_crc/expect.in create mode 100644 tests/f_cp_bad_crc/script create mode 100644 tests/f_dentry_bad_hash/README create mode 100644 tests/f_dentry_bad_hash/expect.in create mode 100644 tests/f_dentry_bad_hash/script create mode 100644 tests/f_dentry_dup_dots/README create mode 100644 tests/f_dentry_dup_dots/expect.in create mode 100644 tests/f_dentry_dup_dots/script create mode 100644 tests/f_dentry_lost_dots/README create mode 100644 tests/f_dentry_lost_dots/expect.in create mode 100644 tests/f_dentry_lost_dots/script create mode 100644 tests/f_inode_bad_iaddr/README create mode 100644 tests/f_inode_bad_iaddr/expect.in create mode 100644 tests/f_inode_bad_iaddr/script create mode 100644 tests/f_loop_fsync_dnodes/README create mode 100644 tests/f_loop_fsync_dnodes/expect.in create mode 100644 tests/f_loop_fsync_dnodes/script create mode 100644 tests/f_nat_bad_blkaddr/README create mode 100644 tests/f_nat_bad_blkaddr/expect.in create mode 100644 tests/f_nat_bad_blkaddr/script create mode 100644 tests/f_nat_bad_ino/README create mode 100644 tests/f_nat_bad_ino/expect.in create mode 100644 tests/f_nat_bad_ino/script create mode 100644 tests/f_sb_bad_magic/README create mode 100644 tests/f_sb_bad_magic/expect.in create mode 100644 tests/f_sb_bad_magic/script create mode 100644 tests/f_sb_errors/README create mode 100644 tests/f_sb_errors/expect.in create mode 100644 tests/f_sb_errors/script create mode 100644 tests/f_sit_bad_type/README create mode 100644 tests/f_sit_bad_type/expect.in create mode 100644 tests/f_sit_bad_type/script create mode 100644 tests/f_sit_bad_valid_map/README create mode 100644 tests/f_sit_bad_valid_map/expect.in create mode 100644 tests/f_sit_bad_valid_map/script create mode 100644 tests/f_sit_bad_vblocks/README create mode 100644 tests/f_sit_bad_vblocks/expect.in create mode 100644 tests/f_sit_bad_vblocks/script create mode 100644 tests/f_ssa_bad_nid/README create mode 100644 tests/f_ssa_bad_nid/expect.in create mode 100644 tests/f_ssa_bad_nid/script create mode 100644 tests/f_ssa_bad_ofs_in_node/README create mode 100644 tests/f_ssa_bad_ofs_in_node/expect.in create mode 100644 tests/f_ssa_bad_ofs_in_node/script create mode 100644 tests/f_ssa_bad_type/README create mode 100644 tests/f_ssa_bad_type/expect.in create mode 100644 tests/f_ssa_bad_type/script create mode 100644 tests/filter.sed create mode 100644 tests/helpers create mode 100644 tests/i_meta/README create mode 100644 tests/i_meta/expect.in create mode 100644 tests/i_meta/script create mode 100644 tests/i_node/README create mode 100644 tests/i_node/expect.in create mode 100644 tests/i_node/script create mode 100644 tests/runtests.in create mode 100644 tests/test_config.in -- 2.43.0 _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel