208 lines · 4.3 KB · Shell
RawDownload
#!/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