1import os
2import infra
3import subprocess
4
5from infra.basetest import BRTest
6
7
8class TestBmapTools(BRTest):
9    __test__ = False
10    sample_script = "tests/package/sample_bmap_tools.sh"
11    copy_script = 'tests/package/copy-sample-script-to-target.sh'
12    config = \
13        """
14        BR2_arm=y
15        BR2_cortex_a8=y
16        BR2_TOOLCHAIN_EXTERNAL=y
17        BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
18        BR2_PACKAGE_BMAP_TOOLS=y
19        BR2_ROOTFS_POST_BUILD_SCRIPT="{}"
20        BR2_ROOTFS_POST_SCRIPT_ARGS="{}"
21        BR2_TARGET_ROOTFS_EXT2=y
22        BR2_TARGET_ROOTFS_EXT2_4=y
23        BR2_TARGET_ROOTFS_EXT2_SIZE="65536"
24        # BR2_TARGET_ROOTFS_TAR is not set
25        BR2_PACKAGE_UTIL_LINUX=y
26        BR2_PACKAGE_UTIL_LINUX_FALLOCATE=y
27        BR2_PACKAGE_E2FSPROGS=y
28        BR2_PACKAGE_UTIL_LINUX_LIBUUID=y
29        """.format(infra.filepath(copy_script),
30                   infra.filepath(sample_script))
31    timeout = 60
32
33    def login(self):
34        img = os.path.join(self.builddir, "images", "rootfs.ext4")
35        self.emulator.boot(arch="armv7",
36                           kernel="builtin",
37                           kernel_cmdline=["root=/dev/mmcblk0",
38                                           "rootfstype=ext4"],
39                           options=["-drive", "file={},if=sd,format=raw".format(img)])
40        self.emulator.login()
41
42    def test_run(self):
43        self.login()
44        cmd = "/root/{}".format(os.path.basename(self.sample_script))
45        self.assertRunOk(cmd, timeout=20)
46
47
48class TestPy3BmapTools(TestBmapTools):
49    __test__ = True
50    config = TestBmapTools.config + \
51        """
52        BR2_PACKAGE_PYTHON3=y
53        """
54
55
56class TestHostBmapTools(BRTest):
57    config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
58        """
59        BR2_PACKAGE_HOST_BMAP_TOOLS=y
60        # BR2_TARGET_ROOTFS_TAR is not set
61        BR2_TARGET_ROOTFS_EXT2=y
62        """
63
64    def test_run(self):
65        bmap_x = os.path.join(self.b.builddir, "host", "bin", "bmaptool")
66        src_f = os.path.join(self.b.builddir, "images", "rootfs.ext2")
67        dst_f = os.path.join(self.b.builddir, "images", "rootfs.ext2.copy")
68        map_f = os.path.join(self.b.builddir, "images", "rootfs.ext2.bmap")
69
70        ret = subprocess.call([bmap_x, "create", "-o", map_f, src_f],
71                              stdout=self.b.logfile,
72                              stderr=self.b.logfile)
73        self.assertEqual(ret, 0)
74
75        ret = subprocess.call([bmap_x, "copy", src_f, dst_f],
76                              stdout=self.b.logfile,
77                              stderr=self.b.logfile)
78        self.assertEqual(ret, 0)
79
80        with open(src_f, 'rb') as f:
81            src = f.read()
82        with open(dst_f, 'rb') as f:
83            dst = f.read()
84        self.assertEqual(src, dst)
85