| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- # test VFS functionality without any particular filesystem type
- try:
- import uos
- uos.mount
- except (ImportError, AttributeError):
- print("SKIP")
- raise SystemExit
- 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 ilistdir(self, dir):
- print(self.id, 'ilistdir', dir)
- return iter([('a%d' % self.id, 0, 0)])
- 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('/'))
- # statvfs root dir; verify that f_namemax has a sensible size
- print(uos.statvfs('/')[9] >= 32)
- # getcwd when in root dir
- print(uos.getcwd())
- # basic mounting and listdir
- uos.mount(Filesystem(1), '/test_mnt')
- print(uos.listdir())
- # ilistdir
- i = uos.ilistdir()
- print(next(i))
- try:
- next(i)
- except StopIteration:
- print('StopIteration')
- try:
- next(i)
- except StopIteration:
- print('StopIteration')
- # 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.stat('/'))
- print(uos.statvfs('/'))
- 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')
|