]> rtime.felk.cvut.cz Git - coffee/buildroot.git/blob - support/testing/tests/fs/test_ext.py
49bce45dc872557781acb981be465995e04aad46
[coffee/buildroot.git] / support / testing / tests / fs / test_ext.py
1 import os
2 import subprocess
3
4 import infra.basetest
5
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"
12
13 CHECK_FS_TYPE_CMD = "mount | grep '/dev/root on / type {}'"
14
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"),
19                                   cwd=builddir,
20                                   env={"LANG": "C"})
21     return ret.strip().splitlines()
22
23 def dumpe2fs_getprop(out, prop):
24     for line in out:
25         fields = line.split(": ")
26         if fields[0] == prop:
27             return fields[1].strip()
28
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",
32                   kernel="builtin",
33                   kernel_cmdline=["root=/dev/mmcblk0",
34                                   "rootfstype={}".format(fs_type)],
35                   options=["-drive", "file={},if=sd".format(img)])
36     emulator.login()
37     _, exit_code = emulator.run(CHECK_FS_TYPE_CMD.format(fs_type))
38     return exit_code
39
40 class TestExt2(infra.basetest.BRTest):
41     config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
42         """
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
47         """
48
49     def test_run(self):
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)")
53
54         exit_code = boot_img_and_check_fs_type(self.emulator,
55                                                self.builddir, "ext2")
56         self.assertEqual(exit_code, 0)
57
58 class TestExt2r1(infra.basetest.BRTest):
59     config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
60         """
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
65         """
66
67     def test_run(self):
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))
72
73         exit_code = boot_img_and_check_fs_type(self.emulator,
74                                                self.builddir, "ext2")
75         self.assertEqual(exit_code, 0)
76
77 class TestExt3(infra.basetest.BRTest):
78     config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
79         """
80         BR2_TARGET_ROOTFS_EXT2=y
81         BR2_TARGET_ROOTFS_EXT2_3=y
82         # BR2_TARGET_ROOTFS_TAR is not set
83         """
84
85     def test_run(self):
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))
90
91         exit_code = boot_img_and_check_fs_type(self.emulator,
92                                                self.builddir, "ext3")
93         self.assertEqual(exit_code, 0)
94
95 class TestExt4(infra.basetest.BRTest):
96     config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
97         """
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
104         """
105
106     def test_run(self):
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))
115
116         exit_code = boot_img_and_check_fs_type(self.emulator,
117                                                self.builddir, "ext4")
118         self.assertEqual(exit_code, 0)
119
120