1081c6536SMasami Hiramatsu#!/bin/sh 2081c6536SMasami Hiramatsu# SPDX-License-Identifier: GPL-2.0-only 3081c6536SMasami Hiramatsu 4081c6536SMasami Hiramatsuecho "Boot config test script" 5081c6536SMasami Hiramatsu 6306b69dcSMasami Hiramatsuif [ -d "$1" ]; then 7306b69dcSMasami Hiramatsu TESTDIR=$1 8306b69dcSMasami Hiramatsuelse 9306b69dcSMasami Hiramatsu TESTDIR=. 10306b69dcSMasami Hiramatsufi 11306b69dcSMasami HiramatsuBOOTCONF=${TESTDIR}/bootconfig 12e1cef2d4SMasami HiramatsuALIGN=4 13306b69dcSMasami Hiramatsu 14306b69dcSMasami HiramatsuINITRD=`mktemp ${TESTDIR}/initrd-XXXX` 15306b69dcSMasami HiramatsuTEMPCONF=`mktemp ${TESTDIR}/temp-XXXX.bconf` 16306b69dcSMasami HiramatsuOUTFILE=`mktemp ${TESTDIR}/tempout-XXXX` 17081c6536SMasami HiramatsuNG=0 18081c6536SMasami Hiramatsu 19081c6536SMasami Hiramatsucleanup() { 205f811c57SMasami Hiramatsu rm -f $INITRD $TEMPCONF $OUTFILE 21081c6536SMasami Hiramatsu exit $NG 22081c6536SMasami Hiramatsu} 23081c6536SMasami Hiramatsu 24081c6536SMasami Hiramatsutrap cleanup EXIT TERM 25081c6536SMasami Hiramatsu 26081c6536SMasami HiramatsuNO=1 27081c6536SMasami Hiramatsu 28081c6536SMasami Hiramatsuxpass() { # pass test command 29*47914d4eSMasami Hiramatsu echo "test case $NO ($*)... " 30081c6536SMasami Hiramatsu if ! ($@ && echo "\t\t[OK]"); then 31081c6536SMasami Hiramatsu echo "\t\t[NG]"; NG=$((NG + 1)) 32081c6536SMasami Hiramatsu fi 33081c6536SMasami Hiramatsu NO=$((NO + 1)) 34081c6536SMasami Hiramatsu} 35081c6536SMasami Hiramatsu 36081c6536SMasami Hiramatsuxfail() { # fail test command 37*47914d4eSMasami Hiramatsu echo "test case $NO ($*)... " 38081c6536SMasami Hiramatsu if ! (! $@ && echo "\t\t[OK]"); then 39081c6536SMasami Hiramatsu echo "\t\t[NG]"; NG=$((NG + 1)) 40081c6536SMasami Hiramatsu fi 41081c6536SMasami Hiramatsu NO=$((NO + 1)) 42081c6536SMasami Hiramatsu} 43081c6536SMasami Hiramatsu 44081c6536SMasami Hiramatsuecho "Basic command test" 45081c6536SMasami Hiramatsuxpass $BOOTCONF $INITRD 46081c6536SMasami Hiramatsu 47081c6536SMasami Hiramatsuecho "Delete command should success without bootconfig" 48081c6536SMasami Hiramatsuxpass $BOOTCONF -d $INITRD 49081c6536SMasami Hiramatsu 50081c6536SMasami Hiramatsudd if=/dev/zero of=$INITRD bs=4096 count=1 51081c6536SMasami Hiramatsuecho "key = value;" > $TEMPCONF 52081c6536SMasami Hiramatsubconf_size=$(stat -c %s $TEMPCONF) 53081c6536SMasami Hiramatsuinitrd_size=$(stat -c %s $INITRD) 54081c6536SMasami Hiramatsu 55081c6536SMasami Hiramatsuecho "Apply command test" 56081c6536SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD 57081c6536SMasami Hiramatsunew_size=$(stat -c %s $INITRD) 58081c6536SMasami Hiramatsu 595414251aSMasami Hiramatsuecho "Show command test" 605414251aSMasami Hiramatsuxpass $BOOTCONF $INITRD 615414251aSMasami Hiramatsu 62081c6536SMasami Hiramatsuecho "File size check" 63e1cef2d4SMasami Hiramatsutotal_size=$(expr $bconf_size + $initrd_size + 9 + 12 + $ALIGN - 1 ) 64e1cef2d4SMasami Hiramatsutotal_size=$(expr $total_size / $ALIGN) 65e1cef2d4SMasami Hiramatsutotal_size=$(expr $total_size \* $ALIGN) 66e1cef2d4SMasami Hiramatsuxpass test $new_size -eq $total_size 67081c6536SMasami Hiramatsu 68081c6536SMasami Hiramatsuecho "Apply command repeat test" 69081c6536SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD 70081c6536SMasami Hiramatsu 71081c6536SMasami Hiramatsuecho "File size check" 72081c6536SMasami Hiramatsuxpass test $new_size -eq $(stat -c %s $INITRD) 73081c6536SMasami Hiramatsu 74081c6536SMasami Hiramatsuecho "Delete command check" 75081c6536SMasami Hiramatsuxpass $BOOTCONF -d $INITRD 76081c6536SMasami Hiramatsu 77081c6536SMasami Hiramatsuecho "File size check" 78081c6536SMasami Hiramatsunew_size=$(stat -c %s $INITRD) 79081c6536SMasami Hiramatsuxpass test $new_size -eq $initrd_size 80081c6536SMasami Hiramatsu 8197378001SMasami Hiramatsuecho "No error messge while applying" 8297378001SMasami Hiramatsudd if=/dev/zero of=$INITRD bs=4096 count=1 8397378001SMasami Hiramatsuprintf " \0\0\0 \0\0\0" >> $INITRD 8497378001SMasami Hiramatsu$BOOTCONF -a $TEMPCONF $INITRD > $OUTFILE 2>&1 8597378001SMasami Hiramatsuxfail grep -i "failed" $OUTFILE 8697378001SMasami Hiramatsuxfail grep -i "error" $OUTFILE 8797378001SMasami Hiramatsu 88081c6536SMasami Hiramatsuecho "Max node number check" 89081c6536SMasami Hiramatsu 90081c6536SMasami Hiramatsuecho -n > $TEMPCONF 91081c6536SMasami Hiramatsufor i in `seq 1 1024` ; do 92081c6536SMasami Hiramatsu echo "node$i" >> $TEMPCONF 93081c6536SMasami Hiramatsudone 94081c6536SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD 95081c6536SMasami Hiramatsu 96081c6536SMasami Hiramatsuecho "badnode" >> $TEMPCONF 97081c6536SMasami Hiramatsuxfail $BOOTCONF -a $TEMPCONF $INITRD 98081c6536SMasami Hiramatsu 99081c6536SMasami Hiramatsuecho "Max filesize check" 100081c6536SMasami Hiramatsu 101081c6536SMasami Hiramatsu# Max size is 32767 (including terminal byte) 102081c6536SMasami Hiramatsuecho -n "data = \"" > $TEMPCONF 103081c6536SMasami Hiramatsudd if=/dev/urandom bs=768 count=32 | base64 -w0 >> $TEMPCONF 104081c6536SMasami Hiramatsuecho "\"" >> $TEMPCONF 105081c6536SMasami Hiramatsuxfail $BOOTCONF -a $TEMPCONF $INITRD 106081c6536SMasami Hiramatsu 107081c6536SMasami Hiramatsutruncate -s 32764 $TEMPCONF 108081c6536SMasami Hiramatsuecho "\"" >> $TEMPCONF # add 2 bytes + terminal ('\"\n\0') 109081c6536SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD 110081c6536SMasami Hiramatsu 1115f811c57SMasami Hiramatsuecho "Adding same-key values" 1125f811c57SMasami Hiramatsucat > $TEMPCONF << EOF 1135f811c57SMasami Hiramatsukey = bar, baz 1145f811c57SMasami Hiramatsukey += qux 1155f811c57SMasami HiramatsuEOF 1165f811c57SMasami Hiramatsuecho > $INITRD 1175f811c57SMasami Hiramatsu 1185f811c57SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD 1195f811c57SMasami Hiramatsu$BOOTCONF $INITRD > $OUTFILE 1205f811c57SMasami Hiramatsuxpass grep -q "bar" $OUTFILE 1215f811c57SMasami Hiramatsuxpass grep -q "baz" $OUTFILE 1225f811c57SMasami Hiramatsuxpass grep -q "qux" $OUTFILE 1235f811c57SMasami Hiramatsu 12481464192SMasami Hiramatsuecho "Override same-key values" 12581464192SMasami Hiramatsucat > $TEMPCONF << EOF 12681464192SMasami Hiramatsukey = bar, baz 12781464192SMasami Hiramatsukey := qux 12881464192SMasami HiramatsuEOF 12981464192SMasami Hiramatsuecho > $INITRD 13081464192SMasami Hiramatsu 13181464192SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD 13281464192SMasami Hiramatsu$BOOTCONF $INITRD > $OUTFILE 13381464192SMasami Hiramatsuxfail grep -q "bar" $OUTFILE 13481464192SMasami Hiramatsuxfail grep -q "baz" $OUTFILE 13581464192SMasami Hiramatsuxpass grep -q "qux" $OUTFILE 13681464192SMasami Hiramatsu 1375414251aSMasami Hiramatsuecho "Double/single quotes test" 1385414251aSMasami Hiramatsuecho "key = '\"string\"';" > $TEMPCONF 1395414251aSMasami Hiramatsu$BOOTCONF -a $TEMPCONF $INITRD 1405414251aSMasami Hiramatsu$BOOTCONF $INITRD > $TEMPCONF 1415414251aSMasami Hiramatsucat $TEMPCONF 1425414251aSMasami Hiramatsuxpass grep \'\"string\"\' $TEMPCONF 1435414251aSMasami Hiramatsu 1441d210c16SMasami Hiramatsuecho "Repeat same-key tree" 1451d210c16SMasami Hiramatsucat > $TEMPCONF << EOF 1461d210c16SMasami Hiramatsufoo 1471d210c16SMasami Hiramatsubar 1481d210c16SMasami Hiramatsufoo { buz } 1491d210c16SMasami HiramatsuEOF 1501d210c16SMasami Hiramatsuecho > $INITRD 1511d210c16SMasami Hiramatsu 1521d210c16SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD 1531d210c16SMasami Hiramatsu$BOOTCONF $INITRD > $OUTFILE 1541d210c16SMasami Hiramatsuxpass grep -q "bar" $OUTFILE 1551d210c16SMasami Hiramatsu 1562f5fb555SMasami Hiramatsu 1572f5fb555SMasami Hiramatsuecho "Remove/keep tailing spaces" 1582f5fb555SMasami Hiramatsucat > $TEMPCONF << EOF 1592f5fb555SMasami Hiramatsufoo = val # comment 1602f5fb555SMasami Hiramatsubar = "val2 " # comment 1612f5fb555SMasami HiramatsuEOF 1622f5fb555SMasami Hiramatsuecho > $INITRD 1632f5fb555SMasami Hiramatsu 1642f5fb555SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD 1652f5fb555SMasami Hiramatsu$BOOTCONF $INITRD > $OUTFILE 1662f5fb555SMasami Hiramatsuxfail grep -q val[[:space:]] $OUTFILE 1672f5fb555SMasami Hiramatsuxpass grep -q val2[[:space:]] $OUTFILE 1682f5fb555SMasami Hiramatsu 169081c6536SMasami Hiramatsuecho "=== expected failure cases ===" 170081c6536SMasami Hiramatsufor i in samples/bad-* ; do 171081c6536SMasami Hiramatsu xfail $BOOTCONF -a $i $INITRD 172081c6536SMasami Hiramatsudone 173081c6536SMasami Hiramatsu 174081c6536SMasami Hiramatsuecho "=== expected success cases ===" 175081c6536SMasami Hiramatsufor i in samples/good-* ; do 176081c6536SMasami Hiramatsu xpass $BOOTCONF -a $i $INITRD 177081c6536SMasami Hiramatsudone 178081c6536SMasami Hiramatsu 17998d0a685SMasami Hiramatsu 18098d0a685SMasami Hiramatsuecho 18198d0a685SMasami Hiramatsuecho "=== Summary ===" 18298d0a685SMasami Hiramatsuecho "# of Passed: $(expr $NO - $NG - 1)" 18398d0a685SMasami Hiramatsuecho "# of Failed: $NG" 18498d0a685SMasami Hiramatsu 185081c6536SMasami Hiramatsuecho 186081c6536SMasami Hiramatsuif [ $NG -eq 0 ]; then 187081c6536SMasami Hiramatsu echo "All tests passed" 188081c6536SMasami Hiramatsuelse 189081c6536SMasami Hiramatsu echo "$NG tests failed" 19098d0a685SMasami Hiramatsu exit 1 191081c6536SMasami Hiramatsufi 192