From e1a6f62162716511956417e6c103de37ce9c71d2 Mon Sep 17 00:00:00 2001 From: Geoff Levand Date: Fri, 17 May 2013 17:09:01 +0800 Subject: [PATCH] test/parser: Add ubuntu grub tests Signed-off-by: Geoff Levand --- test/parser/Makefile.am | 2 + test/parser/data/grub2-ubuntu-13_04-x86.conf | 242 +++++++++++++++++++ test/parser/test-grub2-ubuntu-13_04-x86.c | 74 ++++++ 3 files changed, 318 insertions(+) create mode 100644 test/parser/data/grub2-ubuntu-13_04-x86.conf create mode 100644 test/parser/test-grub2-ubuntu-13_04-x86.c diff --git a/test/parser/Makefile.am b/test/parser/Makefile.am index e330e82..af4fbd6 100644 --- a/test/parser/Makefile.am +++ b/test/parser/Makefile.am @@ -28,6 +28,7 @@ TESTS = test-null \ test-grub2-single \ test-grub2-multiple-resolve \ test-grub2-f18-ppc64 \ + test-grub2-ubuntu-13_04-x86 \ test-kboot-single \ test-yaboot-single \ test-yaboot-external \ @@ -36,6 +37,7 @@ TESTS = test-null \ check_PROGRAMS = $(TESTS) check_LIBRARIES = $(test_libs) check_DATA = data/grub2-f18-ppc64.conf \ + data/grub2-ubuntu-13_04-x86.conf \ data/yaboot-rh8-ppc64.conf common_libs = $(top_builddir)/lib/libpbcore.la diff --git a/test/parser/data/grub2-ubuntu-13_04-x86.conf b/test/parser/data/grub2-ubuntu-13_04-x86.conf new file mode 100644 index 0000000..4138b8e --- /dev/null +++ b/test/parser/data/grub2-ubuntu-13_04-x86.conf @@ -0,0 +1,242 @@ +# +# DO NOT EDIT THIS FILE +# +# It is automatically generated by grub-mkconfig using templates +# from /etc/grub.d and settings from /etc/default/grub +# + +### BEGIN /etc/grub.d/00_header ### +if [ -s $prefix/grubenv ]; then + set have_grubenv=true + load_env +fi +set default="0" + +if [ x"${feature_menuentry_id}" = xy ]; then + menuentry_id_option="--id" +else + menuentry_id_option="" +fi + +export menuentry_id_option + +if [ "${prev_saved_entry}" ]; then + set saved_entry="${prev_saved_entry}" + save_env saved_entry + set prev_saved_entry= + save_env prev_saved_entry + set boot_once=true +fi + +function savedefault { + if [ -z "${boot_once}" ]; then + saved_entry="${chosen}" + save_env saved_entry + fi +} + +function recordfail { + set recordfail=1 + if [ -n "${have_grubenv}" ]; then if [ -z "${boot_once}" ]; then save_env recordfail; fi; fi +} + +function load_video { + if [ x$feature_all_video_module = xy ]; then + insmod all_video + else + insmod efi_gop + insmod efi_uga + insmod ieee1275_fb + insmod vbe + insmod vga + insmod video_bochs + insmod video_cirrus + fi +} + +if [ x$feature_default_font_path = xy ] ; then + font=unicode +else +insmod part_msdos +insmod ext2 +set root='hd0,msdos1' +if [ x$feature_platform_search_hint = xy ]; then + search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 29beca39-9181-4780-bbb2-ab5d4be59aaf +else + search --no-floppy --fs-uuid --set=root 29beca39-9181-4780-bbb2-ab5d4be59aaf +fi + font="/usr/share/grub/unicode.pf2" +fi + +if loadfont $font ; then + set gfxmode=auto + load_video + insmod gfxterm + set locale_dir=$prefix/locale + set lang=en_US + insmod gettext +fi +terminal_output gfxterm +if [ "${recordfail}" = 1 ]; then + set timeout=-1 +else + set timeout=10 +fi +### END /etc/grub.d/00_header ### + +### BEGIN /etc/grub.d/05_debian_theme ### +set menu_color_normal=white/black +set menu_color_highlight=black/light-gray +#set_background_image "images/tile.png"; + +set menu_color_normal=white/black +set menu_color_highlight=black/light-gray +if background_color 0,0,0; then + clear +fi +### END /etc/grub.d/05_debian_theme ### + +### BEGIN /etc/grub.d/10_linux ### +function gfxmode { + set gfxpayload="${1}" + if [ "${1}" = "keep" ]; then + set vt_handoff=vt.handoff=7 + else + set vt_handoff= + fi +} +if [ "${recordfail}" != 1 ]; then + if [ -e ${prefix}/gfxblacklist.txt ]; then + if hwmatch ${prefix}/gfxblacklist.txt 3; then + if [ ${match} = 0 ]; then + set linux_gfx_mode=keep + else + set linux_gfx_mode=text + fi + else + set linux_gfx_mode=text + fi + else + set linux_gfx_mode=keep + fi +else + set linux_gfx_mode=text +fi +export linux_gfx_mode +menuentry 'Kubuntu GNU/Linux' --class kubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-29beca39-9181-4780-bbb2-ab5d4be59aaf' { +recordfail + load_video + gfxmode $linux_gfx_mode + insmod gzio + insmod part_msdos + insmod ext2 + set root='hd0,msdos1' + if [ x$feature_platform_search_hint = xy ]; then + search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 29beca39-9181-4780-bbb2-ab5d4be59aaf + else + search --no-floppy --fs-uuid --set=root 29beca39-9181-4780-bbb2-ab5d4be59aaf + fi + linux /boot/vmlinuz-3.8.0-19-generic root=UUID=29beca39-9181-4780-bbb2-ab5d4be59aaf ro quiet splash $vt_handoff + initrd /boot/initrd.img-3.8.0-19-generic +} +submenu 'Advanced options for Kubuntu GNU/Linux' $menuentry_id_option 'gnulinux-advanced-29beca39-9181-4780-bbb2-ab5d4be59aaf' { + menuentry 'Kubuntu GNU/Linux, with Linux 3.8.0-19-generic' --class kubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.8.0-19-generic-advanced-29beca39-9181-4780-bbb2-ab5d4be59aaf' { + recordfail + load_video + gfxmode $linux_gfx_mode + insmod gzio + insmod part_msdos + insmod ext2 + set root='hd0,msdos1' + if [ x$feature_platform_search_hint = xy ]; then + search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 29beca39-9181-4780-bbb2-ab5d4be59aaf + else + search --no-floppy --fs-uuid --set=root 29beca39-9181-4780-bbb2-ab5d4be59aaf + fi + echo 'Loading Linux 3.8.0-19-generic ...' + linux /boot/vmlinuz-3.8.0-19-generic root=UUID=29beca39-9181-4780-bbb2-ab5d4be59aaf ro quiet splash $vt_handoff + echo 'Loading initial ramdisk ...' + initrd /boot/initrd.img-3.8.0-19-generic + } + menuentry 'Kubuntu GNU/Linux, with Linux 3.8.0-19-generic (recovery mode)' --class kubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.8.0-19-generic-recovery-29beca39-9181-4780-bbb2-ab5d4be59aaf' { + recordfail + load_video + insmod gzio + insmod part_msdos + insmod ext2 + set root='hd0,msdos1' + if [ x$feature_platform_search_hint = xy ]; then + search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 29beca39-9181-4780-bbb2-ab5d4be59aaf + else + search --no-floppy --fs-uuid --set=root 29beca39-9181-4780-bbb2-ab5d4be59aaf + fi + echo 'Loading Linux 3.8.0-19-generic ...' + linux /boot/vmlinuz-3.8.0-19-generic root=UUID=29beca39-9181-4780-bbb2-ab5d4be59aaf ro recovery nomodeset + echo 'Loading initial ramdisk ...' + initrd /boot/initrd.img-3.8.0-19-generic + } +} + +### END /etc/grub.d/10_linux ### + +### BEGIN /etc/grub.d/20_linux_xen ### + +### END /etc/grub.d/20_linux_xen ### + +### BEGIN /etc/grub.d/20_memtest86+ ### +menuentry "Memory test (memtest86+)" { + insmod part_msdos + insmod ext2 + set root='hd0,msdos1' + if [ x$feature_platform_search_hint = xy ]; then + search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 29beca39-9181-4780-bbb2-ab5d4be59aaf + else + search --no-floppy --fs-uuid --set=root 29beca39-9181-4780-bbb2-ab5d4be59aaf + fi + linux16 /boot/memtest86+.bin +} +menuentry "Memory test (memtest86+, serial console 115200)" { + insmod part_msdos + insmod ext2 + set root='hd0,msdos1' + if [ x$feature_platform_search_hint = xy ]; then + search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 29beca39-9181-4780-bbb2-ab5d4be59aaf + else + search --no-floppy --fs-uuid --set=root 29beca39-9181-4780-bbb2-ab5d4be59aaf + fi + linux16 /boot/memtest86+.bin console=ttyS0,115200n8 +} +### END /etc/grub.d/20_memtest86+ ### + +### BEGIN /etc/grub.d/30_os-prober ### +if [ "x${timeout}" != "x-1" ]; then + if keystatus; then + if keystatus --shift; then + set timeout=-1 + else + set timeout=0 + fi + else + if sleep --interruptible 3 ; then + set timeout=0 + fi + fi +fi +### END /etc/grub.d/30_os-prober ### + +### BEGIN /etc/grub.d/30_uefi-firmware ### +### END /etc/grub.d/30_uefi-firmware ### + +### BEGIN /etc/grub.d/40_custom ### +# This file provides an easy way to add custom menu entries. Simply type the +# menu entries you want to add after this comment. Be careful not to change +# the 'exec tail' line above. +### END /etc/grub.d/40_custom ### + +### BEGIN /etc/grub.d/41_custom ### +if [ -f ${config_directory}/custom.cfg ]; then + source ${config_directory}/custom.cfg +elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then + source $prefix/custom.cfg; +fi +### END /etc/grub.d/41_custom ### diff --git a/test/parser/test-grub2-ubuntu-13_04-x86.c b/test/parser/test-grub2-ubuntu-13_04-x86.c new file mode 100644 index 0000000..cc4d283 --- /dev/null +++ b/test/parser/test-grub2-ubuntu-13_04-x86.c @@ -0,0 +1,74 @@ + +#include "parser-test.h" + +void run_test(struct parser_test *test) +{ + struct discover_boot_option *opt; + struct discover_context *ctx; + struct discover_device *dev; + + test_read_conf_file(test, "grub2-ubuntu-13_04-x86.conf"); + test_run_parser(test, "grub2"); + + ctx = test->ctx; + + check_boot_option_count(ctx, 5); + + opt = get_boot_option(ctx, 0); + check_unresolved_resource(opt->boot_image); + check_unresolved_resource(opt->initrd); + check_name(opt, "Kubuntu GNU/Linux"); + check_args(opt, "root=UUID=29beca39-9181-4780-bbb2-ab5d4be59aaf ro quiet splash $vt_handoff"); + + opt = get_boot_option(ctx, 1); + check_unresolved_resource(opt->boot_image); + check_unresolved_resource(opt->initrd); + check_name(opt, "Kubuntu GNU/Linux, with Linux 3.8.0-19-generic"); + check_args(opt, "root=UUID=29beca39-9181-4780-bbb2-ab5d4be59aaf ro quiet splash $vt_handoff"); + + opt = get_boot_option(ctx, 2); + check_name(opt, "Kubuntu GNU/Linux, with Linux 3.8.0-19-generic (recovery mode)"); + check_args(opt, "root=UUID=29beca39-9181-4780-bbb2-ab5d4be59aaf ro recovery nomodeset"); + + opt = get_boot_option(ctx, 3); + check_unresolved_resource(opt->boot_image); + check_name(opt, "Memory test (memtest86+)"); + check_args(opt, ""); + + opt = get_boot_option(ctx, 4); + check_unresolved_resource(opt->boot_image); + check_name(opt, "Memory test (memtest86+, serial console 115200)"); + check_args(opt, "console=ttyS0,115200n8"); + + /* hotplug a device with a maching UUID, and check that our + * resources become resolved */ + dev = test_create_device(ctx, "external"); + dev->uuid = "29beca39-9181-4780-bbb2-ab5d4be59aaf"; + test_hotplug_device(test, dev); + + opt = get_boot_option(ctx, 0); + check_resolved_local_resource(opt->boot_image, dev, + "/boot/vmlinuz-3.8.0-19-generic"); + check_resolved_local_resource(opt->initrd, dev, + "/boot/initrd.img-3.8.0-19-generic"); + + opt = get_boot_option(ctx, 1); + check_resolved_local_resource(opt->boot_image, dev, + "/boot/vmlinuz-3.8.0-19-generic"); + check_resolved_local_resource(opt->initrd, dev, + "/boot/initrd.img-3.8.0-19-generic"); + + opt = get_boot_option(ctx, 2); + check_resolved_local_resource(opt->boot_image, dev, + "/boot/vmlinuz-3.8.0-19-generic"); + check_resolved_local_resource(opt->initrd, dev, + "/boot/initrd.img-3.8.0-19-generic"); + + opt = get_boot_option(ctx, 3); + check_resolved_local_resource(opt->boot_image, dev, + "/boot/memtest86+.bin"); + + opt = get_boot_option(ctx, 4); + check_resolved_local_resource(opt->boot_image, dev, + "/boot/memtest86+.bin"); +} -- 2.39.2