summaryrefslogtreecommitdiff
path: root/tests/extmod/vfs_posix_readonly.py
blob: e7821381006fd6d125631c1a8f1b12efdcc07f46 (plain)
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)