2 # FS QA Test No. btrfs/048
4 # Btrfs properties test. The btrfs properties feature was introduced in the
7 #-----------------------------------------------------------------------
8 # Copyright (c) 2014 Filipe Manana. All Rights Reserved.
10 # This program is free software; you can redistribute it and/or
11 # modify it under the terms of the GNU General Public License as
12 # published by the Free Software Foundation.
14 # This program is distributed in the hope that it would be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 # GNU General Public License for more details.
19 # You should have received a copy of the GNU General Public License
20 # along with this program; if not, write the Free Software Foundation,
21 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 #-----------------------------------------------------------------------
26 seqres=$RESULT_DIR/$seq
27 echo "QA output created by $seq"
32 status=1 # failure is the default!
33 trap "_cleanup; exit \$status" 0 1 2 3 15
37 rm -fr $send_files_dir
41 # get standard environment, filters and checks
44 . ./common/filter.btrfs
46 # real QA test starts here
51 _require_btrfs_command "property"
53 send_files_dir=$TEST_DIR/btrfs-test-$seq
56 rm -fr $send_files_dir
59 _scratch_mkfs >/dev/null 2>&1
62 echo "Testing label property"
63 $BTRFS_UTIL_PROG property get $SCRATCH_MNT label
65 $BTRFS_UTIL_PROG property set $SCRATCH_MNT label foobar
66 $BTRFS_UTIL_PROG property get $SCRATCH_MNT label
68 $BTRFS_UTIL_PROG property get $SCRATCH_MNT
70 $BTRFS_UTIL_PROG property set $SCRATCH_MNT label ''
71 $BTRFS_UTIL_PROG property get $SCRATCH_MNT label
73 mkdir $SCRATCH_MNT/testdir
74 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir label 2>&1 |
75 _filter_btrfs_prop_error label
78 echo -e "\nTesting subvolume ro property"
79 _run_btrfs_util_prog subvolume create $SCRATCH_MNT/sv1
80 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/sv1 ro
82 $BTRFS_UTIL_PROG property set $SCRATCH_MNT/sv1 ro foo 2>&1 |
83 _filter_btrfs_prop_error
85 $BTRFS_UTIL_PROG property set $SCRATCH_MNT/sv1 ro true
87 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/sv1 ro
89 touch $SCRATCH_MNT/sv1/foobar 2>&1 | _filter_scratch
91 $BTRFS_UTIL_PROG property set $SCRATCH_MNT/sv1 ro false
92 touch $SCRATCH_MNT/sv1/foobar 2>&1 | _filter_scratch
93 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/sv1
96 echo -e "\nTesting compression property"
97 mkdir $SCRATCH_MNT/testdir/subdir1
98 touch $SCRATCH_MNT/testdir/file1
99 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/file1 compression
100 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1 compression
102 $BTRFS_UTIL_PROG property set $SCRATCH_MNT/testdir/file1 compression \
103 foo 2>&1 | _filter_scratch |
104 _filter_btrfs_prop_error SCRATCH_MNT/testdir/file1
106 $BTRFS_UTIL_PROG property set $SCRATCH_MNT/testdir/file1 compression lzo
107 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/file1 compression
109 # Verify property was persisted.
113 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/file1 compression
114 $BTRFS_UTIL_PROG property set $SCRATCH_MNT/testdir/file1 compression zlib
115 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/file1 compression
116 $BTRFS_UTIL_PROG property set $SCRATCH_MNT/testdir/file1 compression ''
117 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/file1 compression
119 # Test compression property inheritance.
121 $BTRFS_UTIL_PROG property set $SCRATCH_MNT/testdir/subdir1 compression lzo
122 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1 compression
124 mkdir $SCRATCH_MNT/testdir/subdir1/subsubdir
125 touch $SCRATCH_MNT/testdir/subdir1/some_file
126 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1/subsubdir compression
128 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1/some_file compression
130 mkdir $SCRATCH_MNT/testdir/subdir1/subsubdir/foo
131 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1/subsubdir/foo \
135 # Verify property was persisted.
139 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1/subsubdir compression
141 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1/subsubdir/foo \
144 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1/some_file compression
146 $BTRFS_UTIL_PROG property set $SCRATCH_MNT/testdir/subdir1/subsubdir \
148 $BTRFS_UTIL_PROG property set $SCRATCH_MNT/testdir/subdir1/some_file \
150 $BTRFS_UTIL_PROG property set $SCRATCH_MNT/testdir/subdir1 compression ''
152 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1/subsubdir compression
154 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1/some_file compression
156 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1 compression
158 touch $SCRATCH_MNT/testdir/subdir1/some_file_2
159 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1/some_file_2 \
163 # Verify send is able to replicate properties.
164 echo -e "\nTesting properties with send"
165 $BTRFS_UTIL_PROG property set $SCRATCH_MNT/testdir/subdir1 compression lzo
166 touch $SCRATCH_MNT/testdir/subdir1/foobar
167 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1 compression
168 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1/foobar compression
171 _run_btrfs_util_prog subvolume snapshot -r $SCRATCH_MNT $SCRATCH_MNT/mysnap1
172 touch $SCRATCH_MNT/testdir/subdir1/foobar2
173 _run_btrfs_util_prog subvolume snapshot -r $SCRATCH_MNT $SCRATCH_MNT/mysnap2
175 _run_btrfs_util_prog send $SCRATCH_MNT/mysnap1 -f $send_files_dir/1.snap
176 _run_btrfs_util_prog send -p $SCRATCH_MNT/mysnap1 $SCRATCH_MNT/mysnap2 \
177 -f $send_files_dir/2.snap
181 _scratch_mkfs >/dev/null 2>&1
184 _run_btrfs_util_prog receive $SCRATCH_MNT -f $send_files_dir/1.snap
185 _run_btrfs_util_prog receive $SCRATCH_MNT -f $send_files_dir/2.snap
186 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/mysnap2/testdir/subdir1 compression
187 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/mysnap2/testdir/subdir1/foobar \
189 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/mysnap2/testdir/subdir1/foobar2 \
195 _scratch_mkfs >/dev/null 2>&1
198 echo -e "\nTesting subvolume properties"
199 $BTRFS_UTIL_PROG property set $SCRATCH_MNT compression 'lzo'
200 $BTRFS_UTIL_PROG property get $SCRATCH_MNT compression
202 touch $SCRATCH_MNT/file1
203 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/file1 compression
205 mkdir $SCRATCH_MNT/dir1
206 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/dir1 compression
208 mkdir $SCRATCH_MNT/dir1/subdir1
209 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/dir1/subdir1 compression
211 $BTRFS_UTIL_PROG property set $SCRATCH_MNT/dir1/subdir1 compression 'zlib'
212 touch $SCRATCH_MNT/dir1/subdir1/foo
213 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/dir1/subdir1/foo compression
215 echo -e "\nTesting subvolume property inheritance"
216 _run_btrfs_util_prog subvolume create $SCRATCH_MNT/sv1
217 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/sv1 compression
218 touch $SCRATCH_MNT/sv1/file2
219 $BTRFS_UTIL_PROG property get $SCRATCH_MNT/sv1/file2 compression