1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
import os
import sys
from unittest import TestCase
from tempfile import mkdtemp, NamedTemporaryFile
import xattr
class BaseTestXattr(object):
def test_attr(self):
x = xattr.xattr(self.tempfile)
# Solaris 11 and forward contain system attributes (file flags) in
# extended attributes present on all files, so cons them up into a
# comparison dict.
d = {}
if sys.platform == 'sunos5' and 'SUNWattr_ro' in x:
d['SUNWattr_ro'] = x['SUNWattr_ro']
d['SUNWattr_rw'] = x['SUNWattr_rw']
self.assertEqual(x.keys(), d.keys())
self.assertEqual(x.list(), d.keys())
self.assertEqual(dict(x), d)
x['user.sopal'] = b'foo'
x['user.sop.foo'] = b'bar'
x[u'user.\N{SNOWMAN}'] = b'not a snowman'
del x
x = xattr.xattr(self.tempfile)
attrs = set(x.list())
self.assertTrue('user.sopal' in x)
self.assertTrue(u'user.sopal' in attrs)
self.assertEqual(x['user.sopal'], b'foo')
self.assertTrue('user.sop.foo' in x)
self.assertTrue(u'user.sop.foo' in attrs)
self.assertEqual(x['user.sop.foo'], b'bar')
self.assertTrue(u'user.\N{SNOWMAN}' in x)
self.assertTrue(u'user.\N{SNOWMAN}' in attrs)
self.assertEqual(x[u'user.\N{SNOWMAN}'],
b'not a snowman')
del x[u'user.\N{SNOWMAN}']
del x['user.sop.foo']
del x
x = xattr.xattr(self.tempfile)
self.assertTrue('user.sop.foo' not in x)
def test_setxattr_unicode_error(self):
x = xattr.xattr(self.tempfile)
def assign():
x['abc'] = u'abc'
self.assertRaises(TypeError, assign)
if sys.version_info[0] >= 3:
msg = "Value must be bytes, str was passed."
else:
msg = "Value must be bytes, unicode was passed."
try:
assign()
except TypeError, e:
self.assertEqual(str(e), msg)
def test_symlink_attrs(self):
# Solaris doesn't support extended attributes on symlinks
if sys.platform == 'sunos5':
return
symlinkPath = self.tempfilename + '.link'
os.symlink(self.tempfilename, symlinkPath)
try:
symlink = xattr.xattr(symlinkPath, options=xattr.XATTR_NOFOLLOW)
realfile = xattr.xattr(self.tempfilename)
symlink['user.islink'] = b'true'
self.assertEqual(dict(realfile), {})
self.assertEqual(symlink['user.islink'], b'true')
finally:
os.remove(symlinkPath)
class TestFile(TestCase, BaseTestXattr):
def setUp(self):
self.tempfile = NamedTemporaryFile()
self.tempfilename = self.tempfile.name
def tearDown(self):
self.tempfile.close()
class TestDir(TestCase, BaseTestXattr):
def setUp(self):
self.tempfile = mkdtemp()
self.tempfilename = self.tempfile
def tearDown(self):
os.rmdir(self.tempfile)
|