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