summaryrefslogtreecommitdiff
path: root/tests/extmod/vfs_lfs_superblock.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/extmod/vfs_lfs_superblock.py')
-rw-r--r--tests/extmod/vfs_lfs_superblock.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/extmod/vfs_lfs_superblock.py b/tests/extmod/vfs_lfs_superblock.py
new file mode 100644
index 000000000..1ac567555
--- /dev/null
+++ b/tests/extmod/vfs_lfs_superblock.py
@@ -0,0 +1,47 @@
+# Test for VfsLfs using a RAM device, when the first superblock does not exist
+
+try:
+ import uos
+
+ uos.VfsLfs2
+except (ImportError, AttributeError):
+ print("SKIP")
+ raise SystemExit
+
+
+class RAMBlockDevice:
+ def __init__(self, block_size, data):
+ self.block_size = block_size
+ self.data = data
+
+ def readblocks(self, block, buf, off):
+ addr = block * self.block_size + off
+ for i in range(len(buf)):
+ buf[i] = self.data[addr + i]
+
+ def ioctl(self, op, arg):
+ if op == 4: # block count
+ return len(self.data) // self.block_size
+ if op == 5: # block size
+ return self.block_size
+ if op == 6: # erase block
+ return 0
+
+
+# This is a valid littlefs2 filesystem with a block size of 64 bytes.
+# The first block (where the first superblock is stored) is fully erased.
+lfs2_data = b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x02\x00\x00\x00\xf0\x0f\xff\xf7littlefs/\xe0\x00\x10\x00\x00\x02\x00@\x00\x00\x00\x04\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\x7f\xfe\x03\x00\x00p\x1f\xfc\x08\x1b\xb4\x14\xa7\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\xff\xef\xff\xf7test.txt \x00\x00\x08p\x1f\xfc\x08\x83\xf1u\xba\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+
+# Create the block device from the static data (it will be read-only).
+bdev = RAMBlockDevice(64, lfs2_data)
+
+# Create the VFS explicitly, no auto-detection is needed for this.
+vfs = uos.VfsLfs2(bdev)
+print(list(vfs.ilistdir()))
+
+# Mount the block device directly; this relies on auto-detection.
+uos.mount(bdev, "/userfs")
+print(uos.listdir("/userfs"))
+
+# Clean up.
+uos.umount("/userfs")