test/parser: Add ubuntu grub tests
authorGeoff Levand <geoff@infradead.org>
Fri, 17 May 2013 09:09:01 +0000 (17:09 +0800)
committerGeoff Levand <geoff@infradead.org>
Fri, 17 May 2013 09:44:29 +0000 (17:44 +0800)
Signed-off-by: Geoff Levand <geoff@infradead.org>
test/parser/Makefile.am
test/parser/data/grub2-ubuntu-13_04-x86.conf [new file with mode: 0644]
test/parser/test-grub2-ubuntu-13_04-x86.c [new file with mode: 0644]

index e330e8268f1f30823797d8ff0097f9e04c3db1fa..af4fbd673221f4524e494b23e1ea592d996a2a76 100644 (file)
@@ -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 (file)
index 0000000..4138b8e
--- /dev/null
@@ -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 (file)
index 0000000..cc4d283
--- /dev/null
@@ -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");
+}