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