Commit | Line | Data |
---|---|---|
081c6536 MH |
1 | #!/bin/sh |
2 | # SPDX-License-Identifier: GPL-2.0-only | |
3 | ||
4 | echo "Boot config test script" | |
5 | ||
306b69dc MH |
6 | if [ -d "$1" ]; then |
7 | TESTDIR=$1 | |
8 | else | |
9 | TESTDIR=. | |
10 | fi | |
11 | BOOTCONF=${TESTDIR}/bootconfig | |
e1cef2d4 | 12 | ALIGN=4 |
306b69dc MH |
13 | |
14 | INITRD=`mktemp ${TESTDIR}/initrd-XXXX` | |
15 | TEMPCONF=`mktemp ${TESTDIR}/temp-XXXX.bconf` | |
16 | OUTFILE=`mktemp ${TESTDIR}/tempout-XXXX` | |
081c6536 MH |
17 | NG=0 |
18 | ||
19 | cleanup() { | |
5f811c57 | 20 | rm -f $INITRD $TEMPCONF $OUTFILE |
081c6536 MH |
21 | exit $NG |
22 | } | |
23 | ||
24 | trap cleanup EXIT TERM | |
25 | ||
26 | NO=1 | |
27 | ||
28 | xpass() { # pass test command | |
47914d4e | 29 | echo "test case $NO ($*)... " |
081c6536 MH |
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 | |
47914d4e | 37 | echo "test case $NO ($*)... " |
081c6536 MH |
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 | ||
5414251a MH |
59 | echo "Show command test" |
60 | xpass $BOOTCONF $INITRD | |
61 | ||
081c6536 | 62 | echo "File size check" |
e1cef2d4 MH |
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 | |
081c6536 MH |
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 | ||
97378001 | 81 | echo "No error messge while applying" |
97378001 MH |
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 | |
97378001 | 87 | |
081c6536 MH |
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 | ||
5f811c57 MH |
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 | ||
81464192 MH |
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 | ||
5414251a MH |
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 | ||
1d210c16 MH |
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 | ||
2f5fb555 MH |
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 | ||
081c6536 MH |
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 | ||
98d0a685 MH |
179 | |
180 | echo | |
181 | echo "=== Summary ===" | |
182 | echo "# of Passed: $(expr $NO - $NG - 1)" | |
183 | echo "# of Failed: $NG" | |
184 | ||
081c6536 MH |
185 | echo |
186 | if [ $NG -eq 0 ]; then | |
187 | echo "All tests passed" | |
188 | else | |
189 | echo "$NG tests failed" | |
98d0a685 | 190 | exit 1 |
081c6536 | 191 | fi |