1#!/bin/sh 2# SPDX-License-Identifier: GPL-2.0-only 3 4echo "Boot config test script" 5 6BOOTCONF=./bootconfig 7INITRD=`mktemp initrd-XXXX` 8TEMPCONF=`mktemp temp-XXXX.bconf` 9NG=0 10 11cleanup() { 12 rm -f $INITRD $TEMPCONF $OUTFILE 13 exit $NG 14} 15 16trap cleanup EXIT TERM 17 18NO=1 19 20xpass() { # pass test command 21 echo "test case $NO ($3)... " 22 if ! ($@ && echo "\t\t[OK]"); then 23 echo "\t\t[NG]"; NG=$((NG + 1)) 24 fi 25 NO=$((NO + 1)) 26} 27 28xfail() { # fail test command 29 echo "test case $NO ($3)... " 30 if ! (! $@ && echo "\t\t[OK]"); then 31 echo "\t\t[NG]"; NG=$((NG + 1)) 32 fi 33 NO=$((NO + 1)) 34} 35 36echo "Basic command test" 37xpass $BOOTCONF $INITRD 38 39echo "Delete command should success without bootconfig" 40xpass $BOOTCONF -d $INITRD 41 42dd if=/dev/zero of=$INITRD bs=4096 count=1 43echo "key = value;" > $TEMPCONF 44bconf_size=$(stat -c %s $TEMPCONF) 45initrd_size=$(stat -c %s $INITRD) 46 47echo "Apply command test" 48xpass $BOOTCONF -a $TEMPCONF $INITRD 49new_size=$(stat -c %s $INITRD) 50 51echo "File size check" 52xpass test $new_size -eq $(expr $bconf_size + $initrd_size + 9 + 12) 53 54echo "Apply command repeat test" 55xpass $BOOTCONF -a $TEMPCONF $INITRD 56 57echo "File size check" 58xpass test $new_size -eq $(stat -c %s $INITRD) 59 60echo "Delete command check" 61xpass $BOOTCONF -d $INITRD 62 63echo "File size check" 64new_size=$(stat -c %s $INITRD) 65xpass test $new_size -eq $initrd_size 66 67echo "No error messge while applying" 68OUTFILE=`mktemp tempout-XXXX` 69dd if=/dev/zero of=$INITRD bs=4096 count=1 70printf " \0\0\0 \0\0\0" >> $INITRD 71$BOOTCONF -a $TEMPCONF $INITRD > $OUTFILE 2>&1 72xfail grep -i "failed" $OUTFILE 73xfail grep -i "error" $OUTFILE 74 75echo "Max node number check" 76 77echo -n > $TEMPCONF 78for i in `seq 1 1024` ; do 79 echo "node$i" >> $TEMPCONF 80done 81xpass $BOOTCONF -a $TEMPCONF $INITRD 82 83echo "badnode" >> $TEMPCONF 84xfail $BOOTCONF -a $TEMPCONF $INITRD 85 86echo "Max filesize check" 87 88# Max size is 32767 (including terminal byte) 89echo -n "data = \"" > $TEMPCONF 90dd if=/dev/urandom bs=768 count=32 | base64 -w0 >> $TEMPCONF 91echo "\"" >> $TEMPCONF 92xfail $BOOTCONF -a $TEMPCONF $INITRD 93 94truncate -s 32764 $TEMPCONF 95echo "\"" >> $TEMPCONF # add 2 bytes + terminal ('\"\n\0') 96xpass $BOOTCONF -a $TEMPCONF $INITRD 97 98echo "Adding same-key values" 99cat > $TEMPCONF << EOF 100key = bar, baz 101key += qux 102EOF 103echo > $INITRD 104 105xpass $BOOTCONF -a $TEMPCONF $INITRD 106$BOOTCONF $INITRD > $OUTFILE 107xpass grep -q "bar" $OUTFILE 108xpass grep -q "baz" $OUTFILE 109xpass grep -q "qux" $OUTFILE 110 111echo "=== expected failure cases ===" 112for i in samples/bad-* ; do 113 xfail $BOOTCONF -a $i $INITRD 114done 115 116echo "=== expected success cases ===" 117for i in samples/good-* ; do 118 xpass $BOOTCONF -a $i $INITRD 119done 120 121echo 122if [ $NG -eq 0 ]; then 123 echo "All tests passed" 124else 125 echo "$NG tests failed" 126fi 127