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 12306b69dcSMasami Hiramatsu 13306b69dcSMasami HiramatsuINITRD=`mktemp ${TESTDIR}/initrd-XXXX` 14306b69dcSMasami HiramatsuTEMPCONF=`mktemp ${TESTDIR}/temp-XXXX.bconf` 15306b69dcSMasami HiramatsuOUTFILE=`mktemp ${TESTDIR}/tempout-XXXX` 16081c6536SMasami HiramatsuNG=0 17081c6536SMasami Hiramatsu 18081c6536SMasami Hiramatsucleanup() { 195f811c57SMasami Hiramatsu rm -f $INITRD $TEMPCONF $OUTFILE 20081c6536SMasami Hiramatsu exit $NG 21081c6536SMasami Hiramatsu} 22081c6536SMasami Hiramatsu 23081c6536SMasami Hiramatsutrap cleanup EXIT TERM 24081c6536SMasami Hiramatsu 25081c6536SMasami HiramatsuNO=1 26081c6536SMasami Hiramatsu 27081c6536SMasami Hiramatsuxpass() { # pass test command 28081c6536SMasami Hiramatsu echo "test case $NO ($3)... " 29081c6536SMasami Hiramatsu if ! ($@ && echo "\t\t[OK]"); then 30081c6536SMasami Hiramatsu echo "\t\t[NG]"; NG=$((NG + 1)) 31081c6536SMasami Hiramatsu fi 32081c6536SMasami Hiramatsu NO=$((NO + 1)) 33081c6536SMasami Hiramatsu} 34081c6536SMasami Hiramatsu 35081c6536SMasami Hiramatsuxfail() { # fail test command 36081c6536SMasami Hiramatsu echo "test case $NO ($3)... " 37081c6536SMasami Hiramatsu if ! (! $@ && echo "\t\t[OK]"); then 38081c6536SMasami Hiramatsu echo "\t\t[NG]"; NG=$((NG + 1)) 39081c6536SMasami Hiramatsu fi 40081c6536SMasami Hiramatsu NO=$((NO + 1)) 41081c6536SMasami Hiramatsu} 42081c6536SMasami Hiramatsu 43081c6536SMasami Hiramatsuecho "Basic command test" 44081c6536SMasami Hiramatsuxpass $BOOTCONF $INITRD 45081c6536SMasami Hiramatsu 46081c6536SMasami Hiramatsuecho "Delete command should success without bootconfig" 47081c6536SMasami Hiramatsuxpass $BOOTCONF -d $INITRD 48081c6536SMasami Hiramatsu 49081c6536SMasami Hiramatsudd if=/dev/zero of=$INITRD bs=4096 count=1 50081c6536SMasami Hiramatsuecho "key = value;" > $TEMPCONF 51081c6536SMasami Hiramatsubconf_size=$(stat -c %s $TEMPCONF) 52081c6536SMasami Hiramatsuinitrd_size=$(stat -c %s $INITRD) 53081c6536SMasami Hiramatsu 54081c6536SMasami Hiramatsuecho "Apply command test" 55081c6536SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD 56081c6536SMasami Hiramatsunew_size=$(stat -c %s $INITRD) 57081c6536SMasami Hiramatsu 585414251aSMasami Hiramatsuecho "Show command test" 595414251aSMasami Hiramatsuxpass $BOOTCONF $INITRD 605414251aSMasami Hiramatsu 61081c6536SMasami Hiramatsuecho "File size check" 6285c46b78SMasami Hiramatsuxpass test $new_size -eq $(expr $bconf_size + $initrd_size + 9 + 12) 63081c6536SMasami Hiramatsu 64081c6536SMasami Hiramatsuecho "Apply command repeat test" 65081c6536SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD 66081c6536SMasami Hiramatsu 67081c6536SMasami Hiramatsuecho "File size check" 68081c6536SMasami Hiramatsuxpass test $new_size -eq $(stat -c %s $INITRD) 69081c6536SMasami Hiramatsu 70081c6536SMasami Hiramatsuecho "Delete command check" 71081c6536SMasami Hiramatsuxpass $BOOTCONF -d $INITRD 72081c6536SMasami Hiramatsu 73081c6536SMasami Hiramatsuecho "File size check" 74081c6536SMasami Hiramatsunew_size=$(stat -c %s $INITRD) 75081c6536SMasami Hiramatsuxpass test $new_size -eq $initrd_size 76081c6536SMasami Hiramatsu 7797378001SMasami Hiramatsuecho "No error messge while applying" 7897378001SMasami Hiramatsudd if=/dev/zero of=$INITRD bs=4096 count=1 7997378001SMasami Hiramatsuprintf " \0\0\0 \0\0\0" >> $INITRD 8097378001SMasami Hiramatsu$BOOTCONF -a $TEMPCONF $INITRD > $OUTFILE 2>&1 8197378001SMasami Hiramatsuxfail grep -i "failed" $OUTFILE 8297378001SMasami Hiramatsuxfail grep -i "error" $OUTFILE 8397378001SMasami Hiramatsu 84081c6536SMasami Hiramatsuecho "Max node number check" 85081c6536SMasami Hiramatsu 86081c6536SMasami Hiramatsuecho -n > $TEMPCONF 87081c6536SMasami Hiramatsufor i in `seq 1 1024` ; do 88081c6536SMasami Hiramatsu echo "node$i" >> $TEMPCONF 89081c6536SMasami Hiramatsudone 90081c6536SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD 91081c6536SMasami Hiramatsu 92081c6536SMasami Hiramatsuecho "badnode" >> $TEMPCONF 93081c6536SMasami Hiramatsuxfail $BOOTCONF -a $TEMPCONF $INITRD 94081c6536SMasami Hiramatsu 95081c6536SMasami Hiramatsuecho "Max filesize check" 96081c6536SMasami Hiramatsu 97081c6536SMasami Hiramatsu# Max size is 32767 (including terminal byte) 98081c6536SMasami Hiramatsuecho -n "data = \"" > $TEMPCONF 99081c6536SMasami Hiramatsudd if=/dev/urandom bs=768 count=32 | base64 -w0 >> $TEMPCONF 100081c6536SMasami Hiramatsuecho "\"" >> $TEMPCONF 101081c6536SMasami Hiramatsuxfail $BOOTCONF -a $TEMPCONF $INITRD 102081c6536SMasami Hiramatsu 103081c6536SMasami Hiramatsutruncate -s 32764 $TEMPCONF 104081c6536SMasami Hiramatsuecho "\"" >> $TEMPCONF # add 2 bytes + terminal ('\"\n\0') 105081c6536SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD 106081c6536SMasami Hiramatsu 1075f811c57SMasami Hiramatsuecho "Adding same-key values" 1085f811c57SMasami Hiramatsucat > $TEMPCONF << EOF 1095f811c57SMasami Hiramatsukey = bar, baz 1105f811c57SMasami Hiramatsukey += qux 1115f811c57SMasami HiramatsuEOF 1125f811c57SMasami Hiramatsuecho > $INITRD 1135f811c57SMasami Hiramatsu 1145f811c57SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD 1155f811c57SMasami Hiramatsu$BOOTCONF $INITRD > $OUTFILE 1165f811c57SMasami Hiramatsuxpass grep -q "bar" $OUTFILE 1175f811c57SMasami Hiramatsuxpass grep -q "baz" $OUTFILE 1185f811c57SMasami Hiramatsuxpass grep -q "qux" $OUTFILE 1195f811c57SMasami Hiramatsu 120*81464192SMasami Hiramatsuecho "Override same-key values" 121*81464192SMasami Hiramatsucat > $TEMPCONF << EOF 122*81464192SMasami Hiramatsukey = bar, baz 123*81464192SMasami Hiramatsukey := qux 124*81464192SMasami HiramatsuEOF 125*81464192SMasami Hiramatsuecho > $INITRD 126*81464192SMasami Hiramatsu 127*81464192SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD 128*81464192SMasami Hiramatsu$BOOTCONF $INITRD > $OUTFILE 129*81464192SMasami Hiramatsuxfail grep -q "bar" $OUTFILE 130*81464192SMasami Hiramatsuxfail grep -q "baz" $OUTFILE 131*81464192SMasami Hiramatsuxpass grep -q "qux" $OUTFILE 132*81464192SMasami Hiramatsu 1335414251aSMasami Hiramatsuecho "Double/single quotes test" 1345414251aSMasami Hiramatsuecho "key = '\"string\"';" > $TEMPCONF 1355414251aSMasami Hiramatsu$BOOTCONF -a $TEMPCONF $INITRD 1365414251aSMasami Hiramatsu$BOOTCONF $INITRD > $TEMPCONF 1375414251aSMasami Hiramatsucat $TEMPCONF 1385414251aSMasami Hiramatsuxpass grep \'\"string\"\' $TEMPCONF 1395414251aSMasami Hiramatsu 140081c6536SMasami Hiramatsuecho "=== expected failure cases ===" 141081c6536SMasami Hiramatsufor i in samples/bad-* ; do 142081c6536SMasami Hiramatsu xfail $BOOTCONF -a $i $INITRD 143081c6536SMasami Hiramatsudone 144081c6536SMasami Hiramatsu 145081c6536SMasami Hiramatsuecho "=== expected success cases ===" 146081c6536SMasami Hiramatsufor i in samples/good-* ; do 147081c6536SMasami Hiramatsu xpass $BOOTCONF -a $i $INITRD 148081c6536SMasami Hiramatsudone 149081c6536SMasami Hiramatsu 15098d0a685SMasami Hiramatsu 15198d0a685SMasami Hiramatsuecho 15298d0a685SMasami Hiramatsuecho "=== Summary ===" 15398d0a685SMasami Hiramatsuecho "# of Passed: $(expr $NO - $NG - 1)" 15498d0a685SMasami Hiramatsuecho "# of Failed: $NG" 15598d0a685SMasami Hiramatsu 156081c6536SMasami Hiramatsuecho 157081c6536SMasami Hiramatsuif [ $NG -eq 0 ]; then 158081c6536SMasami Hiramatsu echo "All tests passed" 159081c6536SMasami Hiramatsuelse 160081c6536SMasami Hiramatsu echo "$NG tests failed" 16198d0a685SMasami Hiramatsu exit 1 162081c6536SMasami Hiramatsufi 163