[BACK]Return to attr.test CVS log [TXT][DIR] Up to [Development] / xfs-cmds / attr / test

File: [Development] / xfs-cmds / attr / test / attr.test (download)

Revision 1.7, Wed Nov 21 05:13:52 2007 UTC (9 years, 11 months ago) by tes.longdrop.melbourne.sgi.com
Branch: MAIN
CVS Tags: HEAD
Changes since 1.6: +24 -29 lines

fix up tree walking for symlinks
Merge of master-melb:xfs-cmds:30105a by kenmcd.

Tests for extended attributes on ext2/ext3 file systems. The initial
size checks and the file size checks are ext2/ext3 specific. The
other setfattr/getfattr operations are designed to cover all special
cases in the ext27ext3 kernel patches, but they should work on other
filesystems as well.

Execute this test using the `run' script in this directory:

	run attr.text

Try various valid and invalid names
	
	$ mkdir d
	$ cd d

	$ touch f
	$ setfattr -n user -v value f
	> setfattr: f: Operation not supported
	
	$ setfattr -n user. -v value f
	> setfattr: f: Invalid argument
	
	$ setfattr -n user.name f
	$ getfattr -d f
	> # file: f
	> user.name
	> 
	
	$ setfattr -n user.n -v value f
	$ rm f

Size checks, for an ext2/ext3 file system with a block size of 4K

	$ touch f
	$ setfattr -n user.name -v 4040++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ f
	$ setfattr -n user.name -v 4041+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ f
	> setfattr: f: No space left on device
	
	$ rm f

Editing values

	$ touch f
	$ setfattr -n user.vvvvvvvvvvvv -v vvvvvvvvvvvv f
	$ setfattr -n user.wwwwwwww -v wwwwwwww f
	$ setfattr -n user.xxxx -v xxxx f
	$ getfattr -d f
	> # file: f
	> user.vvvvvvvvvvvv="vvvvvvvvvvvv"
	> user.wwwwwwww="wwwwwwww"
	> user.xxxx="xxxx"
	> 
	
	$ setfattr -n user.wwwwwwww -v wwww f
	$ getfattr -d f
	> # file: f
	> user.vvvvvvvvvvvv="vvvvvvvvvvvv"
	> user.wwwwwwww="wwww"
	> user.xxxx="xxxx"
	> 
	
	$ setfattr -n user.xxxx -v xxxxxxxx f
	$ getfattr -d f
	> # file: f
	> user.vvvvvvvvvvvv="vvvvvvvvvvvv"
	> user.wwwwwwww="wwww"
	> user.xxxx="xxxxxxxx"
	> 
	
	$ rm f

Value encodings

	$ touch f
	$ setfattr -n user.name -v 0xbabe f
	$ setfattr -n user.name2 -v 0s3q2+7w== f
	$ setfattr -n user.name3 -v 0xdeface f
	$ getfattr -d -e hex f
	> # file: f
	> user.name=0xbabe
	> user.name2=0xdeadbeef
	> user.name3=0xdeface
	> 
	
	$ getfattr -d -e base64 f
	> # file: f
	> user.name=0sur4=
	> user.name2=0s3q2+7w==
	> user.name3=0s3vrO
	> 
	
	$ rm f

Everything with one file

	$ touch f
	$ setfattr -n user.novalue f
	$ setfattr -n user.somename -v somevalue f
	$ setfattr -n user.somename -v somevalue f
	$ setfattr -n user.longername -v longervalue f
	$ setfattr -n user.short -v value f
	$ setfattr -n user.novalue-yet f
	$ ls -s f
	> 4 f
	
	$ getfattr -d f
	> # file: f
	> user.longername="longervalue"
	> user.novalue
	> user.novalue-yet
	> user.short="value"
	> user.somename="somevalue"
	> 
	
	$ setfattr -n user.novalue-yet -v avalue-now f
	$ getfattr -d f
	> # file: f
	> user.longername="longervalue"
	> user.novalue
	> user.novalue-yet="avalue-now"
	> user.short="value"
	> user.somename="somevalue"
	> 
	
	$ setfattr -x user.noname f
	> setfattr: f: No such attribute
	
	$ setfattr -x user.somename f
	$ setfattr -x user.short f
	$ getfattr -d f
	> # file: f
	> user.longername="longervalue"
	> user.novalue
	> user.novalue-yet="avalue-now"
	> 
	
	$ setfattr -x user.longername f
	$ setfattr -x user.novalue f
	$ setfattr -x user.novalue-yet f
	$ getfattr -d f
	$ ls -s f
	> 0 f
	
	$ rm f

Test extended attribute block sharing

	$ touch f g h
	$ setfattr -n user.novalue f g h
	$ ls -s f g h
	> 4 f
	> 4 g
	> 4 h
	
	$ setfattr -n user.name -v value f
	$ ls -s f g h
	> 4 f
	> 4 g
	> 4 h
	
	$ getfattr -d f g h
	> # file: f
	> user.name="value"
	> user.novalue
	> 
	> # file: g
	> user.novalue
	> 
	> # file: h
	> user.novalue
	> 
	
	$ setfattr -n user.name -v value g
	$ ls -s f g h
	> 4 f
	> 4 g
	> 4 h
	
	$ setfattr -x user.novalue h
	$ ls -s f g h
	> 4 f
	> 4 g
	> 0 h
	
	$ getfattr -d f g h
	> # file: f
	> user.name="value"
	> user.novalue
	> 
	> # file: g
	> user.name="value"
	> user.novalue
	> 
	
	$ setfattr -n user.name -v other-value g
	$ setfattr -n user.name -v value g
	$ setfattr -x user.name f g
	$ setfattr -x user.novalue f g
	$ ls -s f g h
	> 0 f
	> 0 g
	> 0 h
	
	$ rm f g h

Attributes of symlinks vs. the files pointed to

	$ touch f
	$ ln -s f l
	$ setfattr -n user.filename -v f l
	$ setfattr -n user.filename -v l l
	$ setfattr -h -n user.filename -v l l
	> setfattr: l: Operation not permitted
	
	$ getfattr -d f l
	> # file: f
	> user.filename="l"
	> 
	> # file: l
	> user.filename="l"
	> 

	$ rm f

Tests for file name that contain special characters

	$ touch "f "
	$ setfattr -n user.name -v value "f "
	$ getfattr -d "f "
	> # file: f\040
	> user.name="value"
	>

	$ rm "f "

Tests for attribute names that contains special characters

	$ touch f
	$ setfattr -n "user.sp ace" -v value f
	$ setfattr -n "user.special\\007" -v value f
	$ getfattr f
	> # file: f
	> user.sp\040ace
	> user.special\007
	>

	$ getfattr -d f
	> # file: f
	> user.sp\040ace="value"
	> user.special\007="value"
	>

	$ setfattr -x "user.sp ace" f
	$ setfattr -n "user.sp ace" -v value f
	$ setfattr -x "user.sp\\040ace" f
	$ setfattr -x "user.special\\007" f
	$ rm f

	$ cd ..
	$ rm -rf d