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

Reply via email to