linux-f2fs-devel.lists.sourceforge.net archive mirror
 help / color / mirror / Atom feed
* [f2fs-dev] [RFC PATCH v2 00/32] f2fs-tools: add testcases
@ 2025-06-10 12:37 Sheng Yong
  2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 01/32] fsck.f2fs: do not finish/reset zone if dry-run is true Sheng Yong
                   ` (32 more replies)
  0 siblings, 33 replies; 45+ messages in thread
From: Sheng Yong @ 2025-06-10 12:37 UTC (permalink / raw)
  To: jaegeuk, chao; +Cc: shengyong1, linux-f2fs-devel

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-shengyong@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

^ permalink raw reply	[flat|nested] 45+ messages in thread

end of thread, other threads:[~2025-08-16  7:05 UTC | newest]

Thread overview: 45+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-10 12:37 [f2fs-dev] [RFC PATCH v2 00/32] f2fs-tools: add testcases Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 01/32] fsck.f2fs: do not finish/reset zone if dry-run is true Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 02/32] f2fs-tools: add option N to answer no for all questions Sheng Yong
2025-06-11  9:22   ` Chao Yu via Linux-f2fs-devel
2025-06-11  9:36     ` Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 03/32] f2fs-tools: cleanup {nid|segno}_in_journal Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 04/32] fsck.f2fs: fix invalidate checkpoint Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 05/32] dump.f2fs: print more info Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 06/32] f2fs-tools: add and export lookup_sit_in_journal Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 07/32] inject.f2fs: fix injecting sit/nat in journal Sheng Yong
2025-06-11 11:42   ` Chao Yu via Linux-f2fs-devel
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 08/32] inject.f2fs: fix injection on zoned device Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 09/32] inject.f2fs: fix and cleanup parsing numeric options Sheng Yong
2025-06-13  6:08   ` Chao Yu via Linux-f2fs-devel
2025-06-16  1:49     ` Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 10/32] inject.f2fs: add members in inject_cp Sheng Yong
2025-06-13  7:30   ` Chao Yu via Linux-f2fs-devel
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 11/32] inject.f2fs: add member `feature' in inject_sb Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 12/32] inject.f2fs: add members in inject_node Sheng Yong
2025-06-13  7:38   ` Chao Yu via Linux-f2fs-devel
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 13/32] inject.f2fs: add member `filename' in inject_dentry Sheng Yong
2025-06-13  7:55   ` Chao Yu via Linux-f2fs-devel
2025-06-16  2:01     ` Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 14/32] tests: prepare helper scripts for testcases Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 15/32] tests: add fsck testcase of fixing bad super magic Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 16/32] tests: add fsck testcase of fixing errors recorded in sb Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 17/32] tests: add fsck testcase of fixing cp crc Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 18/32] tests: add fsck testcase of fixing nat entry with invalid ino Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 19/32] tests: add fsck testcase of fixing nat entry with invalid blkaddr Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 20/32] tests: add fsck testcase of fixing sit entry type Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 21/32] tests: add fsck testcase of fixing sit entry vblocks Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 22/32] tests: add fsck testcase of fixing sit entry valid_map Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 23/32] tests: add fsck testcase of fixing sum entry nid Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 24/32] tests: add fsck testcase of fixing sum footer type Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 25/32] tests: add fsck testcase of fixing sum entry ofs_in_node Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 26/32] tests: add fsck testcase of fixing inode invalid i_addr Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 27/32] tests: add fsck testcase of fixing dentry hash code Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 28/32] tests: add fsck testcase of fixing lost dots Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 29/32] tests: add fsck testcase of fixing duplicated dots Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 30/32] tests: add fsck testcase of fixing loop fsync dnodes Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 31/32] tests: add inject testcase of injecting META area Sheng Yong
2025-06-10 12:37 ` [f2fs-dev] [RFC PATCH v2 32/32] tests: add inject testcase of injecting node block Sheng Yong
2025-08-15 10:38 ` [f2fs-dev] [RFC PATCH v2 00/32] f2fs-tools: add testcases Chao Yu via Linux-f2fs-devel
2025-08-15 11:27   ` Sheng Yong
2025-08-16  7:04     ` Chao Yu via Linux-f2fs-devel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).