xref: /OK3568_Linux_fs/buildroot/support/testing/tests/fs/test_iso9660.py (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyunimport os
2*4882a593Smuzhiyun
3*4882a593Smuzhiyunimport infra.basetest
4*4882a593Smuzhiyun
5*4882a593SmuzhiyunBASIC_CONFIG = \
6*4882a593Smuzhiyun    """
7*4882a593Smuzhiyun    BR2_x86_pentium4=y
8*4882a593Smuzhiyun    BR2_TOOLCHAIN_EXTERNAL=y
9*4882a593Smuzhiyun    BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
10*4882a593Smuzhiyun    BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
11*4882a593Smuzhiyun    BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-i386-pentium4-full-2017.05-1078-g95b1dae.tar.bz2"
12*4882a593Smuzhiyun    BR2_TOOLCHAIN_EXTERNAL_GCC_6=y
13*4882a593Smuzhiyun    BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_2=y
14*4882a593Smuzhiyun    BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
15*4882a593Smuzhiyun    # BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
16*4882a593Smuzhiyun    BR2_TOOLCHAIN_EXTERNAL_CXX=y
17*4882a593Smuzhiyun    BR2_TARGET_GENERIC_GETTY_PORT="ttyS0"
18*4882a593Smuzhiyun    BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y
19*4882a593Smuzhiyun    BR2_LINUX_KERNEL=y
20*4882a593Smuzhiyun    BR2_LINUX_KERNEL_CUSTOM_VERSION=y
21*4882a593Smuzhiyun    BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19.204"
22*4882a593Smuzhiyun    BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
23*4882a593Smuzhiyun    BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="{}"
24*4882a593Smuzhiyun    # BR2_TARGET_ROOTFS_TAR is not set
25*4882a593Smuzhiyun    """.format(infra.filepath("conf/minimal-x86-qemu-kernel.config"))
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun
28*4882a593Smuzhiyundef test_mount_internal_external(emulator, builddir, internal=True, efi=False):
29*4882a593Smuzhiyun    img = os.path.join(builddir, "images", "rootfs.iso9660")
30*4882a593Smuzhiyun    if efi:
31*4882a593Smuzhiyun        efi_img = os.path.join(builddir, "images", "OVMF.fd")
32*4882a593Smuzhiyun        emulator.boot(arch="i386", options=["-cdrom", img, "-bios", efi_img])
33*4882a593Smuzhiyun    else:
34*4882a593Smuzhiyun        emulator.boot(arch="i386", options=["-cdrom", img])
35*4882a593Smuzhiyun    emulator.login()
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun    if internal:
38*4882a593Smuzhiyun        cmd = "mount | grep 'rootfs on / type rootfs'"
39*4882a593Smuzhiyun    else:
40*4882a593Smuzhiyun        cmd = "mount | grep '/dev/root on / type iso9660'"
41*4882a593Smuzhiyun
42*4882a593Smuzhiyun    _, exit_code = emulator.run(cmd)
43*4882a593Smuzhiyun    return exit_code
44*4882a593Smuzhiyun
45*4882a593Smuzhiyun
46*4882a593Smuzhiyundef test_touch_file(emulator):
47*4882a593Smuzhiyun    _, exit_code = emulator.run("touch test")
48*4882a593Smuzhiyun    return exit_code
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun#
51*4882a593Smuzhiyun# Grub 2
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun
54*4882a593Smuzhiyunclass TestIso9660Grub2External(infra.basetest.BRTest):
55*4882a593Smuzhiyun    config = BASIC_CONFIG + \
56*4882a593Smuzhiyun        """
57*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660=y
58*4882a593Smuzhiyun        # BR2_TARGET_ROOTFS_ISO9660_INITRD is not set
59*4882a593Smuzhiyun        BR2_TARGET_GRUB2=y
60*4882a593Smuzhiyun        BR2_TARGET_GRUB2_BOOT_PARTITION="cd"
61*4882a593Smuzhiyun        BR2_TARGET_GRUB2_BUILTIN_MODULES_PC="boot linux ext2 fat part_msdos part_gpt normal biosdisk iso9660"
62*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU="{}"
63*4882a593Smuzhiyun        """.format(infra.filepath("conf/grub2.cfg"))
64*4882a593Smuzhiyun
65*4882a593Smuzhiyun    def test_run(self):
66*4882a593Smuzhiyun        exit_code = test_mount_internal_external(self.emulator,
67*4882a593Smuzhiyun                                                 self.builddir, internal=False)
68*4882a593Smuzhiyun        self.assertEqual(exit_code, 0)
69*4882a593Smuzhiyun
70*4882a593Smuzhiyun        exit_code = test_touch_file(self.emulator)
71*4882a593Smuzhiyun        self.assertEqual(exit_code, 1)
72*4882a593Smuzhiyun
73*4882a593Smuzhiyun
74*4882a593Smuzhiyunclass TestIso9660Grub2ExternalCompress(infra.basetest.BRTest):
75*4882a593Smuzhiyun    config = BASIC_CONFIG + \
76*4882a593Smuzhiyun        """
77*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660=y
78*4882a593Smuzhiyun        # BR2_TARGET_ROOTFS_ISO9660_INITRD is not set
79*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660_TRANSPARENT_COMPRESSION=y
80*4882a593Smuzhiyun        BR2_TARGET_GRUB2=y
81*4882a593Smuzhiyun        BR2_TARGET_GRUB2_BOOT_PARTITION="cd"
82*4882a593Smuzhiyun        BR2_TARGET_GRUB2_BUILTIN_MODULES_PC="boot linux ext2 fat part_msdos part_gpt normal biosdisk iso9660"
83*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU="{}"
84*4882a593Smuzhiyun        """.format(infra.filepath("conf/grub2.cfg"))
85*4882a593Smuzhiyun
86*4882a593Smuzhiyun    def test_run(self):
87*4882a593Smuzhiyun        exit_code = test_mount_internal_external(self.emulator,
88*4882a593Smuzhiyun                                                 self.builddir, internal=False)
89*4882a593Smuzhiyun        self.assertEqual(exit_code, 0)
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun        exit_code = test_touch_file(self.emulator)
92*4882a593Smuzhiyun        self.assertEqual(exit_code, 1)
93*4882a593Smuzhiyun
94*4882a593Smuzhiyun
95*4882a593Smuzhiyunclass TestIso9660Grub2Internal(infra.basetest.BRTest):
96*4882a593Smuzhiyun    config = BASIC_CONFIG + \
97*4882a593Smuzhiyun        """
98*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660=y
99*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660_INITRD=y
100*4882a593Smuzhiyun        BR2_TARGET_GRUB2=y
101*4882a593Smuzhiyun        BR2_TARGET_GRUB2_BOOT_PARTITION="cd"
102*4882a593Smuzhiyun        BR2_TARGET_GRUB2_BUILTIN_MODULES_PC="boot linux ext2 fat part_msdos part_gpt normal biosdisk iso9660"
103*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU="{}"
104*4882a593Smuzhiyun        """.format(infra.filepath("conf/grub2.cfg"))
105*4882a593Smuzhiyun
106*4882a593Smuzhiyun    def test_run(self):
107*4882a593Smuzhiyun        exit_code = test_mount_internal_external(self.emulator,
108*4882a593Smuzhiyun                                                 self.builddir, internal=True)
109*4882a593Smuzhiyun        self.assertEqual(exit_code, 0)
110*4882a593Smuzhiyun
111*4882a593Smuzhiyun        exit_code = test_touch_file(self.emulator)
112*4882a593Smuzhiyun        self.assertEqual(exit_code, 0)
113*4882a593Smuzhiyun
114*4882a593Smuzhiyun
115*4882a593Smuzhiyunclass TestIso9660Grub2EFI(infra.basetest.BRTest):
116*4882a593Smuzhiyun    config = BASIC_CONFIG + \
117*4882a593Smuzhiyun        """
118*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660=y
119*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660_INITRD=y
120*4882a593Smuzhiyun        BR2_TARGET_GRUB2=y
121*4882a593Smuzhiyun        BR2_TARGET_GRUB2_I386_EFI=y
122*4882a593Smuzhiyun        BR2_TARGET_GRUB2_BUILTIN_MODULES_EFI="boot linux ext2 fat part_msdos part_gpt normal iso9660"
123*4882a593Smuzhiyun        BR2_TARGET_GRUB2_BUILTIN_CONFIG_EFI="{}"
124*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU="{}"
125*4882a593Smuzhiyun        BR2_TARGET_EDK2=y
126*4882a593Smuzhiyun        """.format(infra.filepath("conf/grub2-efi.cfg"),
127*4882a593Smuzhiyun                   infra.filepath("conf/grub2.cfg"))
128*4882a593Smuzhiyun
129*4882a593Smuzhiyun    def test_run(self):
130*4882a593Smuzhiyun        exit_code = test_mount_internal_external(self.emulator,
131*4882a593Smuzhiyun                                                 self.builddir, internal=True,
132*4882a593Smuzhiyun                                                 efi=True)
133*4882a593Smuzhiyun        self.assertEqual(exit_code, 0)
134*4882a593Smuzhiyun
135*4882a593Smuzhiyun        exit_code = test_touch_file(self.emulator)
136*4882a593Smuzhiyun        self.assertEqual(exit_code, 0)
137*4882a593Smuzhiyun
138*4882a593Smuzhiyun
139*4882a593Smuzhiyunclass TestIso9660Grub2Hybrid(infra.basetest.BRTest):
140*4882a593Smuzhiyun    config = BASIC_CONFIG + \
141*4882a593Smuzhiyun        """
142*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660=y
143*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660_INITRD=y
144*4882a593Smuzhiyun        BR2_TARGET_GRUB2=y
145*4882a593Smuzhiyun        BR2_TARGET_GRUB2_I386_PC=y
146*4882a593Smuzhiyun        BR2_TARGET_GRUB2_I386_EFI=y
147*4882a593Smuzhiyun        BR2_TARGET_GRUB2_BOOT_PARTITION="cd"
148*4882a593Smuzhiyun        BR2_TARGET_GRUB2_BUILTIN_MODULES_PC="boot linux ext2 fat squash4 part_msdos part_gpt normal iso9660 biosdisk"
149*4882a593Smuzhiyun        BR2_TARGET_GRUB2_BUILTIN_CONFIG_PC=""
150*4882a593Smuzhiyun        BR2_TARGET_GRUB2_BUILTIN_MODULES_EFI="boot linux ext2 fat squash4 part_msdos part_gpt normal iso9660 efi_gop"
151*4882a593Smuzhiyun        BR2_TARGET_GRUB2_BUILTIN_CONFIG_EFI="{}"
152*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU="{}"
153*4882a593Smuzhiyun        BR2_TARGET_EDK2=y
154*4882a593Smuzhiyun        """.format(infra.filepath("conf/grub2-efi.cfg"),
155*4882a593Smuzhiyun                   infra.filepath("conf/grub2.cfg"))
156*4882a593Smuzhiyun
157*4882a593Smuzhiyun    def test_run(self):
158*4882a593Smuzhiyun        exit_code = test_mount_internal_external(self.emulator,
159*4882a593Smuzhiyun                                                 self.builddir, internal=True,
160*4882a593Smuzhiyun                                                 efi=False)
161*4882a593Smuzhiyun        self.assertEqual(exit_code, 0)
162*4882a593Smuzhiyun
163*4882a593Smuzhiyun        exit_code = test_touch_file(self.emulator)
164*4882a593Smuzhiyun        self.assertEqual(exit_code, 0)
165*4882a593Smuzhiyun
166*4882a593Smuzhiyun        self.emulator.stop()
167*4882a593Smuzhiyun
168*4882a593Smuzhiyun        exit_code = test_mount_internal_external(self.emulator,
169*4882a593Smuzhiyun                                                 self.builddir, internal=True,
170*4882a593Smuzhiyun                                                 efi=True)
171*4882a593Smuzhiyun        self.assertEqual(exit_code, 0)
172*4882a593Smuzhiyun
173*4882a593Smuzhiyun        exit_code = test_touch_file(self.emulator)
174*4882a593Smuzhiyun        self.assertEqual(exit_code, 0)
175*4882a593Smuzhiyun
176*4882a593Smuzhiyun
177*4882a593Smuzhiyun#
178*4882a593Smuzhiyun# Syslinux
179*4882a593Smuzhiyun
180*4882a593Smuzhiyun
181*4882a593Smuzhiyunclass TestIso9660SyslinuxExternal(infra.basetest.BRTest):
182*4882a593Smuzhiyun    config = BASIC_CONFIG + \
183*4882a593Smuzhiyun        """
184*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660=y
185*4882a593Smuzhiyun        # BR2_TARGET_ROOTFS_ISO9660_INITRD is not set
186*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660_HYBRID=y
187*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU="{}"
188*4882a593Smuzhiyun        BR2_TARGET_SYSLINUX=y
189*4882a593Smuzhiyun        """.format(infra.filepath("conf/isolinux.cfg"))
190*4882a593Smuzhiyun
191*4882a593Smuzhiyun    def test_run(self):
192*4882a593Smuzhiyun        exit_code = test_mount_internal_external(self.emulator,
193*4882a593Smuzhiyun                                                 self.builddir, internal=False)
194*4882a593Smuzhiyun        self.assertEqual(exit_code, 0)
195*4882a593Smuzhiyun
196*4882a593Smuzhiyun        exit_code = test_touch_file(self.emulator)
197*4882a593Smuzhiyun        self.assertEqual(exit_code, 1)
198*4882a593Smuzhiyun
199*4882a593Smuzhiyun
200*4882a593Smuzhiyunclass TestIso9660SyslinuxExternalCompress(infra.basetest.BRTest):
201*4882a593Smuzhiyun    config = BASIC_CONFIG + \
202*4882a593Smuzhiyun        """
203*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660=y
204*4882a593Smuzhiyun        # BR2_TARGET_ROOTFS_ISO9660_INITRD is not set
205*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660_TRANSPARENT_COMPRESSION=y
206*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660_HYBRID=y
207*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU="{}"
208*4882a593Smuzhiyun        BR2_TARGET_SYSLINUX=y
209*4882a593Smuzhiyun        """.format(infra.filepath("conf/isolinux.cfg"))
210*4882a593Smuzhiyun
211*4882a593Smuzhiyun    def test_run(self):
212*4882a593Smuzhiyun        exit_code = test_mount_internal_external(self.emulator,
213*4882a593Smuzhiyun                                                 self.builddir, internal=False)
214*4882a593Smuzhiyun        self.assertEqual(exit_code, 0)
215*4882a593Smuzhiyun
216*4882a593Smuzhiyun        exit_code = test_touch_file(self.emulator)
217*4882a593Smuzhiyun        self.assertEqual(exit_code, 1)
218*4882a593Smuzhiyun
219*4882a593Smuzhiyun
220*4882a593Smuzhiyunclass TestIso9660SyslinuxInternal(infra.basetest.BRTest):
221*4882a593Smuzhiyun    config = BASIC_CONFIG + \
222*4882a593Smuzhiyun        """
223*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660=y
224*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660_INITRD=y
225*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660_HYBRID=y
226*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU="{}"
227*4882a593Smuzhiyun        BR2_TARGET_SYSLINUX=y
228*4882a593Smuzhiyun        """.format(infra.filepath("conf/isolinux.cfg"))
229*4882a593Smuzhiyun
230*4882a593Smuzhiyun    def test_run(self):
231*4882a593Smuzhiyun        exit_code = test_mount_internal_external(self.emulator,
232*4882a593Smuzhiyun                                                 self.builddir, internal=True)
233*4882a593Smuzhiyun        self.assertEqual(exit_code, 0)
234*4882a593Smuzhiyun
235*4882a593Smuzhiyun        exit_code = test_touch_file(self.emulator)
236*4882a593Smuzhiyun        self.assertEqual(exit_code, 0)
237