btrfs-progs: tests: add shell quotes to misc test scripts
[platform/upstream/btrfs-progs.git] / tests / misc-tests / 019-receive-clones-on-mounted-subvol / test.sh
1 #! /bin/bash
2 #
3 # Test that an incremental send operation works when in both snapshots there are
4 # two directory inodes that have the same number but different generations and
5 # have an entry with the same name that corresponds to different inodes in each
6 # snapshot.
7
8 source "$TEST_TOP/common"
9
10 check_prereq mkfs.btrfs
11 check_prereq btrfs
12 check_prereq fssum
13
14 setup_root_helper
15 prepare_test_dev
16
17 FSSUM_PROG="$INTERNAL_BIN/fssum"
18 srcdir=./send-test-dir
19 rm -rf "$srcdir"
20 mkdir -p "$srcdir"
21 run_check chmod a+rw "$srcdir"
22
23 run_check "$TOP/mkfs.btrfs" -f "$TEST_DEV"
24 run_check_mount_test_dev
25
26 BLOCK_SIZE=$(stat -f -c %S "$TEST_MNT")
27
28 run_check $SUDO_HELPER "$TOP/btrfs" subvolume create "$TEST_MNT/foo"
29 run_check $SUDO_HELPER "$TOP/btrfs" subvolume create "$TEST_MNT/bar"
30 run_check $SUDO_HELPER "$TOP/btrfs" subvolume create "$TEST_MNT/baz"
31 run_check $SUDO_HELPER "$TOP/btrfs" subvolume create "$TEST_MNT/snap"
32
33 tr '\000' 'A' < /dev/null |
34         run_check $SUDO_HELPER dd of="$TEST_MNT/foo/file_a" bs="$BLOCK_SIZE" count=32
35 tr '\000' 'B' < /dev/null |
36         run_check $SUDO_HELPER dd of="$TEST_MNT/bar/file_b" bs="$BLOCK_SIZE" count=32
37
38 run_check $SUDO_HELPER cp --reflink=always "$TEST_MNT/foo/file_a" "$TEST_MNT/baz/file_a"
39 run_check $SUDO_HELPER cp --reflink=always "$TEST_MNT/bar/file_b" "$TEST_MNT/baz/file_b"
40
41 # Filesystem looks like:
42 #
43 # .
44 # |--- foo/
45 # |       |--- file_a
46 # |--- bar/
47 # |       |--- file_b
48 # |--- baz/
49 # |       |--- file_a                   (clone of "foo/file_a")
50 # |       |--- file_b                   (clone of "bar/file_b")
51 # |--- snap/
52 #
53
54 # create snapshots and send streams
55
56 run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot -r "$TEST_MNT/foo" "$TEST_MNT/snap/foo.0"
57 run_check $SUDO_HELPER "$TOP/btrfs" send -f "$srcdir/foo.0.snap" "$TEST_MNT/snap/foo.0"
58
59 run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot -r "$TEST_MNT/bar" "$TEST_MNT/snap/bar.0"
60 run_check $SUDO_HELPER "$TOP/btrfs" send -f "$srcdir/bar.0.snap" "$TEST_MNT/snap/bar.0"
61
62 run_check $SUDO_HELPER cp --reflink=always "$TEST_MNT/foo/file_a" "$TEST_MNT/foo/file_a.clone"
63 run_check $SUDO_HELPER rm -f -- "$TEST_MNT/foo/file_a"
64
65 run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot -r "$TEST_MNT/foo" \
66         "$TEST_MNT/snap/foo.1"
67 run_check $SUDO_HELPER "$TOP/btrfs" send -p "$TEST_MNT/snap/foo.0" -f "$srcdir/foo.1.snap" \
68         "$TEST_MNT/snap/foo.1"
69
70 run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot -r "$TEST_MNT/baz" \
71         "$TEST_MNT/snap/baz.0"
72 run_check $SUDO_HELPER "$TOP/btrfs" send -p "$TEST_MNT/snap/foo.1" \
73         -c "$TEST_MNT/snap/bar.0" -f "$srcdir/baz.0.snap" \
74         "$TEST_MNT/snap/baz.0"
75
76 # Filesystem looks like:
77 #
78 # .
79 # |--- foo/
80 # |       |--- file_a.clone             (clone of "foo/file_a")
81 # |--- bar/
82 # |       |--- file_b
83 # |--- baz/
84 # |       |--- file_a                   (clone of "foo/file_a")
85 # |       |--- file_b                   (clone of "bar/file_b")
86 # |--- snap/
87 #          |--- bar.0/                  (snapshot of "bar")
88 #          |         |--- file_b
89 #          |--- foo.0/                  (snapshot of "foo")
90 #          |         |--- file_a
91 #          |--- foo.1/                  (snapshot of "foo")
92 #          |         |--- file_a.clone
93 #          |--- baz.0/                  (snapshot of "baz")
94 #          |         |--- file_a
95 #          |         |--- file_b
96
97 run_check $FSSUM_PROG -A -f -w "$srcdir/foo.0.fssum" "$TEST_MNT/snap/foo.0"
98 run_check $FSSUM_PROG -A -f -w "$srcdir/foo.1.fssum" "$TEST_MNT/snap/foo.1"
99 run_check $FSSUM_PROG -A -f -w "$srcdir/bar.0.fssum" "$TEST_MNT/snap/bar.0"
100 run_check $FSSUM_PROG -A -f -w "$srcdir/baz.0.fssum" "$TEST_MNT/snap/baz.0"
101
102 run_check_umount_test_dev
103 run_check "$TOP/mkfs.btrfs" -f "$TEST_DEV"
104 run_check_mount_test_dev
105 run_check $SUDO_HELPER "$TOP/btrfs" subvolume create "$TEST_MNT/dest"
106 run_check_umount_test_dev
107 run_check_mount_test_dev -o subvol=/dest
108
109 run_check $SUDO_HELPER "$TOP/btrfs" receive -f "$srcdir/foo.0.snap" "$TEST_MNT"
110 run_check $SUDO_HELPER "$TOP/btrfs" receive -f "$srcdir/bar.0.snap" "$TEST_MNT"
111
112 # if "dest/" is not correctly stripped from the beginning of the path to
113 # "foo.0" in the target fs, we would get an error here because the clone source
114 # "foo.0/file_a" for "foo.1/file_a.clone" can't be found.
115 run_check $SUDO_HELPER "$TOP/btrfs" receive -f "$srcdir/foo.1.snap" "$TEST_MNT"
116
117 # same here, but with send -c instead of -p
118 run_check $SUDO_HELPER "$TOP/btrfs" receive -f "$srcdir/baz.0.snap" "$TEST_MNT"
119
120 run_check $FSSUM_PROG -r "$srcdir/foo.0.fssum" "$TEST_MNT/foo.0"
121 run_check $FSSUM_PROG -r "$srcdir/foo.1.fssum" "$TEST_MNT/foo.1"
122 run_check $FSSUM_PROG -r "$srcdir/bar.0.fssum" "$TEST_MNT/bar.0"
123 run_check $FSSUM_PROG -r "$srcdir/baz.0.fssum" "$TEST_MNT/baz.0"
124
125 run_check_umount_test_dev
126
127 rm -rf -- "$srcdir"