1import os
2import infra.basetest
3
4
5class InitSystemBase(infra.basetest.BRTest):
6
7    def start_emulator(self, fs_type, kernel=None, dtb=None, init=None):
8        img = os.path.join(self.builddir, "images", "rootfs.{}".format(fs_type))
9        infra.img_round_power2(img)
10
11        options = ["-drive",
12                   "file={},if=sd,format=raw".format(img),
13                   "-M", "vexpress-a9"]
14
15        if kernel is None:
16            kernel = "builtin"
17        else:
18            kernel = os.path.join(self.builddir, "images", kernel)
19            options.extend(["-dtb", os.path.join(self.builddir, "images",
20                                                 "{}.dtb".format(dtb))])
21
22        kernel_cmdline = ["root=/dev/mmcblk0",
23                          "rootfstype={}".format(fs_type),
24                          "rootwait",
25                          "ro",
26                          "console=ttyAMA0"]
27
28        if init is not None:
29            kernel_cmdline.extend(["init={}".format(init)])
30
31        self.emulator.boot(arch="armv7",
32                           kernel=kernel,
33                           kernel_cmdline=kernel_cmdline,
34                           options=options)
35
36        if init is None:
37            self.emulator.login()
38
39    def check_init(self, path):
40        cmd = "cmp /proc/1/exe {}".format(path)
41        self.assertRunOk(cmd)
42
43    def check_network(self, interface, exitCode=0):
44        cmd = "ip addr show {} |grep inet".format(interface)
45        _, exit_code = self.emulator.run(cmd)
46        self.assertEqual(exit_code, exitCode)
47