]> rtime.felk.cvut.cz Git - coffee/buildroot.git/blob - support/testing/tests/fs/test_ext.py
support/testing: fix code style
[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
16 def dumpe2fs_run(builddir, image):
17     cmd = ["host/sbin/dumpe2fs", os.path.join("images", image)]
18     ret = subprocess.check_output(cmd,
19                                   stderr=open(os.devnull, "w"),
20                                   cwd=builddir,
21                                   env={"LANG": "C"})
22     return ret.strip().splitlines()
23
24
25 def dumpe2fs_getprop(out, prop):
26     for line in out:
27         fields = line.split(": ")
28         if fields[0] == prop:
29             return fields[1].strip()
30
31
32 def boot_img_and_check_fs_type(emulator, builddir, fs_type):
33     img = os.path.join(builddir, "images", "rootfs.{}".format(fs_type))
34     emulator.boot(arch="armv7",
35                   kernel="builtin",
36                   kernel_cmdline=["root=/dev/mmcblk0",
37                                   "rootfstype={}".format(fs_type)],
38                   options=["-drive", "file={},if=sd".format(img)])
39     emulator.login()
40     _, exit_code = emulator.run(CHECK_FS_TYPE_CMD.format(fs_type))
41     return exit_code
42
43
44 class TestExt2(infra.basetest.BRTest):
45     config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
46         """
47         BR2_TARGET_ROOTFS_EXT2=y
48         BR2_TARGET_ROOTFS_EXT2_2r0=y
49         BR2_TARGET_ROOTFS_EXT2_LABEL="foobaz"
50         # BR2_TARGET_ROOTFS_TAR is not set
51         """
52
53     def test_run(self):
54         out = dumpe2fs_run(self.builddir, "rootfs.ext2")
55         self.assertEqual(dumpe2fs_getprop(out, VOLNAME_PROP), "foobaz")
56         self.assertEqual(dumpe2fs_getprop(out, REVISION_PROP), "0 (original)")
57
58         exit_code = boot_img_and_check_fs_type(self.emulator,
59                                                self.builddir, "ext2")
60         self.assertEqual(exit_code, 0)
61
62
63 class TestExt2r1(infra.basetest.BRTest):
64     config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
65         """
66         BR2_TARGET_ROOTFS_EXT2=y
67         BR2_TARGET_ROOTFS_EXT2_2r1=y
68         BR2_TARGET_ROOTFS_EXT2_LABEL="foobar"
69         # BR2_TARGET_ROOTFS_TAR is not set
70         """
71
72     def test_run(self):
73         out = dumpe2fs_run(self.builddir, "rootfs.ext2")
74         self.assertEqual(dumpe2fs_getprop(out, VOLNAME_PROP), "foobar")
75         self.assertEqual(dumpe2fs_getprop(out, REVISION_PROP), "1 (dynamic)")
76         self.assertNotIn("has_journal", dumpe2fs_getprop(out, FEATURES_PROP))
77
78         exit_code = boot_img_and_check_fs_type(self.emulator,
79                                                self.builddir, "ext2")
80         self.assertEqual(exit_code, 0)
81
82
83 class TestExt3(infra.basetest.BRTest):
84     config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
85         """
86         BR2_TARGET_ROOTFS_EXT2=y
87         BR2_TARGET_ROOTFS_EXT2_3=y
88         # BR2_TARGET_ROOTFS_TAR is not set
89         """
90
91     def test_run(self):
92         out = dumpe2fs_run(self.builddir, "rootfs.ext3")
93         self.assertEqual(dumpe2fs_getprop(out, REVISION_PROP), "1 (dynamic)")
94         self.assertIn("has_journal", dumpe2fs_getprop(out, FEATURES_PROP))
95         self.assertNotIn("extent", dumpe2fs_getprop(out, FEATURES_PROP))
96
97         exit_code = boot_img_and_check_fs_type(self.emulator,
98                                                self.builddir, "ext3")
99         self.assertEqual(exit_code, 0)
100
101
102 class TestExt4(infra.basetest.BRTest):
103     config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
104         """
105         BR2_TARGET_ROOTFS_EXT2=y
106         BR2_TARGET_ROOTFS_EXT2_4=y
107         BR2_TARGET_ROOTFS_EXT2_SIZE="16384"
108         BR2_TARGET_ROOTFS_EXT2_INODES=3000
109         BR2_TARGET_ROOTFS_EXT2_RESBLKS=10
110         # BR2_TARGET_ROOTFS_TAR is not set
111         """
112
113     def test_run(self):
114         out = dumpe2fs_run(self.builddir, "rootfs.ext4")
115         self.assertEqual(dumpe2fs_getprop(out, REVISION_PROP), "1 (dynamic)")
116         self.assertEqual(dumpe2fs_getprop(out, BLOCKCNT_PROP), "16384")
117         # Yes there are 8 more inodes than requested
118         self.assertEqual(dumpe2fs_getprop(out, INODECNT_PROP), "3008")
119         self.assertEqual(dumpe2fs_getprop(out, RESBLKCNT_PROP), "1638")
120         self.assertIn("has_journal", dumpe2fs_getprop(out, FEATURES_PROP))
121         self.assertIn("extent", dumpe2fs_getprop(out, FEATURES_PROP))
122
123         exit_code = boot_img_and_check_fs_type(self.emulator,
124                                                self.builddir, "ext4")
125         self.assertEqual(exit_code, 0)