diff --git a/tests/extmod/vfs_fat_fsusermount.py b/tests/extmod/vfs_fat_fsusermount.py new file mode 100644 index 0000000000..7326172eed --- /dev/null +++ b/tests/extmod/vfs_fat_fsusermount.py @@ -0,0 +1,96 @@ +import sys +import uos +import uerrno +try: + uos.VfsFat +except AttributeError: + print("SKIP") + sys.exit() + + +class RAMFS: + + SEC_SIZE = 512 + + def __init__(self, blocks): + self.data = bytearray(blocks * self.SEC_SIZE) + + def readblocks(self, n, buf): + #print("readblocks(%s, %x(%d))" % (n, id(buf), len(buf))) + for i in range(len(buf)): + buf[i] = self.data[n * self.SEC_SIZE + i] + + def writeblocks(self, n, buf): + #print("writeblocks(%s, %x)" % (n, id(buf))) + for i in range(len(buf)): + self.data[n * self.SEC_SIZE + i] = buf[i] + + def ioctl(self, op, arg): + #print("ioctl(%d, %r)" % (op, arg)) + if op == 4: # BP_IOCTL_SEC_COUNT + return len(self.data) // self.SEC_SIZE + if op == 5: # BP_IOCTL_SEC_SIZE + return self.SEC_SIZE + + +try: + bdev = RAMFS(48) +except MemoryError: + print("SKIP") + sys.exit() + +# can't mkfs readonly device +try: + uos.vfs_mkfs(bdev, "/ramdisk", readonly=True) +except OSError as e: + print(e) + +# mount before mkfs +try: + uos.vfs_mount(bdev, "/ramdisk") +except OSError as e: + print(e) + +# invalid umount +try: + uos.vfs_umount("/ramdisk") +except OSError as e: + print(e.args[0] == uerrno.EINVAL) + +try: + uos.vfs_mount(None, "/ramdisk") +except OSError as e: + print(e) + +try: + uos.vfs_mkfs(None, "/ramdisk") +except OSError as e: + print(e) + +# valid mkfs/mount +uos.vfs_mkfs(bdev, "/ramdisk") +uos.vfs_mount(bdev, "/ramdisk") + +# umount by path +uos.vfs_umount("/ramdisk") + +# readonly mount +uos.vfs_mount(bdev, "/ramdisk", readonly=True) +vfs = uos.VfsFat(bdev, "/ramdisk") +try: + f = vfs.open("file.txt", "w") +except OSError as e: + print("EROFS:", e.args[0] == 30) # uerrno.EROFS + +# device is None == umount +uos.vfs_mount(None, "/ramdisk") + +# max mounted devices +dev = [] +try: + for i in range(0,4): + dev.append(RAMFS(48)) + uos.vfs_mkfs(dev[i], "/ramdisk" + str(i)) + uos.vfs_mount(dev[i], "/ramdisk" + str(i)) +except OSError as e: + print(e) diff --git a/tests/extmod/vfs_fat_fsusermount.py.exp b/tests/extmod/vfs_fat_fsusermount.py.exp new file mode 100644 index 0000000000..3b30688dd9 --- /dev/null +++ b/tests/extmod/vfs_fat_fsusermount.py.exp @@ -0,0 +1,7 @@ +can't mkfs +can't mount +True +can't umount +can't umount +EROFS: True +too many devices mounted