xref: /openbmc/linux/tools/bootconfig/test-bootconfig.sh (revision 2f5fb555637eff4a3e5579f2323cd358c77efdc8)
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
12081464192SMasami Hiramatsuecho "Override same-key values"
12181464192SMasami Hiramatsucat > $TEMPCONF << EOF
12281464192SMasami Hiramatsukey = bar, baz
12381464192SMasami Hiramatsukey := qux
12481464192SMasami HiramatsuEOF
12581464192SMasami Hiramatsuecho > $INITRD
12681464192SMasami Hiramatsu
12781464192SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD
12881464192SMasami Hiramatsu$BOOTCONF $INITRD > $OUTFILE
12981464192SMasami Hiramatsuxfail grep -q "bar" $OUTFILE
13081464192SMasami Hiramatsuxfail grep -q "baz" $OUTFILE
13181464192SMasami Hiramatsuxpass grep -q "qux" $OUTFILE
13281464192SMasami 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
1401d210c16SMasami Hiramatsuecho "Repeat same-key tree"
1411d210c16SMasami Hiramatsucat > $TEMPCONF << EOF
1421d210c16SMasami Hiramatsufoo
1431d210c16SMasami Hiramatsubar
1441d210c16SMasami Hiramatsufoo { buz }
1451d210c16SMasami HiramatsuEOF
1461d210c16SMasami Hiramatsuecho > $INITRD
1471d210c16SMasami Hiramatsu
1481d210c16SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD
1491d210c16SMasami Hiramatsu$BOOTCONF $INITRD > $OUTFILE
1501d210c16SMasami Hiramatsuxpass grep -q "bar" $OUTFILE
1511d210c16SMasami Hiramatsu
152*2f5fb555SMasami Hiramatsu
153*2f5fb555SMasami Hiramatsuecho "Remove/keep tailing spaces"
154*2f5fb555SMasami Hiramatsucat > $TEMPCONF << EOF
155*2f5fb555SMasami Hiramatsufoo = val     # comment
156*2f5fb555SMasami Hiramatsubar = "val2 " # comment
157*2f5fb555SMasami HiramatsuEOF
158*2f5fb555SMasami Hiramatsuecho > $INITRD
159*2f5fb555SMasami Hiramatsu
160*2f5fb555SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD
161*2f5fb555SMasami Hiramatsu$BOOTCONF $INITRD > $OUTFILE
162*2f5fb555SMasami Hiramatsuxfail grep -q val[[:space:]] $OUTFILE
163*2f5fb555SMasami Hiramatsuxpass grep -q val2[[:space:]] $OUTFILE
164*2f5fb555SMasami Hiramatsu
165081c6536SMasami Hiramatsuecho "=== expected failure cases ==="
166081c6536SMasami Hiramatsufor i in samples/bad-* ; do
167081c6536SMasami Hiramatsu  xfail $BOOTCONF -a $i $INITRD
168081c6536SMasami Hiramatsudone
169081c6536SMasami Hiramatsu
170081c6536SMasami Hiramatsuecho "=== expected success cases ==="
171081c6536SMasami Hiramatsufor i in samples/good-* ; do
172081c6536SMasami Hiramatsu  xpass $BOOTCONF -a $i $INITRD
173081c6536SMasami Hiramatsudone
174081c6536SMasami Hiramatsu
17598d0a685SMasami Hiramatsu
17698d0a685SMasami Hiramatsuecho
17798d0a685SMasami Hiramatsuecho "=== Summary ==="
17898d0a685SMasami Hiramatsuecho "# of Passed: $(expr $NO - $NG - 1)"
17998d0a685SMasami Hiramatsuecho "# of Failed: $NG"
18098d0a685SMasami Hiramatsu
181081c6536SMasami Hiramatsuecho
182081c6536SMasami Hiramatsuif [ $NG -eq 0 ]; then
183081c6536SMasami Hiramatsu	echo "All tests passed"
184081c6536SMasami Hiramatsuelse
185081c6536SMasami Hiramatsu	echo "$NG tests failed"
18698d0a685SMasami Hiramatsu	exit 1
187081c6536SMasami Hiramatsufi
188