1# Test for VfsLittle using a RAM device, testing error handling 2 3try: 4 import uos 5 6 uos.VfsLfs1 7 uos.VfsLfs2 8except (ImportError, AttributeError): 9 print("SKIP") 10 raise SystemExit 11 12 13class RAMBlockDevice: 14 ERASE_BLOCK_SIZE = 1024 15 16 def __init__(self, blocks): 17 self.data = bytearray(blocks * self.ERASE_BLOCK_SIZE) 18 19 def readblocks(self, block, buf, off): 20 addr = block * self.ERASE_BLOCK_SIZE + off 21 for i in range(len(buf)): 22 buf[i] = self.data[addr + i] 23 24 def writeblocks(self, block, buf, off): 25 addr = block * self.ERASE_BLOCK_SIZE + off 26 for i in range(len(buf)): 27 self.data[addr + i] = buf[i] 28 29 def ioctl(self, op, arg): 30 if op == 4: # block count 31 return len(self.data) // self.ERASE_BLOCK_SIZE 32 if op == 5: # block size 33 return self.ERASE_BLOCK_SIZE 34 if op == 6: # erase block 35 return 0 36 37 38def test(bdev, vfs_class): 39 print("test", vfs_class) 40 41 # mkfs with too-small block device 42 try: 43 vfs_class.mkfs(RAMBlockDevice(1)) 44 except OSError: 45 print("mkfs OSError") 46 47 # mount with invalid filesystem 48 try: 49 vfs_class(bdev) 50 except OSError: 51 print("mount OSError") 52 53 # set up for following tests 54 vfs_class.mkfs(bdev) 55 vfs = vfs_class(bdev) 56 with vfs.open("testfile", "w") as f: 57 f.write("test") 58 vfs.mkdir("testdir") 59 60 # ilistdir 61 try: 62 vfs.ilistdir("noexist") 63 except OSError: 64 print("ilistdir OSError") 65 66 # remove 67 try: 68 vfs.remove("noexist") 69 except OSError: 70 print("remove OSError") 71 72 # rmdir 73 try: 74 vfs.rmdir("noexist") 75 except OSError: 76 print("rmdir OSError") 77 78 # rename 79 try: 80 vfs.rename("noexist", "somethingelse") 81 except OSError: 82 print("rename OSError") 83 84 # mkdir 85 try: 86 vfs.mkdir("testdir") 87 except OSError: 88 print("mkdir OSError") 89 90 # chdir to nonexistent 91 try: 92 vfs.chdir("noexist") 93 except OSError: 94 print("chdir OSError") 95 print(vfs.getcwd()) # check still at root 96 97 # chdir to file 98 try: 99 vfs.chdir("testfile") 100 except OSError: 101 print("chdir OSError") 102 print(vfs.getcwd()) # check still at root 103 104 # stat 105 try: 106 vfs.stat("noexist") 107 except OSError: 108 print("stat OSError") 109 110 # error during seek 111 with vfs.open("testfile", "r") as f: 112 f.seek(1 << 30) # SEEK_SET 113 try: 114 f.seek(1 << 30, 1) # SEEK_CUR 115 except OSError: 116 print("seek OSError") 117 118 119bdev = RAMBlockDevice(30) 120test(bdev, uos.VfsLfs1) 121test(bdev, uos.VfsLfs2) 122