Annotation of embedaddon/rsync/testsuite/xattrs.test, revision 1.1.1.3
1.1 misho 1: #! /bin/sh
2:
3: # This program is distributable under the terms of the GNU GPL (see
4: # COPYING).
5:
6: # Test that rsync handles basic xattr preservation.
7:
1.1.1.2 misho 8: . $suitedir/rsync.fns
1.1 misho 9: lnkdir="$tmpdir/lnk"
10:
1.1.1.3 ! misho 11: $RSYNC --version | grep "[, ] xattrs" >/dev/null || test_skipped "Rsync is configured without xattr support"
1.1 misho 12:
1.1.1.2 misho 13: case "$HOST_OS" in
14: darwin*)
1.1 misho 15: xset() {
16: xnam="$1"
17: xval="$2"
18: shift 2
19: xattr -s "$xnam" "$xval" "${@}"
20: }
21: xls() {
22: xattr -l "${@}" | sed "s/^[ $tab_ch]*//"
23: }
24: RSYNC_PREFIX='rsync'
25: RUSR='rsync.nonuser'
26: ;;
1.1.1.2 misho 27: solaris*)
28: xset() {
29: xnam="$1"
30: xval="$2"
31: shift 2
32: for fn in "${@}"; do
33: runat "$fn" "$SHELL_PATH" <<EOF
34: echo "${xval}" > "${xnam}"
35: EOF
36: done
37: }
38: xls() {
39: for fn in "${@}"; do
40: runat "$fn" "$SHELL_PATH" <<EOF
41: for x in *; do echo "\$x=\`cat \$x\`"; done
42: EOF
43: done
44: }
45: RSYNC_PREFIX='rsync'
46: RUSR='rsync.nonuser'
47: ;;
1.1.1.3 ! misho 48: freebsd*)
! 49: xset() {
! 50: xnam="$1"
! 51: xval="$2"
! 52: shift 2
! 53: setextattr -h user "$xnam" "$xval" "${@}"
! 54: }
! 55: xls() {
! 56: for f in "${@}"; do lsextattr -q -h user "$f" | tr '[[:space:]]' '\n' | sort | xargs -I % getextattr -h user % "$f"; done
! 57: }
! 58: RSYNC_PREFIX='rsync'
! 59: RUSR='rsync'
! 60: ;;
1.1 misho 61: *)
62: xset() {
63: xnam="$1"
64: xval="$2"
65: shift 2
66: setfattr -n "$xnam" -v "$xval" "${@}"
67: }
68: xls() {
69: getfattr -d "${@}"
70: }
71: RSYNC_PREFIX='user.rsync'
72: RUSR='user.rsync'
73: ;;
74: esac
75:
76: makepath "$lnkdir" "$fromdir/foo/bar"
77: echo now >"$fromdir/file0"
78: echo something >"$fromdir/file1"
79: echo else >"$fromdir/file2"
80: echo deep >"$fromdir/foo/file3"
81: echo normal >"$fromdir/file4"
82: echo deeper >"$fromdir/foo/bar/file5"
83:
84: makepath "$chkdir/foo"
85: echo wow >"$chkdir/file1"
86: cp_touch "$fromdir/foo/file3" "$chkdir/foo"
87:
88: dirs='foo foo/bar'
89: files='file0 file1 file2 foo/file3 file4 foo/bar/file5'
90:
91: uid_gid=`"$TOOLDIR/tls" "$fromdir/foo" | sed 's/^.* \([0-9][0-9]*\)\.\([0-9][0-9]*\) .*/\1:\2/'`
92:
93: cd "$fromdir"
94:
95: xset user.foo foo file0 2>/dev/null || test_skipped "Unable to set an xattr"
96: xset user.bar bar file0
97:
98: xset user.short 'this is short' file1
99: xset user.long 'this is a long attribute that will be truncated in the initial data send' file1
100: xset user.good 'this is good' file1
101: xset user.nice 'this is nice' file1
102:
103: xset user.foo foo file2
104: xset user.bar bar file2
105: xset user.long 'a long attribute for our new file that tests to ensure that this works' file2
106:
107: xset user.dir1 'need to test directory xattrs too' foo
108: xset user.dir2 'another xattr' foo
109: xset user.dir3 'this is one last one for the moment' foo
110:
111: xset user.dir4 'another dir test' foo/bar
112: xset user.dir5 'one last one' foo/bar
113:
114: xset user.foo 'new foo' foo/file3 foo/bar/file5
115: xset user.bar 'new bar' foo/file3 foo/bar/file5
116: xset user.long 'this is also a long attribute that will be truncated in the initial data send' foo/file3 foo/bar/file5
117: xset $RUSR.equal 'this long attribute should remain the same and not need to be transferred' foo/file3 foo/bar/file5
118:
119: xset user.dir0 'old extra value' "$chkdir/foo"
120: xset user.dir1 'old dir value' "$chkdir/foo"
121:
122: xset user.short 'old short' "$chkdir/file1"
123: xset user.extra 'remove me' "$chkdir/file1"
124:
125: xset user.foo 'old foo' "$chkdir/foo/file3"
126: xset $RUSR.equal 'this long attribute should remain the same and not need to be transferred' "$chkdir/foo/file3"
127:
128: case $0 in
129: *hlink*)
130: ln foo/bar/file5 foo/bar/file6 || test_skipped "Can't create hardlink"
131: files="$files foo/bar/file6"
132: dashH='-H'
133: altDest='--link-dest'
134: ;;
135: *)
136: dashH=''
137: altDest='--copy-dest'
138: ;;
139: esac
140:
141: xls $dirs $files >"$scratchdir/xattrs.txt"
142:
1.1.1.3 ! misho 143: XFILT='-f-x_system.* -f-x_security.*'
! 144:
1.1 misho 145: # OK, let's try a simple xattr copy.
1.1.1.3 ! misho 146: checkit "$RSYNC -avX $XFILT $dashH --super . '$chkdir/'" "$fromdir" "$chkdir"
1.1 misho 147:
148: cd "$chkdir"
149: xls $dirs $files | diff $diffopt "$scratchdir/xattrs.txt" -
150:
151: cd "$fromdir"
152:
153: if [ "$dashH" ]; then
154: for fn in $files; do
155: name=`basename $fn`
156: ln $fn ../lnk/$name
157: done
158: fi
159:
1.1.1.3 ! misho 160: checkit "$RSYNC -aiX $XFILT $dashH --super $altDest=../chk . ../to" "$fromdir" "$todir"
1.1 misho 161:
162: cd "$todir"
163: xls $dirs $files | diff $diffopt "$scratchdir/xattrs.txt" -
164:
165: [ "$dashH" ] && rm -rf "$lnkdir"
166:
167: cd "$fromdir"
168: rm -rf "$todir"
169:
170: xset user.nice 'this is nice, but different' file1
171:
172: xls $dirs $files >"$scratchdir/xattrs.txt"
173:
1.1.1.3 ! misho 174: checkit "$RSYNC -aiX $XFILT $dashH --fake-super --link-dest=../chk . ../to" "$chkdir" "$todir"
1.1 misho 175:
176: cd "$todir"
177: xls $dirs $files | diff $diffopt "$scratchdir/xattrs.txt" -
178:
1.1.1.3 ! misho 179: sed -n -e '/^[^d ][^ ]* *[^ ][^ ]* *[^ ][^ ]* *1 /p' "$scratchdir/ls-to" >"$scratchdir/ls-diff-all"
1.1 misho 180: fgrep -v './file1' "$scratchdir/ls-diff-all" >"$scratchdir/ls-diff" || :
181: if [ -s "$scratchdir/ls-diff" ]; then
182: echo "Missing hard links on:"
183: cat "$scratchdir/ls-diff"
184: exit 1
185: fi
186: if [ ! -s "$scratchdir/ls-diff-all" ]; then
187: echo "Too many hard links on file1!"
188: exit 1
189: fi
190:
191: cd "$chkdir"
192: chmod go-rwx . $dirs $files
193:
194: xset user.nice 'this is nice, but different' file1
195: xset $RSYNC_PREFIX.%stat "40000 0,0 $uid_gid" $dirs
196: xset $RSYNC_PREFIX.%stat "100000 0,0 $uid_gid" $files
197:
198: xls $dirs $files >"$scratchdir/xattrs.txt"
199:
200: cd "$fromdir"
201: rm -rf "$todir"
202:
203: # When run by a non-root tester, this checks if no-user-perm files/dirs can be copied.
1.1.1.3 ! misho 204: checkit "$RSYNC -aiX $XFILT $dashH --fake-super --chmod=a= . ../to" "$chkdir" "$todir" # 2>"$scratchdir/errors.txt"
1.1 misho 205:
206: cd "$todir"
207: xls $dirs $files | diff $diffopt "$scratchdir/xattrs.txt" -
208:
209: cd "$fromdir"
210: rm -rf "$todir" "$chkdir"
211:
212: $RSYNC -aX file1 file2
213: $RSYNC -aX file1 file2 ../chk/
214: $RSYNC -aX --del ../chk/ .
215: $RSYNC -aX file1 ../lnk/
216: [ "$dashH" ] && ln "$chkdir/file1" ../lnk/extra-link
217:
218: xls file1 file2 >"$scratchdir/xattrs.txt"
219:
1.1.1.3 ! misho 220: checkit "$RSYNC -aiiX $XFILT $dashH $altDest=../lnk . ../to" "$chkdir" "$todir"
1.1 misho 221:
222: [ "$dashH" ] && rm ../lnk/extra-link
223:
224: cd "$todir"
225: xls file1 file2 | diff $diffopt "$scratchdir/xattrs.txt" -
226:
227: cd "$fromdir"
228: rm "$todir/file2"
229:
230: echo extra >file1
231: $RSYNC -aX . ../chk/
232:
1.1.1.3 ! misho 233: checkit "$RSYNC -aiiX $XFILT . ../to" "$chkdir" "$todir"
1.1 misho 234:
235: cd "$todir"
236: xls file1 file2 | diff $diffopt "$scratchdir/xattrs.txt" -
237:
238: # The script would have aborted on error, so getting here means we've won.
239: exit 0
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>