tests/extmod: Add (failing) test for VfsPosix in readonly mode.
I noticed that operations such as unlink could be performed on a nominally read-only VfsPosix. Signed-off-by: Jeff Epler <jepler@gmail.com>
This commit is contained in:
committed by
Damien George
parent
6515cd05f1
commit
d79000df70
99
tests/extmod/vfs_posix_readonly.py
Normal file
99
tests/extmod/vfs_posix_readonly.py
Normal file
@@ -0,0 +1,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)
|
||||||
7
tests/extmod/vfs_posix_readonly.py.exp
Normal file
7
tests/extmod/vfs_posix_readonly.py.exp
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
file: content
|
||||||
|
file 2: content
|
||||||
|
OSError(30,)
|
||||||
|
OSError(30,)
|
||||||
|
OSError(30,)
|
||||||
|
OSError(30,)
|
||||||
|
OSError(30,)
|
||||||
Reference in New Issue
Block a user