Skip to content

Commit 4129521

Browse files
committed
Add test of utf-8 xattrs
1 parent d812d17 commit 4129521

2 files changed

Lines changed: 64 additions & 0 deletions

File tree

example/xattr.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# Example by github @vignedev from https://github.com/libfuse/python-fuse/issues/77
2+
3+
import fuse
4+
import stat, errno
5+
from fuse import Fuse, Stat, Direntry
6+
7+
fuse.fuse_python_api = (0, 2)
8+
9+
BROKEN_FILE = '/utf8_attr'
10+
FATTR_NAME = 'user.xdg.comment'
11+
FATTR_VALUE = 'ああ、メッセージは切り取られていない'
12+
13+
class EmptyStat(Stat):
14+
def __init__(self):
15+
self.st_mode = 0
16+
self.st_ino = 0
17+
self.st_dev = 0
18+
self.st_nlink = 0
19+
self.st_uid = 0
20+
self.st_gid = 0
21+
self.st_size = 0
22+
self.st_atime = 0
23+
self.st_mtime = 0
24+
self.st_ctime = 0
25+
26+
class GetAttrBug(Fuse):
27+
def getattr(self, path):
28+
ret_stat = EmptyStat()
29+
if path == '/':
30+
ret_stat.st_mode = stat.S_IFDIR | int(0e755)
31+
return ret_stat
32+
33+
if path == BROKEN_FILE:
34+
ret_stat.st_mode = stat.S_IFREG | int(0e000)
35+
return ret_stat
36+
37+
return -errno.ENOENT
38+
39+
def readdir(self, path, offset):
40+
yield Direntry('.')
41+
yield Direntry('..')
42+
yield Direntry(BROKEN_FILE[1:])
43+
44+
def open(self, path, flags):
45+
return -errno.EACCES
46+
47+
def read(self, path, size, offset):
48+
return
49+
50+
def listxattr(self, path, size):
51+
if size == 0: return 1
52+
else: return [ FATTR_NAME ]
53+
54+
def getxattr(self, path, attr, size):
55+
if size == 0: return len(FATTR_VALUE.encode('utf8'))
56+
else: return FATTR_VALUE
57+
58+
if __name__ == '__main__':
59+
server = GetAttrBug(dash_s_do='setsingle')
60+
server.parse(errex=1)
61+
server.main()

tests/test_basic.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,6 @@ def test_fioc(filesystem):
6161
fcntl.ioctl(f.fileno(), FIOC_GET_SIZE, b)
6262
assert struct.unpack("L", b)[0] == 42
6363

64+
@pytest.mark.fstype("xattr")
65+
def test_xattr(filesystem):
66+
assert os.getxattr(filesystem / "utf8_attr", "user.xdg.comment").decode("utf-8") == 'ああ、メッセージは切り取られていない'

0 commit comments

Comments
 (0)