btrfs-progs: tests: Move code to create loop device to common
[platform/upstream/btrfs-progs.git] / tests / fsck-tests / 013-extent-tree-rebuild / test.sh
1 #!/bin/bash
2
3 source $TOP/tests/common
4
5 check_prereq btrfs-debug-tree
6 check_prereq mkfs.btrfs
7 setup_root_helper
8 prepare_test_dev 1G
9
10 if [ -z $TEST_MNT ];then
11         echo "    [NOTRUN] extent tree rebuild, need TEST_MNT variant"
12         exit 0
13 fi
14
15 # test whether fsck can rebuild a corrupted extent tree
16 test_extent_tree_rebuild()
17 {
18         run_check $SUDO_HELPER $TOP/mkfs.btrfs -f $TEST_DEV
19
20         run_check $SUDO_HELPER mount $TEST_DEV $TEST_MNT
21         run_check $SUDO_HELPER cp -aR /lib/modules/`uname -r`/ $TEST_MNT
22
23         for i in `seq 1 100`;do
24                 run_check $SUDO_HELPER $TOP/btrfs sub snapshot $TEST_MNT \
25                         $TEST_MNT/snapaaaaaaa_$i
26         done
27         run_check $SUDO_HELPER umount $TEST_DEV
28
29         # get extent root bytenr
30         extent_root_bytenr=`$SUDO_HELPER $TOP/btrfs-debug-tree -r $TEST_DEV | \
31                             grep extent | awk '{print $7}'`
32         if [ -z $extent_root_bytenr ];then
33                 _fail "fail to get extent root bytenr"
34         fi
35
36         # corrupt extent root node block
37         run_check $SUDO_HELPER $TOP/btrfs-corrupt-block -l $extent_root_bytenr \
38                 -b 4096 $TEST_DEV
39
40         $SUDO_HELPER $TOP/btrfs check $TEST_DEV >& /dev/null && \
41                         _fail "btrfs check should detect failure"
42         run_check $SUDO_HELPER $TOP/btrfs check --init-extent-tree $TEST_DEV
43         run_check $SUDO_HELPER $TOP/btrfs check $TEST_DEV
44 }
45
46 test_extent_tree_rebuild