aboutsummaryrefslogtreecommitdiff
path: root/support/testing/tests/fs/test_ext.py
blob: 49bce45dc872557781acb981be465995e04aad46 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import os
import subprocess

import infra.basetest

VOLNAME_PROP = "Filesystem volume name"
REVISION_PROP = "Filesystem revision #"
FEATURES_PROP = "Filesystem features"
BLOCKCNT_PROP = "Block count"
INODECNT_PROP = "Inode count"
RESBLKCNT_PROP = "Reserved block count"

CHECK_FS_TYPE_CMD = "mount | grep '/dev/root on / type {}'"

def dumpe2fs_run(builddir, image):
    cmd = ["host/sbin/dumpe2fs", os.path.join("images", image)]
    ret = subprocess.check_output(cmd,
                                  stderr=open(os.devnull, "w"),
                                  cwd=builddir,
                                  env={"LANG": "C"})
    return ret.strip().splitlines()

def dumpe2fs_getprop(out, prop):
    for line in out:
        fields = line.split(": ")
        if fields[0] == prop:
            return fields[1].strip()

def boot_img_and_check_fs_type(emulator, builddir, fs_type):
    img = os.path.join(builddir, "images", "rootfs.{}".format(fs_type))
    emulator.boot(arch="armv7",
                  kernel="builtin",
                  kernel_cmdline=["root=/dev/mmcblk0",
                                  "rootfstype={}".format(fs_type)],
                  options=["-drive", "file={},if=sd".format(img)])
    emulator.login()
    _, exit_code = emulator.run(CHECK_FS_TYPE_CMD.format(fs_type))
    return exit_code

class TestExt2(infra.basetest.BRTest):
    config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
        """
        BR2_TARGET_ROOTFS_EXT2=y
        BR2_TARGET_ROOTFS_EXT2_2r0=y
        BR2_TARGET_ROOTFS_EXT2_LABEL="foobaz"
        # BR2_TARGET_ROOTFS_TAR is not set
        """

    def test_run(self):
        out = dumpe2fs_run(self.builddir, "rootfs.ext2")
        self.assertEqual(dumpe2fs_getprop(out, VOLNAME_PROP), "foobaz")
        self.assertEqual(dumpe2fs_getprop(out, REVISION_PROP), "0 (original)")

        exit_code = boot_img_and_check_fs_type(self.emulator,
                                               self.builddir, "ext2")
        self.assertEqual(exit_code, 0)

class TestExt2r1(infra.basetest.BRTest):
    config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
        """
        BR2_TARGET_ROOTFS_EXT2=y
        BR2_TARGET_ROOTFS_EXT2_2r1=y
        BR2_TARGET_ROOTFS_EXT2_LABEL="foobar"
        # BR2_TARGET_ROOTFS_TAR is not set
        """

    def test_run(self):
        out = dumpe2fs_run(self.builddir, "rootfs.ext2")
        self.assertEqual(dumpe2fs_getprop(out, VOLNAME_PROP), "foobar")
        self.assertEqual(dumpe2fs_getprop(out, REVISION_PROP), "1 (dynamic)")
        self.assertNotIn("has_journal", dumpe2fs_getprop(out, FEATURES_PROP))

        exit_code = boot_img_and_check_fs_type(self.emulator,
                                               self.builddir, "ext2")
        self.assertEqual(exit_code, 0)

class TestExt3(infra.basetest.BRTest):
    config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
        """
        BR2_TARGET_ROOTFS_EXT2=y
        BR2_TARGET_ROOTFS_EXT2_3=y
        # BR2_TARGET_ROOTFS_TAR is not set
        """

    def test_run(self):
        out = dumpe2fs_run(self.builddir, "rootfs.ext3")
        self.assertEqual(dumpe2fs_getprop(out, REVISION_PROP), "1 (dynamic)")
        self.assertIn("has_journal", dumpe2fs_getprop(out, FEATURES_PROP))
        self.assertNotIn("extent", dumpe2fs_getprop(out, FEATURES_PROP))

        exit_code = boot_img_and_check_fs_type(self.emulator,
                                               self.builddir, "ext3")
        self.assertEqual(exit_code, 0)

class TestExt4(infra.basetest.BRTest):
    config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
        """
        BR2_TARGET_ROOTFS_EXT2=y
        BR2_TARGET_ROOTFS_EXT2_4=y
        BR2_TARGET_ROOTFS_EXT2_SIZE="16384"
        BR2_TARGET_ROOTFS_EXT2_INODES=3000
        BR2_TARGET_ROOTFS_EXT2_RESBLKS=10
        # BR2_TARGET_ROOTFS_TAR is not set
        """

    def test_run(self):
        out = dumpe2fs_run(self.builddir, "rootfs.ext4")
        self.assertEqual(dumpe2fs_getprop(out, REVISION_PROP), "1 (dynamic)")
        self.assertEqual(dumpe2fs_getprop(out, BLOCKCNT_PROP), "16384")
        # Yes there are 8 more inodes than requested
        self.assertEqual(dumpe2fs_getprop(out, INODECNT_PROP), "3008")
        self.assertEqual(dumpe2fs_getprop(out, RESBLKCNT_PROP), "1638")
        self.assertIn("has_journal", dumpe2fs_getprop(out, FEATURES_PROP))
        self.assertIn("extent", dumpe2fs_getprop(out, FEATURES_PROP))

        exit_code = boot_img_and_check_fs_type(self.emulator,
                                               self.builddir, "ext4")
        self.assertEqual(exit_code, 0)