6 VOLNAME_PROP = "Filesystem volume name"
7 REVISION_PROP = "Filesystem revision #"
8 FEATURES_PROP = "Filesystem features"
9 BLOCKCNT_PROP = "Block count"
10 INODECNT_PROP = "Inode count"
11 RESBLKCNT_PROP = "Reserved block count"
13 CHECK_FS_TYPE_CMD = "mount | grep '/dev/root on / type {}'"
15 def dumpe2fs_run(builddir, image):
16 cmd = ["host/sbin/dumpe2fs", os.path.join("images", image)]
17 ret = subprocess.check_output(cmd,
18 stderr=open(os.devnull, "w"),
21 return ret.strip().splitlines()
23 def dumpe2fs_getprop(out, prop):
25 fields = line.split(": ")
27 return fields[1].strip()
29 def boot_img_and_check_fs_type(emulator, builddir, fs_type):
30 img = os.path.join(builddir, "images", "rootfs.{}".format(fs_type))
31 emulator.boot(arch="armv7",
33 kernel_cmdline=["root=/dev/mmcblk0",
34 "rootfstype={}".format(fs_type)],
35 options=["-drive", "file={},if=sd".format(img)])
37 _, exit_code = emulator.run(CHECK_FS_TYPE_CMD.format(fs_type))
40 class TestExt2(infra.basetest.BRTest):
41 config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
43 BR2_TARGET_ROOTFS_EXT2=y
44 BR2_TARGET_ROOTFS_EXT2_2r0=y
45 BR2_TARGET_ROOTFS_EXT2_LABEL="foobaz"
46 # BR2_TARGET_ROOTFS_TAR is not set
50 out = dumpe2fs_run(self.builddir, "rootfs.ext2")
51 self.assertEqual(dumpe2fs_getprop(out, VOLNAME_PROP), "foobaz")
52 self.assertEqual(dumpe2fs_getprop(out, REVISION_PROP), "0 (original)")
54 exit_code = boot_img_and_check_fs_type(self.emulator,
55 self.builddir, "ext2")
56 self.assertEqual(exit_code, 0)
58 class TestExt2r1(infra.basetest.BRTest):
59 config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
61 BR2_TARGET_ROOTFS_EXT2=y
62 BR2_TARGET_ROOTFS_EXT2_2r1=y
63 BR2_TARGET_ROOTFS_EXT2_LABEL="foobar"
64 # BR2_TARGET_ROOTFS_TAR is not set
68 out = dumpe2fs_run(self.builddir, "rootfs.ext2")
69 self.assertEqual(dumpe2fs_getprop(out, VOLNAME_PROP), "foobar")
70 self.assertEqual(dumpe2fs_getprop(out, REVISION_PROP), "1 (dynamic)")
71 self.assertNotIn("has_journal", dumpe2fs_getprop(out, FEATURES_PROP))
73 exit_code = boot_img_and_check_fs_type(self.emulator,
74 self.builddir, "ext2")
75 self.assertEqual(exit_code, 0)
77 class TestExt3(infra.basetest.BRTest):
78 config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
80 BR2_TARGET_ROOTFS_EXT2=y
81 BR2_TARGET_ROOTFS_EXT2_3=y
82 # BR2_TARGET_ROOTFS_TAR is not set
86 out = dumpe2fs_run(self.builddir, "rootfs.ext3")
87 self.assertEqual(dumpe2fs_getprop(out, REVISION_PROP), "1 (dynamic)")
88 self.assertIn("has_journal", dumpe2fs_getprop(out, FEATURES_PROP))
89 self.assertNotIn("extent", dumpe2fs_getprop(out, FEATURES_PROP))
91 exit_code = boot_img_and_check_fs_type(self.emulator,
92 self.builddir, "ext3")
93 self.assertEqual(exit_code, 0)
95 class TestExt4(infra.basetest.BRTest):
96 config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
98 BR2_TARGET_ROOTFS_EXT2=y
99 BR2_TARGET_ROOTFS_EXT2_4=y
100 BR2_TARGET_ROOTFS_EXT2_SIZE="16384"
101 BR2_TARGET_ROOTFS_EXT2_INODES=3000
102 BR2_TARGET_ROOTFS_EXT2_RESBLKS=10
103 # BR2_TARGET_ROOTFS_TAR is not set
107 out = dumpe2fs_run(self.builddir, "rootfs.ext4")
108 self.assertEqual(dumpe2fs_getprop(out, REVISION_PROP), "1 (dynamic)")
109 self.assertEqual(dumpe2fs_getprop(out, BLOCKCNT_PROP), "16384")
110 # Yes there are 8 more inodes than requested
111 self.assertEqual(dumpe2fs_getprop(out, INODECNT_PROP), "3008")
112 self.assertEqual(dumpe2fs_getprop(out, RESBLKCNT_PROP), "1638")
113 self.assertIn("has_journal", dumpe2fs_getprop(out, FEATURES_PROP))
114 self.assertIn("extent", dumpe2fs_getprop(out, FEATURES_PROP))
116 exit_code = boot_img_and_check_fs_type(self.emulator,
117 self.builddir, "ext4")
118 self.assertEqual(exit_code, 0)