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