Something went wrong. Try again.
Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Something went wrong. Try again.
4.4 kB · 208 lines
Shell
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209#!/bin/sh# SPDX-License-Identifier: GPL-2.0-only
echo "Boot config test script"
if [ -d "$1" ]; then TESTDIR=$1else TESTDIR=.fiBOOTCONF=${TESTDIR}/bootconfigALIGN=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 ($*)... " if ! ($@ && printf "\t\t[OK]\n"); then printf "\t\t[NG]\n"; NG=$((NG + 1)) fi NO=$((NO + 1))}
xfail() { # fail test command echo "test case $NO ($*)... " if ! (! $@ && printf "\t\t[OK]\n"); then printf "\t\t[NG]\n"; 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=1printf "key = value;" > $TEMPCONFbconf_size=$(wc -c < $TEMPCONF)initrd_size=$(wc -c < $INITRD)
echo "Apply command test"xpass $BOOTCONF -a $TEMPCONF $INITRDnew_size=$(wc -c < $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 $(wc -c < $INITRD)
echo "Delete command check"xpass $BOOTCONF -d $INITRD
echo "File size check"new_size=$(wc -c < $INITRD)xpass test $new_size -eq $initrd_size
echo "No error messge while applying"dd if=/dev/zero of=$INITRD bs=4096 count=1printf " \0\0\0 \0\0\0" >> $INITRD$BOOTCONF -a $TEMPCONF $INITRD > $OUTFILE 2>&1xfail grep -i "failed" $OUTFILExfail 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))}' > $TEMPCONFxpass $BOOTCONF -a $TEMPCONF $INITRD
printf "badnode\n" >> $TEMPCONFxfail $BOOTCONF -a $TEMPCONF $INITRD
echo "Max filesize check"
# Max size is 32767 (including terminal byte)printf "data = \"" > $TEMPCONFdd if=/dev/urandom bs=768 count=32 | base64 -w0 >> $TEMPCONFprintf "\"\n" >> $TEMPCONFxfail $BOOTCONF -a $TEMPCONF $INITRD
dd if=$TEMPCONF of=$OUTFILE bs=1 count=32764cp $OUTFILE $TEMPCONFprintf "\"\n" >> $TEMPCONF # add 2 bytes + terminal ('\"\n\0')xpass $BOOTCONF -a $TEMPCONF $INITRD
echo "Adding same-key values"cat > $TEMPCONF << EOFkey = bar, bazkey += quxEOFecho > $INITRD
xpass $BOOTCONF -a $TEMPCONF $INITRD$BOOTCONF $INITRD > $OUTFILExpass grep -q "bar" $OUTFILExpass grep -q "baz" $OUTFILExpass grep -q "qux" $OUTFILE
echo "Override same-key values"cat > $TEMPCONF << EOFkey = bar, bazkey := quxEOFecho > $INITRD
xpass $BOOTCONF -a $TEMPCONF $INITRD$BOOTCONF $INITRD > $OUTFILExfail grep -q "bar" $OUTFILExfail grep -q "baz" $OUTFILExpass grep -q "qux" $OUTFILE
echo "Double/single quotes test"printf "key = '\"string\"';" > $TEMPCONF$BOOTCONF -a $TEMPCONF $INITRD$BOOTCONF $INITRD > $TEMPCONFcat $TEMPCONFxpass grep \'\"string\"\' $TEMPCONF
echo "Repeat same-key tree"cat > $TEMPCONF << EOFfoobarfoo { buz }EOFecho > $INITRD
xpass $BOOTCONF -a $TEMPCONF $INITRD$BOOTCONF $INITRD > $OUTFILExpass grep -q "bar" $OUTFILE
echo "Remove/keep tailing spaces"cat > $TEMPCONF << EOFfoo = val # commentbar = "val2 " # commentEOFecho > $INITRD
xpass $BOOTCONF -a $TEMPCONF $INITRD$BOOTCONF $INITRD > $OUTFILExfail grep -q 'val[[:space:]]' $OUTFILExpass grep -q 'val2[[:space:]]' $OUTFILE
echo "Showing correct line:column of no closing brace"cat > $TEMPCONF << EOFfoo {bar {}EOF$BOOTCONF -a $TEMPCONF $INITRD 2> $OUTFILExpass grep -q "1:1" $OUTFILE
echo "=== expected failure cases ==="for i in samples/bad-* ; do xfail $BOOTCONF -a $i $INITRDdone
echo "=== expected success cases ==="for i in samples/good-* ; do xpass $BOOTCONF -a $i $INITRD x="samples/exp-"`basename $i` $BOOTCONF $i > $TEMPCONF xpass diff $x $TEMPCONFdone
echoecho "=== Summary ==="echo "# of Passed: $(expr $NO - $NG - 1)"echo "# of Failed: $NG"
echoif [ $NG -eq 0 ]; then echo "All tests passed"else echo "$NG tests failed" exit 1fi