1*4882a593Smuzhiyun#!/bin/sh 2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only 3*4882a593Smuzhiyun 4*4882a593Smuzhiyunecho "Boot config test script" 5*4882a593Smuzhiyun 6*4882a593Smuzhiyunif [ -d "$1" ]; then 7*4882a593Smuzhiyun TESTDIR=$1 8*4882a593Smuzhiyunelse 9*4882a593Smuzhiyun TESTDIR=. 10*4882a593Smuzhiyunfi 11*4882a593SmuzhiyunBOOTCONF=${TESTDIR}/bootconfig 12*4882a593SmuzhiyunALIGN=4 13*4882a593Smuzhiyun 14*4882a593SmuzhiyunINITRD=`mktemp ${TESTDIR}/initrd-XXXX` 15*4882a593SmuzhiyunTEMPCONF=`mktemp ${TESTDIR}/temp-XXXX.bconf` 16*4882a593SmuzhiyunOUTFILE=`mktemp ${TESTDIR}/tempout-XXXX` 17*4882a593SmuzhiyunNG=0 18*4882a593Smuzhiyun 19*4882a593Smuzhiyuncleanup() { 20*4882a593Smuzhiyun rm -f $INITRD $TEMPCONF $OUTFILE 21*4882a593Smuzhiyun exit $NG 22*4882a593Smuzhiyun} 23*4882a593Smuzhiyun 24*4882a593Smuzhiyuntrap cleanup EXIT TERM 25*4882a593Smuzhiyun 26*4882a593SmuzhiyunNO=1 27*4882a593Smuzhiyun 28*4882a593Smuzhiyunxpass() { # pass test command 29*4882a593Smuzhiyun echo "test case $NO ($3)... " 30*4882a593Smuzhiyun if ! ($@ && echo "\t\t[OK]"); then 31*4882a593Smuzhiyun echo "\t\t[NG]"; NG=$((NG + 1)) 32*4882a593Smuzhiyun fi 33*4882a593Smuzhiyun NO=$((NO + 1)) 34*4882a593Smuzhiyun} 35*4882a593Smuzhiyun 36*4882a593Smuzhiyunxfail() { # fail test command 37*4882a593Smuzhiyun echo "test case $NO ($3)... " 38*4882a593Smuzhiyun if ! (! $@ && echo "\t\t[OK]"); then 39*4882a593Smuzhiyun echo "\t\t[NG]"; NG=$((NG + 1)) 40*4882a593Smuzhiyun fi 41*4882a593Smuzhiyun NO=$((NO + 1)) 42*4882a593Smuzhiyun} 43*4882a593Smuzhiyun 44*4882a593Smuzhiyunecho "Basic command test" 45*4882a593Smuzhiyunxpass $BOOTCONF $INITRD 46*4882a593Smuzhiyun 47*4882a593Smuzhiyunecho "Delete command should success without bootconfig" 48*4882a593Smuzhiyunxpass $BOOTCONF -d $INITRD 49*4882a593Smuzhiyun 50*4882a593Smuzhiyundd if=/dev/zero of=$INITRD bs=4096 count=1 51*4882a593Smuzhiyunecho "key = value;" > $TEMPCONF 52*4882a593Smuzhiyunbconf_size=$(stat -c %s $TEMPCONF) 53*4882a593Smuzhiyuninitrd_size=$(stat -c %s $INITRD) 54*4882a593Smuzhiyun 55*4882a593Smuzhiyunecho "Apply command test" 56*4882a593Smuzhiyunxpass $BOOTCONF -a $TEMPCONF $INITRD 57*4882a593Smuzhiyunnew_size=$(stat -c %s $INITRD) 58*4882a593Smuzhiyun 59*4882a593Smuzhiyunecho "Show command test" 60*4882a593Smuzhiyunxpass $BOOTCONF $INITRD 61*4882a593Smuzhiyun 62*4882a593Smuzhiyunecho "File size check" 63*4882a593Smuzhiyuntotal_size=$(expr $bconf_size + $initrd_size + 9 + 12 + $ALIGN - 1 ) 64*4882a593Smuzhiyuntotal_size=$(expr $total_size / $ALIGN) 65*4882a593Smuzhiyuntotal_size=$(expr $total_size \* $ALIGN) 66*4882a593Smuzhiyunxpass test $new_size -eq $total_size 67*4882a593Smuzhiyun 68*4882a593Smuzhiyunecho "Apply command repeat test" 69*4882a593Smuzhiyunxpass $BOOTCONF -a $TEMPCONF $INITRD 70*4882a593Smuzhiyun 71*4882a593Smuzhiyunecho "File size check" 72*4882a593Smuzhiyunxpass test $new_size -eq $(stat -c %s $INITRD) 73*4882a593Smuzhiyun 74*4882a593Smuzhiyunecho "Delete command check" 75*4882a593Smuzhiyunxpass $BOOTCONF -d $INITRD 76*4882a593Smuzhiyun 77*4882a593Smuzhiyunecho "File size check" 78*4882a593Smuzhiyunnew_size=$(stat -c %s $INITRD) 79*4882a593Smuzhiyunxpass test $new_size -eq $initrd_size 80*4882a593Smuzhiyun 81*4882a593Smuzhiyunecho "No error messge while applying" 82*4882a593Smuzhiyundd if=/dev/zero of=$INITRD bs=4096 count=1 83*4882a593Smuzhiyunprintf " \0\0\0 \0\0\0" >> $INITRD 84*4882a593Smuzhiyun$BOOTCONF -a $TEMPCONF $INITRD > $OUTFILE 2>&1 85*4882a593Smuzhiyunxfail grep -i "failed" $OUTFILE 86*4882a593Smuzhiyunxfail grep -i "error" $OUTFILE 87*4882a593Smuzhiyun 88*4882a593Smuzhiyunecho "Max node number check" 89*4882a593Smuzhiyun 90*4882a593Smuzhiyunecho -n > $TEMPCONF 91*4882a593Smuzhiyunfor i in `seq 1 1024` ; do 92*4882a593Smuzhiyun echo "node$i" >> $TEMPCONF 93*4882a593Smuzhiyundone 94*4882a593Smuzhiyunxpass $BOOTCONF -a $TEMPCONF $INITRD 95*4882a593Smuzhiyun 96*4882a593Smuzhiyunecho "badnode" >> $TEMPCONF 97*4882a593Smuzhiyunxfail $BOOTCONF -a $TEMPCONF $INITRD 98*4882a593Smuzhiyun 99*4882a593Smuzhiyunecho "Max filesize check" 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun# Max size is 32767 (including terminal byte) 102*4882a593Smuzhiyunecho -n "data = \"" > $TEMPCONF 103*4882a593Smuzhiyundd if=/dev/urandom bs=768 count=32 | base64 -w0 >> $TEMPCONF 104*4882a593Smuzhiyunecho "\"" >> $TEMPCONF 105*4882a593Smuzhiyunxfail $BOOTCONF -a $TEMPCONF $INITRD 106*4882a593Smuzhiyun 107*4882a593Smuzhiyuntruncate -s 32764 $TEMPCONF 108*4882a593Smuzhiyunecho "\"" >> $TEMPCONF # add 2 bytes + terminal ('\"\n\0') 109*4882a593Smuzhiyunxpass $BOOTCONF -a $TEMPCONF $INITRD 110*4882a593Smuzhiyun 111*4882a593Smuzhiyunecho "Adding same-key values" 112*4882a593Smuzhiyuncat > $TEMPCONF << EOF 113*4882a593Smuzhiyunkey = bar, baz 114*4882a593Smuzhiyunkey += qux 115*4882a593SmuzhiyunEOF 116*4882a593Smuzhiyunecho > $INITRD 117*4882a593Smuzhiyun 118*4882a593Smuzhiyunxpass $BOOTCONF -a $TEMPCONF $INITRD 119*4882a593Smuzhiyun$BOOTCONF $INITRD > $OUTFILE 120*4882a593Smuzhiyunxpass grep -q "bar" $OUTFILE 121*4882a593Smuzhiyunxpass grep -q "baz" $OUTFILE 122*4882a593Smuzhiyunxpass grep -q "qux" $OUTFILE 123*4882a593Smuzhiyun 124*4882a593Smuzhiyunecho "Override same-key values" 125*4882a593Smuzhiyuncat > $TEMPCONF << EOF 126*4882a593Smuzhiyunkey = bar, baz 127*4882a593Smuzhiyunkey := qux 128*4882a593SmuzhiyunEOF 129*4882a593Smuzhiyunecho > $INITRD 130*4882a593Smuzhiyun 131*4882a593Smuzhiyunxpass $BOOTCONF -a $TEMPCONF $INITRD 132*4882a593Smuzhiyun$BOOTCONF $INITRD > $OUTFILE 133*4882a593Smuzhiyunxfail grep -q "bar" $OUTFILE 134*4882a593Smuzhiyunxfail grep -q "baz" $OUTFILE 135*4882a593Smuzhiyunxpass grep -q "qux" $OUTFILE 136*4882a593Smuzhiyun 137*4882a593Smuzhiyunecho "Double/single quotes test" 138*4882a593Smuzhiyunecho "key = '\"string\"';" > $TEMPCONF 139*4882a593Smuzhiyun$BOOTCONF -a $TEMPCONF $INITRD 140*4882a593Smuzhiyun$BOOTCONF $INITRD > $TEMPCONF 141*4882a593Smuzhiyuncat $TEMPCONF 142*4882a593Smuzhiyunxpass grep \'\"string\"\' $TEMPCONF 143*4882a593Smuzhiyun 144*4882a593Smuzhiyunecho "Repeat same-key tree" 145*4882a593Smuzhiyuncat > $TEMPCONF << EOF 146*4882a593Smuzhiyunfoo 147*4882a593Smuzhiyunbar 148*4882a593Smuzhiyunfoo { buz } 149*4882a593SmuzhiyunEOF 150*4882a593Smuzhiyunecho > $INITRD 151*4882a593Smuzhiyun 152*4882a593Smuzhiyunxpass $BOOTCONF -a $TEMPCONF $INITRD 153*4882a593Smuzhiyun$BOOTCONF $INITRD > $OUTFILE 154*4882a593Smuzhiyunxpass grep -q "bar" $OUTFILE 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun 157*4882a593Smuzhiyunecho "Remove/keep tailing spaces" 158*4882a593Smuzhiyuncat > $TEMPCONF << EOF 159*4882a593Smuzhiyunfoo = val # comment 160*4882a593Smuzhiyunbar = "val2 " # comment 161*4882a593SmuzhiyunEOF 162*4882a593Smuzhiyunecho > $INITRD 163*4882a593Smuzhiyun 164*4882a593Smuzhiyunxpass $BOOTCONF -a $TEMPCONF $INITRD 165*4882a593Smuzhiyun$BOOTCONF $INITRD > $OUTFILE 166*4882a593Smuzhiyunxfail grep -q val[[:space:]] $OUTFILE 167*4882a593Smuzhiyunxpass grep -q val2[[:space:]] $OUTFILE 168*4882a593Smuzhiyun 169*4882a593Smuzhiyunecho "=== expected failure cases ===" 170*4882a593Smuzhiyunfor i in samples/bad-* ; do 171*4882a593Smuzhiyun xfail $BOOTCONF -a $i $INITRD 172*4882a593Smuzhiyundone 173*4882a593Smuzhiyun 174*4882a593Smuzhiyunecho "=== expected success cases ===" 175*4882a593Smuzhiyunfor i in samples/good-* ; do 176*4882a593Smuzhiyun xpass $BOOTCONF -a $i $INITRD 177*4882a593Smuzhiyundone 178*4882a593Smuzhiyun 179*4882a593Smuzhiyun 180*4882a593Smuzhiyunecho 181*4882a593Smuzhiyunecho "=== Summary ===" 182*4882a593Smuzhiyunecho "# of Passed: $(expr $NO - $NG - 1)" 183*4882a593Smuzhiyunecho "# of Failed: $NG" 184*4882a593Smuzhiyun 185*4882a593Smuzhiyunecho 186*4882a593Smuzhiyunif [ $NG -eq 0 ]; then 187*4882a593Smuzhiyun echo "All tests passed" 188*4882a593Smuzhiyunelse 189*4882a593Smuzhiyun echo "$NG tests failed" 190*4882a593Smuzhiyun exit 1 191*4882a593Smuzhiyunfi 192