| #!/bin/sh |
| # SPDX-License-Identifier: GPL-2.0-only |
| |
| echo "Boot config test script" |
| |
| if [ -d "$1" ]; then |
| TESTDIR=$1 |
| else |
| TESTDIR=. |
| fi |
| BOOTCONF=${TESTDIR}/bootconfig |
| ALIGN=4 |
| |
| INITRD=`mktemp ${TESTDIR}/initrd-XXXX` |
| TEMPCONF=`mktemp ${TESTDIR}/temp-XXXX.bconf` |
| OUTFILE=`mktemp ${TESTDIR}/tempout-XXXX` |
| NG=0 |
| |
| cleanup() { |
| rm -f $INITRD $TEMPCONF $OUTFILE |
| exit $NG |
| } |
| |
| trap cleanup EXIT TERM |
| |
| NO=1 |
| |
| xpass() { # pass test command |
| echo "test case $NO ($3)... " |
| if ! ($@ && echo "\t\t[OK]"); then |
| echo "\t\t[NG]"; NG=$((NG + 1)) |
| fi |
| NO=$((NO + 1)) |
| } |
| |
| xfail() { # fail test command |
| echo "test case $NO ($3)... " |
| if ! (! $@ && echo "\t\t[OK]"); then |
| echo "\t\t[NG]"; NG=$((NG + 1)) |
| fi |
| NO=$((NO + 1)) |
| } |
| |
| echo "Basic command test" |
| xpass $BOOTCONF $INITRD |
| |
| echo "Delete command should success without bootconfig" |
| xpass $BOOTCONF -d $INITRD |
| |
| dd if=/dev/zero of=$INITRD bs=4096 count=1 |
| echo "key = value;" > $TEMPCONF |
| bconf_size=$(stat -c %s $TEMPCONF) |
| initrd_size=$(stat -c %s $INITRD) |
| |
| echo "Apply command test" |
| xpass $BOOTCONF -a $TEMPCONF $INITRD |
| new_size=$(stat -c %s $INITRD) |
| |
| echo "Show command test" |
| xpass $BOOTCONF $INITRD |
| |
| echo "File size check" |
| total_size=$(expr $bconf_size + $initrd_size + 9 + 12 + $ALIGN - 1 ) |
| total_size=$(expr $total_size / $ALIGN) |
| total_size=$(expr $total_size \* $ALIGN) |
| xpass test $new_size -eq $total_size |
| |
| echo "Apply command repeat test" |
| xpass $BOOTCONF -a $TEMPCONF $INITRD |
| |
| echo "File size check" |
| xpass test $new_size -eq $(stat -c %s $INITRD) |
| |
| echo "Delete command check" |
| xpass $BOOTCONF -d $INITRD |
| |
| echo "File size check" |
| new_size=$(stat -c %s $INITRD) |
| xpass test $new_size -eq $initrd_size |
| |
| echo "No error messge while applying" |
| dd if=/dev/zero of=$INITRD bs=4096 count=1 |
| printf " \0\0\0 \0\0\0" >> $INITRD |
| $BOOTCONF -a $TEMPCONF $INITRD > $OUTFILE 2>&1 |
| xfail grep -i "failed" $OUTFILE |
| xfail grep -i "error" $OUTFILE |
| |
| echo "Max node number check" |
| |
| awk ' |
| BEGIN { |
| for (i = 0; i < 26; i += 1) |
| printf("%c\n", 65 + i % 26) |
| for (i = 26; i < 8192; i += 1) |
| printf("%c%c%c\n", 65 + i % 26, 65 + (i / 26) % 26, 65 + (i / 26 / 26)) |
| } |
| ' > $TEMPCONF |
| xpass $BOOTCONF -a $TEMPCONF $INITRD |
| |
| echo "badnode" >> $TEMPCONF |
| xfail $BOOTCONF -a $TEMPCONF $INITRD |
| |
| echo "Max filesize check" |
| |
| # Max size is 32767 (including terminal byte) |
| echo -n "data = \"" > $TEMPCONF |
| dd if=/dev/urandom bs=768 count=32 | base64 -w0 >> $TEMPCONF |
| echo "\"" >> $TEMPCONF |
| xfail $BOOTCONF -a $TEMPCONF $INITRD |
| |
| truncate -s 32764 $TEMPCONF |
| echo "\"" >> $TEMPCONF # add 2 bytes + terminal ('\"\n\0') |
| xpass $BOOTCONF -a $TEMPCONF $INITRD |
| |
| echo "Adding same-key values" |
| cat > $TEMPCONF << EOF |
| key = bar, baz |
| key += qux |
| EOF |
| echo > $INITRD |
| |
| xpass $BOOTCONF -a $TEMPCONF $INITRD |
| $BOOTCONF $INITRD > $OUTFILE |
| xpass grep -q "bar" $OUTFILE |
| xpass grep -q "baz" $OUTFILE |
| xpass grep -q "qux" $OUTFILE |
| |
| echo "Override same-key values" |
| cat > $TEMPCONF << EOF |
| key = bar, baz |
| key := qux |
| EOF |
| echo > $INITRD |
| |
| xpass $BOOTCONF -a $TEMPCONF $INITRD |
| $BOOTCONF $INITRD > $OUTFILE |
| xfail grep -q "bar" $OUTFILE |
| xfail grep -q "baz" $OUTFILE |
| xpass grep -q "qux" $OUTFILE |
| |
| echo "Double/single quotes test" |
| echo "key = '\"string\"';" > $TEMPCONF |
| $BOOTCONF -a $TEMPCONF $INITRD |
| $BOOTCONF $INITRD > $TEMPCONF |
| cat $TEMPCONF |
| xpass grep \'\"string\"\' $TEMPCONF |
| |
| echo "Repeat same-key tree" |
| cat > $TEMPCONF << EOF |
| foo |
| bar |
| foo { buz } |
| EOF |
| echo > $INITRD |
| |
| xpass $BOOTCONF -a $TEMPCONF $INITRD |
| $BOOTCONF $INITRD > $OUTFILE |
| xpass grep -q "bar" $OUTFILE |
| |
| |
| echo "Remove/keep tailing spaces" |
| cat > $TEMPCONF << EOF |
| foo = val # comment |
| bar = "val2 " # comment |
| EOF |
| echo > $INITRD |
| |
| xpass $BOOTCONF -a $TEMPCONF $INITRD |
| $BOOTCONF $INITRD > $OUTFILE |
| xfail grep -q val[[:space:]] $OUTFILE |
| xpass grep -q val2[[:space:]] $OUTFILE |
| |
| echo "=== expected failure cases ===" |
| for i in samples/bad-* ; do |
| xfail $BOOTCONF -a $i $INITRD |
| done |
| |
| echo "=== expected success cases ===" |
| for i in samples/good-* ; do |
| xpass $BOOTCONF -a $i $INITRD |
| done |
| |
| |
| echo |
| echo "=== Summary ===" |
| echo "# of Passed: $(expr $NO - $NG - 1)" |
| echo "# of Failed: $NG" |
| |
| echo |
| if [ $NG -eq 0 ]; then |
| echo "All tests passed" |
| else |
| echo "$NG tests failed" |
| exit 1 |
| fi |