2 # Ensure that mv, cp -a and cp --preserve=xattr(all) options do work
3 # as expected on file system without their support and do show correct
4 # diagnostics when required
6 # Copyright (C) 2009 Free Software Foundation, Inc.
8 # This program is free software: you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation, either version 3 of the License, or
11 # (at your option) any later version.
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with this program. If not, see <http://www.gnu.org/licenses/>.
21 if test "$VERBOSE" = yes; then
31 cleanup_
() { cd /; umount
"$cwd/mnt"; }
33 # Create a file system without user xattr support, then mount it.
34 dd if=/dev
/zero of
=blob bs
=8192 count
=200 > /dev
/null
2>&1 \
36 mkdir mnt || framework_failure
37 mkfs
-t ext2
-F blob ||
38 skip_test_
"failed to create ext2 file system"
40 mount
-oloop,nouser_xattr blob mnt || framework_failure
41 echo test > mnt
/f || framework_failure
42 test -s mnt
/f || framework_failure
44 # testing xattr name-value pair
47 xattr_pair
="$xattr_name=\"$xattr_value\""
49 echo test > a || framework_failure
50 getfattr
-d a
>out_a || skip_test_
"failed to get xattr of file"
51 grep -F "$xattr_pair" out_a
>/dev
/null
&& framework_failure
52 setfattr
-n "$xattr_name" -v "$xattr_value" a
>out_a \
53 || skip_test_
"failed to set xattr of file"
54 getfattr
-d a
>out_a || skip_test_
"failed to get xattr of file"
55 grep -F "$xattr_pair" out_a
>/dev
/null \
56 || skip_test_
"failed to set xattr of file"
58 fail
=0 || framework_failure
61 # This should pass without diagnostics
62 cp -a a mnt
/ 2>err || fail
=1
63 test -s mnt
/a || fail
=1 # destination file must not be empty
64 test -s err
&& fail
=1 # there must be no stderr output
68 # This should pass without diagnostics
69 cp --preserve=all a mnt
/ 2>err || fail
=1
70 test -s mnt
/a || fail
=1 # destination file must not be empty
71 test -s err
&& fail
=1 # there must be no stderr output
75 # This should fail with coresponding diagnostics
76 cp -a --preserve=xattr a mnt
/ 2>err
&& fail
=1
77 cat <<\EOF
> exp || fail
=1
78 cp: setting attributes
for `mnt/a': Operation not supported
81 compare err exp || fail=1
85 # This should pass without diagnostics
86 mv a mnt/ 2>err || fail=1
87 test -s mnt/a || fail=1 # destination file must not be empty
88 test -s err && fail=1 # there must be no stderr output