From: Sheng Yong <shengyo...@xiaomi.com> Signed-off-by: Sheng Yong <shengyo...@xiaomi.com> --- tests/i_node/README | 5 ++ tests/i_node/expect.in | 66 ++++++++++++++++ tests/i_node/script | 166 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 237 insertions(+) create mode 100644 tests/i_node/README create mode 100644 tests/i_node/expect.in create mode 100644 tests/i_node/script
diff --git a/tests/i_node/README b/tests/i_node/README new file mode 100644 index 000000000000..c95f0d39df3c --- /dev/null +++ b/tests/i_node/README @@ -0,0 +1,5 @@ +1. create f2fs image +2. inject members in node +3. verify injected fields with dump.f2fs +4. restore injected fields +5. fsck checks f2fs image diff --git a/tests/i_node/expect.in b/tests/i_node/expect.in new file mode 100644 index 000000000000..17f3a2ff3c84 --- /dev/null +++ b/tests/i_node/expect.in @@ -0,0 +1,66 @@ +original nid: +[dump_node: x] node_blk.footer.nid [_INO_] +original ino: +[dump_node: x] node_blk.footer.ino [_INO_] +inject nid: +[dump_node: x] node_blk.footer.nid [0x123450] +inject ino: +[dump_node: x] node_blk.footer.ino [0x123451] +restore nid: +[dump_node: x] node_blk.footer.nid [_INO_] +restore ino: +[dump_node: x] node_blk.footer.ino [_INO_] +original i_mode: +i_mode [_MODE_HEX_:_MODE_DEC_] +original i_advise: +i_advise [_ADVISE_HEX_:_ADVISE_DEC_] +original i_inline: +i_inline [_INLINE_HEX_:_INLINE_DEC_] +original i_links: +i_links [0x1:1] +original i_size: +i_size [0x201000:2101248] +original i_blocks: +i_blocks [_BLKS_HEX_:_BLKS_DEC_] +original i_ext: +i_ext:fofs:_EXT_FOFS_ blkaddr:_EXT_BLKADDR_ len:_EXT_LEN_ +original i_extra_isize: +i_extra_isize [_EXTRA_HEX_:_EXTRA_DEC_] +original i_nid[0]: +i_nid[0] [0x0:0] +inject i_mode: +i_mode [0x1:1] +inject i_advise: +i_advise [0x2:2] +inject i_inline: +i_inline [0x3:3] +inject i_links: +i_links [0x4:4] +inject i_size: +i_size [0x5:5] +inject i_blocks: +i_blocks [0x6:6] +inject i_ext: +i_ext:fofs:7 blkaddr:8 len:9 +inject i_extra_isize: +i_extra_isize [0xa:10] +inject i_nid[0]: +i_nid[0] [0xc:12] +restore i_mode: +i_mode [_MODE_HEX_:_MODE_DEC_] +restore i_advise: +i_advise [_ADVISE_HEX_:_ADVISE_DEC_] +restore i_inline: +i_inline [_INLINE_HEX_:_INLINE_DEC_] +restore i_links: +i_links [0x1:1] +restore i_size: +i_size [0x201000:2101248] +restore i_blocks: +i_blocks [_BLKS_HEX_:_BLKS_DEC_] +restore i_ext: +i_ext:fofs:_EXT_FOFS_ blkaddr:_EXT_BLKADDR_ len:_EXT_LEN_ +restore i_extra_isize: +i_extra_isize [_EXTRA_HEX_:_EXTRA_DEC_] +restore i_nid[0]: +i_nid[0] [0x0:0] diff --git a/tests/i_node/script b/tests/i_node/script new file mode 100644 index 000000000000..2e98cfc56f05 --- /dev/null +++ b/tests/i_node/script @@ -0,0 +1,166 @@ +#!/bin/bash + +DESC="verify injecting node" + +. $TOPDIR/tests/helpers + +cleanup +make_f2fs > $LOG + +mkdir $TESTDIR/mntdir +safe_mount $MNT_OPTS $META $TESTDIR/mntdir >> $LOG +dd if=/dev/zero of=$TESTDIR/mntdir/testfile bs=4K count=513 status=none +ino=`stat -c "%i" $TESTDIR/mntdir/testfile` +safe_umount $TESTDIR/mntdir >> $LOG +rm -rf $TESTDIR/mntdir + +orig_node=`$DUMP $DUMP_OPTS -i $ino -d 1 $META` +echo "$orig_node" >> $LOG +blkaddr=`get_mb_val "$orig_node" 'i_addr\[0x100\]'` +echo "ino:$ino blkaddr:$blkaddr" >> $LOG +segno=`get_segno $blkaddr` + +# inject and restore nid and ino in node footer +echo "original nid:" > $OUT +echo "$orig_node" | grep 'node_blk\.footer\.nid' >> $OUT +echo "original ino:" >> $OUT +echo "$orig_node" | grep 'node_blk\.footer\.ino' >> $OUT +$INJECT --node --nid $ino --mb nid --val 0x123450 $META >> $LOG +$INJECT --node --nid $ino --mb ino --val 0x123451 $META >> $LOG +cur_node=`$DUMP $DUMP_OPTS -i $ino -d 1 $META` +echo "inject nid:" >> $OUT +echo "$cur_node" | grep 'node_blk\.footer\.nid' >> $OUT +echo "inject ino:" >> $OUT +echo "$cur_node" | grep 'node_blk\.footer\.ino' >> $OUT +$INJECT --node --nid $ino --mb nid --val $ino $META >> $LOG +$INJECT --node --nid $ino --mb ino --val $ino $META >> $LOG +cur_node=`$DUMP $DUMP_OPTS -i $ino -d 1 $META` +echo "restore nid:" >> $OUT +echo "$cur_node" | grep 'node_blk\.footer\.nid' >> $OUT +echo "restore ino:" >> $OUT +echo "$cur_node" | grep 'node_blk\.footer\.ino' >> $OUT + +# inject and restore inode members +echo "original i_mode:" >> $OUT +get_mb "$orig_node" i_mode >> $OUT +orig_mode_val=`get_mb_val "$orig_node" i_mode` +echo "original i_advise:" >> $OUT +get_mb "$orig_node" i_advise >> $OUT +orig_advise_val=`get_mb_val "$orig_node" i_advise` +echo "original i_inline:" >> $OUT +get_mb "$orig_node" i_inline >> $OUT +orig_inline_val=`get_mb_val "$orig_node" i_inline` +echo "original i_links:" >> $OUT +get_mb "$orig_node" i_links >> $OUT +orig_links_val=`get_mb_val "$orig_node" i_links` +echo "original i_size:" >> $OUT +get_mb "$orig_node" i_size >> $OUT +orig_size_val=`get_mb_val "$orig_node" i_size` +echo "original i_blocks:" >> $OUT +get_mb "$orig_node" i_blocks >> $OUT +orig_blocks_val=`get_mb_val "$orig_node" i_blocks` +echo "original i_ext:" >> $OUT +orig_ext=`get_mb "$orig_node" 'i_ext:'` +echo "$orig_ext" >> $OUT +orig_ext_fofs_val=`echo "$orig_ext" | sed "s/.*fofs:\([0-9a-fA-F]*\).*/0x\1/g"` +orig_ext_blkaddr_val=`echo "$orig_ext" | sed "s/.*blkaddr:\([0-9a-fA-F]*\).*/0x\1/g"` +orig_ext_len_val=`echo "$orig_ext" | sed "s/.*len:\([0-9a-fA-F]*\).*/0x\1/g"` +echo "original i_extra_isize:" >> $OUT +get_mb "$orig_node" i_extra_isize >> $OUT +orig_extra_isize_val=`get_mb_val "$orig_node" i_extra_isize` +echo "original i_nid[0]:" >> $OUT +get_mb "$orig_node" 'i_nid\[0\]' >> $OUT +orig_nid_val=0 +$INJECT --node --nid $ino --mb i_mode --val 0x1 $META >> $LOG +$INJECT --node --nid $ino --mb i_advise --val 0x2 $META >> $LOG +$INJECT --node --nid $ino --mb i_inline --val 0x3 $META >> $LOG +$INJECT --node --nid $ino --mb i_links --val 0x4 $META >> $LOG +$INJECT --node --nid $ino --mb i_size --val 0x5 $META >> $LOG +$INJECT --node --nid $ino --mb i_blocks --val 0x6 $META >> $LOG +$INJECT --node --nid $ino --mb i_ext.fofs --val 0x7 $META >> $LOG +$INJECT --node --nid $ino --mb i_ext.blk_addr --val 0x8 $META >> $LOG +$INJECT --node --nid $ino --mb i_ext.len --val 0x9 $META >> $LOG +$INJECT --node --nid $ino --mb i_extra_isize --val 0xa $META >> $LOG +$INJECT --node --nid $ino --mb i_inline_xattr_size --val 0xb $META >> $LOG +$INJECT --node --nid $ino --mb i_nid --idx 0 --val 0xc $META >> $LOG +cur_node=`$DUMP $DUMP_OPTS -i $ino -d 1 $META` +echo "inject i_mode:" >> $OUT +get_mb "$cur_node" i_mode >> $OUT +echo "inject i_advise:" >> $OUT +get_mb "$cur_node" i_advise >> $OUT +echo "inject i_inline:" >> $OUT +get_mb "$cur_node" i_inline >> $OUT +echo "inject i_links:" >> $OUT +get_mb "$cur_node" i_links >> $OUT +echo "inject i_size:" >> $OUT +get_mb "$cur_node" i_size >> $OUT +echo "inject i_blocks:" >> $OUT +get_mb "$cur_node" i_blocks >> $OUT +echo "inject i_ext:" >> $OUT +get_mb "$cur_node" 'i_ext:' >> $OUT +echo "inject i_extra_isize:" >> $OUT +get_mb "$cur_node" i_extra_isize >> $OUT +echo "inject i_nid[0]:" >> $OUT +get_mb "$cur_node" 'i_nid\[0\]' >> $OUT +$INJECT --node --nid $ino --mb i_mode --val $orig_mode_val $META >> $LOG +$INJECT --node --nid $ino --mb i_advise --val $orig_advise_val $META >> $LOG +$INJECT --node --nid $ino --mb i_inline --val $orig_inline_val $META >> $LOG +$INJECT --node --nid $ino --mb i_links --val $orig_links_val $META >> $LOG +$INJECT --node --nid $ino --mb i_size --val $orig_size_val $META >> $LOG +$INJECT --node --nid $ino --mb i_blocks --val $orig_blocks_val $META >> $LOG +$INJECT --node --nid $ino --mb i_ext.fofs --val $orig_ext_fofs_val $META >> $LOG +$INJECT --node --nid $ino --mb i_ext.blk_addr --val $orig_ext_blkaddr_val $META >> $LOG +$INJECT --node --nid $ino --mb i_ext.len --val $orig_ext_len_val $META >> $LOG +$INJECT --node --nid $ino --mb i_extra_isize --val $orig_extra_isize_val $META >> $LOG +$INJECT --node --nid $ino --mb i_inline_xattr_size --val $orig_inline_xattr_size_val $META >> $LOG +$INJECT --node --nid $ino --mb i_nid --idx 0 --val $orig_nid_val $META >> $LOG +cur_node=`$DUMP $DUMP_OPTS -i $ino -d 1 $META` +echo "restore i_mode:" >> $OUT +get_mb "$cur_node" i_mode >> $OUT +echo "restore i_advise:" >> $OUT +get_mb "$cur_node" i_advise >> $OUT +echo "restore i_inline:" >> $OUT +get_mb "$cur_node" i_inline >> $OUT +echo "restore i_links:" >> $OUT +get_mb "$cur_node" i_links >> $OUT +echo "restore i_size:" >> $OUT +get_mb "$cur_node" i_size >> $OUT +echo "restore i_blocks:" >> $OUT +get_mb "$cur_node" i_blocks >> $OUT +echo "restore i_ext:" >> $OUT +get_mb "$cur_node" 'i_ext:' >> $OUT +echo "restore i_extra_isize:" >> $OUT +get_mb "$cur_node" i_extra_isize >> $OUT +echo "restore i_nid[0]:" >> $OUT +get_mb "$cur_node" 'i_nid\[0\]' >> $OUT + +$FSCK $FSCK_OPTS -f $META >> $LOG +if [ $? -ne 0 ]; then + echo "fsck fail" >> $OUT +fi + +hex=`printf "0x%x" $ino` +sed "s/_INO_/$hex/g" $TESTDIR/expect.in > $TESTDIR/expect +dec=$((orig_mode_val)); hex=`printf "0x%x" $dec` +sed -i "s/_MODE_HEX_/$hex/g" $TESTDIR/expect +sed -i "s/_MODE_DEC_/$dec/g" $TESTDIR/expect +dec=$((orig_advise_val)); hex=`printf "0x%x" $dec` +sed -i "s/_ADVISE_HEX_/$hex/g" $TESTDIR/expect +sed -i "s/_ADVISE_DEC_/$dec/g" $TESTDIR/expect +dec=$((orig_inline_val)); hex=`printf "0x%x" $dec` +sed -i "s/_INLINE_HEX_/$hex/g" $TESTDIR/expect +sed -i "s/_INLINE_DEC_/$dec/g" $TESTDIR/expect +dec=$((orig_blocks_val)); hex=`printf "0x%x" $dec` +sed -i "s/_BLKS_HEX_/$hex/g" $TESTDIR/expect +sed -i "s/_BLKS_DEC_/$dec/g" $TESTDIR/expect +hex=`printf "%x" $((orig_ext_fofs_val))` +sed -i "s/_EXT_FOFS_/$hex/g" $TESTDIR/expect +hex=`printf "%x" $((orig_ext_blkaddr_val))` +sed -i "s/_EXT_BLKADDR_/$hex/g" $TESTDIR/expect +hex=`printf "%x" $((orig_ext_len_val))` +sed -i "s/_EXT_LEN_/$hex/g" $TESTDIR/expect +dec=$((orig_extra_isize_val)); hex=`printf "0x%x" $dec` +sed -i "s/_EXTRA_HEX_/$hex/g" $TESTDIR/expect +sed -i "s/_EXTRA_DEC_/$dec/g" $TESTDIR/expect + +check_result -- 2.43.0 _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel