xref: /openbmc/linux/tools/bootconfig/test-bootconfig.sh (revision 081c65360bd817672d0753fdf68ab34802d7a81d)
1*081c6536SMasami Hiramatsu#!/bin/sh
2*081c6536SMasami Hiramatsu# SPDX-License-Identifier: GPL-2.0-only
3*081c6536SMasami Hiramatsu
4*081c6536SMasami Hiramatsuecho "Boot config test script"
5*081c6536SMasami Hiramatsu
6*081c6536SMasami HiramatsuBOOTCONF=./bootconfig
7*081c6536SMasami HiramatsuINITRD=`mktemp initrd-XXXX`
8*081c6536SMasami HiramatsuTEMPCONF=`mktemp temp-XXXX.bconf`
9*081c6536SMasami HiramatsuNG=0
10*081c6536SMasami Hiramatsu
11*081c6536SMasami Hiramatsucleanup() {
12*081c6536SMasami Hiramatsu  rm -f $INITRD $TEMPCONF
13*081c6536SMasami Hiramatsu  exit $NG
14*081c6536SMasami Hiramatsu}
15*081c6536SMasami Hiramatsu
16*081c6536SMasami Hiramatsutrap cleanup EXIT TERM
17*081c6536SMasami Hiramatsu
18*081c6536SMasami HiramatsuNO=1
19*081c6536SMasami Hiramatsu
20*081c6536SMasami Hiramatsuxpass() { # pass test command
21*081c6536SMasami Hiramatsu  echo "test case $NO ($3)... "
22*081c6536SMasami Hiramatsu  if ! ($@ && echo "\t\t[OK]"); then
23*081c6536SMasami Hiramatsu     echo "\t\t[NG]"; NG=$((NG + 1))
24*081c6536SMasami Hiramatsu  fi
25*081c6536SMasami Hiramatsu  NO=$((NO + 1))
26*081c6536SMasami Hiramatsu}
27*081c6536SMasami Hiramatsu
28*081c6536SMasami Hiramatsuxfail() { # fail test command
29*081c6536SMasami Hiramatsu  echo "test case $NO ($3)... "
30*081c6536SMasami Hiramatsu  if ! (! $@ && echo "\t\t[OK]"); then
31*081c6536SMasami Hiramatsu     echo "\t\t[NG]"; NG=$((NG + 1))
32*081c6536SMasami Hiramatsu  fi
33*081c6536SMasami Hiramatsu  NO=$((NO + 1))
34*081c6536SMasami Hiramatsu}
35*081c6536SMasami Hiramatsu
36*081c6536SMasami Hiramatsuecho "Basic command test"
37*081c6536SMasami Hiramatsuxpass $BOOTCONF $INITRD
38*081c6536SMasami Hiramatsu
39*081c6536SMasami Hiramatsuecho "Delete command should success without bootconfig"
40*081c6536SMasami Hiramatsuxpass $BOOTCONF -d $INITRD
41*081c6536SMasami Hiramatsu
42*081c6536SMasami Hiramatsudd if=/dev/zero of=$INITRD bs=4096 count=1
43*081c6536SMasami Hiramatsuecho "key = value;" > $TEMPCONF
44*081c6536SMasami Hiramatsubconf_size=$(stat -c %s $TEMPCONF)
45*081c6536SMasami Hiramatsuinitrd_size=$(stat -c %s $INITRD)
46*081c6536SMasami Hiramatsu
47*081c6536SMasami Hiramatsuecho "Apply command test"
48*081c6536SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD
49*081c6536SMasami Hiramatsunew_size=$(stat -c %s $INITRD)
50*081c6536SMasami Hiramatsu
51*081c6536SMasami Hiramatsuecho "File size check"
52*081c6536SMasami Hiramatsuxpass test $new_size -eq $(expr $bconf_size + $initrd_size + 9)
53*081c6536SMasami Hiramatsu
54*081c6536SMasami Hiramatsuecho "Apply command repeat test"
55*081c6536SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD
56*081c6536SMasami Hiramatsu
57*081c6536SMasami Hiramatsuecho "File size check"
58*081c6536SMasami Hiramatsuxpass test $new_size -eq $(stat -c %s $INITRD)
59*081c6536SMasami Hiramatsu
60*081c6536SMasami Hiramatsuecho "Delete command check"
61*081c6536SMasami Hiramatsuxpass $BOOTCONF -d $INITRD
62*081c6536SMasami Hiramatsu
63*081c6536SMasami Hiramatsuecho "File size check"
64*081c6536SMasami Hiramatsunew_size=$(stat -c %s $INITRD)
65*081c6536SMasami Hiramatsuxpass test $new_size -eq $initrd_size
66*081c6536SMasami Hiramatsu
67*081c6536SMasami Hiramatsuecho "Max node number check"
68*081c6536SMasami Hiramatsu
69*081c6536SMasami Hiramatsuecho -n > $TEMPCONF
70*081c6536SMasami Hiramatsufor i in `seq 1 1024` ; do
71*081c6536SMasami Hiramatsu   echo "node$i" >> $TEMPCONF
72*081c6536SMasami Hiramatsudone
73*081c6536SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD
74*081c6536SMasami Hiramatsu
75*081c6536SMasami Hiramatsuecho "badnode" >> $TEMPCONF
76*081c6536SMasami Hiramatsuxfail $BOOTCONF -a $TEMPCONF $INITRD
77*081c6536SMasami Hiramatsu
78*081c6536SMasami Hiramatsuecho "Max filesize check"
79*081c6536SMasami Hiramatsu
80*081c6536SMasami Hiramatsu# Max size is 32767 (including terminal byte)
81*081c6536SMasami Hiramatsuecho -n "data = \"" > $TEMPCONF
82*081c6536SMasami Hiramatsudd if=/dev/urandom bs=768 count=32 | base64 -w0 >> $TEMPCONF
83*081c6536SMasami Hiramatsuecho "\"" >> $TEMPCONF
84*081c6536SMasami Hiramatsuxfail $BOOTCONF -a $TEMPCONF $INITRD
85*081c6536SMasami Hiramatsu
86*081c6536SMasami Hiramatsutruncate -s 32764 $TEMPCONF
87*081c6536SMasami Hiramatsuecho "\"" >> $TEMPCONF	# add 2 bytes + terminal ('\"\n\0')
88*081c6536SMasami Hiramatsuxpass $BOOTCONF -a $TEMPCONF $INITRD
89*081c6536SMasami Hiramatsu
90*081c6536SMasami Hiramatsuecho "=== expected failure cases ==="
91*081c6536SMasami Hiramatsufor i in samples/bad-* ; do
92*081c6536SMasami Hiramatsu  xfail $BOOTCONF -a $i $INITRD
93*081c6536SMasami Hiramatsudone
94*081c6536SMasami Hiramatsu
95*081c6536SMasami Hiramatsuecho "=== expected success cases ==="
96*081c6536SMasami Hiramatsufor i in samples/good-* ; do
97*081c6536SMasami Hiramatsu  xpass $BOOTCONF -a $i $INITRD
98*081c6536SMasami Hiramatsudone
99*081c6536SMasami Hiramatsu
100*081c6536SMasami Hiramatsuecho
101*081c6536SMasami Hiramatsuif [ $NG -eq 0 ]; then
102*081c6536SMasami Hiramatsu	echo "All tests passed"
103*081c6536SMasami Hiramatsuelse
104*081c6536SMasami Hiramatsu	echo "$NG tests failed"
105*081c6536SMasami Hiramatsufi
106