--- trunk/grubby/test.sh 2012/02/18 00:52:28 1721 +++ trunk/grubby/test.sh 2014/07/16 09:51:14 2683 @@ -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 @@ -75,15 +88,33 @@ 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="" + shift + fi + echo "$testing ... $mode $cfg $correct" - runme=( ./grubby "$mode" --bad-image-okay -c "$cfg" "$@" ) - if "${runme[@]}" | cmp "$correct" > /dev/null; then + runme=( ./grubby "$mode" $BIO $ENV_FILE -c "$cfg" "$@" ) + if "${runme[@]}" 2>&1 | cmp "$correct" > /dev/null; then (( pass++ )) if $opt_verbose; then echo ------------------------------------------------------------- echo -n "PASS: " printf "%q " "${runme[@]}"; echo - "${runme[@]}" | diff -U30 "$cfg" - + "${runme[@]}" 2>&1 | diff -U30 "$cfg" - echo fi else @@ -91,7 +122,36 @@ echo ------------------------------------------------------------- echo -n "FAIL: " printf "%q " "${runme[@]}"; echo - "${runme[@]}" | diff -U30 "$correct" - + "${runme[@]}" 2>&1 | diff -U30 "$correct" - + echo + 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 } @@ -121,9 +181,15 @@ done export MALLOC_CHECK_=2 +if [ -n "${RANDOM}" ]; then + export MALLOC_PERTURB_=$(($RANDOM % 255 + 1)) +else + export MALLOC_PERTURB_=1 +fi testing="Parse/write comparison" for n in test/*.[0-9]*; do + [ -d $n ] && continue n=${n#*/} # remove test/ b=${n%.*} # remove suffix [[ $b == $opt_bootloader ]] || continue @@ -198,6 +264,11 @@ 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=/ +testing="GRUB default index directive" +grubTest grub.13 setdefaultindex/g.13.0 --set-default-index=0 +grubTest grub.13 setdefaultindex/g.13.1 --set-default-index=1 +grubTest grub.13 setdefaultindex/g.13.9 --set-default-index=9 + testing="GRUB display default index" grubDisplayTest grub.1 defaultindex/0 --default-index grubDisplayTest grub.2 defaultindex/0 --default-index @@ -300,6 +371,12 @@ --update-kernel=/vmlinuz-2.4.7-2smp \ --args "ro root=LABEL=/ single" +testing="GRUB lba and root information on SuSE systems" +GRUBBY_SUSE_RELEASE=test/grub.12-support_files/etc/SuSE-release \ + GRUBBY_SUSE_GRUB_CONF=test/grub.12-support_files/etc/grub.conf \ + GRUBBY_GRUB_DEVICE_MAP=test/grub.12-support_files/boot/grub/device.map \ + grubTest grub.12 info/g12.1 --info=0 + testing="LILO update kernel argument handling" liloTest lilo.1 updargs/l1.1 --update-kernel=/boot/vmlinuz-2.4.18-4 \ --args="root=/dev/md1" @@ -355,26 +432,127 @@ --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.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 - -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 +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 + + testlinux16=n + case $ARCH in + ia32|x86_64) testlinux16=y ;; + esac -testing="GRUB display default title" -grub2DisplayTest grub2.1 defaulttitle/g2.1 --default-title -grub2DisplayTest grub2.2 defaulttitle/g2.2 --default-title + if [ "$testlinux16" == "y" ]; then + testing="GRUB2 add kernel with linux16" + grub2Test grub2.10 add/g2-1.10 --add-kernel=/boot/new-kernel.img \ + --title='title' --initrd=/boot/new-initrd --boot-filesystem=/boot/ \ + --copy-default + + testing="GRUB2 add initrd with linux16" + grub2Test grub2.11 add/g2-1.11 --update-kernel=/boot/new-kernel.img \ + --initrd=/boot/new-initrd --boot-filesystem=/boot/ + fi +fi testing="YABOOT add kernel" yabootTest yaboot.1 add/y1.1 --copy-default --boot-filesystem=/ --add-kernel=/boot/new-kernel \