xref: /openbmc/linux/tools/bootconfig/test-bootconfig.sh (revision 5f811c57c99205e048926293bb812c750a6ea562)
1081c6536SMasami Hiramatsu#!/bin/sh
2081c6536SMasami Hiramatsu# SPDX-License-Identifier: GPL-2.0-only
3081c6536SMasami Hiramatsu
4081c6536SMasami Hiramatsuecho "Boot config test script"
5081c6536SMasami Hiramatsu
6081c6536SMasami HiramatsuBOOTCONF=./bootconfig
7081c6536SMasami HiramatsuINITRD=`mktemp initrd-XXXX`
8081c6536SMasami HiramatsuTEMPCONF=`mktemp temp-XXXX.bconf`
9081c6536SMasami HiramatsuNG=0
10081c6536SMasami Hiramatsu
11081c6536SMasami Hiramatsucleanup() {
12*5f811c57SMasami Hiramatsu  rm -f $INITRD $TEMPCONF $OUTFILE
13081c6536SMasami Hiramatsu  exit $NG
14081c6536SMasami Hiramatsu}
15081c6536SMasami Hiramatsu
16081c6536SMasami Hiramatsutrap cleanup EXIT TERM
17081c6536SMasami Hiramatsu
18081c6536SMasami HiramatsuNO=1
19081c6536SMasami Hiramatsu
20081c6536SMasami Hiramatsuxpass() { # pass test command
21081c6536SMasami Hiramatsu  echo "test case $NO ($3)... "
22081c6536SMasami Hiramatsu  if ! ($@ && echo "\t\t[OK]"); then
23081c6536SMasami Hiramatsu     echo "\t\t[NG]"; NG=$((NG + 1))
24081c6536SMasami Hiramatsu  fi
25081c6536SMasami Hiramatsu  NO=$((NO + 1))
26081c6536SMasami Hiramatsu}
27081c6536SMasami Hiramatsu
28081c6536SMasami Hiramatsuxfail() { # fail test command
29081c6536SMasami Hiramatsu  echo "test case $NO ($3)... "
30081c6536SMasami Hiramatsu  if ! (! $@ && echo "\t\t[OK]"); then
31081c6536SMasami Hiramatsu     echo "\t\t[NG]"; NG=$((NG + 1))
32081c6536SMasami Hiramatsu  fi
33081c6536SMasami Hiramatsu  NO=$((NO + 1))
34081c6536SMasami Hiramatsu}
35081c6536SMasami Hiramatsu
36081c6536SMasami Hiramatsuecho "Basic command test"
37081c6536SMasami Hiramatsuxpass $BOOTCONF $INITRD
38081c6536SMasami Hiramatsu
39081c6536SMasami Hiramatsuecho "Delete command should success without bootconfig"
40081c6536SMasami Hiramatsuxpass $BOOTCONF -d $INITRD
41081c6536SMasami Hiramatsu
42081c6536SMasami Hiramatsudd if=/dev/zero of=$INITRD bs=4096 count=1
43081c6536SMasami Hiramatsuecho "key = value;" > $TEMPCONF
44081c6536SMasami Hiramatsubconf_size=$(stat -c %s $TEMPCONF)
45081c6536SMasami Hiramatsuinitrd_size=$(stat -c %s $INITRD)
46081c6536SMasami Hiramatsu
47081c6536SMasami Hiramatsuecho "Apply command test"
48081c6536SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD
49081c6536SMasami Hiramatsunew_size=$(stat -c %s $INITRD)
50081c6536SMasami Hiramatsu
51081c6536SMasami Hiramatsuecho "File size check"
5285c46b78SMasami Hiramatsuxpass test $new_size -eq $(expr $bconf_size + $initrd_size + 9 + 12)
53081c6536SMasami Hiramatsu
54081c6536SMasami Hiramatsuecho "Apply command repeat test"
55081c6536SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD
56081c6536SMasami Hiramatsu
57081c6536SMasami Hiramatsuecho "File size check"
58081c6536SMasami Hiramatsuxpass test $new_size -eq $(stat -c %s $INITRD)
59081c6536SMasami Hiramatsu
60081c6536SMasami Hiramatsuecho "Delete command check"
61081c6536SMasami Hiramatsuxpass $BOOTCONF -d $INITRD
62081c6536SMasami Hiramatsu
63081c6536SMasami Hiramatsuecho "File size check"
64081c6536SMasami Hiramatsunew_size=$(stat -c %s $INITRD)
65081c6536SMasami Hiramatsuxpass test $new_size -eq $initrd_size
66081c6536SMasami Hiramatsu
6797378001SMasami Hiramatsuecho "No error messge while applying"
6897378001SMasami HiramatsuOUTFILE=`mktemp tempout-XXXX`
6997378001SMasami Hiramatsudd if=/dev/zero of=$INITRD bs=4096 count=1
7097378001SMasami Hiramatsuprintf " \0\0\0 \0\0\0" >> $INITRD
7197378001SMasami Hiramatsu$BOOTCONF -a $TEMPCONF $INITRD > $OUTFILE 2>&1
7297378001SMasami Hiramatsuxfail grep -i "failed" $OUTFILE
7397378001SMasami Hiramatsuxfail grep -i "error" $OUTFILE
7497378001SMasami Hiramatsu
75081c6536SMasami Hiramatsuecho "Max node number check"
76081c6536SMasami Hiramatsu
77081c6536SMasami Hiramatsuecho -n > $TEMPCONF
78081c6536SMasami Hiramatsufor i in `seq 1 1024` ; do
79081c6536SMasami Hiramatsu   echo "node$i" >> $TEMPCONF
80081c6536SMasami Hiramatsudone
81081c6536SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD
82081c6536SMasami Hiramatsu
83081c6536SMasami Hiramatsuecho "badnode" >> $TEMPCONF
84081c6536SMasami Hiramatsuxfail $BOOTCONF -a $TEMPCONF $INITRD
85081c6536SMasami Hiramatsu
86081c6536SMasami Hiramatsuecho "Max filesize check"
87081c6536SMasami Hiramatsu
88081c6536SMasami Hiramatsu# Max size is 32767 (including terminal byte)
89081c6536SMasami Hiramatsuecho -n "data = \"" > $TEMPCONF
90081c6536SMasami Hiramatsudd if=/dev/urandom bs=768 count=32 | base64 -w0 >> $TEMPCONF
91081c6536SMasami Hiramatsuecho "\"" >> $TEMPCONF
92081c6536SMasami Hiramatsuxfail $BOOTCONF -a $TEMPCONF $INITRD
93081c6536SMasami Hiramatsu
94081c6536SMasami Hiramatsutruncate -s 32764 $TEMPCONF
95081c6536SMasami Hiramatsuecho "\"" >> $TEMPCONF	# add 2 bytes + terminal ('\"\n\0')
96081c6536SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD
97081c6536SMasami Hiramatsu
98*5f811c57SMasami Hiramatsuecho "Adding same-key values"
99*5f811c57SMasami Hiramatsucat > $TEMPCONF << EOF
100*5f811c57SMasami Hiramatsukey = bar, baz
101*5f811c57SMasami Hiramatsukey += qux
102*5f811c57SMasami HiramatsuEOF
103*5f811c57SMasami Hiramatsuecho > $INITRD
104*5f811c57SMasami Hiramatsu
105*5f811c57SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD
106*5f811c57SMasami Hiramatsu$BOOTCONF $INITRD > $OUTFILE
107*5f811c57SMasami Hiramatsuxpass grep -q "bar" $OUTFILE
108*5f811c57SMasami Hiramatsuxpass grep -q "baz" $OUTFILE
109*5f811c57SMasami Hiramatsuxpass grep -q "qux" $OUTFILE
110*5f811c57SMasami Hiramatsu
111081c6536SMasami Hiramatsuecho "=== expected failure cases ==="
112081c6536SMasami Hiramatsufor i in samples/bad-* ; do
113081c6536SMasami Hiramatsu  xfail $BOOTCONF -a $i $INITRD
114081c6536SMasami Hiramatsudone
115081c6536SMasami Hiramatsu
116081c6536SMasami Hiramatsuecho "=== expected success cases ==="
117081c6536SMasami Hiramatsufor i in samples/good-* ; do
118081c6536SMasami Hiramatsu  xpass $BOOTCONF -a $i $INITRD
119081c6536SMasami Hiramatsudone
120081c6536SMasami Hiramatsu
121081c6536SMasami Hiramatsuecho
122081c6536SMasami Hiramatsuif [ $NG -eq 0 ]; then
123081c6536SMasami Hiramatsu	echo "All tests passed"
124081c6536SMasami Hiramatsuelse
125081c6536SMasami Hiramatsu	echo "$NG tests failed"
126081c6536SMasami Hiramatsufi
127