Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/tools/bootconfig/test-bootconfig.sh
26298 views
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 ! ($@ && printf "\t\t[OK]\n"); then
31
printf "\t\t[NG]\n"; NG=$((NG + 1))
32
fi
33
NO=$((NO + 1))
34
}
35
36
xfail() { # fail test command
37
echo "test case $NO ($*)... "
38
if ! (! $@ && printf "\t\t[OK]\n"); then
39
printf "\t\t[NG]\n"; 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
printf "key = value;" > $TEMPCONF
52
bconf_size=$(wc -c < $TEMPCONF)
53
initrd_size=$(wc -c < $INITRD)
54
55
echo "Apply command test"
56
xpass $BOOTCONF -a $TEMPCONF $INITRD
57
new_size=$(wc -c < $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 $(wc -c < $INITRD)
73
74
echo "Delete command check"
75
xpass $BOOTCONF -d $INITRD
76
77
echo "File size check"
78
new_size=$(wc -c < $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
awk '
91
BEGIN {
92
for (i = 0; i < 26; i += 1)
93
printf("%c\n", 65 + i % 26)
94
for (i = 26; i < 8192; i += 1)
95
printf("%c%c%c\n", 65 + i % 26, 65 + (i / 26) % 26, 65 + (i / 26 / 26))
96
}
97
' > $TEMPCONF
98
xpass $BOOTCONF -a $TEMPCONF $INITRD
99
100
printf "badnode\n" >> $TEMPCONF
101
xfail $BOOTCONF -a $TEMPCONF $INITRD
102
103
echo "Max filesize check"
104
105
# Max size is 32767 (including terminal byte)
106
printf "data = \"" > $TEMPCONF
107
dd if=/dev/urandom bs=768 count=32 | base64 -w0 >> $TEMPCONF
108
printf "\"\n" >> $TEMPCONF
109
xfail $BOOTCONF -a $TEMPCONF $INITRD
110
111
dd if=$TEMPCONF of=$OUTFILE bs=1 count=32764
112
cp $OUTFILE $TEMPCONF
113
printf "\"\n" >> $TEMPCONF # add 2 bytes + terminal ('\"\n\0')
114
xpass $BOOTCONF -a $TEMPCONF $INITRD
115
116
echo "Adding same-key values"
117
cat > $TEMPCONF << EOF
118
key = bar, baz
119
key += qux
120
EOF
121
echo > $INITRD
122
123
xpass $BOOTCONF -a $TEMPCONF $INITRD
124
$BOOTCONF $INITRD > $OUTFILE
125
xpass grep -q "bar" $OUTFILE
126
xpass grep -q "baz" $OUTFILE
127
xpass grep -q "qux" $OUTFILE
128
129
echo "Override same-key values"
130
cat > $TEMPCONF << EOF
131
key = bar, baz
132
key := qux
133
EOF
134
echo > $INITRD
135
136
xpass $BOOTCONF -a $TEMPCONF $INITRD
137
$BOOTCONF $INITRD > $OUTFILE
138
xfail grep -q "bar" $OUTFILE
139
xfail grep -q "baz" $OUTFILE
140
xpass grep -q "qux" $OUTFILE
141
142
echo "Double/single quotes test"
143
printf "key = '\"string\"';" > $TEMPCONF
144
$BOOTCONF -a $TEMPCONF $INITRD
145
$BOOTCONF $INITRD > $TEMPCONF
146
cat $TEMPCONF
147
xpass grep \'\"string\"\' $TEMPCONF
148
149
echo "Repeat same-key tree"
150
cat > $TEMPCONF << EOF
151
foo
152
bar
153
foo { buz }
154
EOF
155
echo > $INITRD
156
157
xpass $BOOTCONF -a $TEMPCONF $INITRD
158
$BOOTCONF $INITRD > $OUTFILE
159
xpass grep -q "bar" $OUTFILE
160
161
162
echo "Remove/keep tailing spaces"
163
cat > $TEMPCONF << EOF
164
foo = val # comment
165
bar = "val2 " # comment
166
EOF
167
echo > $INITRD
168
169
xpass $BOOTCONF -a $TEMPCONF $INITRD
170
$BOOTCONF $INITRD > $OUTFILE
171
xfail grep -q 'val[[:space:]]' $OUTFILE
172
xpass grep -q 'val2[[:space:]]' $OUTFILE
173
174
echo "=== expected failure cases ==="
175
for i in samples/bad-* ; do
176
xfail $BOOTCONF -a $i $INITRD
177
done
178
179
echo "=== expected success cases ==="
180
for i in samples/good-* ; do
181
xpass $BOOTCONF -a $i $INITRD
182
done
183
184
185
echo
186
echo "=== Summary ==="
187
echo "# of Passed: $(expr $NO - $NG - 1)"
188
echo "# of Failed: $NG"
189
190
echo
191
if [ $NG -eq 0 ]; then
192
echo "All tests passed"
193
else
194
echo "$NG tests failed"
195
exit 1
196
fi
197
198