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
98
99
|
# Test for VfsPosix
try:
import gc, os, vfs, errno
vfs.VfsPosix
except (ImportError, AttributeError):
print("SKIP")
raise SystemExit
# We need a directory for testing that doesn't already exist.
# Skip the test if it does exist.
temp_dir = "vfs_posix_readonly_test_dir"
try:
os.stat(temp_dir)
raise SystemExit("Target directory {} exists".format(temp_dir))
except OSError:
pass
# mkdir (skip test if whole filesystem is readonly)
try:
os.mkdir(temp_dir)
except OSError as e:
if e.errno == errno.EROFS:
print("SKIP")
raise SystemExit
fs_factory = lambda: vfs.VfsPosix(temp_dir)
# mount
fs = fs_factory()
vfs.mount(fs, "/vfs")
with open("/vfs/file", "w") as f:
f.write("content")
# test reading works
with open("/vfs/file") as f:
print("file:", f.read())
os.mkdir("/vfs/emptydir")
# umount
vfs.umount("/vfs")
# mount read-only
fs = fs_factory()
vfs.mount(fs, "/vfs", readonly=True)
# test reading works
with open("/vfs/file") as f:
print("file 2:", f.read())
# test writing fails
try:
with open("/vfs/test_write", "w"):
pass
print("opened")
except OSError as er:
print(repr(er))
# test removing fails
try:
os.unlink("/vfs/file")
print("unlinked")
except OSError as er:
print(repr(er))
# test renaming fails
try:
os.rename("/vfs/file2", "/vfs/renamed")
print("renamed")
except OSError as er:
print(repr(er))
# test removing directory fails
try:
os.rmdir("/vfs/emptydir")
print("rmdir'd")
except OSError as er:
print(repr(er))
# test creating directory fails
try:
os.mkdir("/vfs/emptydir2")
print("mkdir'd")
except OSError as er:
print(repr(er))
# umount
vfs.umount("/vfs")
fs = fs_factory()
vfs.mount(fs, "/vfs")
os.rmdir("/vfs/emptydir")
os.unlink("/vfs/file")
os.rmdir(temp_dir)
|