xref: /openbmc/linux/tools/bootconfig/test-bootconfig.sh (revision 98d0a685cf8bcde23f4b0d1aa0a348fcef84569b)
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
58081c6536SMasami Hiramatsuecho "File size check"
5985c46b78SMasami Hiramatsuxpass test $new_size -eq $(expr $bconf_size + $initrd_size + 9 + 12)
60081c6536SMasami Hiramatsu
61081c6536SMasami Hiramatsuecho "Apply command repeat test"
62081c6536SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD
63081c6536SMasami Hiramatsu
64081c6536SMasami Hiramatsuecho "File size check"
65081c6536SMasami Hiramatsuxpass test $new_size -eq $(stat -c %s $INITRD)
66081c6536SMasami Hiramatsu
67081c6536SMasami Hiramatsuecho "Delete command check"
68081c6536SMasami Hiramatsuxpass $BOOTCONF -d $INITRD
69081c6536SMasami Hiramatsu
70081c6536SMasami Hiramatsuecho "File size check"
71081c6536SMasami Hiramatsunew_size=$(stat -c %s $INITRD)
72081c6536SMasami Hiramatsuxpass test $new_size -eq $initrd_size
73081c6536SMasami Hiramatsu
7497378001SMasami Hiramatsuecho "No error messge while applying"
7597378001SMasami Hiramatsudd if=/dev/zero of=$INITRD bs=4096 count=1
7697378001SMasami Hiramatsuprintf " \0\0\0 \0\0\0" >> $INITRD
7797378001SMasami Hiramatsu$BOOTCONF -a $TEMPCONF $INITRD > $OUTFILE 2>&1
7897378001SMasami Hiramatsuxfail grep -i "failed" $OUTFILE
7997378001SMasami Hiramatsuxfail grep -i "error" $OUTFILE
8097378001SMasami Hiramatsu
81081c6536SMasami Hiramatsuecho "Max node number check"
82081c6536SMasami Hiramatsu
83081c6536SMasami Hiramatsuecho -n > $TEMPCONF
84081c6536SMasami Hiramatsufor i in `seq 1 1024` ; do
85081c6536SMasami Hiramatsu   echo "node$i" >> $TEMPCONF
86081c6536SMasami Hiramatsudone
87081c6536SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD
88081c6536SMasami Hiramatsu
89081c6536SMasami Hiramatsuecho "badnode" >> $TEMPCONF
90081c6536SMasami Hiramatsuxfail $BOOTCONF -a $TEMPCONF $INITRD
91081c6536SMasami Hiramatsu
92081c6536SMasami Hiramatsuecho "Max filesize check"
93081c6536SMasami Hiramatsu
94081c6536SMasami Hiramatsu# Max size is 32767 (including terminal byte)
95081c6536SMasami Hiramatsuecho -n "data = \"" > $TEMPCONF
96081c6536SMasami Hiramatsudd if=/dev/urandom bs=768 count=32 | base64 -w0 >> $TEMPCONF
97081c6536SMasami Hiramatsuecho "\"" >> $TEMPCONF
98081c6536SMasami Hiramatsuxfail $BOOTCONF -a $TEMPCONF $INITRD
99081c6536SMasami Hiramatsu
100081c6536SMasami Hiramatsutruncate -s 32764 $TEMPCONF
101081c6536SMasami Hiramatsuecho "\"" >> $TEMPCONF	# add 2 bytes + terminal ('\"\n\0')
102081c6536SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD
103081c6536SMasami Hiramatsu
1045f811c57SMasami Hiramatsuecho "Adding same-key values"
1055f811c57SMasami Hiramatsucat > $TEMPCONF << EOF
1065f811c57SMasami Hiramatsukey = bar, baz
1075f811c57SMasami Hiramatsukey += qux
1085f811c57SMasami HiramatsuEOF
1095f811c57SMasami Hiramatsuecho > $INITRD
1105f811c57SMasami Hiramatsu
1115f811c57SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD
1125f811c57SMasami Hiramatsu$BOOTCONF $INITRD > $OUTFILE
1135f811c57SMasami Hiramatsuxpass grep -q "bar" $OUTFILE
1145f811c57SMasami Hiramatsuxpass grep -q "baz" $OUTFILE
1155f811c57SMasami Hiramatsuxpass grep -q "qux" $OUTFILE
1165f811c57SMasami Hiramatsu
117081c6536SMasami Hiramatsuecho "=== expected failure cases ==="
118081c6536SMasami Hiramatsufor i in samples/bad-* ; do
119081c6536SMasami Hiramatsu  xfail $BOOTCONF -a $i $INITRD
120081c6536SMasami Hiramatsudone
121081c6536SMasami Hiramatsu
122081c6536SMasami Hiramatsuecho "=== expected success cases ==="
123081c6536SMasami Hiramatsufor i in samples/good-* ; do
124081c6536SMasami Hiramatsu  xpass $BOOTCONF -a $i $INITRD
125081c6536SMasami Hiramatsudone
126081c6536SMasami Hiramatsu
127*98d0a685SMasami Hiramatsu
128*98d0a685SMasami Hiramatsuecho
129*98d0a685SMasami Hiramatsuecho "=== Summary ==="
130*98d0a685SMasami Hiramatsuecho "# of Passed: $(expr $NO - $NG - 1)"
131*98d0a685SMasami Hiramatsuecho "# of Failed: $NG"
132*98d0a685SMasami Hiramatsu
133081c6536SMasami Hiramatsuecho
134081c6536SMasami Hiramatsuif [ $NG -eq 0 ]; then
135081c6536SMasami Hiramatsu	echo "All tests passed"
136081c6536SMasami Hiramatsuelse
137081c6536SMasami Hiramatsu	echo "$NG tests failed"
138*98d0a685SMasami Hiramatsu	exit 1
139081c6536SMasami Hiramatsufi
140