--- trunk/grubby/test.sh 2013/02/20 14:05:36 2057 +++ trunk/grubby/test.sh 2013/10/21 14:01:48 2257 @@ -48,8 +48,21 @@ typeset mode=$1 cfg=test/$2 correct=test/results/$3 shift 3 + local ENV_FILE="" + if [ "$mode" == "--grub2" ]; then + ENV_FILE="test/grub2-support_files/env_temp" + if [ "$1" == "--env" ]; then + cp "test/grub2-support_files/$2" "$ENV_FILE" + shift 2 + else + cp "test/grub2-support_files/grubenv.0" "$ENV_FILE" + fi + ENV_FILE="--env=$ENV_FILE" + fi + + echo "$testing ... $mode $cfg $correct" - runme=( ./grubby "$mode" --bad-image-okay -c "$cfg" -o - "$@" ) + runme=( ./grubby "$mode" --bad-image-okay $ENV_FILE -c "$cfg" -o - "$@" ) if "${runme[@]}" | cmp "$correct" > /dev/null; then (( pass++ )) if $opt_verbose; then @@ -74,6 +87,19 @@ oneDisplayTest() { typeset mode=$1 cfg=test/$2 correct=test/results/$3 shift 3 + + local ENV_FILE="" + if [ "$mode" == "--grub2" ]; then + ENV_FILE="test/grub2-support_files/env_temp" + if [ "$1" == "--env" ]; then + cp "test/grub2-support_files/$2" "$ENV_FILE" + shift 2 + else + cp "test/grub2-support_files/grubenv.0" "$ENV_FILE" + fi + ENV_FILE="--env=$ENV_FILE" + fi + local BIO="--bad-image-okay" if [ "$1" == "--bad-image-bad" ]; then BIO="" @@ -81,7 +107,7 @@ fi echo "$testing ... $mode $cfg $correct" - runme=( ./grubby "$mode" $BIO -c "$cfg" "$@" ) + runme=( ./grubby "$mode" $BIO $ENV_FILE -c "$cfg" "$@" ) if "${runme[@]}" 2>&1 | cmp "$correct" > /dev/null; then (( pass++ )) if $opt_verbose; then @@ -101,6 +127,35 @@ fi } +commandTest() { + description=$1 + cmd0=$2 + text1=$3 + shift 3 + echo "$description" + output0=$(mktemp) + + $cmd0 > $output0 + + if echo $text1 | cmp $output0 - >/dev/null; then + (( pass++)) + if $opt_verbose; then + echo ------------------------------------------------------------- + echo -n "PASS: " + printf "%q " "\"$cmd0\""; echo + echo $text1 | diff -U30 $output0 - + echo + fi + else + (( fail++ )) + echo ------------------------------------------------------------- + echo -n "FAIL: " + printf "%q " "\"$cmd0\""; echo + echo $text1 | diff -U30 $output0 - + echo + fi +} + # generate convenience functions for b in $(./grubby --help | \ sed -n 's/^.*--\([^ ]*\) *configure \1 bootloader$/\1/p'); do @@ -208,7 +263,6 @@ grubTest grub.4 default/g4.1 --boot-filesystem=/ --set-default=/boot/vmlinuz-2.4.7-ac3 --remove-kernel /boot/vmlinuz-2.4.7-2.5 grubTest grub.4 default/g4.2 --boot-filesystem=/ --set-default=/boot/vmlinuz-2.4.7-ac3 --remove-kernel /boot/vmlinuz-2.4.7-2.5 --add-kernel=/boot/new-kernel --copy-default --title New_Title grubTest grub.6 default/g6.1 --remove-kernel=/boot/vmlinuz-2.4.7-2.9 --boot-filesystem=/ -grubTest grub.14 add/g1.7 --boot-filesystem=/boot --add-kernel /boot/new-kernel --title Some_Title testing="GRUB default index directive" grubTest grub.13 setdefaultindex/g.13.0 --set-default-index=0 @@ -378,56 +432,111 @@ --initrd=/boot/new-initrd --boot-filesystem=/boot --copy-default \ --args='console=tty0 console=ttyS1,9600n81 single' -testing="GRUB2 add kernel" -grub2Test grub2.1 add/g2-1.1 --add-kernel=/boot/new-kernel.img --title='title' \ - --initrd=/boot/new-initrd --boot-filesystem=/boot/ --copy-default -grub2Test grub2.1 add/g2-1.6 --add-kernel=/boot/new-kernel.img --title='title' \ - --initrd=/boot/new-initrd --boot-filesystem=/boot/ --copy-default --efi -grub2Test grub2.6 add/g2-1.7 --add-kernel=/boot/new-kernel.img --title='title' \ - --initrd=/boot/new-initrd --boot-filesystem=/boot/ --copy-default --efi -grub2Test grub2.1 add/g2-1.2 --add-kernel=/boot/new-kernel.img --title='title' \ - --initrd=/boot/new-initrd --boot-filesystem=/boot/ \ - --copy-default --make-default -grub2Test grub2.1 add/g2-1.3 --add-kernel=/boot/new-kernel.img --title='title' \ - --boot-filesystem=/boot/ --copy-default --make-default -grub2Test grub2.1 remove/g2-1.4 --remove-kernel=/boot/vmlinuz-2.6.38.2-9.fc15.x86_64 \ - --boot-filesystem=/boot/ -grub2Test grub2.5 add/g2-1.5 --add-kernel=/boot/new-kernel.img --title='title' \ - --initrd=/boot/new-initrd --boot-filesystem=/boot/ --copy-default - -testing="GRUB2 add initrd" -grub2Test grub2.2 add/g2-1.4 --update-kernel=/boot/new-kernel.img \ - --initrd=/boot/new-initrd --boot-filesystem=/boot/ - -testing="GRUB2 display default index" -grub2DisplayTest grub2.1 defaultindex/0 --default-index -grub2DisplayTest grub2.2 defaultindex/0 --default-index - -testing="GRUB2 display default title" -grub2DisplayTest grub2.1 defaulttitle/g2.1 --default-title -grub2DisplayTest grub2.2 defaulttitle/g2.2 --default-title - -testing="GRUB2 display debug failure" -grub2DisplayTest grub2.1 debug/g2.1 --bad-image-bad --boot-filesystem=/boot --default-kernel --debug -testing="GRUB2 display debug success" -grub2DisplayTest grub2.1 debug/g2.1.2 --boot-filesystem=/boot --default-kernel --debug - -testing="GRUB2 remove kernel via index" -grub2Test grub2.3 remove/g2-1.1 --remove-kernel=1 - -testing="GRUB2 remove kernel via title" -grub2Test grub2.3 remove/g2-1.1 --remove-kernel="TITLE=title2" - -testing="GRUB2 (submenu) remove kernel via index" -grub2Test grub2.4 remove/g2-1.2 --remove-kernel=2 - -testing="GRUB2 (submenu) remove kernel via title" -grub2Test grub2.4 remove/g2-1.2 --remove-kernel="TITLE=title2" - -testing="GRUB2 default index directive" -grub2Test grub2.1 setdefaultindex/g2.1.0 --set-default-index=0 -grub2Test grub2.1 setdefaultindex/g2.1.1 --set-default-index=1 -grub2Test grub2.1 setdefaultindex/g2.1.9 --set-default-index=9 +testgrub2=n +ARCH=$(uname -m | sed s,i[3456789]86,ia32,) +case $ARCH in + aarch64|ppc|ppc64|ia32|x86_64) testgrub2=y ;; +esac + +if [ "$testgrub2" == "y" ]; then + testing="GRUB2 add kernel" + grub2Test grub2.1 add/g2-1.1 --add-kernel=/boot/new-kernel.img \ + --title='title' --initrd=/boot/new-initrd --boot-filesystem=/boot/ \ + --copy-default + grub2Test grub2.1 add/g2-1.6 --add-kernel=/boot/new-kernel.img \ + --title='title' --initrd=/boot/new-initrd --boot-filesystem=/boot/ \ + --copy-default --efi + grub2Test grub2.6 add/g2-1.7 --add-kernel=/boot/new-kernel.img \ + --title='title' --initrd=/boot/new-initrd --boot-filesystem=/boot/ \ + --copy-default --efi + grub2Test grub2.1 add/g2-1.2 --add-kernel=/boot/new-kernel.img \ + --title='title' --initrd=/boot/new-initrd --boot-filesystem=/boot/ \ + --copy-default --make-default + grub2Test grub2.1 add/g2-1.3 --add-kernel=/boot/new-kernel.img \ + --title='title' --boot-filesystem=/boot/ --copy-default --make-default + grub2Test grub2.1 remove/g2-1.4 \ + --remove-kernel=/boot/vmlinuz-2.6.38.2-9.fc15.x86_64 \ + --boot-filesystem=/boot/ + grub2Test grub2.5 add/g2-1.5 --add-kernel=/boot/new-kernel.img \ + --title='title' --initrd=/boot/new-initrd --boot-filesystem=/boot/ \ + --copy-default + + testing="GRUB2 add initrd" + grub2Test grub2.2 add/g2-1.4 --update-kernel=/boot/new-kernel.img \ + --initrd=/boot/new-initrd --boot-filesystem=/boot/ + + testing="GRUB2 display default index" + grub2DisplayTest grub2.1 defaultindex/0 --default-index + grub2DisplayTest grub2.2 defaultindex/0 --default-index + + testing="GRUB2 display default title" + grub2DisplayTest grub2.1 defaulttitle/g2.1 --default-title + grub2DisplayTest grub2.2 defaulttitle/g2.2 --default-title + + testing="GRUB2 display debug failure" + grub2DisplayTest grub2.1 debug/g2.1 --bad-image-bad \ + --boot-filesystem=/boot --default-kernel --debug + testing="GRUB2 display debug success" + grub2DisplayTest grub2.1 debug/g2.1.2 --boot-filesystem=/boot \ + --default-kernel --debug + + testing="GRUB2 remove kernel via index" + grub2Test grub2.3 remove/g2-1.1 --remove-kernel=1 + + testing="GRUB2 remove kernel via title" + grub2Test grub2.3 remove/g2-1.1 --remove-kernel="TITLE=title2" + + testing="GRUB2 (submenu) remove kernel via index" + grub2Test grub2.4 remove/g2-1.2 --remove-kernel=2 + + testing="GRUB2 (submenu) remove kernel via title" + grub2Test grub2.4 remove/g2-1.2 --remove-kernel="TITLE=title2" + + testing="GRUB2 default index directive" + grub2Test grub2.1 setdefaultindex/g2.1.0 --set-default-index=0 + grub2Test grub2.1 setdefaultindex/g2.1.1 --set-default-index=1 + grub2Test grub2.1 setdefaultindex/g2.1.9 --set-default-index=9 + + testing="GRUB2 add kernel with default=saved_entry" + grub2Test grub2.7 add/g2-1.8 --env grubenv.1 \ + --add-kernel=/boot/new-kernel.img \ + --title='title' --initrd=/boot/new-initrd --boot-filesystem=/boot/ \ + --copy-default + commandTest "saved_default output" \ + "grub2-editenv test/grub2-support_files/env_temp list" \ + "saved_entry=Linux, with Fedora 2.6.38.8-32.fc15.x86_64" + + testing="GRUB2 add kernel with default=saved_entry and a terrible title" + grub2Test grub2.7 add/g2-1.9 --env grubenv.1 \ + --add-kernel=/boot/new-kernel.img \ + --title='Fedora (3.10.3-300.fc19.x86_64) 19 (Schrödinger’s Cat)' \ + --initrd=/boot/new-initrd --boot-filesystem=/boot/ \ + --copy-default + + testing="GRUB2 set default with default=saved_entry and a terrible name" + grub2Test grub2.9 add/g2-1.9 --env grubenv.1 --set-default-index=0 + commandTest "saved_default output" \ + "grub2-editenv test/grub2-support_files/env_temp list" \ + 'saved_entry=Fedora (3.10.3-300.fc19.x86_64) 19 (Schrödinger’s Cat)' + + testing="GRUB2 set default with default=saved_entry" + grub2Test grub2.8 add/g2-1.8 --env grubenv.1 --set-default-index=0 + commandTest "saved_default output" \ + "grub2-editenv test/grub2-support_files/env_temp list" \ + "saved_entry=title" + + testing="GRUB2 --default-index with default=saved_entry" + grub2DisplayTest grub2.8 defaultindex/1 --env grubenv.1 --default-index + + testing="GRUB2 --default-index with default=saved_entry" + grub2DisplayTest grub2.8 defaultindex/0 --env grubenv.2 --default-index + + testing="GRUB2 --default-title with default=saved_entry" + grub2DisplayTest grub2.8 defaulttitle/g2.1 --env grubenv.1 --default-title + + testing="GRUB2 --default-index with default=saved_entry and empty grubenv" + grub2DisplayTest grub2.8 defaultindex/0 --env grubenv.0 --default-index +fi testing="YABOOT add kernel" yabootTest yaboot.1 add/y1.1 --copy-default --boot-filesystem=/ --add-kernel=/boot/new-kernel \