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-2011 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
. "${srcdir=.}/init.sh"; path_prepend_ ../src
28
cleanup_() { cd /; umount "$cwd/noxattr"; umount "$cwd/xattr"; }
32
# Mount an ext2 loopback file system at $WHERE with $OPTS
39
dd if=/dev/zero of="$fs" bs=8192 count=200 > /dev/null 2>&1 \
41
mkdir "$where" || skip=1
42
mkfs -t ext2 -F "$fs" ||
43
skip_ "failed to create ext2 file system"
44
mount -oloop,$opts "$fs" "$where" || skip=1
45
echo test > "$where"/f || skip=1
46
test -s "$where"/f || skip=1
49
skip_ "insufficient mount/ext2 support"
52
make_fs noxattr nouser_xattr
53
make_fs xattr user_xattr
55
# testing xattr name-value pair
58
xattr_pair="$xattr_name=\"$xattr_value\""
60
echo test > xattr/a || framework_failure_
61
getfattr -d xattr/a >out_a || skip_ "failed to get xattr of file"
62
grep -F "$xattr_pair" out_a >/dev/null && framework_failure_
63
setfattr -n "$xattr_name" -v "$xattr_value" xattr/a >out_a \
64
|| skip_ "failed to set xattr of file"
65
getfattr -d xattr/a >out_a || skip_ "failed to get xattr of file"
66
grep -F "$xattr_pair" out_a >/dev/null \
67
|| skip_ "failed to set xattr of file"
70
# This should pass without diagnostics
71
cp -a xattr/a noxattr/ 2>err || fail=1
72
test -s noxattr/a || fail=1 # destination file must not be empty
73
test -s err && fail=1 # there must be no stderr output
77
# This should pass without diagnostics (new file)
78
cp --preserve=all xattr/a noxattr/ 2>err || fail=1
79
test -s noxattr/a || fail=1 # destination file must not be empty
80
test -s err && fail=1 # there must be no stderr output
82
# This should pass without diagnostics (existing file)
83
cp --preserve=all xattr/a noxattr/ 2>err || fail=1
84
test -s noxattr/a || fail=1 # destination file must not be empty
85
test -s err && fail=1 # there must be no stderr output
89
# This should fail with coresponding diagnostics
90
cp -a --preserve=xattr xattr/a noxattr/ 2>err && fail=1
91
if grep '^#define USE_XATTR 1' $CONFIG_HEADER > /dev/null; then
93
cp: setting attributes for `noxattr/a': Operation not supported
97
cp: cannot preserve extended attributes, cp is built without xattr support
101
compare err exp || fail=1
105
# This should pass without diagnostics
106
mv xattr/a noxattr/ 2>err || fail=1
107
test -s noxattr/a || fail=1 # destination file must not be empty
108
test -s err && fail=1 # there must be no stderr output