xref: /openbmc/linux/tools/bootconfig/test-bootconfig.sh (revision 1d210c166b693c3a659abbac4b58385c2d4cf887)
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
140*1d210c16SMasami Hiramatsuecho "Repeat same-key tree"
141*1d210c16SMasami Hiramatsucat > $TEMPCONF << EOF
142*1d210c16SMasami Hiramatsufoo
143*1d210c16SMasami Hiramatsubar
144*1d210c16SMasami Hiramatsufoo { buz }
145*1d210c16SMasami HiramatsuEOF
146*1d210c16SMasami Hiramatsuecho > $INITRD
147*1d210c16SMasami Hiramatsu
148*1d210c16SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD
149*1d210c16SMasami Hiramatsu$BOOTCONF $INITRD > $OUTFILE
150*1d210c16SMasami Hiramatsuxpass grep -q "bar" $OUTFILE
151*1d210c16SMasami Hiramatsu
152081c6536SMasami Hiramatsuecho "=== expected failure cases ==="
153081c6536SMasami Hiramatsufor i in samples/bad-* ; do
154081c6536SMasami Hiramatsu  xfail $BOOTCONF -a $i $INITRD
155081c6536SMasami Hiramatsudone
156081c6536SMasami Hiramatsu
157081c6536SMasami Hiramatsuecho "=== expected success cases ==="
158081c6536SMasami Hiramatsufor i in samples/good-* ; do
159081c6536SMasami Hiramatsu  xpass $BOOTCONF -a $i $INITRD
160081c6536SMasami Hiramatsudone
161081c6536SMasami Hiramatsu
16298d0a685SMasami Hiramatsu
16398d0a685SMasami Hiramatsuecho
16498d0a685SMasami Hiramatsuecho "=== Summary ==="
16598d0a685SMasami Hiramatsuecho "# of Passed: $(expr $NO - $NG - 1)"
16698d0a685SMasami Hiramatsuecho "# of Failed: $NG"
16798d0a685SMasami Hiramatsu
168081c6536SMasami Hiramatsuecho
169081c6536SMasami Hiramatsuif [ $NG -eq 0 ]; then
170081c6536SMasami Hiramatsu	echo "All tests passed"
171081c6536SMasami Hiramatsuelse
172081c6536SMasami Hiramatsu	echo "$NG tests failed"
17398d0a685SMasami Hiramatsu	exit 1
174081c6536SMasami Hiramatsufi
175