#!/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
#!/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 ($*)... "
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=1
printf "key = value;" > $TEMPCONF
bconf_size=$(wc -c < $TEMPCONF)
initrd_size=$(wc -c < $INITRD)
echo "Apply command test"
xpass $BOOTCONF -a $TEMPCONF $INITRD
new_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=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
printf "badnode\n" >> $TEMPCONF
xfail $BOOTCONF -a $TEMPCONF $INITRD
echo "Max filesize check"
# Max size is 32767 (including terminal byte)
printf "data = \"" > $TEMPCONF
dd if=/dev/urandom bs=768 count=32 | base64 -w0 >> $TEMPCONF
printf "\"\n" >> $TEMPCONF
xfail $BOOTCONF -a $TEMPCONF $INITRD
dd if=$TEMPCONF of=$OUTFILE bs=1 count=32764
cp $OUTFILE $TEMPCONF
printf "\"\n" >> $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"
printf "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 "Showing correct line:column of no closing brace"
cat > $TEMPCONF << EOF
foo {
bar {
}
EOF
$BOOTCONF -a $TEMPCONF $INITRD 2> $OUTFILE
xpass grep -q "1:1" $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
x="samples/exp-"`basename $i`
$BOOTCONF $i > $TEMPCONF
xpass diff $x $TEMPCONF
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