1try: 2 import uos 3except ImportError: 4 print("SKIP") 5 raise SystemExit 6 7try: 8 uos.VfsFat 9except AttributeError: 10 print("SKIP") 11 raise SystemExit 12 13 14class RAMFS: 15 16 SEC_SIZE = 512 17 18 def __init__(self, blocks): 19 self.data = bytearray(blocks * self.SEC_SIZE) 20 21 def readblocks(self, n, buf): 22 # print("readblocks(%s, %x(%d))" % (n, id(buf), len(buf))) 23 for i in range(len(buf)): 24 buf[i] = self.data[n * self.SEC_SIZE + i] 25 26 def writeblocks(self, n, buf): 27 # print("writeblocks(%s, %x)" % (n, id(buf))) 28 for i in range(len(buf)): 29 self.data[n * self.SEC_SIZE + i] = buf[i] 30 31 def ioctl(self, op, arg): 32 # print("ioctl(%d, %r)" % (op, arg)) 33 if op == 4: # MP_BLOCKDEV_IOCTL_BLOCK_COUNT 34 return len(self.data) // self.SEC_SIZE 35 if op == 5: # MP_BLOCKDEV_IOCTL_BLOCK_SIZE 36 return self.SEC_SIZE 37 38 39try: 40 bdev = RAMFS(50) 41 bdev2 = RAMFS(50) 42except MemoryError: 43 print("SKIP") 44 raise SystemExit 45 46# first we umount any existing mount points the target may have 47try: 48 uos.umount("/") 49except OSError: 50 pass 51for path in uos.listdir("/"): 52 uos.umount("/" + path) 53 54uos.VfsFat.mkfs(bdev) 55uos.mount(bdev, "/") 56 57print(uos.getcwd()) 58 59f = open("test.txt", "w") 60f.write("hello") 61f.close() 62 63print(uos.listdir()) 64print(uos.listdir("/")) 65print(uos.stat("")[:-3]) 66print(uos.stat("/")[:-3]) 67print(uos.stat("test.txt")[:-3]) 68print(uos.stat("/test.txt")[:-3]) 69 70f = open("/test.txt") 71print(f.read()) 72f.close() 73 74uos.rename("test.txt", "test2.txt") 75print(uos.listdir()) 76uos.rename("test2.txt", "/test3.txt") 77print(uos.listdir()) 78uos.rename("/test3.txt", "test4.txt") 79print(uos.listdir()) 80uos.rename("/test4.txt", "/test5.txt") 81print(uos.listdir()) 82 83uos.mkdir("dir") 84print(uos.listdir()) 85uos.mkdir("/dir2") 86print(uos.listdir()) 87uos.mkdir("dir/subdir") 88print(uos.listdir("dir")) 89for exist in ("", "/", "dir", "/dir", "dir/subdir"): 90 try: 91 uos.mkdir(exist) 92 except OSError as er: 93 print("mkdir OSError", er.args[0] == 17) # EEXIST 94 95uos.chdir("/") 96print(uos.stat("test5.txt")[:-3]) 97 98uos.VfsFat.mkfs(bdev2) 99uos.mount(bdev2, "/sys") 100print(uos.listdir()) 101print(uos.listdir("sys")) 102print(uos.listdir("/sys")) 103 104uos.rmdir("dir2") 105uos.remove("test5.txt") 106print(uos.listdir()) 107 108uos.umount("/") 109print(uos.getcwd()) 110print(uos.listdir()) 111print(uos.listdir("sys")) 112 113# test importing a file from a mounted FS 114import usys 115 116usys.path.clear() 117usys.path.append("/sys") 118with open("sys/test_module.py", "w") as f: 119 f.write('print("test_module!")') 120import test_module 121