micropython/tests/extmod/vfs_basic.py
Damien George 9bd67d9fbc tests/extmod: Make some vfs tests fully unmount FSs before running.
Otherwise the existing FSs can interfere with the tests, and in some
cases the tests can write to the real FS on the device.
2017-05-09 15:50:40 +10:00

136 lines
3.0 KiB
Python

# test VFS functionality without any particular filesystem type
try:
try:
import uos_vfs as uos
open = uos.vfs_open
except ImportError:
import uos
uos.mount
except (ImportError, AttributeError):
print("SKIP")
import sys
sys.exit()
class Filesystem:
def __init__(self, id):
self.id = id
def mount(self, readonly, mkfs):
print(self.id, 'mount', readonly, mkfs)
def umount(self):
print(self.id, 'umount')
def listdir(self, dir):
print(self.id, 'listdir', dir)
return ['a%d' % self.id]
def chdir(self, dir):
print(self.id, 'chdir', dir)
def getcwd(self):
print(self.id, 'getcwd')
return 'dir%d' % self.id
def mkdir(self, path):
print(self.id, 'mkdir', path)
def remove(self, path):
print(self.id, 'remove', path)
def rename(self, old_path, new_path):
print(self.id, 'rename', old_path, new_path)
def rmdir(self, path):
print(self.id, 'rmdir', path)
def stat(self, path):
print(self.id, 'stat', path)
return (self.id,)
def statvfs(self, path):
print(self.id, 'statvfs', path)
return (self.id,)
def open(self, file, mode):
print(self.id, 'open', file, mode)
# first we umount any existing mount points the target may have
try:
uos.umount('/')
except OSError:
pass
for path in uos.listdir('/'):
uos.umount('/' + path)
# stat root dir
print(uos.stat('/'))
# getcwd when in root dir
print(uos.getcwd())
# basic mounting and listdir
uos.mount(Filesystem(1), '/test_mnt')
print(uos.listdir())
# referencing the mount point in different ways
print(uos.listdir('test_mnt'))
print(uos.listdir('/test_mnt'))
# mounting another filesystem
uos.mount(Filesystem(2), '/test_mnt2', readonly=True)
print(uos.listdir())
print(uos.listdir('/test_mnt2'))
# mounting over an existing mount point
try:
uos.mount(Filesystem(3), '/test_mnt2')
except OSError:
print('OSError')
# mkdir of a mount point
try:
uos.mkdir('/test_mnt')
except OSError:
print('OSError')
# rename across a filesystem
try:
uos.rename('/test_mnt/a', '/test_mnt2/b')
except OSError:
print('OSError')
# delegating to mounted filesystem
uos.chdir('test_mnt')
print(uos.listdir())
print(uos.getcwd())
uos.mkdir('test_dir')
uos.remove('test_file')
uos.rename('test_file', 'test_file2')
uos.rmdir('test_dir')
print(uos.stat('test_file'))
print(uos.statvfs('/test_mnt'))
open('test_file')
open('test_file', 'wb')
# umount
uos.umount('/test_mnt')
uos.umount('/test_mnt2')
# umount a non-existent mount point
try:
uos.umount('/test_mnt')
except OSError:
print('OSError')
# root dir
uos.mount(Filesystem(3), '/')
print(uos.listdir())
open('test')
uos.mount(Filesystem(4), '/mnt')
print(uos.listdir())
print(uos.listdir('/mnt'))
uos.chdir('/mnt')
print(uos.listdir())
# chdir to a subdir within root-mounted vfs, and then listdir
uos.chdir('/subdir')
print(uos.listdir())
uos.chdir('/')
uos.umount('/')
print(uos.listdir('/'))
uos.umount('/mnt')