xref: /OK3568_Linux_fs/kernel/tools/bootconfig/test-bootconfig.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/sh
2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only
3*4882a593Smuzhiyun
4*4882a593Smuzhiyunecho "Boot config test script"
5*4882a593Smuzhiyun
6*4882a593Smuzhiyunif [ -d "$1" ]; then
7*4882a593Smuzhiyun  TESTDIR=$1
8*4882a593Smuzhiyunelse
9*4882a593Smuzhiyun  TESTDIR=.
10*4882a593Smuzhiyunfi
11*4882a593SmuzhiyunBOOTCONF=${TESTDIR}/bootconfig
12*4882a593SmuzhiyunALIGN=4
13*4882a593Smuzhiyun
14*4882a593SmuzhiyunINITRD=`mktemp ${TESTDIR}/initrd-XXXX`
15*4882a593SmuzhiyunTEMPCONF=`mktemp ${TESTDIR}/temp-XXXX.bconf`
16*4882a593SmuzhiyunOUTFILE=`mktemp ${TESTDIR}/tempout-XXXX`
17*4882a593SmuzhiyunNG=0
18*4882a593Smuzhiyun
19*4882a593Smuzhiyuncleanup() {
20*4882a593Smuzhiyun  rm -f $INITRD $TEMPCONF $OUTFILE
21*4882a593Smuzhiyun  exit $NG
22*4882a593Smuzhiyun}
23*4882a593Smuzhiyun
24*4882a593Smuzhiyuntrap cleanup EXIT TERM
25*4882a593Smuzhiyun
26*4882a593SmuzhiyunNO=1
27*4882a593Smuzhiyun
28*4882a593Smuzhiyunxpass() { # pass test command
29*4882a593Smuzhiyun  echo "test case $NO ($3)... "
30*4882a593Smuzhiyun  if ! ($@ && echo "\t\t[OK]"); then
31*4882a593Smuzhiyun     echo "\t\t[NG]"; NG=$((NG + 1))
32*4882a593Smuzhiyun  fi
33*4882a593Smuzhiyun  NO=$((NO + 1))
34*4882a593Smuzhiyun}
35*4882a593Smuzhiyun
36*4882a593Smuzhiyunxfail() { # fail test command
37*4882a593Smuzhiyun  echo "test case $NO ($3)... "
38*4882a593Smuzhiyun  if ! (! $@ && echo "\t\t[OK]"); then
39*4882a593Smuzhiyun     echo "\t\t[NG]"; NG=$((NG + 1))
40*4882a593Smuzhiyun  fi
41*4882a593Smuzhiyun  NO=$((NO + 1))
42*4882a593Smuzhiyun}
43*4882a593Smuzhiyun
44*4882a593Smuzhiyunecho "Basic command test"
45*4882a593Smuzhiyunxpass $BOOTCONF $INITRD
46*4882a593Smuzhiyun
47*4882a593Smuzhiyunecho "Delete command should success without bootconfig"
48*4882a593Smuzhiyunxpass $BOOTCONF -d $INITRD
49*4882a593Smuzhiyun
50*4882a593Smuzhiyundd if=/dev/zero of=$INITRD bs=4096 count=1
51*4882a593Smuzhiyunecho "key = value;" > $TEMPCONF
52*4882a593Smuzhiyunbconf_size=$(stat -c %s $TEMPCONF)
53*4882a593Smuzhiyuninitrd_size=$(stat -c %s $INITRD)
54*4882a593Smuzhiyun
55*4882a593Smuzhiyunecho "Apply command test"
56*4882a593Smuzhiyunxpass $BOOTCONF -a $TEMPCONF $INITRD
57*4882a593Smuzhiyunnew_size=$(stat -c %s $INITRD)
58*4882a593Smuzhiyun
59*4882a593Smuzhiyunecho "Show command test"
60*4882a593Smuzhiyunxpass $BOOTCONF $INITRD
61*4882a593Smuzhiyun
62*4882a593Smuzhiyunecho "File size check"
63*4882a593Smuzhiyuntotal_size=$(expr $bconf_size + $initrd_size + 9 + 12 + $ALIGN - 1 )
64*4882a593Smuzhiyuntotal_size=$(expr $total_size / $ALIGN)
65*4882a593Smuzhiyuntotal_size=$(expr $total_size \* $ALIGN)
66*4882a593Smuzhiyunxpass test $new_size -eq $total_size
67*4882a593Smuzhiyun
68*4882a593Smuzhiyunecho "Apply command repeat test"
69*4882a593Smuzhiyunxpass $BOOTCONF -a $TEMPCONF $INITRD
70*4882a593Smuzhiyun
71*4882a593Smuzhiyunecho "File size check"
72*4882a593Smuzhiyunxpass test $new_size -eq $(stat -c %s $INITRD)
73*4882a593Smuzhiyun
74*4882a593Smuzhiyunecho "Delete command check"
75*4882a593Smuzhiyunxpass $BOOTCONF -d $INITRD
76*4882a593Smuzhiyun
77*4882a593Smuzhiyunecho "File size check"
78*4882a593Smuzhiyunnew_size=$(stat -c %s $INITRD)
79*4882a593Smuzhiyunxpass test $new_size -eq $initrd_size
80*4882a593Smuzhiyun
81*4882a593Smuzhiyunecho "No error messge while applying"
82*4882a593Smuzhiyundd if=/dev/zero of=$INITRD bs=4096 count=1
83*4882a593Smuzhiyunprintf " \0\0\0 \0\0\0" >> $INITRD
84*4882a593Smuzhiyun$BOOTCONF -a $TEMPCONF $INITRD > $OUTFILE 2>&1
85*4882a593Smuzhiyunxfail grep -i "failed" $OUTFILE
86*4882a593Smuzhiyunxfail grep -i "error" $OUTFILE
87*4882a593Smuzhiyun
88*4882a593Smuzhiyunecho "Max node number check"
89*4882a593Smuzhiyun
90*4882a593Smuzhiyunecho -n > $TEMPCONF
91*4882a593Smuzhiyunfor i in `seq 1 1024` ; do
92*4882a593Smuzhiyun   echo "node$i" >> $TEMPCONF
93*4882a593Smuzhiyundone
94*4882a593Smuzhiyunxpass $BOOTCONF -a $TEMPCONF $INITRD
95*4882a593Smuzhiyun
96*4882a593Smuzhiyunecho "badnode" >> $TEMPCONF
97*4882a593Smuzhiyunxfail $BOOTCONF -a $TEMPCONF $INITRD
98*4882a593Smuzhiyun
99*4882a593Smuzhiyunecho "Max filesize check"
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun# Max size is 32767 (including terminal byte)
102*4882a593Smuzhiyunecho -n "data = \"" > $TEMPCONF
103*4882a593Smuzhiyundd if=/dev/urandom bs=768 count=32 | base64 -w0 >> $TEMPCONF
104*4882a593Smuzhiyunecho "\"" >> $TEMPCONF
105*4882a593Smuzhiyunxfail $BOOTCONF -a $TEMPCONF $INITRD
106*4882a593Smuzhiyun
107*4882a593Smuzhiyuntruncate -s 32764 $TEMPCONF
108*4882a593Smuzhiyunecho "\"" >> $TEMPCONF	# add 2 bytes + terminal ('\"\n\0')
109*4882a593Smuzhiyunxpass $BOOTCONF -a $TEMPCONF $INITRD
110*4882a593Smuzhiyun
111*4882a593Smuzhiyunecho "Adding same-key values"
112*4882a593Smuzhiyuncat > $TEMPCONF << EOF
113*4882a593Smuzhiyunkey = bar, baz
114*4882a593Smuzhiyunkey += qux
115*4882a593SmuzhiyunEOF
116*4882a593Smuzhiyunecho > $INITRD
117*4882a593Smuzhiyun
118*4882a593Smuzhiyunxpass $BOOTCONF -a $TEMPCONF $INITRD
119*4882a593Smuzhiyun$BOOTCONF $INITRD > $OUTFILE
120*4882a593Smuzhiyunxpass grep -q "bar" $OUTFILE
121*4882a593Smuzhiyunxpass grep -q "baz" $OUTFILE
122*4882a593Smuzhiyunxpass grep -q "qux" $OUTFILE
123*4882a593Smuzhiyun
124*4882a593Smuzhiyunecho "Override same-key values"
125*4882a593Smuzhiyuncat > $TEMPCONF << EOF
126*4882a593Smuzhiyunkey = bar, baz
127*4882a593Smuzhiyunkey := qux
128*4882a593SmuzhiyunEOF
129*4882a593Smuzhiyunecho > $INITRD
130*4882a593Smuzhiyun
131*4882a593Smuzhiyunxpass $BOOTCONF -a $TEMPCONF $INITRD
132*4882a593Smuzhiyun$BOOTCONF $INITRD > $OUTFILE
133*4882a593Smuzhiyunxfail grep -q "bar" $OUTFILE
134*4882a593Smuzhiyunxfail grep -q "baz" $OUTFILE
135*4882a593Smuzhiyunxpass grep -q "qux" $OUTFILE
136*4882a593Smuzhiyun
137*4882a593Smuzhiyunecho "Double/single quotes test"
138*4882a593Smuzhiyunecho "key = '\"string\"';" > $TEMPCONF
139*4882a593Smuzhiyun$BOOTCONF -a $TEMPCONF $INITRD
140*4882a593Smuzhiyun$BOOTCONF $INITRD > $TEMPCONF
141*4882a593Smuzhiyuncat $TEMPCONF
142*4882a593Smuzhiyunxpass grep \'\"string\"\' $TEMPCONF
143*4882a593Smuzhiyun
144*4882a593Smuzhiyunecho "Repeat same-key tree"
145*4882a593Smuzhiyuncat > $TEMPCONF << EOF
146*4882a593Smuzhiyunfoo
147*4882a593Smuzhiyunbar
148*4882a593Smuzhiyunfoo { buz }
149*4882a593SmuzhiyunEOF
150*4882a593Smuzhiyunecho > $INITRD
151*4882a593Smuzhiyun
152*4882a593Smuzhiyunxpass $BOOTCONF -a $TEMPCONF $INITRD
153*4882a593Smuzhiyun$BOOTCONF $INITRD > $OUTFILE
154*4882a593Smuzhiyunxpass grep -q "bar" $OUTFILE
155*4882a593Smuzhiyun
156*4882a593Smuzhiyun
157*4882a593Smuzhiyunecho "Remove/keep tailing spaces"
158*4882a593Smuzhiyuncat > $TEMPCONF << EOF
159*4882a593Smuzhiyunfoo = val     # comment
160*4882a593Smuzhiyunbar = "val2 " # comment
161*4882a593SmuzhiyunEOF
162*4882a593Smuzhiyunecho > $INITRD
163*4882a593Smuzhiyun
164*4882a593Smuzhiyunxpass $BOOTCONF -a $TEMPCONF $INITRD
165*4882a593Smuzhiyun$BOOTCONF $INITRD > $OUTFILE
166*4882a593Smuzhiyunxfail grep -q val[[:space:]] $OUTFILE
167*4882a593Smuzhiyunxpass grep -q val2[[:space:]] $OUTFILE
168*4882a593Smuzhiyun
169*4882a593Smuzhiyunecho "=== expected failure cases ==="
170*4882a593Smuzhiyunfor i in samples/bad-* ; do
171*4882a593Smuzhiyun  xfail $BOOTCONF -a $i $INITRD
172*4882a593Smuzhiyundone
173*4882a593Smuzhiyun
174*4882a593Smuzhiyunecho "=== expected success cases ==="
175*4882a593Smuzhiyunfor i in samples/good-* ; do
176*4882a593Smuzhiyun  xpass $BOOTCONF -a $i $INITRD
177*4882a593Smuzhiyundone
178*4882a593Smuzhiyun
179*4882a593Smuzhiyun
180*4882a593Smuzhiyunecho
181*4882a593Smuzhiyunecho "=== Summary ==="
182*4882a593Smuzhiyunecho "# of Passed: $(expr $NO - $NG - 1)"
183*4882a593Smuzhiyunecho "# of Failed: $NG"
184*4882a593Smuzhiyun
185*4882a593Smuzhiyunecho
186*4882a593Smuzhiyunif [ $NG -eq 0 ]; then
187*4882a593Smuzhiyun	echo "All tests passed"
188*4882a593Smuzhiyunelse
189*4882a593Smuzhiyun	echo "$NG tests failed"
190*4882a593Smuzhiyun	exit 1
191*4882a593Smuzhiyunfi
192