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