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 | ||
b6924512 MHG |
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 | |
081c6536 MH |
98 | xpass $BOOTCONF -a $TEMPCONF $INITRD |
99 | ||
100 | echo "badnode" >> $TEMPCONF | |
101 | xfail $BOOTCONF -a $TEMPCONF $INITRD | |
102 | ||
103 | echo "Max filesize check" | |
104 | ||
105 | # Max size is 32767 (including terminal byte) | |
106 | echo -n "data = \"" > $TEMPCONF | |
107 | dd if=/dev/urandom bs=768 count=32 | base64 -w0 >> $TEMPCONF | |
108 | echo "\"" >> $TEMPCONF | |
109 | xfail $BOOTCONF -a $TEMPCONF $INITRD | |
110 | ||
111 | truncate -s 32764 $TEMPCONF | |
112 | echo "\"" >> $TEMPCONF # add 2 bytes + terminal ('\"\n\0') | |
113 | xpass $BOOTCONF -a $TEMPCONF $INITRD | |
114 | ||
5f811c57 MH |
115 | echo "Adding same-key values" |
116 | cat > $TEMPCONF << EOF | |
117 | key = bar, baz | |
118 | key += qux | |
119 | EOF | |
120 | echo > $INITRD | |
121 | ||
122 | xpass $BOOTCONF -a $TEMPCONF $INITRD | |
123 | $BOOTCONF $INITRD > $OUTFILE | |
124 | xpass grep -q "bar" $OUTFILE | |
125 | xpass grep -q "baz" $OUTFILE | |
126 | xpass grep -q "qux" $OUTFILE | |
127 | ||
81464192 MH |
128 | echo "Override same-key values" |
129 | cat > $TEMPCONF << EOF | |
130 | key = bar, baz | |
131 | key := qux | |
132 | EOF | |
133 | echo > $INITRD | |
134 | ||
135 | xpass $BOOTCONF -a $TEMPCONF $INITRD | |
136 | $BOOTCONF $INITRD > $OUTFILE | |
137 | xfail grep -q "bar" $OUTFILE | |
138 | xfail grep -q "baz" $OUTFILE | |
139 | xpass grep -q "qux" $OUTFILE | |
140 | ||
5414251a MH |
141 | echo "Double/single quotes test" |
142 | echo "key = '\"string\"';" > $TEMPCONF | |
143 | $BOOTCONF -a $TEMPCONF $INITRD | |
144 | $BOOTCONF $INITRD > $TEMPCONF | |
145 | cat $TEMPCONF | |
146 | xpass grep \'\"string\"\' $TEMPCONF | |
147 | ||
1d210c16 MH |
148 | echo "Repeat same-key tree" |
149 | cat > $TEMPCONF << EOF | |
150 | foo | |
151 | bar | |
152 | foo { buz } | |
153 | EOF | |
154 | echo > $INITRD | |
155 | ||
156 | xpass $BOOTCONF -a $TEMPCONF $INITRD | |
157 | $BOOTCONF $INITRD > $OUTFILE | |
158 | xpass grep -q "bar" $OUTFILE | |
159 | ||
2f5fb555 MH |
160 | |
161 | echo "Remove/keep tailing spaces" | |
162 | cat > $TEMPCONF << EOF | |
163 | foo = val # comment | |
164 | bar = "val2 " # comment | |
165 | EOF | |
166 | echo > $INITRD | |
167 | ||
168 | xpass $BOOTCONF -a $TEMPCONF $INITRD | |
169 | $BOOTCONF $INITRD > $OUTFILE | |
170 | xfail grep -q val[[:space:]] $OUTFILE | |
171 | xpass grep -q val2[[:space:]] $OUTFILE | |
172 | ||
081c6536 MH |
173 | echo "=== expected failure cases ===" |
174 | for i in samples/bad-* ; do | |
175 | xfail $BOOTCONF -a $i $INITRD | |
176 | done | |
177 | ||
178 | echo "=== expected success cases ===" | |
179 | for i in samples/good-* ; do | |
180 | xpass $BOOTCONF -a $i $INITRD | |
181 | done | |
182 | ||
98d0a685 MH |
183 | |
184 | echo | |
185 | echo "=== Summary ===" | |
186 | echo "# of Passed: $(expr $NO - $NG - 1)" | |
187 | echo "# of Failed: $NG" | |
188 | ||
081c6536 MH |
189 | echo |
190 | if [ $NG -eq 0 ]; then | |
191 | echo "All tests passed" | |
192 | else | |
193 | echo "$NG tests failed" | |
98d0a685 | 194 | exit 1 |
081c6536 | 195 | fi |